= Vim = '''`vim(1)`''' is a terminal text editor. It is closely related to a family of editors stretching from `ed(1)` to `nvim(1)`, but `vim(1)` is both the most commonly available and most visible. <> ---- == History == '''`ed(1)`''' is a line editor. Originally created by Bell Labs for Unix, GNU ed is a POSIX-compliant implementation. '''`ex(1)`''' is the '''ex'''tended line editor written for the first Berkeley Software Distribution. It is POSIX-compliant implementation of `ed(1)`. '''`vi(1)`''' is a '''visual''' text editor built on `ex(1)`. Type a colon (`:`) to enter ex mode. '''`vim(1)`''' is '''v'''i '''im'''proved. '''`nvim(1)`''' is a fork of `vim(1)` with a significantly refactored codebase, including... * The UI and editor processes are separate, enabling the creation of other (often non-terminal) UIs. * Directory scanning follows modern standards (i.e. XDG on *nix, !AppData on Windows). * Features moved from third-party plugins were incorporated to the project, generally making user configurations more portable across platforms. ---- == Installation == All [[Linux]] and [[BSD]] distributions will have a POSIX-compliant implementation of `ed(1)` and `vi(1)` installed. Many will also have `vim(1)` installed. Most offer `vim` and `neovim` packages. For [[Windows]], while GVim is an option, Neovim is strongly recommended. Chocolatey offers a `neovim` package. ---- == Configuration == Vim uses a custom configuration langauge. See [[Vim/Script|Vimscript]] and [[Vim/9Script|Vim9script]]. See [[Vim/Configuration|here]] for details on configuring this family of programs. ---- == Tips == === Regular Expressions === For help with writing regular expressions in `vim(1)`, look [[Vim/RegularExpressions|here]]. === Searching for Non-ASCII Characters === Vim regular expressions can use hexadecimal to represent non-ASCII code points, but the syntax differs for literal characters and character classes. Try... * `/\%x30` to search for the number 0 * `/[^\x00-\x7F]` to search for any non-ASCII code point * '''Note the omitted percent sign''' Similar syntax is available for Unicode code points, especially multibyte characters. Try... * `/\%u201c` to search for left curly quotes * `/[\u201c-\u201d]` to search for left or right curly quotes * '''Note the omitted percent sign''' * `/\%u00a0` to search for non-breaking spaces === Search and Replace Expressions === If a placeholder like "LINENO" should be replaced with the actual line number, try: {{{ :%s/LINENO/\=printf("%d", line('.'))/ }}} Arithmetic can also be done e.g. `line('.') - 1`. === Quoting Words === Affixes can be applied programmatically using word deletion and registers. For example, to quote the currently selected word, use `ciw'Ctrl+r"'`. * `ciw` - delete selected word and enter insert mode * `'` - insert the leading quote mark * `Ctrl+r"` - insert the contents of the `"` register, a.k.a. the deleted word * `'` - insert the trailing quote mark This method can be used to apply any affixes. To surround an SPSS string variable name with the trimming functions, use `ciwrtrim(ltrim(Ctrl+r"))`. === System Clipboard === The system clipboard can be interacted with like any other register. On Linux, generally... * `+` is the desktop clipboard (`XA_SECONDARY`) * `*` is X11 selection (`XA_PRIMARY`) Try using `gg"*yG` to yank the entire buffer. ---- == See also == [[https://man.archlinux.org/man/vim.1|vim(1)]] [[https://www.youtube.com/watch?v=rT-fbLFOCy0|audiobook of the Neovim user manual]] ---- CategoryRicottone