diff options
Diffstat (limited to '')
-rw-r--r-- | debian/FAQ | 7700 |
1 files changed, 7700 insertions, 0 deletions
diff --git a/debian/FAQ b/debian/FAQ new file mode 100644 index 0000000..bf70b7e --- /dev/null +++ b/debian/FAQ @@ -0,0 +1,7700 @@ +vim:tw=75:wrap:fo=tcqn2:sw=4:sts=4:et + +This Vim FAQ is created from the questions and answers posted to the +vim@vim.org user mailing list and the comp.editors newsgroup. There are +several ways to solve a problem in Vim. This FAQ gives one of those several +possibilities. You can explore the other ways using the information and +links given in this FAQ. The credit for the answers in this FAQ goes to +Peppe, Benji, Charles Campbell and numerous others. + +INDEX + +SECTION 1 - GENERAL INFORMATION + 1.1. What is Vim? + 1.2. Who wrote Vim? + 1.3. Is Vim compatible with Vi? + 1.4. What are some of the improvements of Vim over Vi? + 1.5. Is Vim free? + +SECTION 2 - RESOURCES + 2.1. Where can I learn more about Vim? + 2.2. Is there a mailing list available? + 2.3. Is there an archive available for the Vim mailing lists? + 2.4. Where can I get the Vim user manual in HTML/PDF/PS format? + 2.5. I have a "xyz" (some) problem with Vim. How do I determine it is a + problem with my setup or with Vim? + 2.6. Where can I report bugs? + 2.7. Where can the FAQ be found? + 2.8. What if I don't find an answer in this FAQ? + 2.9. I have a patch for implementing a Vim feature. Where do I send the + patch? + 2.10. I have a Vim tip or developed a new Vim + syntax/indent/filetype/compiler plugin or developed a new script + or a colorscheme. Is there a public website where I can upload + this? + +SECTION 3 - AVAILABILITY + 3.1. What is the latest version of Vim? + 3.2. Where can I find the latest version of Vim? + 3.3. What platforms does it run on? + 3.4. Where can I download the latest version of the Vim runtime files? + +SECTION 4 - HELP + 4.1. How do I use the help files? + 4.2. How do I search for a keyword in the Vim help files? + 4.3. I am getting an error message E123, what did I do wrong? + 4.4. Where can I read about the various modes in Vim? + 4.5. How do I generate the Vim help tags file after adding a new Vim + help file? + 4.6. Can I use compressed versions of the help files? + +SECTION 5 - EDITING A FILE + 5.1. How do I load a file in Vim for editing? + 5.2. How do I save the current file in another name (save as) and edit + a new file? + 5.3. How do I change the current directory to the directory of the + current file? + 5.4. How do I write a file without the line feed (EOL) at the end of + the file? + 5.5. How do I configure Vim to open a file at the last edited location? + 5.6. When editing a file in Vim, which is being changed by an external + application, Vim opens a warning window (like the confirm dialog) + each time a change is detected. How do I disable this warning? + 5.7. How do I edit a file whose name is under the cursor? + 5.8. How do I reload/re-edit the current file? + 5.9. How do I autosave a file periodically? + 5.10. How do I open a file in read-only mode? + 5.11. How do I open a file for editing without saving the modifications + to the current file? + +SECTION 6 - EDITING MULTIPLE FILES + 6.1. How do I open multiple files at once from within Vim? + 6.2. How do I switch between multiple files/buffers in Vim? + 6.3. How do I open several files in Vim, with each file in a separate + window? + 6.4. How do I configure Vim to autoload several files at once similar + to "work-sets" or "projects"? + 6.5. Is it possible to open multiple top level windows in a single + instance of Vim similar to Nedit or emacs? + 6.6. How do I browse/explore directories from within Vim? + 6.7. How do I edit files over a network using ftp/scp/rcp/http? + +SECTION 7 - BACKUP + 7.1. When I edit and save files, Vim creates a file with the same name + as the original file and a "~" character at the end. How do I stop + Vim from creating this file (or) How do I disable the Vim backup + file feature? + 7.2. How do I configure Vim to store all the backup files in a + particular directory? + 7.3. When I save a file with Vim, the file permissions are changed. + How do I configure Vim to save a file without changing the file + permissions? + +SECTION 8 - BUFFERS + 8.1. I have made some modifications to a buffer. How do I edit another + buffer without saving the modified buffer and also without losing + the modifications? + 8.2. How do I configure Vim to auto-save a modified buffer when + switching to another buffer? + 8.3. How do I replace the buffer in the current window with a blank + buffer? + 8.4. Is there a keyboard shortcut to load a buffer by the buffer + number? + 8.5. How do I open all the current buffers in separate windows? + 8.6. How do I close (delete) a buffer without exiting Vim? + 8.7. I have several buffers opened with ":e filename". How do I close + one of the buffers without exiting Vim? + 8.8. When I use the command ":%bd" to delete all the buffers, not all + the buffers are deleted. Why? + 8.9. How do I display the buffer number of the current buffer/file? + 8.10. How do I delete a buffer without closing the window in which the + buffer is displayed? + 8.11. How do I map the tab key to cycle through and open all the + buffers? + +SECTION 9 - WINDOWS + 9.1. What is the difference between a Vim window and a buffer? + 9.2. How do I increase the width of a Vim window? + 9.3. How do I zoom into or out of a window? + 9.4. How do I execute an ex command on all the open buffers or open + windows or all the files in the argument list? + +SECTION 10 - MOTION + 10.1. How do I jump to the beginning (first line) or end (last line) of + a file? + 10.2. In insert mode, when I press the <Esc> key to go to command mode, + the cursor moves one character to the left (except when the cursor + is on the first character of the line). Is it possible to change + this behavior to keep the cursor at the same column? + 10.3. How do I configure Vim to maintain the horizontal cursor position + when scrolling with the <Page Up>, <Page Down>, etc keys? + 10.4. Some lines in a file are more than the screen width and they are + all wrapped. When I use the j, k keys to move from one line to the + next, the cursor is moved to the next line in the file instead of + the next line on the screen. How do I move from one screen line to + the next? + 10.5. What is the definition of a sentence, paragraph and section in + Vim? + 10.6. How do I jump to beginning or end of a sentence, paragraph or a + section? + 10.7. I have lines in a file that extends beyond the right extent of the + screen. How do I move the Vim view to the right to see the text + off the screen? + 10.8. How do I scroll two or more buffers simultaneously? + 10.9. When I use my arrow keys, Vim changes modes, inserts weird + characters in my document but doesn't move the cursor properly. + What's going on? + 10.10. How do I configure Vim to move the cursor to the end of the + previous line, when the left arrow key is pressed and the cursor + is currently at the beginning of a line? + 10.11. How do I configure Vim to stay only in insert mode (modeless + editing)? + 10.12. How do I display some context lines when scrolling text? + 10.13. How do I go back to previous cursor locations? + +SECTION 11 - SEARCHING TEXT + 11.1. After I searched for a text with a pattern, all the matched text + stays highlighted. How do I turn off the highlighting + temporarily/permanently? + 11.2. How do I enter a carriage return character in a search pattern? + 11.3. How do I search for the character ^M? + 11.4. How can I search/replace characters that display as '~R', '~S', + etc.? + 11.5. How do I highlight all the non-printable characters in a file? + 11.6. How do I search for whole words in a file? + 11.7. How do I search for the current word under the cursor? + 11.8. How do I search for a word without regard to the case (uppercase + or lowercase)? + 11.9. How do I search for words that occur twice consecutively? + 11.10. How do I count the number of times a particular word occurs in a + buffer? + 11.11. How do I place the cursor at the end of the matched word when + searching for a pattern? + 11.12. How do I search for an empty line? + 11.13. How do I search for a line containing only a single character? + 11.14. How do I search and replace a string in multiple files? + 11.15. I am using the ":s" substitute command in a mapping. When a + search for a pattern fails, the map terminates. I would like the + map to continue processing the next command, even if the + substitute command fails. How do I do this? + 11.16. How do I search for the n-th occurrence of a character in a + line? + 11.17. How do I replace a tab (or any other character) with a hard + return (newline) character? + 11.18. How do I search for a character by its ASCII value? + 11.19. How do I search for long lines? + 11.20. How do I display all the lines in the current buffer that + contain a specified pattern? + 11.21. How do I search for a text string that spans multiple lines? + 11.22. How do I search for a pattern only within a range of lines + in a buffer? + +SECTION 12 - CHANGING TEXT + 12.1. How do I delete all the trailing white space characters (SPACE + and TAB) at the end of all the lines in a file? + 12.2. How do I replace all the occurrences of multiple consecutive + space characters to a single space? + 12.3. How do I reduce a range of empty lines into one line only? + 12.4. How do I delete all blank lines in a file? How do I remove all + the lines containing only space characters? + 12.5. How do I copy/yank the current word? + 12.6. How do I yank text from one position to another position within a + line, without yanking the entire line? + 12.7. When I yank some text into a register, how do I append the text + to the current contents of the register? + 12.8. How do I yank a complete sentence that spans over more than one + line? + 12.9. How do I yank all the lines containing a pattern into a buffer? + 12.10. How do I delete all the lines in a file that does not contain a + pattern? + 12.11. How do I add a line before each line with "pattern" in it? + 12.12. Is there a way to operate on a line if the previous line + contains a particular pattern? + 12.13. How do I execute a command on all the lines containing a + pattern? + 12.14. Can I copy the character above the cursor to the current cursor + position? + 12.15. How do I insert a blank line above/below the current line + without entering insert mode? + 12.16. How do I insert the name of current file into the current + buffer? + 12.17. How do I insert the contents of a Vim register into the current + buffer? + 12.18. How do I move the cursor past the end of line and insert some + characters at some columns after the end of the line? + 12.19. How to replace the word under the cursor (say: junk) with + "foojunkbar" in Vim? + 12.20. How do I replace a particular text in all the files in a + directory? + 12.21. I have some numbers in a file. How do I increment or decrement + the numbers in the file? + 12.22. How do I reuse the last used search pattern in a ":substitute" + command? + 12.23. How do I change the case of a string using the ":substitute" + command? + 12.24. How do I enter characters that are not present in the keyboard? + 12.25. Is there a command to remove any or all digraphs? + 12.26. In insert mode, when I press the backspace key, it erases only + the characters entered in this instance of insert mode. How do I + erase previously entered characters in insert mode using the + backspace key? + 12.27. I have a file which has lines longer than 72 characters + terminated with "+" and wrapped to the next line. How can I + quickly join the lines? + 12.28. How do I paste characterwise yanked text into separate lines? + 12.29. How do I change the case (uppercase, lowercase) of a word or + a character or a block of text? + 12.30. How do I enter ASCII characters that are not present in the + keyboard? + 12.31. How do I replace non-printable characters in a file? + 12.32. How do I remove duplicate lines from a buffer? + 12.33. How do I prefix all the lines in a file with the corresponding + line numbers? + 12.34. How do I exchange (swap) two characters or words or lines? + 12.35. How do I change the characters used as word delimiters? + +SECTION 13 - COMPLETION IN INSERT MODE + 13.1. How do I complete words or lines in insert mode? + 13.2. How do I complete file names in insert mode? + 13.3. I am using CTRL-P/CTRL-N to complete words in insert mode. How do + I complete words that occur after the just completed word? + +SECTION 14 - TEXT FORMATTING + 14.1. How do I format a text paragraph so that a new line is inserted + at the end of each wrapped line? + 14.2. How do I format long lines in a file so that each line contains + less than 'n' characters? + 14.3. How do I join short lines to the form a paragraph? + 14.4. How do I format bulleted and numbered lists? + 14.5. How do I indent lines in insert mode? + 14.6. How do I format/indent an entire file? + 14.7. How do I increase or decrease the indentation of the current + line? + 14.8. How do I indent a block/group of lines? + 14.9. When I indent lines using the > or < key, the standard 8-tabstops + are used instead of the current 'tabstop' setting. Why? + 14.10. How do I turn off the automatic indentation of text? + 14.11. How do I configure Vim to automatically set the 'textwidth' + option to a particular value when I edit mails? + 14.12. Is there a way to make Vim auto-magically break lines? + 14.13. I am seeing a lot of ^M symbols in my file. I tried setting the + 'fileformat' option to 'dos' and then 'unix' and then 'mac'. + None of these helped. How can I hide these symbols? + 14.14. When I paste some text into a Vim buffer from another + application, the alignment (indentation) of the new text is + messed up. How do I fix this? + 14.15. When there is a very long wrapped line (wrap is "on") and a line + doesn't fit entirely on the screen it is not displayed at all. + There are blank lines beginning with '@' symbol instead of + wrapped line. If I scroll the screen to fit the line the '@' + symbols disappear and the line is displayed again. What Vim + setting control this behavior? + 14.16. How do I convert all the tab characters in a file to space + characters? + 14.17. What Vim options can I use to edit text that will later go to a + word processor? + 14.18. How do I join lines without adding or removing any space + characters? + +SECTION 15 - VISUAL MODE + 15.1. How do I do rectangular block copying? + 15.2. How do I delete or change a column of text in a file? + 15.3. How do I apply an ex-command on a set of visually selected lines? + 15.4. How do I execute an ex command on a column of text selected in + Visual block mode? + 15.5. How do I select the entire file in visual mode? + 15.6. When I visually select a set of lines and press the > key to + indent the selected lines, the visual mode ends. How can I + reselect the region for further operation? (or) How do I + re-select the last selected visual area again? + 15.7. How do I jump to the beginning/end of a visually selected region? + 15.8. When I select text with mouse and then press : to enter an ex + command, the selected text is replaced with the : character. How + do I execute an ex command on a text selected using the mouse + similar to the text selected using the visual mode? + 15.9. When I select a block of text using the mouse, Vim goes into + selection mode instead of Visual mode. Why? + +SECTION 16 - COMMAND-LINE MODE + 16.1. How do I use the name of the current file in the command mode or + an ex command line? + 16.2. How do I edit the text in the Vim command-line effectively? + 16.3. How do I switch from Vi mode to Ex mode? + 16.4. How do I copy the output from an ex-command into a buffer? + 16.5. When I press the tab key to complete the name of a file in the + command mode, if there are more than one matching file names, + then Vim completes the first matching file name and displays a + list of all matching filenames. How do I configure Vim to only + display the list of all the matching filenames and not complete + the first one? + 16.6. How do I copy text from a buffer to the command line and from the + command line to a buffer? + 16.7. How do I put a command onto the command history without executing + it? + 16.8. How do I increase the height of the command-line? + +SECTION 17 - VIMINFO + 17.1. When I invoke Vim, I get error messages about illegal characters + in the viminfo file. What should I do to get rid of these + messages? + 17.2. How do I disable the viminfo feature? + 17.3. How do I save and use Vim marks across Vim sessions? + +SECTION 18 - REMOTE EDITING + 18.1. How do I open a file with existing instance of gvim? What + happened to the Vim 5.x OpenWithVim.exe and SendToVim.exe files? + 18.2. How do I send a command to a Vim server to write all buffers to + disk? + 18.3. Where can I get the documentation about the Vim remote server + functionality? + +SECTION 19 - OPTIONS + 19.1. How do I configure Vim in a simple way? + 19.2. How do I toggle the value of an option? + 19.3. How do I set an option that affects only the current + buffer/window? + 19.4. How do I use space characters for a Vim option value? + 19.5. Can I add (embed) Vim option settings to the contents of a file? + 19.6. How do I display the line numbers of all the lines in a file? + 19.7. How do I change the width of the line numbers displayed using the + "number" option? + 19.8. How do I display (view) all the invisible characters like space, + tabs and newlines in a file? + 19.9. How do I configure Vim to always display the current line and + column number? + 19.10. How do I display the current Vim mode? + 19.11. How do I configure Vim to show pending/partial commands on the + status line? + 19.12. How do I configure the Vim status line to display different + settings/values? + 19.13. How do I configure Vim to display status line always? + 19.14. How do I make a Vim setting persistent across different Vim + invocations/instances/sessions? + 19.15. Why do I hear a beep (why does my window flash) about 1 second + after I hit the Escape key? + 19.16. How do I make the 'c' and 's' commands display a '$' instead of + deleting the characters I'm changing? + 19.17. How do I remove more than one flag using a single ":set" command + from a Vim option? + +SECTION 20 - MAPPING KEYS + 20.1. How do I know what a key is mapped to? + 20.2. How do list all the user-defined key mappings? + 20.3. How do I unmap a key? + 20.4. I am not able to create a mapping for the <xxx> key. What is + wrong? + 20.5. How do I map the numeric keypad keys? + 20.6. How do I create a mapping that works only in visual mode? + 20.7. In a Vim script, how do I know which keys to use for my mappings, + so that the mapped key will not collide with an already used key? + 20.8. How do I map the escape key? + 20.9. How do I map a key to perform nothing? + 20.10. I want to use the Tab key to indent a block of text and + Shift-Tab key to unindent a block of text. How do I map the keys + to do this? This behavior is similar to textpad, visual studio, + etc. + 20.11. In my mappings the special characters like <CR> are not + recognized. How can I configure Vim to recognize special + characters? + 20.12. How do I use the '|' to separate multiple commands in a map? + 20.13. If I have a mapping/abbreviation whose ending is the beginning of + another mapping/abbreviation, how do I keep the first from + expanding into the second one? + 20.14. Why does it take a second or more for Vim to process a key, + sometimes when I press a key? + 20.15. How do I map a key to run an external command using a visually + selected text? + 20.16. How do I map the Ctrl-I key while still retaining the + functionality of the <Tab> key? + +SECTION 21 - ABBREVIATIONS + 21.1. How do I auto correct misspelled words? + 21.2. How do I create multi-line abbreviations? + 21.3. When my abbreviations are expanded, an additional space character + is added at the end of the expanded text. How do I avoid this + character? + 21.4. How do I insert the current date/time stamp into the file? + 21.5. How do I prevent an abbreviation from expanding in insert mode? + +SECTION 22 - RECORD AND PLAYBACK + 22.1. How do I repeat an editing operation (insertion, deletion, paste, + etc)? + 22.2. How I record and repeat a set of key sequences? + 22.3. How do I edit/modify a recorded set of key sequences? + 22.4. How do I write recorded key sequences to a file? + 22.5. I am using register 0 to record my key sequences (i.e. q0 .... + q). In the recorded key sequences, I am yanking some text. After + the first replay of the recorded key sequence, I am no longer + able to play it back. + +SECTION 23 - AUTOCOMMANDS + 23.1. How do I execute a command when I try to modify a read-only file? + 23.2. How do I execute a command every time when entering a buffer? + 23.3. How do I execute a command every time when entering a window? + 23.4. From an autocmd, how can I determine the name of the file or the + buffer number for which the autocommand is executed? + 23.5. How do I automatically save all the changed buffers whenever Vim + loses focus? + 23.6. How do I execute/run a function when Vim exits to do some + cleanup? + +SECTION 24 - SYNTAX HIGHLIGHT + 24.1. How do I turn off/on syntax highlighting? + 24.2. How do I change the background and foreground colors used by Vim? + 24.3. How do I change the highlight colors to suit a dark/light + background? + 24.4. How do I change the color of the line numbers displayed when the + ":set number" command is used? + 24.5. How do I change the background color used for a Visually selected + block? + 24.6. How do I highlight the special characters (tabs, trailing spaces, + end of line, etc) displayed by the 'list' option? + 24.7. How do I specify a colorscheme in my .vimrc/.gvimrc file, so that + Vim uses the specified colorscheme everytime? + 24.8. Vim syntax highlighting is broken. When I am editing a file, some + parts of the file is not syntax highlighted or syntax highlighted + incorrectly. + 24.9. Is there a built-in function to syntax-highlight the + corresponding matching bracket? + 24.10. How do I turn off the C comment syntax highlighting? + 24.11. How do I add my own syntax extensions to the standard syntax + files supplied with Vim? + 24.12. How do I replace a standard syntax file that comes with the Vim + distribution with my own syntax file? + 24.13. How do I highlight all the characters after a particular column? + 24.14. How do I convert a source file (.c, .h, etc) with the Vim syntax + highlighting into a HTML file? + 24.15. How do I list the definition of all the current highlight + groups? + +SECTION 25 - VIM SCRIPT WRITING + 25.1. How do I list the names of all the scripts sourced by Vim? + 25.2. How do I debug Vim scripts? + 25.3. How do I locate the script/plugin which sets a Vim option? + 25.4. I am getting some error/informational messages from Vim (possibly + when running a script), the messages are cleared immediately. How + do I display the messages again? + 25.5. How do I save and restore a plugin specific information across + Vim invocations? + 25.6. How do I start insert mode from a Vim function? + 25.7. How do I change the cursor position from within a Vim function? + 25.8. How do I check the value of an environment variable in the .vimrc + file? + 25.9. How do I check whether an environment variable is set or not from + a Vim function? + 25.10. How do I call/use the Vim built-in functions? + 25.11. I am using some normal mode commands in my Vim script. How do I + avoid using the user-defined mappings for these normal mode + commands and use the standard Vim functionality for these normal + mode commands? + 25.12. How do I get a visually selected text into a Vim variable or + register? + 25.13. I have some text in a Vim variable 'myvar'. I would like to use + this variable in a ":s" substitute command to replace a text + 'mytext'. How do I do this? + 25.14. A Vim variable (bno) contains a buffer number. How do I use this + variable to open the corresponding buffer? + 25.15. How do I store the value of a Vim option into a Vim variable? + 25.16. I have copied and inserted some text into a buffer from a Vim + function. How do I indent the inserted text from the Vim + function? + 25.17. How do I get the character under the cursor from a Vim script? + 25.18. How do I get the name of the current file without the extension? + 25.19. How do I get the basename of the current file? + 25.20. How do I get the output from a Vim function into the current + buffer? + 25.21. How do I call external programs from a Vim function? + 25.22. How do I get the return status of a program executed using the + ":!" command? + 25.23. How do I determine whether the current buffer is modified or + not? + 25.24. I would like to use the carriage return character in a normal + command from a Vim script. How do I specify the carriage return + character? + 25.25. How do I split long lines in a Vim script? + 25.26. When I try to "execute" my function using the "execute 'echo + Myfunc()'" command, the cursor is moved to the top of the + current buffer. Why? + 25.27. How do I source/execute the contents of a register? + 25.28. After calling a Vim function or a mapping, when I press the 'u' + key to undo the last change, Vim undoes all the changes made by + the mapping/function. Why? + 25.29. How can I call a function defined with s: (script local + function) from another script/plugin? + 25.30. Is it possible to un-source a sourced script? In otherwords, + reverse all the commands executed by sourcing a script. + +SECTION 26 - PLUGINS + 26.1. How do I set different options for different types of files? + 26.2. I have downloaded a Vim plugin or a syntax file or a indent file, + or a color scheme or a filetype plugin from the web. Where should + I copy these files so that Vim will find them? + 26.3. How do I extend an existing filetype plugin? + 26.4. How do I turn off loading the Vim plugins? + 26.5. How do I turn on/off loading the filetype plugins? + 26.6. How do I override settings made in a file type plugin in the + global ftplugin directory for all the file types? + 26.7. How do I disable the Vim directory browser plugin? + 26.8. How do I set the filetype option for files with names matching a + particular pattern or depending on the file extension? + +SECTION 27 - EDITING PROGRAM FILES + 27.1. How do I enable automatic indentation for C/C++ files? + 27.2. How do I configure the indentation used for C/C++ files? + 27.3. How do I turn off the automatic indentation feature? + 27.4. How do I change the number of space characters used for the + automatic indentation? + 27.5. I am editing a C program using Vim. How do I display the + definition of a macro or a variable? + 27.6. I am editing a C program using Vim. How do I jump to the + beginning or end of a code block from within the block? + 27.7. Is there a way to turn off the "//" comment auto-insertion + behavior for C++ files? If I'm sitting on a line beginning with + "//", then I open a new line above or below it, Vim automatically + inserts new "//" chars. + 27.8. How do I add the comment character '#' to a set of lines at the + beginning of each line? + 27.9. How do I edit a header file with the same name as the + corresponding C source file? + 27.10. How do I automatically insert comment leaders while typing + comments? + +SECTION 28 - QUICKFIX + 28.1. How do I build programs from Vim? + 28.2. When I run the make command in Vim I get the errors listed as the + compiler compiles the program. When it finishes this list + disappears and I have to use the :clist command to see the error + message again. Is there any other way to see these error + messages? + +SECTION 29 - FOLDING + 29.1. How do I extend the Vim folding support? + 29.2. When I enable folding by setting the 'foldmethod' option, all the + folds are closed. How do I prevent this? + 29.3. How do I control how many folds will be opened when I start + editing a file? + 29.4. How do I open and close folds using the mouse? + 29.5. How do I change the text displayed for a closed fold? + 29.6. How do I store and restore manually created folds across + different Vim invocations? + +SECTION 30 - VIM WITH EXTERNAL APPLICATIONS + 30.1. Can I run a shell inside a Vim window? + 30.2. How do I pass the word under the cursor to an external command? + 30.3. How do I get the output of a shell command into a Vim buffer? + 30.4. How do I pipe the contents of the current buffer to an external + command and replace the contents of the buffer with the output + from the command? + 30.5. How do I sort a section of my file? + 30.6. Is there a step-by-step guide for using Vim with slrn? + 30.7. How do I use Vim as a pager? + 30.8. How do I view Unix man pages from inside Vim? + 30.9. How do I change the diff command used by the Vim diff support? + 30.10. How do I use the Vim diff mode without folding? + +SECTION 31 - GUI VIM + 31.1. How do I create buffer specific menus? + 31.2. How do I change the font used by GUI Vim? + 31.3. When starting GUI Vim, how do I specify the location of the GVIM + window? + 31.4. How do I add a horizontal scrollbar in GVim? + 31.5. How do I make the scrollbar appear in the left side by default? + 31.6. How do I remove the Vim menubar? + 31.7. I am using GUI Vim. When I press the ALT key and a letter, the + menu starting with that letter is selected. I don't want this + behavior as I want to map the ALT-<key> combination. How do I do + this? + 31.8. Is it possible to scroll the text by dragging the scrollbar so + that the cursor stays in the original location? + 31.9. How do I get gvim to start browsing files in a particular + directory when using the ":browse" command? + 31.10. For some questions, like when a file is changed outside of Vim, + Vim displays a GUI dialog box. How do I replace this GUI dialog + box with a console dialog box? + 31.11. I am trying to use GUI Vim as the editor for my xxx application. + When the xxx application launches GUI Vim to edit a file, the + control immediately returns to the xxx application. How do I + start GUI Vim, so that the control returns to the xxx + application only after I quit Vim? + 31.12. Why does the "Select Font" dialog doesn't show all the fonts + installed in my system? + 31.13. How do I use the mouse in Vim command-line mode? + 31.14. When I use the middle mouse button to scroll text, it pastes the + last copied text. How do I disable this behavior? + 31.15. How do I change the location and size of a GUI Vim window? + +SECTION 32 - VIM ON UNIX + 32.1. I am running Vim in a xterm. When I press the CTRL-S key, Vim + freezes. What should I do now? + 32.2. I am seeing weird screen update problems in Vim. What can I do to + solve this screen/display update problems? + 32.3. I am using the terminal/console version of Vim. In insertmode, + When I press the backspace key, the character before the cursor + is not erased. How do I configure Vim to do this? + 32.4. I am using Vim in a xterm. When I quit Vim, the screen contents + are restored back to the original contents. How do I disable + this? + 32.5. When I start Vim, it takes quite a few seconds to start. How do I + minimize the startup time? + 32.6. How can I make the cursor in gvim in unix stop blinking? + 32.7. How do I change the menu font on GTK Vim? + 32.8. How do I prevent <Ctrl-Z> from suspending Vim? + 32.9. When I kill the xterm running Vim, the Vim process continues to + run and takes up a lot of CPU (99%) time. Why is this happening? + 32.10. How do I get the Vim syntax highlighting to work in a Unix + terminal? + +SECTION 33 - VIM ON MS-WINDOWS + 33.1. In MS-Windows, CTRL-V doesn't start the blockwise visual mode. + What happened? + 33.2. When I press the CTRL-Y key, it acts like the CTRL-R key. How do + I configure Vim to treat CTRL-Y as CTRL-Y? + 33.3. How do I start GUI Vim in a maximized window always? + 33.4. After doing some editing operations, Vim freezes. The cursor + becomes an empty rectangle. I am not able enter any characters. + What is happening? + 33.5. I am using Windows XP, the display speed of maximized GVim is + very slow. What can I do to speed the display updates? + 33.6. What are the recommended settings for using Vim with cygwin? + 33.7. I am trying to use GNU diff with Vim diff mode. When I run the + diff from command line, it works. When I try to use the diff with + Vim it doesn't work. What should I do now? + 33.8. Is it possible to use Vim as an external editor for MS-Windows + Outlook email client? + 33.9. I am using Vim to edit HTML files. How do I start internet + explorer with the current file to preview the HTML file? + 33.10. I would like to use Vim with Microsoft Visual Studio. How do I + do this? + 33.11. Where do I place the _vimrc and _gvimrc files? + 33.12. Everytime I save a file, Vim warns about the file being changed + outside of Vim. Why? + +SECTION 34 - PRINTING + 34.1. How do I print a file along with line numbers for all the lines? + 34.2. How do I print a file with the Vim syntax highlighting colors? + +SECTION 35 - BUILDING VIM FROM SOURCE + 35.1. How do I build Vim from the sources on a Unix system? + 35.2. How do I install Vim in my home directory or a directory other + than the default installation directory in Unix? + 35.3. How do I build Vim from the sources on a MS-Windows system? + 35.4. The Vim help, syntax, indent files are missing from my Vim + installation. How do I install these files? + 35.5. I have built Vim from the source and installed the Vim package + using "make install". Do I need to keep the Vim source directory? + 35.6. How do I determine the Vim features which are enabled at compile + time? + 35.7. Can I build Vim without the GUI support? + 35.8. When building Vim on a Unix system, I am getting "undefined + reference to term_set_winsize' error. How do I resolve this + error? + 35.9. Vim configure keeps complaining about the lack of gtk-config + while trying to use GTK 2.03. This is correct, since in GTK 2 + they moved to using the generic pkg-config. I can get pkg-config + to list the various includes and libs for gtk, but for some + reason the configure script still isn't picking this up. + +SECTION 36 - VARIOUS + 36.1. How do I edit binary files with Vim? + 36.2. How do I disable the visual error flash and the error beep? + 36.3. How do I display the ascii value of a character displayed in a + buffer? + 36.4. Can I use zero as a count for a Vim command? + 36.5. How do I disable the Vim welcome screen? + 36.6. How do I avoid the "hit enter to continue" prompt? + 36.7. How do I invoke Vim from command line to run a group of commands + on a group of files? + 36.8. How do I use a normal mode command from insert mode without + leaving the insert mode? + 36.9. How do I start Vim in insert mode? + +SECTION 37 - UNICODE + 37.1. Is it possible to create Unicode files using Vim? + 37.2. Which Vim settings are particularly important for editing Unicode + files? + 37.3. What is the 'encoding' option? + 37.4. How does Vim name the various Unicode encodings? + 37.5. How does Vim specify the presence or absence of a byte-order + mark? + 37.6. What is the 'fileencoding' option? + 37.7. What is the 'fileencodings' option? + 37.8. What is the 'termencoding' option? + 37.9. What is the 'bomb' option? + 37.10. Where can I find an example of a typical use of all these + options? + 37.11. How can I insert Unicode characters into a file using Vim? + 37.12. How can I know which digraphs are defined and for which + characters? + + +============================================================================= + +SECTION 1 - GENERAL INFORMATION + + +1.1. What is Vim? + +Vim stands for Vi IMproved. It used to be Vi IMitation, but there are so +many improvements that a name change was appropriate. Vim is a text editor +which includes almost all the commands from the Unix program "Vi" and a lot +of new ones. All commands can be given with the keyboard. This has the +advantage that you can keep your fingers on the keyboard and your eyes on +the screen. For those who want it, there is mouse support and a GUI version +with scrollbars and menus. + +Vim is an editor, not a word processor. A word processor is used mainly to +do layout of text. This means positioning it, changing the way it appears +on output. More often than not, the final document is meant to be printed +or typeset or what have you, in order to present it in a pleasing manner to +others. Examples of word processors are Microsoft Word, WordPerfect, +FrameMaker, and AmiPro. + +An editor is simply for entering text. Any typesetting or laying out of the +document is secondary. With an editor, one's main concern is entering text, +not making the text look good. Examples of editors other than Vim and Vi +are Emacs, Crisp, Brief, and xedit. And Notepad. + +For more information, read + + :help intro + + +1.2. Who wrote Vim? + +Most of Vim was written by Bram Moolenar, with contributions from too many +people to mention here. See ":h credits" for a complete list. + +Vim is based on Stevie, worked on by Tim Thompson, Tony Andrews and G.R. +(Fred) Walter. + +For more information, read + + :help author + + +1.3. Is Vim compatible with Vi? + +Yes. Vim is very much compatible with Vi. You can use the "-C" +command-line flag to start Vim in Vi compatible mode: + + $ vim -C + +You can also use: + + $ vim -u NONE + +You can also set the 'compatible' option to enable Vi compatibility: + + :set compatible + +For more information, read + + :help -C + :help 'compatible' + :help compatible-default + + +1.4. What are some of the improvements of Vim over Vi? + +A short summary of the improvements of Vim over vi is listed below. The +list shows that Vim is a thoroughly modern and feature-packed editor. +Standard features of modern editors are implemented, and there is an equal +emphasis on general power-user features and features for programmers. + +Features to modernise Vi: + + Multi-level undo + Allows you to set the number of times you can undo your changes in a + file buffer. You can also redo an undone change. + Multiple windows and buffers + Each file can be displayed in its own window. You can move easily from + one window to another. Each file opened during a Vim session also has + an associated buffer and you can easily jump from one to the other. + Flexible insert mode + Vim allows you to use the arrow keys while in insert mode to move + around in the file. No more hitting <Esc>, moving around, then hitting + `i' or `a'. + Macros + Vim has a facility which allows you to record a sequence of typed + characters and repeat them any number of times. + Visual mode + You can highlight sections of text and execute operations on this + section of text only. + Block operators + Allow selection and highlighting of rectangular blocks of text in + order do execute specific operations on them. + Online help system + You can easily find help on any aspect of using Vim. Help is displayed + in its own window. + Command-line editing and history + History allows you to use the arrow keys to repeat or search for a + command that has already been typed. Allows you to match the beginning + of a command with the beginning of another similar command in the + history buffer. You can also edit a command to correct typos or change + a few values. + Command line completion. + Using the <Tab> key, you can complete commands, options, filenames, + etc. as needed. + Horizontal scrolling. + Long lines can be scrolled horizontally (with or without the GUI). + +Advanced user features: + + Text formatting. + With two keystrokes, you can format large sections of text, without + the use of external programs. + Word completion in Insert mode + Vim can complete words while you are typing, by matching the current + word with other similar words in the file. + Jump tags + Just like in an internet browser, you can jump back to previous parts + of the text you were editing, and then forward again. Your brain is + thus free to edit instead of navigate. + Automatic commands + Commands automatically executed when reading or writing a file, + jumping to another buffer, etc. + Viminfo + Allows storing of the command line history, marks and registers in a + file to be read on startup. Therefore, you can recall old search + patterns, macros, etc., in a new Vim session. + Mouse support + The mouse is supported in an xterm and for MS-DOS. It can be used to + position the cursor, select the visual area, paste a register, etc. + Graphical User Interface (GUI) + Just like any modern editor. Also, it's very easy to add your own + menus. Of course, console vim is still supported, and very widely + used. + Scripting language + Vim has a powerful scripting language so new commands can be created. + You can also use Perl, Python, TCL and Ruby to achieve the same thing! + Plugins + Extra functionality implemented via vim commands (regular commands or + the scripting language) that is automatically loaded on startup. + Examples: file explorer, network editing. More are being developed + and shared on VimOnline all the time. + Syntax highlighting for many programming languages + Syntax highlighting for hundreds of programming languages is + supported. Support for others can be added. + Extended regular expressions + Vim supports extended regular expressions which are similar in + functionality to that of perl regular expressions. + +Programming performance features: + + Edit-compile-edit speedup + You can compile within Vim and automatically jump to the location of + errors in the source code. + Indenting for many programming languages + C, C++, Java, Perl, XML and many other languages can be automatically + indented by vim while you type. Support for others can be added. + Searching for words in include files + Vim allows you to search for a match of the word under the cursor in + the current and included files. + Advance text objects + Instantly select, or delete, or copy, or indent, or format, or change + case, or ... to all the text between ( and ), or { and }, or < and >, + or [ and ]. Or a word, sentence, or paragraph. Very powerful. + Folding + Certain parts of the text can be "folded" away. The best example is + the body of a function. You can get an overview of the code, and then + open the fold of the function whose detail you need to see. + ctags and cscope integration + Using these two powerful programs, you can jump to a definition of a + function from a calling instance of it, and use other tricks to + navigate source code. + +For more information, read + + :help vi-differences + + +1.5. Is Vim free? + +Vim is Charityware. There are no restrictions on using or copying Vim, but +the author encourages you to make a donation to charity. A document +explaining how to do so is included in the distribution. + +For more information, read + + :help copyright + + +============================================================================= + +SECTION 2 - RESOURCES + + +2.1. Where can I learn more about Vim? + +You can post your Vim questions to the vim@vim.org mailing list. You can +post your Vim development related questions to the vim-dev@vim.org mailing +list. Vim does not have a newsgroup of its own. But the appropriate +newsgroup to post to is comp.editors. + +"VimOnline" is a web page that serves as a de facto homepage for vim, +although the main purpose of it is to gather tips and scripts from +everywhere. Get involved! The URL is vim.sourceforge.net or vim.sf.net. + +Finally, read the Vi FAQ: + + http://www.faqs.org/faqs/editor-faq/vi/part1/index.html + +For more information, read + + :help mail-list + :help internet + + +2.2. Is there a mailing list available? + +There are several: + + NAME DESCRIPTION + + vim-announce Announcements of new releases + vim General discussion + vim-dev Patches, bug reports, development discussions + vim-mac Macintosh discussion + vim-fr General discussion in French + vim-multibyte Multibyte development issues + vim-vms Development on VMS + +Of these, only vim and vim-dev are of general interest. vim-announce is +read-only to most people, and its messages are sent to the other lists as +well. The remaining four are very low volume. + +To subscribe: send an email to <NAME>-subscribe@vim.org +To unsubscribe: send an email to <NAME>-unsubscribe@vim.org +To get help: send an email to <NAME>-help@vim.org + + +2.3. Is there an archive available for the Vim mailing lists? + +Yes. Visit http://www.yahoogroups.com/list/<name>, where name is one of: +vimannounce, vim, vimdev, vim-fr, vim-mac, vim-multibyte, vim-vms. + +Alternatively, visit www.gmane.org to find out about GMANE, which allows +you to access the mailing lists as though they were newsgroups. This +offers some convenience to those who wish to browse the history or casually +observe the current threads. + + +2.4. Where can I get the Vim user manual in HTML/PDF/PS format? + +You can download the HTML/PDF/PS format of the Vim user manual from: + + http://vimdoc.sourceforge.net/ + + +2.5. I have a "xyz" (some) problem with Vim. How do I determine it is a + problem with my setup or with Vim? + +First, you have to determine that the problem is not with your .vimrc or +.gvimrc or system vimrc or your personal plugin files or in any of your +setup files. To do this, use + + $ vim -N -u NONE -U NONE + +This will start Vim in 'nocompatible" mode and will not source your +personal .vimrc and .gvimrc files. It will also not load your personal +plugins. In this invocation of Vim, try to reproduce your problem. If you +are not able to reproduce the problem, then the problem is related to some +setting in one of your local setup files or plugins. To locate the problem +in your setup files, you have to use trial and error and try commenting out +the lines in your setup files one by one. You can also use the -V command +line argument to Vim to get more debug information and analyze the problem: + + $ vim -V2 + +You can increase the value passed to the -V argument to get more debug +information. + +For more information, read + + :help -u + :help -U + :help -N + :help -V + :help 'verbose' + :help :verbose + :help set-verbose + + +2.6. Where can I report bugs? + +First collect the required information using the following command: + + :source $VIMRUNTIME/bugreport.vim + +Now send the resulting text from the above command to the bugs@vim.org +e-mail address. + +The Vim Development mailing list (see above) is a good place to discuss +general bugs. If the bug you find is with syntax highlighting or some +other "added feature" (i.e. not directly programmed into vim), attempt to +inform the maintainer of that feature. + +For more information, read + + :help bug-reports + + +2.7. Where can the FAQ be found? + +The FAQ can be found at VimOnline (vim.sf.net). Other places will be +decided in the future. + + +2.8. What if I don't find an answer in this FAQ? + +This FAQ covers mainly Vim-specific questions. You may find more +information suitable for most Vi clones by reading the Vi FAQ. It is posted +regularly on comp.editors. You can also find a copy at + + http://www.faqs.org/faqs/editor-faq/vi/part1/index.html + +Also, since Vim has gathered so many features in the last few years, +successfully documenting the frequently asked questions here is a +near-impossible task. To make it possible, please email the maintainer if +you have a good question. A good question is one that you've tried to +answer yourself (remember, Vim has great documentation) but struggled. + + +2.9. I have a patch for implementing a Vim feature. Where can I send this + patch? + +You can send your patches to the Vim developer mailing list +vim-dev@vim.org. + +For more information, read + + :help vim-dev + + +2.10. I have a Vim tip or developed a new Vim + syntax/indent/filetype/compiler plugin or developed a new script or a + colorscheme. Is there a public website where I can upload this? + +Yes. You can use the Vim Online website to upload your plugins/scripts, +colorschemes, tips, etc. The site is at http://vim.sourceforge.net + + +============================================================================= + +SECTION 3 - AVAILABILITY + + +3.1. What is the latest version of Vim? + +The latest version of Vim is 6.3 released on 8th June 2004. + +The release-history of different versions of Vim is below: + +Version 6.3 8th June 2004 +Version 6.2 1st June 2003 +Version 6.1 24th March 2002 +Version 6.0 27th September, 2001 +Version 5.8 31st May, 2001 +Version 5.7 24th June, 2000 +Version 5.6 16th January, 2000 +Version 5.5 21st September, 1999 +Version 5.4 26th July, 1999 +Version 5.3 31st August, 1998 +Version 5.2 24th August, 1998 +Version 5.1 7th April, 1998 +Version 5.0 19th February, 1998 +Version 4.6 13th March,1997 +Version 4.5 17th October, 1996 +Version 4.2 5th July,1996 +Version 4.0 21st May, 1996 +Version 3.0 16th August, 1994 +Version 2.0 21st December, 1993 +Version 1.27 23rd April, 1993 +Version 1.17 21st April, 1992 + + +3.2. Where can I find the latest version of Vim? + +You can download the sources for the latest version of Vim from the +VimOnline website. The URL for this site is +http://vim.sourceforge.net/download.php. + + +3.3. What platforms does it run on? + +All Unix platforms. +All Windows platforms. +Amiga, Atari, BeOS, DOS, Macintosh, MachTen, OS/2, RiscOS, VMS. + + +3.4. Where can I download the latest version of the Vim runtime files? + +You can download the latest version of the Vim runtime files (syntax files, +filetype plugins, compiler files, color schemes, documentation, indentation +files and keymaps) from the Vim ftp site from the +ftp://ftp.vim.org/pub/vim/runtime directory. + + +============================================================================= + +SECTION 4 - HELP + + +4.1. How do I use the help files? + +Help can be found for all functions of Vim. In order to use it, use the +":help" command. This will bring you to the main help page. On that first +page, you will find explanations on how to move around. Basically, you move +around in the help pages the same way you would in a read-only document. +You can jump to specific subjects by using tags. This can be done in two +ways: + + * Use the "<Ctrl-]>" command while standing on the name of a command or + option. This only works when the tag is a keyword. "<Ctrl-LeftMouse>" + and "g<LeftMouse>" work just like "<Ctrl-]>". + * use the ":tag <subject>" command. This works with all characters. + +Use "<Ctrl-T>" to jump back to previous positions in the help files. Use +":q" to close the help window. + +If you want to jump to a specific subject on the help pages, use ":help +{subject}". If you don't know what to look for, try ":help index" to get a +list of all available subjects. Use the standard search keys to locate the +information you want. You can abbreviate the ":help" command as ":h". + +For more information, read + + :help online-help + + +4.2. How do I search for a keyword in the Vim help files? + +You can press the CTRL-D key after typing the help keyword to get a list of +all the help keywords containing the supplied pattern. You can also use the +meta characters like *, \+, etc to specify the help search pattern: + + :help init<C-D> + :help str*()<C-D> + :help '*indent<C-D> + +You can press the Tab key after typing a partial help keyword to expand to +the matching keyword. You can continue to press the Tab key to see other +keyword matches. + +From the help window, you can use the ":tag" command to search for +keywords. For example, + + :tselect /window + +This command will list all the help keywords containing the text "window". +You can select one from the list and jump to it. + +You can use the ":helpgrep" command to search for the given text in all the +help files. The quickfix window will be opened with all the matching lines. + +For more information, read + + :help c_CTRL-D + :help c_<Tab> + :help :tselect + :help :help + :help :helpgrep + + +4.3. I am getting an error message E123, what did I do wrong? + +You can get more information about the error and the error message using: + + :help E123 + +For more information, read + + :help error-messages + + +4.4. Where can I read about the various modes in Vim? + +You can get information about the different modes in Vim by reading + + :help vim-modes + + +4.5. How do I generate the Vim help tags file after adding a new Vim help + file? + +You can use the ":helptags" command to regenerate the Vim help tag file. +For example: + + :cd $VIMRUNTIME/doc + :helptags . + +For more information, read + + :help :helptags + :help add-local-help + + +4.6. Can I use compressed versions of the help files? + +Yes. You can compress the help files and still be able to view them with +Vim. This makes accessing the help files a bit slower and requires the +"gzip" utility. Follow these steps to compress and use the Vim help files: + +- Compress all the help files using "gzip doc/*.txt". + +- Edit the "doc/tags" file and change the ".txt" to ".txt.gz" using + :%s=\(\t.*\.txt\)\t=\1.gz\t= + +- Add the following line to your vimrc: + set helpfile={dirname}/help.txt.gz + +Where {dirname} is the directory where the help files are. The gzip.vim +plugin supplied with the standard Vim distribution will take care of +decompressing the files. You must make sure that $VIMRUNTIME is set to +where the other Vim files are, when they are not in the same location as +the compressed "doc" directory. + +For more information, read + + :help gzip-helpfile + :help 'helpfile' + :help gzip + :help $VIMRUNTIME + + +============================================================================= + +SECTION 5 - EDITING A FILE + + +5.1. How do I load a file in Vim for editing? + +There are several ways to load a file for editing. The simplest is to +use the ":e" (:edit) command: + + :e <filename> + +You can also use the ":n" (:next) command to load files into Vim: + + :n <filename(s)> + +You can also use the ":args" command to load files into Vim: + + :args <filename(s)> + +For more information, read + + :help usr_07 + :help edit-files + :help :edit + :help :next_f + :help :args_f + + +5.2. How do I save the current file in another name (save as) and edit a + new file? + +You can use the ":saveas" command to save the current file in another name: + + :saveas <newfilename> + +Alternatively, you can also use the following commands: + + :w <newfilename> + :edit # + +You can also use the ":file" command, followed by ":w" command: + + :file <newfilename> + :w + +For more information, read + + :help 07.7 + :help :saveas + :help :file_f + :help :w + + +5.3. How do I change the current directory to the directory of the current + file? + +You can use the following command to change the current directory to the +directory of the current file: + + :cd %:p:h + +To automatically change the current directory to the directory of the +current file, use the following autocmd: + + :autocmd BufEnter * cd %:p:h + +For more information, read + + :help :cd + :help :lcd + :help filename-modifiers + :help autocommand + + +5.4. How do I write a file without the line feed (EOL) at the end of the + file? + +You can turn off the 'eol' option and turn on the 'binary' option to write +a file without the EOL at the end of the file: + + :set binary + :set noeol + :w + +For more information, read + + :help 'endofline' + :help 'binary' + :help 23.4 + + +5.5. How do I configure Vim to open a file at the last edited location? + +Vim stores the cursor position of the last edited location for each buffer +in the '"' register. You can use the following autocmd in your .vimrc or +.gvimrc file to open a file at the last edited location: + + au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | + \ exe "normal g'\"" | endif + +For more information, read + + :help '" + :help last-position-jump + + +5.6. When editing a file in Vim, which is being changed by an external + application, Vim opens a warning window (like the confirm dialog) each + time a change is detected. How do I disable this warning? + +You can set the Vim 'autoread' option to automatically read the file again +when it is changed outside of Vim: + + :set autoread + +You can also use the following autocommand: + + autocmd FileChangedShell * + \ echohl WarningMsg | + \ echo "File has been changed outside of vim." | + \ echohl None + +For more information, read + + :help 'autoread' + :help FileChangedShell + :help timestamp + :help :checktime + + +5.7. How do I edit a file whose name is under the cursor? + +You can use the gf command to edit a file whose name is under the cursor. +You can use the CTRL-W f command to edit the file in a new window. + +For more information, read + + :help gf + :help CTRL-W_f + :help 'isfname' + :help 'path' + :help 'suffixesadd' + :help 'includeexpr' + + +5.8. How do I reload/re-edit the current file? + +You can use the ":edit" command, without specifying a file name, to reload +the current file. If you have made modifications to the file, you can use +":edit!" to force the reload of the current file (you will lose your +modifications). + +For more information, read + + :help :edit + :help :edit! + :help 'confirm' + + +5.9. How do I autosave a file periodically? + +Vim doesn't support auto-saving a file periodically. + +For more information, read + + :help 'updatetime' + :help CursorHold + :help swap-file + + +5.10. How do I open a file in read-only mode? + +You can open a file in read-only mode using the ":view" command: + + :view <filename> + +This command sets the 'readonly' option for the opened buffer. You can also +use the "-R" command-line option to open a file in read-only mode: + + $ vim -R <filename> + +You can also use the symbolic link executable "view" to open a file in +read-only mode from the command-line: + + $ view <filename> + +For more information, read + + :help 07.6 + :help 'readonly' + :help 'modifiable' + :help :view + :help :sview + :help view + :help -R + :help -M + + +5.11. How do I open a file for editing without saving the modifications to + the current file? + +You can open a file for editing without saving the modifications to the +current file and without losing the changes using one of the following +methods: + + :split <new_filename> + :new <new_filename> + +You can also set the 'hidden' option and edit a new file: + + :set hidden + : e <new_filename> + +If you want to discard the changes made to the current file and load +another file for editing, then you can use the following command: + + :e! <new_filename> + +For more information, read + + :help :edit!_f + :help 'hidden' + :help :split + :help :new + + +============================================================================= + +SECTION 6 - EDITING MULTIPLE FILES + + +6.1. How do I open multiple files at once from within Vim? + +There are several ways to open multiple files at once from within Vim. You +can use the ":next" command to specify a group of files: + + :next f1.txt f2.txt + :next *.c + +You can use the :args command to specify a group of files as arguments: + + :args f1.txt f2.txt + :args *.c + +After loading the files, you can use the ":next" and ":prev" command to +switch between the files. + +For more information, read + + :help 07.2 + :help :next + :help :args_f + :help argument-list + + +6.2. How do I switch between multiple files/buffers in Vim? + +There are several ways to switch between multiple files. You can use the +":buffer" command to switch between multiple files. For example, + + :buffer file1 + :buffer file2 + +You can also use the CTRL-^ key to switch between buffers. By specifying a +count before pressing the key, you can edit the buffer with that number. +Without the count, you can edit the alternate buffer by pressing CTRL-^ + +You can also use the ":e #" command to edit a particular buffer: + + :e #5 + +For more information, read + + :help edit-files + :help :buffer + :help CTRL-^ + :help alternate-file + :help 22.4 + :help 07.3 + + +6.3. How do I open several files in Vim, with each file in a separate + window? + +You can use the -o and -O Vim command line arguments to open multiple files +in separate horizontally or vertically split Vim windows. For example: + + $ vim -o3 f1.txt f2.txt f3.txt + +The above command will open the files f1.txt, f2.txt and f3.txt in three +separate horizontally split Vim windows. + + $ vim -O3 f1.txt f2.txt f3.txt + +The above command will open the files f1.txt, f2.txt and f3.txt in three +separate vertically split Vim windows. + +For more information, read + + :help -o + :help -O + :help startup-options + + +6.4. How do I configure Vim to autoload several files at once similar to + "work-sets" or "projects"? + +You can use the ":mksession" and the ":mkview" commands to autoload several +files in Vim. + +The ":mksession" command creates a Vim script that restores the current +editing session. You can use the ":source" command to source the file +produced by the mksession command. + +The ":mkview" command creates a Vim script that restores the contents of +the current window. You can use the ":loadview" command to load the view +for the current file. + +For more information, read + + :help 21.4 + :help 21.5 + :help views-sessions + :help 'sessionoptions' + :help :mksession + :help :source + :help v:this_session + :help :mkview + :help :loadview + :help 'viewdir' + :help buffers + + +6.5. Is it possible to open multiple top level windows in a single instance + of Vim similar to Nedit or emacs? + +No. It is currently not possible to open multiple top-level windows in a +single instance of Vim. This feature is in the todo list. + + +6.6. How do I browse/explore directories from within Vim? + +You can use the explorer.vim plugin, supplied with the standard Vim +installation, to browse/explore directories from within Vim. You can start +the file explorer using one of the following commands: + + :e <directory> + :Explore + :SExplore + +From the file explorer, you can browse through directories, rename, delete +and edit files. + +For more information, read + + :help file-explorer + :help 22.1 + + +6.7. How do I edit files over a network using ftp/scp/rcp/http? + +You can use the netrw.vim plugin, supplied with the standard Vim package, +to edit files over a network using ftp/scp/rcp/http. Using this plugin, Vim +will transparently load and save the files over ftp/scp/rcp/http. For +example, to edit a file over ftp, you can use the following command: + + $ vim ftp://machine/path + +For more information, read + + :help netrw.vim + + +============================================================================= + +SECTION 7 - BACKUP + + +7.1. When I edit and save files, Vim creates a file with the same name as + the original file and a "~" character at the end. How do I stop Vim + from creating this file? (or) How do I disable the Vim backup file + feature? + +You have set the 'backup' option, so Vim creates a backup file when saving +the original file. You can stop Vim from creating the backup file, by +clearing the option: + + :set nobackup + +Note that, by default this option is turned off. You have explicitly +enabled the 'backup' option in one of the initialization files. You may +also have to turn off the 'writebackup' option: + + :set nowritebackup + +For more information, read + + :help 07.4 + :help backup-table + :help 'backup' + :help 'writebackup' + :help 'backupskip' + :help 'backupdir' + :help 'backupext' + :help 'backupcopy' + :help backup + + +7.2. How do I configure Vim to store all the backup files in a particular + directory? + +You can configure Vim to store all the backup files in a particular +directory using the 'backupdir' option. For example, to store all the +backup files in the ~/backup directory, you can use the following command: + + :set backupdir=~/backup + +For more information, read + + :help 07.4 + :help 'backupdir' + :help backup + + +7.3. When I save a file with Vim, the file permissions are changed. + How do I configure Vim to save a file without changing the file + permissions? + +This may happen, if the 'backupcopy' option is set to 'no' or 'auto'. Note +that the default value for this option is set in such a way that this will +correctly work in most of the cases. If the default doesn't work for you, +try setting the 'backupcopy' option to 'yes' to keep the file permission +when saving a file: + + :set backupcopy=yes + +This applies, only if you have configured Vim to make a backup whenever +overwriting a file. By default, Vim will not backup files. + +For more information, read + + :help 'backupcopy' + :help backup + :help 'backup' + :help 'writebackup' + + +============================================================================= + +SECTION 8 - BUFFERS + + +8.1. I have made some modifications to a buffer. How do I edit another + buffer without saving the modified buffer and also without losing the + modifications? + +You can set the 'hidden' option to edit a file without losing modifications +to the current file: + + :set hidden + +By setting the 'hidden' option, you can also save the modification history +(undo-history) for the buffer. Otherwise, as you switch between files, the +undo-history will be lost. + +For more information, read + + :help 'hidden' + :help hidden-quit + :help :hide + + +8.2. How do I configure Vim to auto-save a modified buffer when switching + to another buffer? + +You can set the 'autowrite' option to auto-save a modified buffer when +switching to another buffer: + + :set autowrite + +For more information, read + + :help 'autowrite' + :help 'autowriteall' + :help 'hidden' + + +8.3. How do I replace the buffer in the current window with a blank buffer? + +You can use the ":enew" command to load an empty buffer in place of the +buffer in the current window. + +For more information, read + + :help :enew + + +8.4. Is there a keyboard shortcut to load a buffer by the buffer number? + +You can use the CTRL-^ command to load a buffer by specifying the buffer +number. For example, to load buffer number 5, you have to use the 5 CTRL-^ +command. + +For more information, read + + :help CTRL-^ + + +8.5. How do I open all the current buffers in separate windows? + +You can use the ":ball" or ":sball" commands to open all the buffers +in the buffer list: + + :ball + +For more information, read + + :help :ball + + +8.6. How do I close (delete) a buffer without exiting Vim? + +You can use the ":bdelete" command to delete a buffer without exiting Vim. +For example: + + :bdelete file1 + +For more information, read + + :help :bdelete + :help :bwipeout + + +8.7. I have several buffers opened with :e filename. How do I close one of + the buffers without exiting Vim? + +You can use the ":bdelete <buffername>" command to close the buffer. + +For more information, read + + :help :bdelete + :help :bunload + :help :bwipeout + + +8.8. When I use the command ":%bd" to delete all the buffers, not all the + buffers are deleted. Why? + +In the ":%bd" command, the '%' range will be replaced with the starting and +ending line numbers in the current buffer. Instead of using '%' as the +range, you should specify numbers for the range. For example, to delete all +the buffers, you can use the command ":1,9999bd". + +For more information, read + + :help :bd + + +8.9. How do I display the buffer number of the current buffer/file? + +You can use 2<CTRL-G> command to display the buffer number for the current +file/buffer. Note the use of count before the CTRL-G command. If the count +is greater than 1, then Vim will display the buffer number. + +You can also use the following command to display the current buffer +number: + + :echo bufnr("%") + +You can also include the "%n" field to the 'statusline' option to display +the current buffer number on the statusline. + +For more information read, + + :help CTRL-G + :help bufnr() + :help :echo + :help 'statusline' + + +8.10. How do I delete a buffer without closing the window in which the + buffer is displayed? + +You can use the following command to open the next buffer and delete +the current buffer. + + :bnext | bdelete # + +For more information read, + + :help :bnext + :help :bdelete + :help :buffers + + +8.11. How do I map the tab key to cycle through and open all the buffers? + +You can use the following two map commands, to map the CTRL-Tab key to open +the next buffer and the CTRL-SHIFT-Tab key to open the previous buffer: + + :nnoremap <C-Tab> :bnext<CR> + :nnoremap <S-C-Tab> :bprevious<CR> + +For more information read, + + :help :bnext + :help :previous + + +============================================================================= + +SECTION 9 - WINDOWS + + +9.1. What is the difference between a Vim window and a buffer? + +A Vim buffer is a file loaded into memory for editing. The original file +remains unchanged until you write the buffer to the file. A Vim window is a +viewport onto a buffer. You can use multiple windows on one buffer or +several windows on different buffers. + +For more information, read + + :help usr_08.txt + :help 22.4 + :help windows-intro + :help Q_wi + + +9.2. How do I increase the width of a Vim window? + +You can increase the width of a Vim window using one of the following +commands: + + :vert resize +N + :vert resize -N + :vert resize N + +You can also use CTRL-W < or CTRL-W > or CTRL-W | commands. + +For more information, read + + :help vertical-resize + :help CTRL-W_> + :help CTRL-W_< + :help window-resize + + +9.3. How do I zoom into or out of a window? + +You can zoom into a window (close all the windows except the current +window) using the "CTRL-W o" command or the ":only" ex command. + +You can use the "CTRL-W _" command or the ":resize" ex command to increase +the current window height to the highest possible without closing other +windows. + +You can use the "CTRL-W |" command or the ":vertical resize" ex command to +increase the current window width to the highest possible without closing +other windows. + +You can use the "CTRL-W =" command to make the height and width of all the +windows equal. + +You can also set the following options to get better results with the above +commands: + +Method 1: +Set the 'winminheight' option to 0: + + :set winminheight=0 + +By default, this option is set to 1. +This option controls the minimum height of an inactive window (when it is +not the current window). When the 'winminheight' option is set to 0, only +the status line will be displayed for inactive windows. + +Method 2: +Set the 'noequalalways' option and set the 'winheight' option to a large +value (like 99999): + + :set noequalalways + :set winheight=99999 + +Now, the active window will always open to its maximum size, while the +other windows will stay present, but shrunken to just a status line. + +With any of the above mentioned methods, you cannot restore the window +layout after zooming into a window. If you want to restore the Vim window +layout after zooming into a window, you can use the ZoomWin plugin. You can +download this plugin from the Vim online website at: + +http://vim.sourceforge.net/scripts/script.php?script_id=508 + +For more information, read + + :help CTRL-W_o + :help window-resize + :help 'winminheight' + :help 'equalalways' + :help 'winheight' + :help 08.3 + + +9.4. How do I execute an ex command on all the open buffers or open windows + or all the files in the argument list? + +You can use the ":bufdo" command to execute an ex command on all the open +buffers. You can use the ":windo" command to execute an ex command on all +the open windows. You can use the ":argdo" command to execute an ex +command on all the files specified in the argument list. + +For more information, read + + :help :windo + :help :bufdo + :help :argdo + :help 26.3 + + +============================================================================= + +SECTION 10 - MOTION + + +10.1. How do I jump to the beginning (first line) or end (last line) of a + file? + +You can use 'G' command to jump to the last line in the file and the 'gg' +command to jump to the first line in the file. + +For more information, read + + :help G + :help gg + + +10.2. In insert mode, when I press the <Esc> key to go to command mode, the + cursor moves one character to the left (except when the cursor is on + the first character of the line). Is it possible to change this + behavior to keep the cursor at the same column? + +No. It is not possible to change this behavior. The cursor is *always* +positioned on a valid character (unless you have virtual-edit mode +enabled). So, if you are appending text to the end of a line, when you +return to command mode the cursor *must* drop back onto the last character +you typed. For consistency sake, the cursor drops back everywhere, even if +you are in the middle of a line. + +You can use the CTRL-O command in insert mode to execute a single ex +command and return back to insert mode without moving the cursor column. + +For more information, read + + :help 'virtual' + :help i_CTRL-O + + +10.3. How do I configure Vim to maintain the horizontal cursor position when + scrolling with the <Page Up>, <Page Down>, etc keys? + +You can reset the 'startofline' option to keep the cursor at the same +horizontal location when scrolling text: + + :set nostartofline + +For more information, read + + :help 'startofline' + + +10.4. Some lines in a file are more than the screen width and they are all + wrapped. When I use the j, k keys to move from one line to the next, + the cursor is moved to the next line in the file instead of the next + line on the screen. How do I move from one screen line to the next? + +You can use the gj and gk commands to move from one screen line to the +next/previous screen line. The j and k commands move the cursor from one +file line to the next file line. You can also avoid the line wrapping by +resetting the 'wrap' option: + + :set nowrap + +For more information, read + + :help gj + :help gk + :help 'wrap' + +You can use the following mappings: + + :map <Up> gk + :imap <Up> <C-o>gk + :map <Down> gj + :imap <Down> <C-o>gj + + +10.5. What is the definition of a sentence, paragraph and section in Vim? + +A sentence is defined as ending at a '.', '!' or '?' followed by either the +end of a line, or by a space (or two) or tab. Which characters and the +number of spaces needed to constitute a sentence ending is determined by +the 'joinspaces' and 'cpoptions' options. + +A paragraph begins after each empty line, and also at each of a set of +paragraph macros, specified by the pairs of characters in the 'paragraphs' +option. + +A section begins after a form-feed (<C-L>) in the first column and at each +of a set of section macros, specified by the pairs of characters in the +'sections' option. + +For more information, read + + :help sentence + :help 'joinspaces' + :help 'cpoptions' | /^\s*j\> + :help paragraph + :help section + :help word + + +10.6. How do I jump to beginning or end of a sentence, paragraph or a + section? + +You can use the following motion commands to jump to the beginning or end +of a sentence or a paragraph or a section: + + motion position where + ( beginning current sentence + ) end current sentence + { beginning current paragraph + } end current paragraph + [] end previous section + [[ beginning current section + ][ end current section + ]] beginning next section + +Each of these motions can be preceded by a number which will extend the +jump forward (or backward). + +For more information, read + + :help object-motions + + +10.7. I have lines in a file that extends beyond the right extent of the + screen. How do I move the Vim view to the right to see the text off + the screen? + +You can use one of the following commands to horizontally scroll the screen +to the left or right: + + zl - scroll to the left + zh - scroll to the right + zL - scroll half a screenwidth to the left + zH - scroll half a screenwidth to the right + zs - scroll to position the cursor at the start of the screen + ze - scroll to position the cursor at the end of the screen + +You can use the g0 command to move the cursor to the first character of the +screen line and the g$ command to move the cursor to the last character of +the screen line without scrolling the screen. + +For more information, read + + :help scroll-horizontal + + +10.8. How do I scroll two or more buffers simultaneously? + +You can set the "scrollbind" option for each of the buffer to scroll them +simultaneously. + +For more information, read + + :help 'scrollbind' + :help scroll-binding + :help 'scrollopt' + + +10.9. When I use my arrow keys, Vim changes modes, inserts weird characters + in my document but doesn't move the cursor properly. What's going on? + +There are a couple of things that could be going on: either you are using +Vim over a slow connection or Vim doesn't understand the key sequence that +your keyboard is generating. + +If you are working over a slow connection (such as a 2400 bps modem), you +can try to set the 'timeout' or 'ttimeout' option. These options, combined +with the 'timeoutlen' and 'ttimeoutlen' options, may fix the problem. + +The preceding procedure will not work correctly if your terminal sends key +codes that Vim does not understand. In this situation, your best option is +to map your key sequence to a matching cursor movement command and save +these mappings in a file. You can then ":source" the file whenever you work +from that terminal. + +For more information, read + + :help 'timeout' + :help 'ttimeout' + :help 'timeoutlen' + :help 'ttimeoutlen' + :help :map + :help vt100-cursor-keys + + +10.10. How do I configure Vim to move the cursor to the end of the previous + line, when the left arrow key is pressed and the cursor is currently + at the beginning of a line? + +You can add the '<' flag to the 'whichwrap' option to configure Vim to move +the cursor to the end of the previous line, when the left arrow key is +pressed and the cursor is currently at the beginning of a line: + + :set whichwrap+=< + +Similarly, to move the cursor the beginning of the next line, when the +right arrow key is pressed and the cursor is currently at the end of a +line, add the '>' flag to the 'whichwrap' option: + + :set whichwrap+=> + +The above will work only in normal and visual modes. To use this in insert +and replace modes, add the '[' and ']' flags respectively. + +For more information, read + + :help 'whichwrap' + :help 05.7 + + +10.11. How do I configure Vim to stay only in insert mode (modeless + editing)? + +You can set the 'insertmode' option to configure Vim to stay only in insert +mode: + + :set insertmode + +By setting this option, you can use Vim as a modeless editor. If you press +the <Esc> key, Vim will not go to the normal mode. To execute a single +normal mode command, you can press CTRL-O followed by the normal mode +command. To execute more than one normal command, you can use CTRL-L +followed by the commands. To return to insert mode, press the <Esc> key. To +disable this option, reset the 'insertmode' option: + + :set noinsertmode + +You can also start vim using the "evim" command or you can use "vim -y" to +use Vim as a modeless editor. + +You can also start Vim in insert mode using the ":startinsert" ex command. + +For more information, read + + :help 'insertmode' + :help :startinsert + :help :stopinsert + :help i_CTRL-O + :help i_CTRL-L + :help evim + :help evim-keys + + +10.12. How do I display some context lines when scrolling text? + +You can set the 'scrolloff' option to display a minimal number of screen +lines (context) above and below the cursor. + + :set scrolloff=10 + +For more information, read + + :help 'scrolloff' + :help 'sidescrolloff' + + +10.13. How do I go back to previous cursor locations? + +You can go back to the cursor location before the latest jump using the '' +or `` command. You can use the CTRL-O command to go back to older cursor +positions and the CTRL-I command to go to the newer cursor positions in the +jump list. + +For more information, read + + :help 03.10 + :help mark-motions + :help jump-motions + + +============================================================================= + +SECTION 11 - SEARCHING TEXT + + +11.1. After I searched for a text with a pattern, all the matched text + stays highlighted. How do I turn off the highlighting + temporarily/permanently? + +The 'hlsearch' option controls whether all the matches for the last +searched pattern are highlighted or not. By default, this option is not +enabled. If this option is set in a system-wide vimrc file, then you can +turn off the search highlighting by using the following command: + + :set nohlsearch + +To temporarily turn off the search highlighting, use + + :nohlsearch + +You can also clear the search highlighting, by searching for a pattern that +is not in the current file (for example, search for the pattern 'asdf'). + +For more information, read + + :help 'hlsearch' + :help :nohlsearch + + +11.2. How do I enter a carriage return character in a search pattern? + +You can either use '\r' or <CTRL-V><CTRL-M> to enter a carriage return +character in a pattern. In Vim scripts, it is better to use '\r' for the +carriage return character. + +For more information, read + + :help sub-replace-special + + +11.3. How do I search for the character ^M? + +You can enter the ^M character in a search command by first pressing the +CTRL-V key and then pressing the CTRL-M key. + + /^V^M + +You can also use the "\r" character. In Vim scripts, "\r" is preferred. + +For more information, read + + :help c_CTRL-V + :help using_CTRL-V + :help /\r + + +11.4. How can I search/replace characters that display as '~R', '~S', etc.? + +You can use the 'ga' command to display the ASCII value/code for the +special character. For example, let us say the ASCII value is 142. Then you +can use the following command to search for the special character: + + /^V142 + +where, ^V is entered by pressing CTRL-V. + +For more information, read + + :help ga + :help using_CTRL_V + :help 24.8 + + +11.5. How do I highlight all the non-printable characters in a file? + +You can use the following commands and search pattern to highlight all the +non-printable characters in a file: + + :set hlsearch + /\(\p\|$\)\@!. + +For more information, read + + :help /\p + :help /bar + :help /$ + :help /\( + :help /\@! + :help 'hlsearch' + + +11.6. How do I search for whole words in a file? + +You can search for whole words in a file using the \< and \> atoms. For +example: + + /\<myword\> + +The \< atom matches the beginning of the word and the \> atom matches the +end of the word. + +For more information, read + + :help /\< + :help /\> + + +11.7. How do I search for the current word under the cursor? + +You can press the * key to search forward for the current word under the +cursor. To search backward, you can press the # key. Note that only whole +keywords will be searched using these commands. + +For more information, read + + :help star + :help # + :help g* + :help g# + :help 03.8 + :help search-commands + + +11.8. How do I search for a word without regard to the case (uppercase or + lowercase)? + +To always ignore case while searching for a pattern, set the 'ignorecase' +option: + + :set ignorecase + +To ignore case only when searching a particular pattern, use the special \c +directive: + + /\c<pattern> + +For more information, read + + :help 'ignorecase' + :help /ignorecase + :help /\c + + +11.9. How do I search for words that occur twice consecutively? + +You can use one of the following search commands to locate words that occur +twice consecutively: + + /\(\<\w\+\)\_s\+\1\> + /\(\<\k\+\)\_s\+\1\> + +The main difference is the use of '\w' and '\k', where the latter is based +on the 'iskeyword' option which may include accented and other language +specific characters. + +For more information, read + + :help /\1 + :help /\( + :help /\) + :help /\< + :help /\> + :help /\w + :help /\k + :help /\+ + :help /\_x + :help 'iskeyword' + + +11.10. How do I count the number of times a particular word occurs in a + buffer? + +You can use the following set of commands to count the number of times a +particular word occurs in a buffer: + + :let cnt=0 + :g/\<your_word\>/let cnt=cnt+1 + :echo cnt + +This only counts the number of lines where the word occurs. You can also +use the following command: + + :%s/\<word\>/&/g + +To count the number of alphabetic words in a file, you can use + + :%s/\a\+/&/g + +To count the number of words made up of non-space characters, you can use + + :%s/\S\+/&/g + +For more information, read + + :help count-items + :help word-count + :help v_g_CTRL-G + :help 12.5 + + +11.11. How do I place the cursor at the end of the matched word when + searching for a pattern? + +You can use the 'e' offset to the search command to place the cursor at the +end of the matched word. For example + + /mypattern/e + +For more information about search offsets, read + + :help search-offset + :help / + + +11.12. How do I search for an empty line? + +You can search for an empty line using: + + /^$ + + or + + /^\s*$ + +For more information, read + + :help /^ + :help /$ + :help /\s + :help /* + :help search-commands + + +11.13. How do I search for a line containing only a single character? + +You can search for a line containing only a single character using: + + /^\s*\a\s*$ + +For more information, read + + :help /^ + :help /\a + :help /\s + :help /* + :help /$ + + +11.14. How do I search and replace a string in multiple files? + +You can use the 'argdo' or 'bufdo' or 'windo' commands to execute an ex +command on multiple files. For example: + + :argdo %s/foo/bar/g + +For more information, read + + :help :argdo + :help :bufdo + :help :windo + + +11.15. I am using the ":s" substitute command in a mapping. When a search + for a pattern fails, the map terminates. I would like the map to + continue processing the next command, even if the substitute command + fails. How do I do this? + +You can use the 'e' flag to the substitute command to continue processing +other commands in a map, when a pattern is not found. + +For more information, read + + :help :s_flags + + +11.16. How do I search for the n-th occurrence of a character in a line? + +To search for the n-th occurrence of a character in a line, you can prefix +the 'f' command with a number. For example, to search for the 5th +occurrence of the character @ in a line, you can use the command 5f@. This +assumes the cursor is at the beginning of the line - and that this first +character is not the one your are looking for. + +For more information, read + + :help f + :help F + :help t + :help T + :help ; + :help , + + +11.17. How do I replace a tab (or any other character) with a hard return + (newline) character? + +You can replace a tab (or any other character) with a hard return (newline) +character using the following command: + + :s/\t/\r/ + +Note that in the above command, if you use \n instead of \r, then the tab +characters will not be replaced by a new-line character. + +For more information, read + + :help sub-replace-special + :help NL-used-for-Nul + :help CR-used-for-NL + + +11.18. How do I search for a character by its ASCII value? + +You can search for a character by its ASCII value by pressing CTRL-V +followed by the decimal or hexadecimal or octal value of that character in +the search "/" command. To determine the ASCII value of a character you +can use the ":ascii" or the "ga" command. + +For more information, read + + :help i_CTRL-V_digit + :help :ascii + :help ga + + +11.19. How do I search for long lines? + +You can search for long lines or lines containing more than a specific +number of characters using the Vim regular-expressions in the search +command. For example, to search for all the lines containing more than 80 +characters, you can use one of the following commands: + + /^.\{80}.*$ + /^.*\%80c.*$ + +For more information, read + + :help /\{ + :help /\%c + + +11.20. How do I display all the lines in the current buffer that contain a + specified pattern? + +You can use the following command to display all the lines in the current +buffer that contain a specified pattern: + + :g/<pattern>/p + +For example, the following command will display all the lines in the +current buffer that contain "vim": + + :g/vim/p + +If you also want the corresponding line numbers, then you can use the +following command: + + :g/<pattern>/# + +For more information, read + + :help :global + :help :print + :help :number + + +11.21. How do I search for a text string that spans multiple lines? + +You can search for a text string that spans multiple lines using the \_x +regular expression atom. For example, to search for the text string "Hello +World", you can use the following search command: + + /Hello\_sWorld + +This will match the word "Hello" followed by a newline character and then +the word "World" at the beginning of the next line. This will also match +the word "Hello" immediately followed by a space character and then the +word "World". When searching for the "Hello World" string, to include the +space characters at the end and beginning of the line, you can use the +following search command: + + /Hello\_s\+World + +For more information, read + + :help 27.8 + :help pattern-atoms + :help /\_ + :help pattern-searches + + +11.22. How do I search for a pattern within the specified range of lines + in a buffer? + +You can search for a pattern within a range of lines using the \%>l +and \%<l regular expression atoms. + +For example, to search for the word 'white' between the lines 10 and 30 in +a buffer, you can use the following command: + + /white\%>10l\%<20l + +For more information, read + + :help /\%l + + +============================================================================= + +SECTION 12 - CHANGING TEXT + + +12.1. How do I delete all the trailing white space characters (SPACE and + TAB) at the end of all the lines in a file? + +You can use the ":substitute" command on the entire file to search and +remove all the trailing white space characters: + + :%s/\s\+$// + +For more information, read + + :help :% + :help :s + :help /\s + :help /\+ + :help /$ + + +12.2. How do I replace all the occurrences of multiple consecutive space + characters to a single space? + +You can use the following command to replace all the occurrences of +multiple consecutive space characters to a single space: + + :%s/ \{2,}/ /g + +For more information, read + + :help :% + :help :s + :help /\{ + :help :s_flags + + +12.3. How do I reduce a range of empty lines into one line only? + +You can use the following command to reduce a range of empty lines into one +line only: + + :v/./.,/./-1join + +The explanation for this command is below: + + :v/./ Execute the following command for all lines not + containing a character (empty lines). + ., Use the current line as the start of the range of + lines. + /./ Use the line containing a character as the last line. + -1 Adjust the range of lines to end with the line before + the last line. + j Join the lines in the range. + +Note that this will give an error message if the empty lines are at the end +of the file. To correct this, you have to add a temporary line at the end +of the file, execute the command and then remove the temporary line. + +For more information, read + + :help :v + :help :join + :help cmdline-ranges + :help collapse + + +12.4. How do I delete all blank lines in a file? How do I remove all the + lines containing only space characters? + +To remove all blank lines, use the following command: + + :g/^$/d + +To remove all lines with only whitespace (spaces or tabs) in them, use the +following command: + + :g/^\s\+$/d + +To remove all the lines with only whitespace, if anything, use the +following command: + + :g/^\s*$/d + + +12.5. How do I copy/yank the current word? + +You can use the "yiw" (yank inner word without whitespace) command or the +"yaw" (yank a word with whitespace) command to copy/yank the current +word. + +For more information, read + + :help 04.6 + :help 04.8 + :help iw + :help yank + :help text-objects + :help objects + + +12.6. How do I yank text from one position to another position within a + line, without yanking the entire line? + +You can specify a motion command with the yank operator (y) to yank text +from one position to another position within a line. For example, to yank +from the current cursor position till the next letter x, use yfx or Fx or +tx or Tx. To yank till the nth column, use n|. To yank till the next +occurrence of a 'word', use /word. To do a yank till the nth column on +another line, first mark the position using the 'ma' command, go to the +start of the yank position, and then yank till the mark using y`a (note the +direction of the quote) + +For more information, read + + :help yank + :help motion.txt + :help 4.6 + + +12.7. When I yank some text into a register, how do I append the text to + the current contents of the register? + +When you specify the register for some operation, if you use the upper-case +for the register name, then the new text will be appended to the existing +contents. For example, if you have some text in the register "a". If you +want to append some new text to this, you have to use the "A" register +name. If you use the lowercase register name, then the contents of the +register will be overwritten with the new text. + +For more information, read + + :help quote + :help quote_alpha + :help 10.1 + + +12.8. How do I yank a complete sentence that spans over more than one line? + +To yank a complete sentence that spans over more than one line you have to +use the yank operator followed by a motion command. For example: + + y) + +From inside the sentence you can use 'yi)' to yank the sentence. + +For more information, read + + :help yank + :help {motion} + :help object-motions + :help 4.6 + + +12.9. How do I yank all the lines containing a pattern into a buffer? + +You can use the ":global" command to yank all the lines containing the +pattern into a register and then paste the contents of the register into +the buffer: + + :let @a='' + :g/mypattern/y A + +The first command, clears the contents of the register "a". The second +command copies all the lines containing "mypattern" into the register "a". +Note that the capital letter "A" is used to append the matched lines. Now +you can paste the contents of register "a" to a buffer using "ap command. +For more information, read + + :help :g + :help :y + :help let-register + :help quote_alpha + :help put + :help registers + :help :registers + + +12.10. How do I delete all the lines in a file that does not contain a + pattern? + +You can use ":v" command to delete all the lines that does not contain a +pattern: + + :v/pattern/d + +or + + :g!/pattern/d + +For more information, read + + :help :v + :help :g + + +12.11. How do I add a line before each line with "pattern" in it? + +You can use the following command to add a line before each line with +"pattern" in it: + + :g/pattern/normal Oi<line of text goes here> + +Alternatively you can yank the line using the Y command and then insert the +line using the following command: + + :g/pattern/put! + +For more information, read + + :help :g + :help :put + :help insert + :help 0 + + +12.12. Is there a way to operate on a line if the previous line contains a + particular pattern? + +You can use the ":global" command to operate on a line, if the previous +line contains a particular pattern: + + :g/<pattern>/+{cmd} + +For more information, read + + :help :g + :help :range + + +12.13. How do I execute a command on all the lines containing a pattern? + +You can use the ":global" (:g) command to execute a command on all the +lines containing a pattern. + + :g/my pattern/d + +If you want to use a non-Ex command, then you can use the ":normal" +command: + + :g/my pattern/normal {command} + +Unless you want the normal mode commands to be remapped, consider using a +":normal!" command instead (note the "!"). + +For more information, read + + :help :global + :help :v + :help :normal + + +12.14. Can I copy the character above the cursor to the current cursor + position? + +In Insert mode, you can copy the character above the cursor to the current +cursor position by typing <Ctrl-Y>. The same can be done with the +characters below the cursor by typing <Ctrl-E>. + +For more information, read + + :help i_CTRL-Y + :help i_CTRL-E + + +12.15. How do I insert a blank line above/below the current line without + entering insert mode? + +You can use the ":put" ex command to insert blank lines. For example, try + + :put ='' + :put! ='' + +For more information, read + + :help :put + + +12.16. How do I insert the name of current file into the current buffer? + +There are several ways to insert the name of the current file into the +current buffer. In insert mode, you can use the <C-R>% or the +<C-R>=expand("%") command. In normal mode, you can use the ":put =@%" +command. + +For more information, read + + :help i_CTRL-R + :help expand() + :help !! + + +12.17. How do I insert the contents of a Vim register into the current + buffer? + +In insert mode, you can use the <C-R><register> command to insert the +contents of <register>. For example, use <C-R>a to insert the contents +of register "a" into the current buffer. + +In normal mode, you can use the ":put <register>" command to insert the +contents of <register>. For example, use the ":put d" command to insert +the contents of register "d" into the current buffer. + +For more information, read + + :help i_CTRL-R + :help :put + + +12.18. How do I move the cursor past the end of line and insert some + characters at some columns after the end of the line? + +You can set the "virtualedit" option to move the cursor past the +end-of-line and insert characters in a column after the end-of-line. To +start the virtual mode, use + + :set virtualedit=all + +For more information, read + + :help 'virtualedit' + + +12.19. How to replace the word under the cursor (say: junk) with + "foojunkbar" in Vim? + +There are several ways to do this. If the word is the first such word on +the line, use the following command: + + :exe "s/".expand("<cword>")."/foo&bar/" + +Too match specifically you could use a more complex substitution like this: + + :exe 's/\<'.expand("<cword>").'\%>'.(col(".")-1).'c\>/foo&bar/' + +You can also use the command: ciwfoo<C-R>"bar<Esc> + +For more information, read + + :help :substitute + :help expand() + :help col() + :help /\%c + + +12.20. How do I replace a particular text in all the files in a directory? + +You can use the "argdo" command to execute the substitute command on all +the files specified as arguments: + + :args * + :argdo %s/<your_text>/<replacement_text>/ge | update + +For more information, read + + :help :args_f + :help :argdo + :help :s_flags + + +12.21. I have some numbers in a file. How do I increment or decrement the + numbers in the file? + +You can use the CTRL-A key to increment the number and the CTRL-X key to +decrement the number. You can also specify the number to +increment/decrement from the number by specifying a count to the key. This +works for decimal, octal and hexadecimal numbers. You can change the base +used by Vim for this operation by modifying the 'nrformats' option. + +For more information, read + + :help 26.2 + :help CTRL-A + :help CTRL-X + :help 'nrformats' + + +12.22. How do I reuse the last used search pattern in a ":substitute" + command? + +To reuse the last used search pattern in a ":substitute" command, don't +specify a new search pattern: + + :s/pattern/newtext/ + :s//sometext/ + +In the second ":s" command, as a search pattern is not specified, the +pattern specified in the first ":s" command 'pattern' will be used. + +If you want to change the search pattern but repeat the substitution +pattern you can use the special right hand side, you can use the tilde +character: + + :s/newpattern/~/ + +For more information, read + + :help :s + :help :& + :help :~ + :help & + :help sub-replace-special + + +12.23. How do I change the case of a string using the ":substitute" + command? + +You can use special characters in the replacement string for a +":substitute" command to change the case of the matched string. For +example, to change the case of the string "MyString" to all uppercase, you +can use the following command: + + :%s/MyString/\U&/g + +To change the case to lowercase, you can use the following command: + + :%s/MyString/\L&/g + +To change the case of the first character in all the words in the current +line to uppercase, you can use the following command: + + :s/\<\(.\)\(\k*\)\>/\u\1\L\2/g + +For more information, read + + :help sub-replace-special + :help :substitute + :help \U + :help \L + :help \u + + +12.24. How do I enter characters that are not present in the keyboard? + +You can use digraphs to enter characters that are not present in the +keyboard. You can use the ":digraphs" command to display all the currently +defined digraphs. You can add a new digraph to the list using the +":digraphs" command. + +For more information, read + + :help digraphs + :help 'digraphs' + :help 24.9 + + +12.25. Is there a command to remove any or all digraphs? + +No. The digraphs table is defined at compile time. You can only add new +ones. Adding a command to remove digraphs is on the todo list. + + +12.26. In insert mode, when I press the backspace key, it erases only the + characters entered in this instance of insert mode. How do I erase + previously entered characters in insert mode using the backspace + key? + +You can set the 'backspace' option to erase previously entered characters +in insert mode: + + :set backspace=indent,eol,start + +For more information, read + + :help 'backspace' + :help i_backspacing + + +12.27. I have a file which has lines longer than 72 characters terminated + with "+" and wrapped to the next line. How can I quickly join the + lines? + +You can use the ":global" command to search and join the lines: + + :g/+$/j + +This will, however, only join every second line. A couple of more complex +examples which will join all consecutive lines with a "+" at the end are: + + :g/*$/,/\(^\|[^+]\)$/j + :g/+$/mark a | .,/\(^\|[^+]\)$/s/+$// | 'a,.j + +For more information, read + + :help :g + :help :j + :help :mark + + +12.28. How do I paste characterwise yanked text into separate lines? + +You can use the ":put" command to paste characterwise yanked text into new +lines: + + :put =@" + +For more information, read + + :help :put + :help quote_= + + +12.29. How do I change the case (uppercase, lowercase) of a word or a + character or a block of text? + +You can use the "~" command to switch the case of a character. + +You can change the case of the word under the cursor to uppercase using the +"gUiw" or "viwU" command and to lowercase using the "guiw" or "viwu" +command. + +You can switch the case (upper case to lower case and vice versa) of the +word under the cursor using the "viw~" or "g~iw" command. + +You can use the "gUgU" command to change the current line to uppercase and +the "gugu" command to change the current line to lowercase. + +You can use the "g~g~" command to switch the case of the current line. You +can use the "g~{motion}" or "{Visual}~" commands to switch the case of a +block of text. + +For more information, read + + :help case + + +12.30. How do I enter ASCII characters that are not present in the + keyboard? + +You can enter ASCII characters that are not present in the keyboard by +pressing CTRL-V and then the ASCII character number. You can also use +digraphs to enter special ASCII characters. + +For more information, read + + :help i_CTRL-V_digit + :help digraphs + :help 45.5 + + +12.31. How do I replace non-printable characters in a file? + +To replace a non-printable character, you have to first determine the ASCII +value for the character. You can use the ":ascii" ex command or the "ga" +normal-mode command to display the ASCII value of the character under the +cursor. + +You can enter the non-printable character by entering CTRL-V followed by +the decimal number 1-255 (with no leading zero), or by x and a hex number +00-FF, or by an octal number 0-0377 (with leading zero), or by u and a hex +number 0-FFFF, or by U and a hex number 0-7FFFFFFF + +Another alternative is to use the ":digraphs" ex command to display the +digraphs for all characters, together with their value in decimal and +alpha. You can enter a non-printable character by entering CTRL-K followed +by two alphanumeric characters (a digraph). + +For more information, read + + :help :ascii + :help i_CTRL-V + :help i_CTRL-V_digit + :help :digraphs + + +12.32. How do I remove duplicate lines from a buffer? + +You can use the following user-defined command to remove all the duplicate +lines from a buffer: + +:command -range=% Uniq <line1>,<line2>g/^\%<<line2>l\(.*\)\n\1$/d + +Add the above command to your .vimrc file and invoke ":Uniq" to remove all +the duplicate lines. + + +12.33. How do I prefix all the lines in a file with the corresponding line + numbers? + +You can prefix the lines with the corresponding line number in several +ways. Some of them are listed below: + + :%s/^/\=line('.'). ' ' + :%s/^/\=strpart(line(".")." ", 0, 5) + :g/^/exec "s/^/".strpart(line(".")." ", 0, 4) + +For more information, read + + :help sub-replace-special + :help line() + :help expr6 + :help strpart() + :help :execute + :help :global + + +12.34. How do I exchange (swap) two characters or words or lines? + +You can exchange two characters with the "xp" command sequence. The 'x' +will delete the character under the cursor and 'p' will paste the just +deleted character after the character under the cursor. This will result +in exchanging the two characters. + +You can exchange two words with the "deep" command sequence (start with the +cursor in the blank space before the first word). + +You can exchange two lines with the "ddp" command sequence. The 'dd' will +delete the current line and 'p' will paste the just deleted line after the +current line. This will result in exchanging the two lines. + +All of the above operations will change the " unnamed register. + +You can use the ":m +" ex command to exchange two lines without changing the +unnamed register. + +For more information, read + + :help x + :help p + :help dd + :help d + :help e + :help linewise-register + :help quotequote + :help :move + + +12.35. How do I change the characters used as word delimiters? + +Vim uses the characters specified by the 'iskeyword' option as word +delimitiers. The default setting for this option is "@,48-57,_,192-255". + +For example, to add ':' as a word delimitier, you can use + + :set iskeyword+=: + +To remove '_' as a word delimitier, you can use + + :set iskeyword-=_ + +For more information, read + + :help 'iskeyword' + :help word + + +============================================================================= + +SECTION 13 - COMPLETION IN INSERT MODE + + +13.1. How do I complete words or lines in insert mode? + +In insert mode, you can complete words using the CTRL-P and CTRL-N keys. +The CTRL-N command searches forward for the next matching keyword. +The CTRL-P command searches backwards for the next matching keyword. + +In insert mode, you can use the CTRL-X CTRL-L command sequence to complete +lines that starts with the same characters as in the current line before +the cursor. To get the next matching line, press the CTRL-P or CTRL-N keys. +There are a lot of other keys/ways available to complete words in insert +mode. + +Vim supports completion of the following items: + + CTRL-X CTRL-F file names + CTRL-X CTRL-L whole lines + CTRL-X CTRL-D macro definitions (also in included files) + CTRL-X CTRL-I current and included files + CTRL-X CTRL-K words from a dictionary + CTRL-X CTRL-T words from a thesaurus + CTRL-X CTRL-] tags + CTRL-X CTRL-V Vim command line + +For more information, read + + :help 24.3 + :help ins-completion + + +13.2. How do I complete file names in insert mode? + +In insert mode, you can use the CTRL-X CTRL-F command sequence to complete +filenames that start with the same characters as in the current line before +the cursor. + +For more information, read + + :help compl-filename + + +13.3. I am using CTRL-P/CTRL-N to complete words in insert mode. How do I + complete words that occur after the just completed word? + +You can use CTRL-X CTRL-N and CTRL-X CTRL-P keys to complete words that are +present after the just completed word. + +For more information, read + + :help i_CTRL-X_CTRL-P + :help i_CTRL-X_CTRL-N + :help ins-completion + + +============================================================================= + +SECTION 14 - TEXT FORMATTING + + +14.1. How do I format a text paragraph so that a new line is inserted at + the end of each wrapped line? + +You can use the 'gq' command to format a paragraph. This will format the +text according to the current 'textwidth' setting. + +Note that the gq operator can be used with a motion command to operate on a +range of text. For example: + + gqgq - Format the current line + gqap - Format current paragraph + gq3j - Format the current and the next 3 lines + +For more information, read + + :help gq + :help formatting + :help usr_25.txt + :help motion.txt + + +14.2. How do I format long lines in a file so that each line contains less + than 'n' characters? + +You can set the 'textwidth' option to control the number of characters that +can be present in a line. For example, to set the maximum width of a line +to 70 characters, you can use the following command: + + set textwidth=70 + +Now to break the long lines in a file to the length defined by the +'textwidth' option, you can use + + :g/./normal gqq + +For more information, read + + :help 'textwidth' + :help gq + + +14.3. How do I join short lines to form a paragraph? + +First, make sure the 'textwidth' option is set to a high value: + + :set textwidth=99999 + +Next, join the short lines to form a paragraph using the command: + + 1GgqG + +The above command will operate on the entire file. To do the formatting on +all paragraphs in a specific range, use: + + :'a,'bg/\S/normal gq} + +For more information, read + + :help gq + :help G + :help gqq + + +14.4. How do I format bulleted and numbered lists? + +You can configure Vim to format bulleted and numbered lists using the +'formatoptions' option. For example, you can format the list of the +following format: + + - this is a test. this is a test. this is a test. this is a test. + this is a test. + +into this format: + + - this is a test. this is a test. this is a test. this is a test. + this is a test. + +You can use the 'n' flag in the 'formatoptions' to align the text. + + :set fo+=n + +With this option, when formatting text, Vim will recognize numbered lists. +For this option to work, the 'autoindent' option also must be set. + +For more information, read + + :help 'formatoptions' + :help fo-table + :help format-comments + + +14.5. How do I indent lines in insert mode? + +In insert mode, you can press the CTRL-T key to insert one shiftwidth of +indent at the start of the current line. In insert mode, you can use the +CTRL-D key to delete on shiftwidth of indent at the start of the current +line. You can also use the CTRL-O >> and CTRL-O << commands to indent the +current line in insert mode. + +For more information, read + + :help i_CTRL-T + :help i_CTRL-D + :help i_0_CTRL-D + :help i_CTRL-O + :help >> + :help << + + +14.6. How do I format/indent an entire file? + +You can format/indent an entire file using the gg=G command, where + + gg - Goto the beginning of the file + = - apply indentation + G - till end of file + +For more information, read + + :help gg + :help = + :help G + :help 'formatprg' + :help C-indenting + + +14.7. How do I increase or decrease the indentation of the current line? + +You can use the '>>' and '<<' commands to increase or decrease the +indentation of the current line. + +For more information, read + + :help shift-left-right + :help >> + :help << + :help 'shiftwidth' + + +14.8. How do I indent a block/group of lines? + +You can visually select the group of lines and press the > or < key to +indent/unindent the lines. You can also use the following ex-command to +indent the lines + + :10,20> + +For more information, read + + :help shift-left-right + :help v_> + :help v_< + :help :< + :help :> + + +14.9. When I indent lines using the > or < key, the standard 8-tabstops are + used instead of the current 'tabstop' setting. Why? + +The number of spaces used when lines are indented using the ">" operator is +controlled by the 'shiftwidth' option. The 'tabstop' setting is not used +for indentation. To change the amount of spaces used for indentation, use +the command: + + :set shiftwidth=4 + +For more information, read + + :help 'shiftwidth' + :help >> + :help 'softtabstop' + + +14.10. How do I turn off the automatic indentation of text? + +By default, the automatic indentation of text is not turned on. Check the +configuration files (.vimrc, .gvimrc) for settings related to indentation. +Make sure the ":filetype indent on" command is not present. If it is +present, remove it. Also, depending on your preference, you may also want +to check the value of the 'autoindent', 'smartindent', 'cindent' and +'indentexpr' options and turn them off as needed. + +For more information, read + + :help :filetype-indent-off + :help 'autoindent' + :help 'smartindent' + :help 'cindent' + :help 'indentexpr' + + +14.11. How do I configure Vim to automatically set the 'textwidth' option + to a particular value when I edit mails? + +You can use the 'FileType' autocommand to set the 'textwidth' option: + + autocmd FileType mail set tw=<your_value> + +For more information, read + + :help :autocmd + :help FileType + :help usr_43.txt + + +14.12. Is there a way to make Vim auto-magically break lines? + +Yes. Set the 'textwidth' option to the preferred length for a line. Then +Vim will auto-magically break the newly entered lines. For example: + + :set textwidth=75 + +For more information, read + + :help 'textwidth' + :help ins-textwidth + :help 'formatoptions' + :help fo-table + :help formatting + + +14.13. I am seeing a lot of ^M symbols in my file. I tried setting the + 'fileformat' option to 'dos' and then 'unix' and then 'mac'. None of + these helped. How can I hide these symbols? + +When a file is loaded in Vim, the format of the file is determined as +below: + +- If all the lines end with a new line (<NL>), then the fileformat is + 'unix'. +- If all the lines end with a carriage return (<CR>) followed by a new line + (<NL>), then the fileformat is 'dos'. +- If all the lines end with carriage return (<CR>), then the fileformat is + 'mac'. + +If the file has some lines ending with <CR> and some lines ending with <CR> +followed by a <NL>, then the fileformat is set to 'unix'. + +You can change the format of the current file, by modifying the +'fileformat' option and then saving the file: + + :set fileformat=dos + :w + +To display the format of the current file, use + + :set fileformat? + +The above behavior is also controlled by the 'fileformats' option. You can +try the following commands: + + :set fileformats+=unix + :e <your_file> + :set fileformat=unix + :w + +To remove the carriage return (<CR>) character at the end of all the lines +in the current file, you can use the following command: + + :%s/\r$// + +To force Vim to use a particular file format, when editing a file, you can +use the following command: + + :e ++ff=dos filename + +For more information, read + + :help 'fileformats' + :help 'fileformat' + :help file-formats + :help DOS-format-write + :help Unix-format-write + :help Mac-format-write + :help dos-file-formats + :help 23.1 + :help ++ff + + +14.14. When I paste some text into a Vim buffer from another application, + the alignment (indentation) of the new text is messed up. How do I + fix this? + +The indentation of the text is messed up due to various Vim settings +related to indentation (like autoindent, smartindent, textwidth etc). +Before pasting text into Vim, you can set the 'paste' option: + + :set paste + +After pasting the text, you can turn off the option using: + + :set nopaste + +You can also toggle the paste option using: + + :set paste! + +If you can access the clipboard through the * register, then you can paste +the text without indentation using CTRL-R CTRL-O *. + +For more information, read + + :help 'paste' + :help 'pastetoggle' + :help i_CTRL-R_CTRL_O + :help clipboard + :help xterm-clipboard + :help gui-clipboard + + +14.15. When there is a very long wrapped line (wrap is "on") and a line + doesn't fit entirely on the screen it is not displayed at all. There + are blank lines beginning with '@' symbol instead of wrapped line. If + I scroll the screen to fit the line the '@' symbols disappear and the + line is displayed again. What Vim setting control this behavior? + +You can set the 'display' option to 'lastline' to display as much as +possible of the last line in a window instead of displaying the '@' +symbols. + + :set display=lastline + +For more information, read + + :help 'display' + + +14.16. How do I convert all the tab characters in a file to space + characters? + +You can use the ":retab" command to update all the tab characters in the +current file with the current setting of 'expandtab' and 'tabstop'. For +example, to convert all the tabs to white spaces, use + + :set expandtab + :retab + +For more information, read + + :help :retab + :help 'expandtab' + :help 'tabstop' + :help 25.3 + + +14.17. What Vim options can I use to edit text that will later go to a word + processor? + +You can set the following options to edit text that will later go into a +word processor: + + :set wrap + :set linebreak + :set textwidth=0 + :set showbreak=>>> + +You can use the 'gk' and 'gj' commands to move one screen line up and down. +For more information, read + + :help 'wrap' + :help 'linebreak' + :help 'textwidth' + :help 'showbreak' + :help gk + :help gj + + +14.18. How do I join lines without adding or removing any space characters? + +By default, when you join lines using the "J" or ":join" command, Vim will +replace the line break, leading white space and trailing white space with a +single space character. If there are space characters at the end of a line +or a line starts with the ')' character, then Vim will not add a space +character. + +To join lines without adding or removing any space characters, you can use +the gJ or ":join!" commands. + +For more information, read + + :help gJ + :help :join + :help J + :hep 10.5 + :help 'joinspaces' + :help 'cpoptions' + :help 'formatoptions' + + +============================================================================= + +SECTION 15 - VISUAL MODE + + +15.1. How do I do rectangular block copying? + +You can do rectangular block copying in Vim using the blockwise visual +mode. To start blockwise visual mode use the CTRL-V key. Move the cursor +using any of the motion commands and then use the y operator to yank to +visually selected text. + +If CTRL-V does not work as expected, it may have been remapped to CTRL-Q by +the mswin.vim script which is often sourced by a vimrc on Windows machines +to mimic some common short cuts from other programs. + +For more information, read + + :help 04.4 + :help blockwise-visual + :help visual-mode + :help Q_vi + + +15.2. How do I delete or change a column of text in a file? + +You can use the Vim block-wise visual mode to select the column of text and +apply an operator (delete, change, copy, etc) on it. + +For more information, read + + :help visual-block + :help visual-operators + + +15.3. How do I apply an ex-command on a set of visually selected lines? + +When you select a range of lines in visual mode, the < register is set to +the start of the visual region and the > register is set to the end of the +visual region. You can use these registers to specify the range for an ex +command. After visually selecting the lines, press ":" to go to the command +mode. Vim will automatically insert the visual range '<,'>. You can run +any ex-command on the visual range. + +For more information, read + + :help v_: + :help '< + :help '> + + +15.4. How do I execute an ex command on a column of text selected in Visual + block mode? + +All the ex commands operate on whole lines only. If you try to execute an +ex command on a column of text selected in visual block mode, Vim will +operate on all the selected lines (instead of the selected columns). You +can use the vis.vim plugin script from http://vim.sourceforge.net scripts +archive to do this. + +For more information, read + + :help cmdline-ranges + :help 10.3 + :help cmdline-lines + + +15.5. How do I select the entire file in visual mode? + +You can select the entire file in visual mode using ggVG. + + gg - go to the beginning of the file. + V - Start linewise visual mode + G - goto the end of the file. + +For more information, read + + :help gg + :help linewise-visual + :help G + + +15.6. When I visually select a set of lines and press the > key to indent + the selected lines, the visual mode ends. How can I reselect the + region for further operation? (or) How do I re-select the last + selected visual area again? + +You can use the 'gv' command to reselect the last selected visual area. You +can also use the marks '< and '> to jump to the beginning or the end of the +last selected visual area. + +For more information, read + + :help gv + :help '< + :help '> + + +15.7. How do I jump to the beginning/end of a visually selected region? + +You can use the 'o' command to jump to the beginning/end of a visually +selected region. + +For more information, read + + :help v_o + + +15.8. When I select text with mouse and then press : to enter an ex + command, the selected text is replaced with the : character. How do I + execute an ex command on a text selected using the mouse similar to + the text selected using the visual mode? + +This will happen if you have configured Vim to use select mode instead of +Visual mode by setting the 'selectmode' option. Check the value of this +option: + + :set selectmode? + +This mode is known as selectmode and is similar to the visual mode. This +option is also automatically set when you use the "behave mswin" command. +Select mode looks like visual mode, but it is similar to the selection mode +in MS-Windows. + +For more information, read + + :help Select-mode + :help 'selectmode' + :help 9.4 + :help :behave + + +15.9. When I select a block of text using the mouse, Vim goes into + selection mode instead of Visual mode. Why? + +The 'selectmode' option controls whether Select mode will be started when +selecting a block of text using the mouse. To start Visual mode when +selecting text using mouse, remove the 'mouse' value from the 'selectmode' +option: + + :set selectmode-=mouse + +Note that by default, the 'selectmode' option will be set to empty, so that +always visual mode is used. + +For more information, read + + :help 'selectmode' + :help Select-mode + :help :behave + + +15.10. How do I visually select the last copy/pasted text? + +You can use the '[ and '] marks to visually select the last copy/pasted +text. The '[ mark is set to the beginning of the last changed/yanked text +and the '] mark is set to the end of the last changed/yanked text. To +visually select this block of text use the command '[v'] + +For more information, read + + :help '[ + :help '] + :help `a + :help v + + +============================================================================= + +SECTION 16 - COMMAND-LINE MODE + + +16.1. How do I use the name of the current file in the command mode or an + ex command line? + +In the command line, the '%' character represents the name of the current +file. In some commands, you have to use expand("%") to get the filename: + + :!perl % + +For more information, read + + :help :_% + :help cmdline-special + :help expand() + + +16.2. How do I edit the text in the Vim command-line effectively? + +You can use the command-line window for editing Vim command-line text. To +open the Vim command-line window use the "q:" command in normal mode. In +command-line mode, use the CTRL-F key. In this window, the command line +history will be displayed. You can use normal Vim keys/commands to edit any +previous/new command line. To execute a command line, press the +enter/return key. + +In a similar vain, the search history can be edited with "q/" and "q?" +commands. + +For more information, read + + :help cmdline-window + + +16.3. How do I switch from Vi mode to Ex mode? + +You can use the Q command to switch from Vi mode to Ex mode. To switch from +Ex mode back to the Vi mode, use the :vi command. + +For more information, read + + :help Q + :help gQ + :help Ex-mode + :help :vi + + +16.4. How do I copy the output from an ex-command into a buffer? + +To copy the output from an ex-command into a buffer, you have to first get +the command output into a register. You can use the ":redir" command to get +the output into a register. For example, + + :redir @a + :g/HelloWord/p + :redir END + +Now the register 'a' will contain the output from the ex command +"g/HelloWord/p". Now you can paste the contents of the register 'a' into a +buffer. You can also send or append the output of an ex-command into a file +using the 'redir' command. + +You can prefix the ":global" command with ":silent", to avoid having the +lines printed to the screen. + +To redirect the output from an ex-command to a file, you can use the +following set of commands: + + :redir > myfile + :g/HelloWord/p + :redir END + +For more information, read + + :help :redir + :help :silent + + +16.5. When I press the tab key to complete the name of a file in the + command mode, if there are more than one matching file names, then + Vim completes the first matching file name and displays a list of all + matching filenames. How do I configure Vim to only display the list + of all the matching filenames and not complete the first one? + +You can modify the 'wildmode' option to configure the way Vim completes +filenames in the command mode. In this case, you can set the 'wildmode' +option to 'list': + + :set wildmode=list + +For more information, read + + :help 'wildmode' + + +16.6. How do I copy text from a buffer to the command line and from the + command line to a buffer? + +To copy text from a buffer to the command line, after yanking the text from +the buffer, use Ctrl-R 0 in the command line to paste the text. You can +also yank the text to a specific register and use CTRL-R <register> to +paste the text to the command line. You can use CTRL-R CTRL-W to paste the +word under the cursor in the command line. + +To copy text from the command line into a buffer, you can paste the +contents of the : register using the ":p command. The most recently +executed command line is stored in the : register. + +Another approach for copying and pasting text to and from the command line +is to open the command line window using q: from normal mode or CTRL-F from +the command-line mode. In the command line window you can use all the Vim +commands to edit the command line. + +For more information, read + + :help c_CTRL-R + :help quote_: + :help cmdline-window + + +16.7. How do I put a command onto the command history without executing it? + +To put a command onto the command history without executing it, press the +<Esc> key to cancel the command. + +For more information, read + + :help c_<Esc> + + +16.8. How do I increase the height of the command-line? + +You can increase the height of the command-line by changing the 'cmdheight' +option: + + :set cmdheight=2 + +For more information, read + + :help 'cmdheight' + :help hit-enter + :help 05.7 + + +============================================================================= + +SECTION 17 - VIMINFO + + +17.1. When I invoke Vim, I get error messages about illegal characters in + the viminfo file. What should I do to get rid of these messages? + +You can remove the $HOME/.viminfo or the $HOME/_viminfo file to get rid of +these error messages. + +For more information, read + + :help viminfo-errors + :help viminfo-file-name + :help viminfo + :help 21.3 + + +17.2. How do I disable the viminfo feature? + +By default, the viminfo feature is disabled. If the viminfo feature is +enabled by a system-wide vimrc file, then you can disable the viminfo +feature by setting the 'viminfo' option to an empty string in your local +.vimrc file: + + :set viminfo="" + +For more information, read + + :help 'viminfo' + + +17.3. How do I save and use Vim marks across Vim sessions? + +You can save and restore Vim marks across Vim sessions using the viminfo +file. To use the viminfo file, make sure the 'viminfo' option is not empty. +To save and restore Vim marks, the 'viminfo' option should not contain the +'f' flag or should have a value greater than zero for the 'f' option. + +For more information, read + + :help 21.3 + :help viminfo + :help 'viminfo' + :help :wviminfo + :help :rviminfo + + +============================================================================= + +SECTION 18 - REMOTE EDITING + + +18.1. How do I open a file with existing instance of gvim? What happened to + the Vim 5.x OpenWithVim.exe and SendToVim.exe files? + +Starting with Vim6, the OLE version of OpenWithVim.exe and SendToVim.exe +Vim utilities are replaced by the new client-server feature. To open the +file j.txt with an existing instance of Gvim (MyVim), use: + + $ gvim --servername MyVim --remote-silent j.txt + +To list the server names of all the currently running Vim instances, use + + $ vim --serverlist + +To get more information about client-server feature, read + + :help client-server + + +18.2. How do I send a command to a Vim server to write all buffers to disk? + +You can use the Vim remote server functionality to do this: + + $ gvim --servername myVIM --remote-send "<C-\><C-N>:wall<CR>" + +For more information, read + + :help client-server + :help CTRL-\_CTRL-N + :help :wall + + +18.3. Where can I get the documentation about the Vim remote server + functionality? + +You can get more information about the Vim remote server functionality by +reading + + :help client-server + + +============================================================================= + +SECTION 19 - OPTIONS + + +19.1. How do I configure Vim in a simple way? + +You can use the ":options" command to open the Vim option window: + + :options + +This window can be used for viewing and setting all the options. + +For more information, read + + :help :options + + +19.2. How do I toggle the value of an option? + +You can prefix the option with "inv" to toggle the value of the option: + + :set invignorecase + :set invhlsearch + +You can also suffix the option with "!" to toggle the value: + + :set ignorecase! + :set hlsearch! + +For more information, read + + :help set-option + + +19.3. How do I set an option that affects only the current buffer/window? + +Some of the Vim options can have a local or global value. A local value +applies only to a specific buffer or window. A global value applies to all +the buffers or windows. + +When a Vim option is modified using the ":set" command, both the global and +local values for the option are changed. You can use the ":setlocal" +command to modify only the local value for the option and the ":setglobal" +command to modify only the global value. + +You can use the ":setlocal" command to set an option that will affect only +the current file/buffer: + + :setlocal textwidth=70 + +Note that not all options can have a local value. You can use ":setlocal" +command to set an option locally to a buffer/window only if the option is +allowed to have a local value. + +You can also use the following command to set a option locally: + + :let &l:{option-name} = <value> + +For more information, read + + :help :setlocal + :help local-options + + +19.4. How do I use space characters for a Vim option value? + +To use space characters in a Vim option value, you have to escape the space +character. For example: + + :set tags=tags\ /usr/tags + +For more information, read + + :help option-backslash + + +19.5. Can I add (embed) Vim option settings to the contents of a file? + +You can use modelines to add Vim option settings to the contents of a file. +For example, in a C file, you can add the following line to the top or the +bottom of the file: + + /* vim:sw=4: */ + +This will set the 'shiftwidth' option to 4, when editing that C file. +For this to work, the 'modeline' option should be set. By default, the +'modeline' option is not set, for security reasons, in Debian. The +'modelines' settings specifies the number of lines that will be checked for +the Vim set commands. + +For more information, read + + :help 21.6 + :help modeline + :help auto-setting + :help 'modeline' + :help 'modelines' + + +19.6. How do I display the line numbers of all the lines in a file? + +You can set the 'number' option to display the line numbers for all the +lines. + + :set number + +For more information, read + + :help 'number' + + +19.7. How do I change the width of the line numbers displayed using the + "number" option? + +The width used for displaying the line numbers for the 'number' option is +hard-coded in Vim. It is not possible to change this width by setting some +option. + +The request and the patch to add an option to change the number of columns +used for the 'number' option is in the Vim todo list: + + "Add an option to set the width of the 'number' column. Eight + positions is often more than needed. Or adjust the width to the length + of the file? + Add patch that adds 'numberlen' option. (James Harvey) + Other patch with min and max from Emmanuel Renieris (2002 Jul 24) + Other patch without an option by Gilles Roy (2002 Jul 25)" + + +19.8. How do I display (view) all the invisible characters like space, tabs + and newlines in a file? + +You can set the 'list' option to see all the invisible characters in your +file. + + :set list + +With this option set, you can view space characters, tabs, newlines, +trailing space characters and wrapped lines. + +To not display the invisible characters (which is the default), you have to +reset the 'list' option: + + :set nolist + (or) + :set list! + +The ":set list!" command will toggle the current setting of the boolean +'list' option. + +You can modify the 'listchars' option to configure how and which invisible +characters are displayed. For example, with the following command all the +trailing space characters will be displayed with a '.' character. + + :set listchars=trail:. + +For more information, read + + :help 'listchars' + :help 'list' + + +19.9. How do I configure Vim to always display the current line and column + number? + +You can set the 'ruler' option to display current column and line number in +the status line: + + :set ruler + +For more information, read + + :help 'ruler' + + +19.10. How do I display the current Vim mode? + +You can set the 'showmode' option to display the current Vim mode. In +Insert, Replace and Visual modes, Vim will display the current mode on the +last line. + + :set showmode + +For more information, read + + :help 'showmode' + + +19.11. How do I configure Vim to show pending/partial commands on the + status line? + +You can set the 'showcmd' option to display pending/partial commands in the +status line: + + :set showcmd + +For more information, read + + :help 'showcmd' + + +19.12. How do I configure the Vim status line to display different + settings/values? + +You can set the 'statusline' option to display different values/settings in +the Vim status line. + +For more information, read + + :help 'statusline' + :help 'laststatus' + :help 'rulerformat' + :help 'ruler' + + +19.13. How do I configure Vim to display status line always? + +You can set the 'laststatus' option to 2 to display the status line always. + + :set laststatus=2 + +For more information, read + + :help 'laststatus' + + +19.14. How do I make a Vim setting persistent across different Vim + invocations/instances/sessions? + +To make a Vim option setting persistent across different Vim instances, add +your setting to the .vimrc or .gvimrc file. You can also use the ":mkvimrc" +command to generate a vimrc file for the current settings. + +For more information, read + + :help save-settings + :help vimrc + :help gvimrc + :help vimrc-intro + :help :mkvimrc + :help initialization + + +19.15. Why do I hear a beep (why does my window flash) about 1 second after + I hit the Escape key? + +This is normal behavior. If your window flashes, then you've got the visual +bell on. Otherwise, you should hear a beep. + +Vim needs a timeout to tell the difference between a simple escape and, +say, a cursor key sequence. When you press a key in normal mode (and even +in insert mode) and that key is the beginning of a mapping, Vim waits a +certain amount of time to see if the rest of the mapping sequence follows. +If the mapping sequence is completed before a given timeout period, the +mapping for that sequence of keys is applied. If you interrupt the mapping, +the normal actions associated with the keys are executed. + +For example, if you have a mapping defined as ":imap vvv Vim is great!!" +and you type "vvv" quickly, the "Vim is great!!" will be inserted into your +text. But if you type "vv v" then that is what will put into your text. +This is also true if you type "vvv" too slowly where "too slowly" is longer +than the value for the timeout option. Setting the timeout option to a +larger value can help alleviate problems that appear when using function +keys over a slow line. + +For more information, read + + :help ttimeout + + +19.16. How do I make the 'c' and 's' commands display a '$' instead of + deleting the characters I'm changing? + +To make the 'c' and 's' commands display a '$' instead of deleting the +characters, add the $ flag to the 'cpoptions' option: + + :set cpoptions+=$ + +For more information, read + + :help 'cpoptions' + + +19.17. How do I remove more than one flag using a single ":set" command + from a Vim option? + +You can remove more than one flag from a Vim option using a single ":set" +command, by specifying the flags in exactly the same order as they appear +in the option. For example, if you use the following command to remove the +'t' and 'n' flags from the 'formatoptions' option: + + :set formatoptions-=tn + +The 't' and 'n' flags will be removed from the 'formatoptions' option, only +if the 'formatoptions' option contains these flags in this order: 'tn'. +Otherwise, it will not remove the flags. To avoid this problem, you can +remove the flags one by one: + + :set formatoptions-=t formatoptions-=n + +For more information, read + + :help :set-= + + +============================================================================= + +SECTION 20 - MAPPING KEYS + + +20.1. How do I know what a key is mapped to? + +To see what a key is mapped to, use the following commands: + + :map <key> + :map! <key> + +You can also check the mappings in a particular mode using one of the +":cmap", ":nmap", ":vmap", ":imap", ":omap", etc commands. + +For more information, read + + :help map-listing + :help map-overview + + +20.2. How do list all the user-defined key mappings? + +You can list all the user-defined key mappings using: + + :map + +For more information, read + + :help map-listing + + +20.3. How do I unmap a previously mapped key? + +You can unmap a previously mapped key using the ":unmap" command: + + :unmap <key> + :unmap! <key> + +For mode specific mappings, you can use one of the +":nunmap/:vunmap/:ounmap/:iunmap/:lunmap/:cunmap" commands. + +The following command will fail to unmap a buffer-local mapped key: + + :unmap <key> + +To unmap a buffer-local mapped key, you have to use the <buffer> keyword in +the unmap command: + + :unmap <buffer> <key> + :unmap! <buffer> <key> + +For more information, read + + :help :unmap + :help map-modes + :help map-local + :help 'mapleader' + + +20.4. I am not able to create a mapping for the <xxx> key. What is wrong? + +First make sure that the key is passed to Vim. In insert mode, press CTRL-V +followed by the desired key. You should see the keycode corresponding to +the key . If you do see the keycode, then you can create a mapping for the +key using the following command: + + :map <C-V><xxx> <your_command_to_be_mapped> + +For more information, read + + :help map-keys-fails + :help :map-special-keys + :help key-codes + + +20.5. How do I map the numeric keypad keys? + +First make sure that the numeric keypad keys are passed to Vim. Next, you +can use the following command to map the numeric keypad keys: + + :map <kSomething> <your_command> + +where, <kSomething> can be kHome, kEnd, kPageUp, kPageDown, kPlus, kMinus, +kDivide, kMultiply, kEnter, etc. + +For more information, read + + :help key-codes + :help terminal-options + + +20.6. How do I create a mapping that works only in visual mode? + +You can create mappings that work only in specific mode (normal, command, +insert, visual, etc). To create a mapping that works only in the visual +mode, use the ":vmap" command: + + :vmap <F3> <your mapping here> + +For more information, read + + :help :vmap + :help map-modes + :help 40.1 + + +20.7. In a Vim script, how do I know which keys to use for my mappings, so + that the mapped key will not collide with an already used key? + +Vim uses most of the keys in the keyboard. You can use the <leader> prefix +in maps to define keys which will not overlap with Vim keys. For example: + + :map <leader>S <C-W>s + :map <leader>j <C-W>j + :map <leader>k <C-W>k + +where by default <leader> gets substituted with a backslash (\), so the +user would enter + + \s + \j + \k + +to invoke the above map commands. The user can change the mapleader +variable to be whatever they wanted: + + :let mapleader = "," + +When writing a plugin or other script, more often than not, it is advisable +to use :noremap instead of :map to avoid side effects from user defined +mappings. + +For more information, read + + :help <Leader> + :help <LocalLeader> + :help write-plugin + + +20.8. How do I map the escape key? + +You can map the Escape key to some other key using the ":map" command. For +example, the following command maps the escape key to CTRL-O. + + :map <C-O> <Esc> + + +20.9. How do I map a key to perform nothing? + +You can map a key to <Nop> to perform nothing when the key is pressed. For +example, with the following mappings, the <F7> key will do nothing when +pressed. + + :map <F7> <Nop> + :map! <F7> <Nop> + +For more information, read + + :help <Nop> + :help :map + :help :map! + :help map-modes + + +20.10. I want to use the Tab key to indent a block of text and Shift-Tab + key to unindent a block of text. How do I map the keys to do this? + This behavior is similar to textpad, visual studio, etc. + +Use the following mapping: + + :inoremap <S-Tab> <C-O><LT><LT> + :nnoremap <Tab> >> + :nnoremap <S-Tab> <LT><LT> + :vnoremap <Tab> > + :vnoremap <S-Tab> <LT> + +Note that, the <S-Tab> mapping will work only if Vim receives the correct +key sequence. This is mostly the case with GUI Vim. + +For more information, read + + :help :inoremap + :help :nnoremap + :help :vnoremap + :help <S-Tab> + :help i_CTRL-O + :help >> + :help << + :help <LT> + + +20.11. In my mappings the special characters like <CR> are not recognized. + How can I configure Vim to recognize special characters? + +Check the value of the 'cpoptions' option: + + :set cpoptions? + +If this option contains the '<' flag, then special characters will not be +recognized in mappings. Remove the '<' flag from 'cpoptions' option: + + :set cpo-=< + +Also, check the value of the 'compatible' option: + + :se compatible? + +The 'compatible' option must be reset: + + :se nocompatible + +For more information, read + + :help 'cpoptions' + :help 'compatible' + + +20.12. How do I use the '|' to separate multiple commands in a map? + +You can escape the '|' character using backslash (\) to use '|' in a map. + + :map _l :!ls \| more<CR> + +You can also try the following command: + + :map _l :!ls <bar> more<CR> + +There are also other ways to do this. + +For more information, read + + :help map_bar + + +20.13. If I have a mapping/abbreviation whose ending is the beginning of + another mapping/abbreviation, how do I keep the first from expanding + into the second one? + +Instead of using the ":map lhs rhs" command, use the ":noremap lhs rhs" +command. For abbreviations, use "noreabbrev lhs rhs". The "nore" prefix +prevents the mapping or abbreviation from being expanded again. + +For more information, read + + :help :noremap + :help :noreabbrev + + +20.14. Why does it take a second or more for Vim to process a key, + sometimes when I press a key? + +Make sure you have not defined a mapping for this key using the following +command: + + :map <key> + +If a mapping is defined for this key and the mapped key contains more than +one character, then Vim will wait for the next character to be pressed to +determine whether it is the mapped key or not. For example, if you have +mapped "ab", then if you press "a", Vim will wait for the next key to be +pressed. If the next key is "b", Vim will execute the mapped sequence. +Otherwise, Vim will proceed with the normal processing of "a" followed by +the next key. If the 'timeout' option is set (which is the default), then +Vim will timeout after waiting for the period specified with the +'timeoutlen' option (default is 1 second). + +For more information, read + + :help map-typing + :help 'timeoutlen' + :help 'ttimeoutlen' + :help 'timeout' + :help 'ttimeout' + :help vt100-cursor-keys + :help slow-fast-terminal + + +20.15. How do I map a key to run an external command using a visually + selected text? + +You can the ":vmap" command to map a key in the visual mode. In the mapped +command sequence, you have to first yank the text. The yanked text is +available in the '"' register. Now, you can use the contents of this +register to run the external command. For example, to run the external +command "perldoc" on a visually selected text, you can use the following +mapping: + + :vmap <F7> y:!exec "!perldoc '" . @" . "'"<CR> + +If you want the mapping to work in the visual mode, but not with the +highlighted text, you can use the following command: + + :vmap <F7> :<C-U>!perldoc <cword><CR> + +The above mapping will use the word under the cursor instead of the +highlighted text. Note the use of the <C-U> before invoking the "perldoc" +external command. The <C-U> is used to erase the range of text selected in +the visual mode and displayed on the command line. If the visual range is +not removed using <C-U>, then the output from the external command will +replace the visually selected text. + +For more information, read + + :help :vmap + :help quote_quote + :help let-register + :help c_CTRL-U + :help :!cmd + + +20.16. How do I map the Ctrl-I key while still retaining the functionality + of the <Tab> key? + +The Ctrl-I key and the <Tab> key produce the same keycode, so Vim cannot +distinguish between the Ctrl-I and the <Tab> key. When you map the Ctrl-I +key, the <Tab> key is also mapped (and vice versa). The same restriction +applies for the Ctrl-[ key and the <Esc> key. + +For more information, read + + :help keycodes + + +============================================================================= + +SECTION 21 - ABBREVIATIONS + + +21.1. How do I auto correct misspelled words? + +You can auto correct misspelled words using abbreviations. For example, the +following abbreviation can be used to correct "teh" with "the": + + :abbreviate teh the + +Vim supports abbreviations in insert mode, replace mode and command-line +mode. + +For more information, read + + :help 24.7 + :help abbreviations + :help Q_ab + + +21.2. How do I create multi-line abbreviations? + +You can create multi-line abbreviations by embedding the "<CR>" +key code in the text: + + iabbrev #c --------------<CR>-- Date:<CR>--<CR>--------- + +With the above abbreviation, when you type #c, it will be expanded to +the following text: + +-------------- +-- Date: +-- +--------- + +For more information, read + + :help abbreviations + + +21.3. When my abbreviations are expanded, an additional space character is + added at the end of the expanded text. How do I avoid this character? + +To avoid an additional space character at the end of the expanded text, you +can expand the abbreviation by pressing the CTRL-] key. The abbreviation +will be expanded without adding a space character at the end. + +Another alternative is to use the following function and command: + +function! Eatchar(pat) + let c = nr2char(getchar()) + return (c =~ a:pat) ? '' : c +endfunction +command! -nargs=+ Iabbr execute "iabbr" <q-args> . "<C-R>=Eatchar('\\s')<CR>" + +Now, define your abbreviations using the new "Iabbr" command instead of the +builtin "iabbrev" command. With this command, after expanding the +abbreviated text, the next typed space character will be discarded. + +For more information, read + + :help abbreviations + + +21.4. How do I insert the current date/time stamp into the file? + +You can use the strftime() function to insert the current data/time stamp +in a file. For example, you can use the following abbreviation: + + iabbrev dts <C-R>=strftime("%y/%m/%d %H:%M")<CR> + +With this abbreviation, when you type dts in insert mode, it will be +expanded to the date/time stamp. + +Some other forms of the above abbreviation are listed below: + + iabbrev mdyl <C-R>=strftime("%a %d %b %Y")<CR> + iabbrev mdys <C-R>=strftime("%y%m%d")<CR> + iabbrev mdyc <C-R>=strftime("%c")<CR> + iabbrev hml <C-R>=strftime("%d/%m/%y %H:%M:%S")<CR> + iabbrev hms <C-R>=strftime("%H:%M:%S")<CR> + +For more information, read + + :help strftime() + :help i_CTRL-R + + +21.5. How do I prevent an abbreviation from expanding in insert mode? + +You can prevent an abbreviation from expanding in insert mode by typing +CTRL-V before the character after the abrreviated word. + +For more information, read + + :help abbreviations + + +============================================================================= + +SECTION 22 - RECORD AND PLAYBACK + + +22.1. How do I repeat an editing operation (insertion, deletion, paste, + etc)? + +You can repeat the last editing operation using the '.' command. This will +repeat the last simple change like a insert, delete, change, paste, etc. + +For more information, read + + :help 04.3 + :help single-repeat + :help Q_re + + +22.2. How I record and repeat a set of key sequences? + +You can use the 'q' command in normal mode to record a set of key sequences +and store it in a register. For example, in the normal mode you can press q +followed by a register name {0-9a-bA-Z"} to start the recording. To +end/stop the recording press q again. You can playback/repeat the recorded +key sequences by pressing @ followed by the register name. e.g. @a. + +Another approach is to start Vim with the "-w" command-line argument. + + $ vim -w <file_name> + +Vim will record all the characters typed in the session in the +specified file "file_name". You can use the recorded file with the "-s" +command line argument to play it back: + + $ vim -s <file_name> + +For more information, read + + :help 10.1 + :help recording + :help -w + :help -s + + +22.3. How do I edit/modify a recorded set of key sequences? + +The recorded key sequences are stored in a register. You can paste the +contents of the register into a Vim buffer, edit the pasted text and again +yank the text into the register. You can also use the ":let" command to +modify the register. For example: + + :let @a = "iHello World\<Esc>" + +For more information, read + + :help recording + :help 10.1 + :help let-register + :help <> + :help 'cpoptions' + + +22.4. How do I write recorded key sequences to a file? + +The recorded key sequences are stored in a register. You can paste the +contents of the register into a Vim buffer. Now you can save the buffer +into a file. You can also modify the pasted text and again yank into the +register to modify the recorded key sequence. For example, if you record a +set of key sequences using qa ..... q. The recorded key sequences are +stored in the register 'a'. You can paste the contents of register 'a' +using "ap. + +For more information, read + + :help recording + :help 10.1 + + +22.5. I am using register 0 to record my key sequences (i.e. q0 .... q). + In the recorded key sequences, I am yanking some text. After the + first replay of the recorded key sequence, I am no longer able to + play it back. + +Register 0 contains the text from the last yank operation. In your recorded +key sequence, when the yank is performed, register 0 is overwritten with +the yanked text. So your recording stored in register 0 is lost. You have +to use some other register. + +For more information, read + + :help registers + + +============================================================================= + +SECTION 23 - AUTOCOMMANDS + + +23.1. How do I execute a command when I try to modify a read-only file? + +You can use the FileChangedRO autocommand event to execute a command when a +read-only file modified. For example, you can use this event to checkout a +read-only file: + + :autocmd FileChangedRO * call MyCheckoutFunction() + +For more information, read + + :help FileChangedRO + + +23.2. How do I execute a command every time when entering a buffer? + +You can use the BufEnter autocommand event to execute a command every time +when entering a buffer. For example: + + :autocmd BufEnter *.c set formatoptions=croqt + +For more information, read + + :help BufEnter + + +23.3. How do I execute a command every time when entering a window? + +You can use the WinEnter autocommand event to execute a command every time +when entering a window. For example: + + :autocmd WinEnter *.c call MyFunction() + +For more information, read + + :help WinEnter + + +23.4. From an autocmd, how can I determine the name of the file or the + buffer number for which the autocommand is executed? + +You can use the special words <afile> or <abuf> in an autocmd to get the +name of the file or the buffer number for which the autocommand is +executed. + +For more information, read + + :help :<afile> + :help :<abuf> + :help :<amatch> + + +23.5. How do I automatically save all the changed buffers whenever Vim + loses focus? + +You can define an autocommand for the FocusLost event which will save all +the modified buffers whenever Vim loses focus: + + :autocmd FocusLost * wall + +For more information, read + + :help FocusLost + :help :wall + + +23.6. How do I execute/run a function when Vim exits to do some cleanup? + +You can use VimLeave autocmd event to execute a function just before Vim +exists. For example, + + :autocmd VimLeave * call MyCleanupFunction() + +For more information, read + + :help VimLeave + + +============================================================================= + +SECTION 24 - SYNTAX HIGHLIGHT + + +24.1. How do I turn off/on syntax highlighting? + +By default, the Vim syntax highlighting is turned off. To enable the syntax +highlighting, you can use one of the following commands: + + :syntax enable + + or + + :syntax on + +To disable the syntax highlighting, you can use the following command: + + :syntax off + +For more information, read + + :help 06.1 + :help 06.4 + :help :syntax-enable + :help :syntax-on + :help :syn-clear + + +24.2. How do I change the background and foreground colors used by Vim? + +Vim uses the "Normal" highlight group for the background and foreground +colors. To change the foreground/background colors, you have to modify the +"Normal" highlight group. For example, to set the background color to blue +and foreground color to white, you can use + + :highlight Normal ctermbg=blue ctermfg=white guibg=blue guifg=white + +If you are using the Motif or the Athena version of the GUI Vim, then you +can modify the foreground and background resource names in the .Xdefaults +files to change the colors: + + Vim.foreground: Black + Vim.backround: Wheat + +You can also use the "-foreground" and "-background" command-line arguments +to specify the foreground and background colors. These arguments are +supported only in the Motif or Athena versions: + + $ gvim -foreground Black -background Wheat + +For more information, read + + :help :highlight + :help .Xdefaults + :help -gui + + +24.3. How do I change the highlight colors to suit a dark/light background? + +You can set the 'background' option to either 'dark' or 'light' to change +the highlight colors to suit a dark/light background: + + :set background=dark + +For more information, read + + :help 'background' + :help 6.2 + + +24.4. How do I change the color of the line numbers displayed when the + ":set number" command is used? + +The line numbers displayed use the LineNr highlighting group. To display +the current colors used, use + + :hi LineNr + +To change the color modify the LineNr highlight group. For example: + + :hi linenr guifg=red guibg=black + +This will give red numbers on a black background in GVIM. + +For more information, read + + :help :highlight + + +24.5. How do I change the background color used for a Visually selected + block? + +You can modify the 'Visual' highlight group to change the color used for a +visually selected block: + + :highlight Visual guibg=red + +For more information, read + + :help :highlight + :help hl-Visual + + +24.6. How do I highlight the special characters (tabs, trailing spaces, end + of line, etc) displayed by the 'list' option? + +You can modify the "NonText" and "SpecialKey" highlight groups to highlight +the special characters displayed by the 'list' option: + + :highlight NonText guibg=red + :highlight SpecialKey guibg=green + +The "NonText" highlighting group is used for "eol", "extends" and +"precedes" settings in the "listchars" option. The "SpecialKey" +highlighting group is used for the "tab" and "trail" settings. + +For more information, read + + :help 'listchars' + :help hl-NonText + :help hl-SpecialKey + + +24.7. How do I specify a colorscheme in my .vimrc/.gvimrc file, so that Vim + uses the specified colorscheme everytime? + +You can specify the color scheme using the ":colorscheme" command in your +.vimrc or .gvimrc file: + + colorschme evening + +For more information, read + + :help :colorscheme + + +24.8. Vim syntax highlighting is broken. When I am editing a file, some + parts of the file is not syntax highlighted or syntax highlighted + incorrectly. + +Vim doesn't read the whole file to parse the text for syntax highlighting. +It starts parsing wherever you are viewing the file. That saves a lot of +time, but sometimes the colors are wrong. A simple fix is refreshing the +screen using the CTRL-L key. Or scroll back a bit and then forward again. +You can also use the command: + + :syntax sync fromstart + +Note that this might considerably slow down the screen refreshing. + +For more information, read + + :help :syn-sync + :help :syn-sync-first + + +24.9. Is there a built-in function to syntax-highlight the corresponding + matching bracket? + +No. Vim doesn't support syntax-highlighting matching brackets. You can try +using the plugin developed by Charles Campbell: + + http://vim.sourceforge.net/tips/tip.php?tip_id=177 + +You can jump to a matching bracket using the '%' key. You can set the +'showmatch' option to temporarily jump to a matching bracket when in insert +mode. + +For more information, read + + :help % + :help 'showmatch' + :help 'matchtime' + :help 'matchpairs' + + +24.10. How do I turn off the C comment syntax highlighting? + +You can use the following command to turn off C comment syntax +highlighting: + + :highlight clear comment + +For more information, read + + :help c-syntax + + +24.11. How do I add my own syntax extensions to the standard syntax files + supplied with Vim? + +You should not modify the syntax files supplied with Vim to add your +extensions. When you install the next version of Vim, you will lose your +changes. Instead you should create a file under the ~/.vim/after/syntax +directory with the same name as the original syntax file and add your +additions to this file. + +For more information, read + + :help mysyntaxfile-add + :help 'runtimepath' + + +24.12. How do I replace a standard syntax file that comes with the Vim + distribution with my own syntax file? + +You can replace a standary syntax file that comes with the Vim distribution +by creating a file with the same name as the original syntax file and +placing it in the vim runtime syntax (~/.vim/syntax) directory. For +example, to replace the c.vim syntax file in a Unix system, place the new +c.vim in the ~/.vim/syntax directory. In a MS-Windows system, place the new +syntax file in the $HOME/vimfiles/syntax or $VIM/vimfiles/syntax directory. + +For more information, read + + :help mysyntaxfile-replace + :help 44.11 + :help mysyntaxfile + + +24.13. How do I highlight all the characters after a particular column? + +You can use the ":match" command to highlight all the characters after a +particular column: + + :match Todo '\%>75v.\+' + +This will highlight all the characters after the 75th column. + +For more information, read + + :help :match + :help /\%v + :help /\+ + :help /. + + +24.14. How do I convert a source file (.c, .h, etc) with the Vim syntax + highlighting into a HTML file? + +You can use the 2html.vim script to convert a source file into a HTML file +with the Vim syntax highlighting. Use the following command: + + :runtime! syntax/2html.vim + +For more information, read + + :help convert-to-HTML + + +24.15. How do I list the definition of all the current highlight groups? + +You can list the definition of all the current highlight groups using the +":highlight" (without any arguments) ex command. + +For more information, read + + :help :highlight + + +============================================================================= + +SECTION 25 - VIM SCRIPT WRITING + + +25.1. How do I list the names of all the scripts sourced by Vim? + +You can use the ":scriptnames" command to list the names of all the scripts +sourced by Vim: + + :scriptnames + +For more information, read + + :help :scriptnames + + +25.2. How do I debug Vim scripts? + +Vim has built-in support for a primitive debugger to debug Vim plugins and +scripts. Using this debugger you can set breakpoints and step through the +plugin functions. + +For more information, read + + :help debug-scripts + :help -D + + +25.3. How do I locate the script/plugin which sets a Vim option? + +You can use the ":verbose" command to locate the plugin/script which last +modified a Vim option. For example: + + :verbose set textwidth? + +For more information, read + + :help :set-verbose + :help :verbose + + +25.4. I am getting some error/informational messages from Vim (possibly + when running a script), the messages are cleared immediately. How do + I display the messages again? + +You can use the ":messages" command to display the previous messages. + + :messages + +For more information, read + + :help :messages + :help :echoerr + :help :echomsg + :help message-history + + +25.5. How do I save and restore a plugin specific information across Vim + invocations? + +Vim will save and restore global variables that start with an uppercase +letter and don't contain a lower case letter. For this to work, the +'viminfo' option must contain the '!' flag. Vim will store the variables in +the viminfo file. + +For more information, read + + :help 'viminfo' + :help viminfo-file + :help variables + + +25.6. How do I start insert mode from a Vim function? + +You can use the ":startinsert" command to start the insert mode from inside +a Vim function. + +For more information, read + + :help :startinsert + + +25.7. How do I change the cursor position from within a Vim function? + +You can use the cursor() function to position the cursor. + + call cursor(lnum, col) + +You can also use the following command to change the cursor position: + + exe "normal! " . lnum . "G" . col . "|" + +For more information, read + + :help cursor() + :help bar + + +25.8. How do I check the value of an environment variable in the .vimrc + file? + +You can use prefix the environment variable name with the '$' character to +use it from a Vim script/function. You can refer to the value of an +environment variable using the $env_var syntax: + + if $EDITOR == 'vi' + endif + +For more information, read + + :help expr-env + + +25.9. How do I check whether an environment variable is set or not from a + Vim function? + +You can use the exists() function to check for the existence of a +environment variable. + + if exists("$MY_ENV_VAR") + endif + +For more information, read + + :help exists() + :help expr-env + + +25.10. How do I call/use the Vim built-in functions? + +You can use the ":call" command to invoke a Vim built-in function: + + :call cursor(10,20) + +You can use the ":echo" command to echo the value returned by a function: + + :echo char2nr('a') + +You can use the ":let" command to assign the value returned by a function +to a variable: + + :let a = getline('.') + +To store the return value from a function into a Vim register, you can use +the following command: + + :let @a = system('ls') + +The above command will store the return value from the 'ls' command into +the register 'a'. + +For more information, read + + :help :call + :help :echo + :help :let + :help :let-register + :help user-functions + :help usr_41.txt + + +25.11. I am using some normal mode commands in my Vim script. How do I + avoid using the user-defined mappings for these normal mode commands + and use the standard Vim functionality for these normal mode + commands? + +You can use the "normal!" command in your script to invoke a normal-mode +command. This will use the standard functionality of the normal mode +command and will not use the user-defined mapping. + +For more information, read + + :help :normal + + +25.12. How do I get the current visually selected text into a Vim variable + or register? + +You can get the current visually selected text into a Vim variable by +yanking the text into Vim register and then assigning the contents of the +register into the variable: + + :normal! gvy + :let myvar = @" + +The above command copies the visually selected text into the variable +"myvar". + +You can also use the command: + + :normal! gv"*y + +In the above command, gv reselects the last visually selected text and the +rest of the command copies the selected text into the * (clipboard) +register. Alternatively, you can set the 'a' flag in the 'guioptions' +option to automatically copy a visually selected text into the * register. +To do this as part of a visual map, you can use a command similar to the +one shown below: + + :vmap <F3> "*y:call ... + +For more information, read + + :help gv + :help :normal + :help let-@ + :help quotestar + :help clipboard + :help registers + + +25.13. I have some text in a Vim variable 'myvar'. I would like to use this + variable in a ":s" substitute command to replace a text 'mytext'. + How do I do this? + +You can use the 'execute' command to evaluate the variable: + + :execute '%s/mytext/' . myvar . '/' + +For more information, read + + :help :execute + +You can also use "\=" in the substitute command to evaluate the variable: + + :%s/mytext/\=myvar/ + +For more information, read + + :help sub-replace-special + + +25.14. A Vim variable (bno) contains a buffer number. How do I use this + variable to open the corresponding buffer? + +The :buffer command will not accept a variable name. It accepts only a +buffer number or buffer name. You have to use the ":execute" command to +evaluate the variable into the corresponding value. For example: + + :execute "buffer " . bno + +For more information, read + + :help :execute + + +25.15. How do I store the value of a Vim option into a Vim variable? + +You can prefix the option name with the '&' character and assign the option +value to a Vim variable using the "let" command. For example, to store the +value of the 'textwidth' option into the Vim variable "old_tw", you can use +the following command: + + :let old_tw = &tw + +To do the opposite, to set the 'textwidth' option with the value stored in +the 'old_tw' variable, you can use the following command: + + :let &tw = old_tw + +For more information, read + + :help expr-option + :help let-option + + +25.16. I have copied and inserted some text into a buffer from a Vim + function. How do I indent the inserted text from the Vim function? + +You can use the following command to format the just inserted text: + + :normal '[='] + +For more information, read + + :help '[ + :help '] + :help = + :help :normal + + +25.17. How do I get the character under the cursor from a Vim script? + +You can use the getline() function and use string index [] to get the +character: + + :echo getline(".")[col(".") - 1] + +In the above command, getline(".") returns the text in the current line. +The indexing of the string starts at zero, and you can get a single +character in a string by its index with the "string[index]" notation. The +col(".") returns the column of the cursor position; the adjustment is to +get the right character of the string. + +Alternatively, you can use the following sequence of commands to get the +character under the cursor: + + normal! vy + let ch=@" + +Note that the above commands will change the '< and '> marks. + +For more information, read + + :help getline() + :help col() + :help expr-[] + + +25.18. How do I get the name of the current file without the extension? + +You can get the name of the current file without the extension using: + + :echo expand("%:r") + +With some commands, you can use the file name modifiers directly: + + :cd %:p:h + :!gcc -o %:r.o % + +For more information, read + + :help filename-modifiers + :help expand() + :help cmdline-special + :help fnamemodify() + + +25.19. How do I get the basename of the current file? + +You can use the :t filename modifier to get the basename of the current +file: + + :echo expand("%:t") + +For more information, read + + :help filename-modifiers + + +25.20. How do I get the output from a Vim function into the current buffer? + +You can insert the return value from a function using the following command +in insert mode: + + <C-R>=MyFunc() + +Note that this will only insert the return value of the function. + +For more information, read + + :help i_CTRL-R + :help i_CTRL-R_CTRL-R + :help i_CTRL-R_CTRL-O + :help expression + + +25.21. How do I call external programs from a Vim function? + +There are several ways to call external programs from a Vim function. You +can use the builtin system() function to invoke external programs and get +the result: + + :let output = system("ls") + +You can also use "!" ex-command to run an external command. + +For more information, read + + :help system() + :help :! + :help 10.9 + + +25.22. How do I get the return status of a program executed using the ":!" + command? + +You can use the predefined Vim v:shell_error variable to get the return +status of the last run shell command. + +For more information, read + + :help v:shell_error + + +25.23. How do I determine whether the current buffer is modified or not? + +You can check the value of the 'modified' option to determine whether the +current buffer is modified: + + :set modified? + +From a Vim script, you can check the value of the 'modified' option: + + if &modified + echo "File is modified" + endif + +For more information, read + + :help 'modified' + + +25.24. I would like to use the carriage return character in a normal + command from a Vim script. How do I specify the carriage return + character? + +You can use the ":execute" command to specify the special (control) +character in a normal mode command: + + :execute "normal \<CR>" + :execute "normal ixxx\<Esc>" + +For more information, read + + :help :execute + :help expr-quote + + +25.25. How do I split long lines in a Vim script? + +You can split long lines in a Vim script by inserting the backslash +character ("\") at the start of the next line. For example, + +For more information, read + + :help line-continuation + + +25.26. When I try to "execute" my function using the "execute 'echo + Myfunc()'" command, the cursor is moved to the top of the current + buffer. Why? + +The ":execute" command runs the normal mode command specified by the +argument. In the case of the following command: + + :execute "echo Myfunc()" + +The call to "echo Myfunc()" will return 0. The ":execute" command will run +the normal mode command "0", which moves the cursor to the top of the file. +To call a Vim function, you should use the ":call" command instead of the +":execute" command: + + :call Myfunc() + +For more information, read + + :help :call + :help :execute + :help :echo + :help user-functions + :help 41.5 + :help 41.6 + + +25.27. How do I source/execute the contents of a register? + +If you have yanked a set of Vim commands into a Vim register (for example +register 'a'), then you can source the contents of the register using one +of the following commands: + + :@a +or + :exe @a + +For more information, read + + :help :@ + + +25.28. After calling a Vim function or a mapping, when I press the 'u' + key to undo the last change, Vim undoes all the changes made by + the mapping/function. Why? + +When you call a function or a mapping, all the operations performed by the +function/mapping are treated as one single operation. When you undo the +last operation by pressing 'u', all the changes made by the +function/mapping are reversed. + +For more information, read + + :help undo-redo + :help map-undo + + +25.29. How can I call a function defined with s: (script local function) + from another script/plugin? + +The s: prefix for a Vim function name is used to create a script local +function. A script local function can be called only from within that +script and cannot be called from other scripts. To define a function in a +script/plugin, so that it can be called from other plugins/scripts, define +the function without the s: prefix. + +For more information, read + + :help script-variable + :help script-local + :help :scriptnames + + +25.30. Is it possible to un-source a sourced script? In otherwords, reverse + all the commands executed by sourcing a script. + +No. It is not possible to reverse or undo all the commands executed by +sourcing a script. + +For more information, read + + :help :source + + +============================================================================= + +SECTION 26 - PLUGINS + + +26.1. How do I set different options for different types of files? + +You can create filetype plugins to set different options for different +types of files. You should first enable filetype plugins using the command: + + :filetype plugin on + +A filetype plugin is a vim script that is loaded whenever Vim opens or +creates a file of that type. For example, to ensure that the 'textwidth' +option is set to 80 when editing a C program (filetype 'c'), create one of +the following files: + + ~/.vim/ftplugin/c.vim (Unix) + %HOME%\vimfiles\ftplugin\c.vim (Windows) + +with the following text in it: + + setlocal textwidth=80 + +You can also use autocommands to set specific options when editing specific +type of files. For example, to set the 'textwidth' option to 75 for only +*.txt files, you can use the following autocmd: + + autocmd BufRead *.txt setlocal textwidth=80 + +For more information, read + + :help filetype-plugin + :help add-filetype-plugin + :help autocmd + :help 40.3 + + +26.2. I have downloaded a Vim plugin or a syntax file or a indent file, or + a color scheme or a filetype plugin from the web. Where should I copy + these files so that Vim will find them? + +You can place the Vim runtime files (plugins, syntax files, indent files, +color schemes, filetype plugins, etc) under one of the directories +specified in the 'runtimepath' option. To determine the current value of +the 'runtimepath' option, use the following command: + + :set runtimepath + +For Unix systems, this is usally the "$HOME/.vim" directory. For MS-Windows +systems, this is usually the $VIM\vimfiles or $HOME\vimfiles directory. +Depending on the type of the runtime file, you have to place it under a +specific directory under the above runtime directory. The names of the +directories are listed below: + + colors/ - color scheme files + compiler/ - compiler files + doc/ - documentation + ftplugin/ - filetype plugins + indent/ - indent scripts + keymap/ - key mapping files + lang/ - menu translations + plugin/ - plugin scripts + syntax/ - syntax files + tutor/ - files for vimtutor + +For more information, read + + :help your-runtime-dir + :help 'runtimepath' + :help :runtime + + +26.3. How do I extend an existing filetype plugin? + +You can extend an existing filetype plugin by creating a file under either +the $VIMRTUNTIME/after/ftplugin or the $VIMRTUNTIME/ftplugin directory. The +name of the file should be the same as the name of the existing filetype +plugin file. You can place your additions to the new file. + +If you placed the file in the after/ftplugin runtime directory, then Vim +will first source the existing filetype plugin file and then will source +the new file. If you placed the file in the $VIMRTUNTIME/ftplugin runtime +directory, then Vim will first source the new file and then will source the +existing filetype plugin file. + +For more information, read + + :help ftplugin-overrule + :help filetype-plugin + :help add-filetype-plugin + :help 'runtimepath' + + +26.4. How do I turn off loading the Vim plugins? + +You can reset the 'loadplugins' option to turn off loading the plugins: + + :set noloadplugins + +You can also specify the "--noplugin" command line argument to stop loading +the plugins: + + $ vim --noplugin + +For more information, read + + :help 'loadplugins' + :help --noplugin + :help load-plugins + + +26.5. How do I turn on/off loading the filetype plugins? + +By default, Vim will not load the filetype plugins. You can configure Vim +to load filetype plugins using the command: + + filetype plugin on + +You can turn off loading the filetype plugins using: + + filetype plugin off + +For more information, read + + :help filetype-plugin-on + :help filetype-plugin-off + :help :filetype + + +26.6. How do I override settings made in a file type plugin in the global + ftplugin directory for all the file types? + +You can use an autocommand triggered on the FileType event: + + au Filetype * set formatoptions=xyz + +This should at least be after "filetype on" in your vimrc. Best is to put +it in your "myfiletypefile" file, so that it's always last. + +If you want to override a setting for a particular filetype, then create a +file with the same name as the original filetype plugin in the +~/.vim/after/ftplugin directory For example, to override a setting in the +c.vim filetype plugin, create a c.vim file in the ~/.vim/after/ftplugin +directory and add your preferences in this file. + +For more information, read + + :help ftplugin-overrule + :help ftplugins + :help myfiletypefile + + +26.7. How do I disable the Vim directory browser plugin? + +To disable the directory browsing Vim plugin, add the following line to +your .vimrc file: + + let loaded_explorer = 1 + +For more information, read + + :help file-explorer + + +26.8. How do I set the filetype option for files with names matching a + particular pattern or depending on the file extension? + +You can set the 'filetype' option for files with names matching a +particular pattern using an autocmd. For example, to set the 'filetype' +option to 'c' for all files with extension '.x', you can use the following +autocmd: + + autocmd! BufRead,BufNewFile *.x setfiletype c + +A better alternative to the above approach is to create a filetype.vim file +in the ~/.vim directory (or in one of the directories specified in the +'runtimepath' option) and add the following lines: + + " my filetype file + if exists("did_load_filetypes") + finish + endif + augroup filetypedetect + au! BufRead,BufNewFile *.x setfiletype c + augroup END + +For more information, read + + :help new-filetype + :help 43.2 + :help :setfiletype + + +============================================================================= + +SECTION 27 - EDITING PROGRAM FILES + + +27.1. How do I enable automatic indentation for C/C++ files? + +You can enable file-type based indentation using: + + :filetype indent on + +If you want to only enable automatic C indentation, then use: + + :set cindent + +For more information, read + + :help 'cindent' + :help C-indenting + :help filetype + + +27.2. How do I configure the indentation used for C/C++ files? + +You can configure the Vim C indentation by modifying the value of the +'cinoptions', 'cinkeys' and 'cinwords' options. + +For more information, read + + :help 'cindent' + :help 'cinoptions' + :help 'cinkeys' + :help 'cinwords' + :help C-indenting + :help cinoptions-values + :help 'smartindent' + + +27.3. How do I turn off the automatic indentation feature? + +By default, the automatic indentation is not turned on. You must have +configured Vim to do automatic indentation in either .vimrc or .gvimrc +files. You can disable automatic indentation using either, + + :filetype indent off + +or + + :set nocindent + +Also, check the setting for the following options: + + :set autoindent? + :set smartindent? + :set indentexpr? + +For more information, read + + :help 'cindent' + :help filetype-indent-off + :help 'autoindent' + :help 'smartindent' + :help 'indentexpr' + + +27.4. How do I change the number of space characters used for the automatic + indentation? + +You can modify the 'shiftwidth' option to change the number of space +characters used for the automatic indentation: + + :set shiftwidth=4 + +For more information, read + + :help 'shiftwidth' + + +27.5. I am editing a C program using Vim. How do I display the definition + of a macro or a variable? + +You can use the [d command to display the definition of a macro and the [i +command to display the definition of a variable. + +For more information, read + + :help [d + :help [i + :help include-search + :help 29.4 + :help 29.5 + + +27.6. I am editing a C program using Vim. How do I jump to the beginning or + end of a code block from within the block? + +You can use '[{' command to jump to the beginning of the code block and ']} +to jump to the end of the code block from inside the block. + +For more information, read + + :help [{ + :help ]} + :help various-motions + + +27.7. Is there a way to turn off the "//" comment auto-insertion behavior + for C++ files? If I'm sitting on a line beginning with "//", then I + open a new line above or below it, Vim automatically inserts new "//" + chars. + +You can modify the value of the 'comments' option to stop Vim from +inserting the C++ comment character ("//") automatically. For example: + + :set comments=sr:/*,mb:*,el:*/ + +For more information, read + + :help 'comments' + :help format-comments + + +27.8. How do I add the comment character '#' to a set of lines at the + beginning of each line? + +First, select the first character in all the lines using visual block mode +(CTRL-V). Press 'I' to start inserting characters at the beginning of the +line. Enter the comment character and then stop the insert mode by pressing +<Esc>. Vim will automatically insert the entered characters at the +beginning of all the selected lines. + +For more information, read + + :help visual-block + :help blockwise-operators + :help v_b_I + + +27.9. How do I edit a header file with the same name as the corresponding C + source file? + +You can use the following command to edit a header file with the same name +as the corresponding C source file: + + :e %:t:r.h + +You can use the following command to edit the file in a new split window: + + :sp %:t:r.h + +In the above commands, the percent sign expands to the name of the current +file. The ":t" modifier extracts the tail (last component) of the +filename. The ":r" modifier extracts the root of the filename. The .h is +appended to the resulting name to get the header filename. + +Another approach is to use the following command: + + :sfind %:t:r.h + +This command will search for the header file in the directories specified +in the 'path' option. + +For more information, read + + :help cmdline-special + :help filename-modifiers + :help :sfind + :help 'path' + + +27.10. How do I automatically insert comment leaders while typing comments? + +To automatically insert comment leaders while typing comments, add the 'r' +and 'o' flags to the 'formatoptions' option. + + :set formatoptions+=ro + +You may also want to add the 'c' flag to auto-wrap comments using the +'textwidth' option setting and the 'q' flag to format comments with the +"gq" command: + + :set formatoptions=croq + +For more information, read + + :help 30.6 + :help format-comments + :help 'comments' + :help fo-table + + +============================================================================= + +SECTION 28 - QUICKFIX + + +28.1. How do I build programs from Vim? + +You can use the ":make" command to build programs from Vim. The ":make" +command runs the program specified by the 'makeprg' option. + +For more information, read + + :help 30.1 + :help make_makeprg + :help 'makeprg' + :help 'makeef' + :help :make + :help quickfix + + +28.2. When I run the make command in Vim I get the errors listed as the + compiler compiles the program. When it finishes this list disappears + and I have to use the :clist command to see the error message again. + Is there any other way to see these error messages? + +You can use the ":copen" or ":cwindow" command to open the quickfix window +that contains the compiler output. You can select different error lines +from this window and jump to the corresponding line in the source code. + +For more information, read + + :help :copen + :help :cwindow + :help quickfix + + +============================================================================= + +SECTION 29 - FOLDING + + +29.1. How do I extend the Vim folding support? + +You can use the 'foldexpr' option to fold using an user specified function. +For example, to fold subroutines of the following form into a single line: + + sub foo { + my $barf; + $barf = 3; + return $barf; + } + +You can use the following commands: + + set foldmethod=expr + set foldexpr=MyFoldExpr(v:lnum) + fun! MyFoldExpr(line) + let str = getline(a:line) + if str =~ '^sub\>' + return '1' + elseif str =~ '^}' + return '<1' + else + return foldlevel(a:line - 1) + endif + endfun + +For more information, read + + :help 'foldexpr' + :help fold-expr + + +29.2. When I enable folding by setting the 'foldmethod' option, all the + folds are closed. How do I prevent this? + +You can set the 'foldlevelstart' option to a particular value to close only +folds above the specified value. + + :set foldlevelstart=99 + +For more information, read + + :help 'foldlevelstart' + :help 'foldlevel' + :help fold-foldlevel + + +29.3. How do I control how many folds will be opened when I start editing a + file? + +You can modify the 'foldlevelstart' option to control the number of folds +that will be opened when you start editing a file. To start editing with +all the folds closed: + + :set foldlevelstart=0 + +To start editing with all the folds opened, you can use + + :set foldlevelstart=999 + +For more information, read + + :help 'foldlevelstart' + + +29.4. How do I open and close folds using the mouse? + +You can click on the + and - characters displayed at the leftmost column to +open and close fold. For this to work, you have to set the 'foldcolumn' +to a value greater than zero: + + :set foldcolumn=2 + +For more information, read + + :help 'foldcolumn' + + +29.5. How do I change the text displayed for a closed fold? + +You can use the 'foldtext' option to change the text displayed for a closed +fold. + +For more information, read + + :help 'foldtext' + :help fold-foldtext + :help 'fillchars' + + +29.6. How do I store and restore manually created folds across different + Vim invocations? + +You can use the ":mkview" command to store manually created folds. Later, +you can use the ":loadview" command to restore the folds. For this to work, +the 'viewoptions' must contain "folds". + +For more information, read + + :help 28.4 + :help :mkview + :help :loadview + :help 'viewoptions' + :help 'viewdir' + :help :mksession + :help 'sessionoptions' + + +============================================================================= + +SECTION 30 - VIM WITH EXTERNAL APPLICATIONS + + +30.1. Can I run a shell inside a Vim window? + +Currently Vim doesn't have support for running shell and other external +commands inside a Vim window. + +For more information, read + + :help shell-window + +Alternatively, you can try using the Unix "screen" utility or the 'splitvt' +program. + +You can also use the vimsh plugin by Brian Sturk to run a shell in a Vim +window. To use this you need to have Vim built with python support. For +more information visit the following URL: + + http://vim.sourceforge.net/scripts/script.php?script_id=165 + + +30.2. How do I pass the word under the cursor to an external command? + +You can use the special keyword <cword> to pass the word under the cursor +to an external command. For example: + + :!dict <cword> + +For more information, read + + :help <cword> + + +30.3. How do I get the output of a shell command into a Vim buffer? + +You can use the ":r !" command to get the output of a shell command into a +Vim buffer. For example, to insert the output of the "ls" shell command, +you can use the following command: + + :r !ls + +To insert the output of the shell command above the first line use the +following command: + + :0r !ls + +For more information, read + + :help :r! + + +30.4. How do I pipe the contents of the current buffer to an external + command and replace the contents of the buffer with the output from + the command? + +You can use the :! command to pipe the contents of the current buffer to a +external command and replace the contents of the buffer with the output +from the command. For example, to sort the contents of the current buffer, +using the Unix sort command, you can use the following command: + + :%!sort + +To sort only lines 10-20, you can use the following command + + :10,20!sort + +Also, if you want to pipe a buffer to an external command but not put the +results back in the buffer, you can use + + :w !sort + +The above command will pipe the entire buffer to the sort command. Note +that the space between the 'w' and the '!' is critical. To pipe only a +range of lines, you can use + + :10,20w !sort + +The above command will pipe the lines 10-20 to the sort command. + +For more information, read + + :help :range! + :help 10.9 + :help :w_c + + +30.5. How do I sort a section of my file? + +You can pipe a section of the file to the Unix "sort" utility to sort the +file. For example: + + :5,100!sort + +You can also use a visual block, and use the "!sort" command on the +selected block. + +To sort using visual blocks (sort based on a column or sort just the column +itself), read the following tip from the Vim online web page: + +http://vim.sourceforge.net/tips/tip.php?tip_id=588 + + +30.6. Is there a step-by-step guide for using Vim with slrn? + +Visit the following link to get information about using Vim with Slrn: + + http://thingy.apana.org.au/~fun/slrn/ + + +30.7. How do I use Vim as a pager? + +You can use Vim as a pager using the $VIMRUNTIME/macros/less.sh shell +script, supplied as part of the standard Vim distribution. This shell +script uses the $VIMRUNTIME/macros/less.vim Vim script to provide less like +key bindings. + +For more information, read + + :help less + + +30.8. How do I view Unix man pages from inside Vim? + +You can view Unix man pages, inside Vim, using the man.vim plugin supplied +as part of the standard Vim distribution. To use this plugin, add the +following line to your startup vimrc file: + + runtime ftplugin/man.vim + +You can also press the K key to run the program specified by the +'keywordprg' option with the keyword under the cursor. By default, +'keywordprg' is set to run man on the keyword under the cursor. + +For more information, read + + :help man-plugin + :help K + :help 'keywordprg' + + +30.9. How do I change the diff command used by the Vim diff support? + +By default, the Vim diff support uses the 'diff' command. You can change +this by changing the 'diffexpr' option. + +For more information, read + + :help diff-diffexpr + :help 'diffexpr' + + +30.10. How do I use the Vim diff mode without folding? + +You can use the following command-line to start Vim with two filenames +and use the diff mode without folding: + + $ vim -o file1 file2 "+windo set diff scrollbind scrollopt+=hor nowrap" + +If you like vertically split windows, then replace "-o" with "-O". + +For more information, read + + :help vimdiff + + +============================================================================= + +SECTION 31 - GUI VIM + + +31.1. How do I create buffer specific menus? + +Adding support for buffer specific menus is in the Vim TODO list. In the +mean time, you can try Michael Geddes's plugin, buffermenu.vim: + + http://vim.sourceforge.net/scripts/script.php?script_id=246 + + +31.2. How do I change the font used by GUI Vim? + +You can change the 'guifont' option to change the font used by GUI Vim. To +display the current value of this option, you can use + + :set guifont? + +You can add the displayed font name to the .vimrc file to use the font +across Vim sessions. For example, add the following line to the .vimrc file +to use Andale Mono font. + + set guifont=Andale_Mono:h10:cANSI + +For Win32, GTK and Photon version of Vim, you can use the following command +to bringup a dialog which will help you in changing the guifont: + + :set guifont=* + +You can also use the -font Vim command line option to specify the font used +for normal text. + +For more information, read + + :help 'guifont' + :help 'guifontset' + :help 'guifontwide' + :help font-sizes + :help -font + :help -boldfont + :help -italicfont + :help -menufont + :help -menufontset + + +31.3. When starting GUI Vim, how do I specify the location of the GVIM + window? + +You can use the "-geometry" command line argument to specify the location +of the GUI Vim window. For example: + + $ gvim -geometry 80x25+100+300 + +For more information, read + + :help 31.4 + :help -geom + + +31.4. How do I add a horizontal scrollbar in GVim? + +You can enable the horizontal scrollbar by modifying the 'guioptions' +option: + + :set guioptions+=b + +For more information, read + + :help 'guioptions' + :help gui-horiz-scroll + + +31.5. How do I make the scrollbar appear in the left side by default? + +You can add the 'l' flag to the 'guioptions' option to make the scrollbar +appear in the left side. + + :set guioptions+=l + :set guioptions-=r + +For more information, read + + :help 'guioptions' + :help gui-scrollbars + + +31.6. How do I remove the Vim menubar? + +You can remove the Vim menubar by removing the 'm' flag from the +'guioptions' option: + + :set guioptions-=m + +For more information, read + + :help 'guioptions' + + +31.7. I am using GUI Vim. When I press the ALT key and a letter, the menu + starting with that letter is selected. I don't want this behavior as + I want to map the ALT-<key> combination. How do I do this? + +You can use the 'winaltkeys' option to disable the use of the ALT key to +select a menu item: + + :set winaltkeys=no + +For more information, read + + :help 'winaltkeys' + :help :simalt + + +31.8. Is it possible to scroll the text by dragging the scrollbar so that + the cursor stays in the original location? + +The way Vim is designed, the cursor position has to be in a visible spot in +normal, visual, select and insert mode. This cannot be changed without +modifying Vim. When the scrollbar is used, the cursor will be moved so that +it is always visible. Another approach to solving this problem is to use +the Vim marks. You can mark the current cursor position using ma. Then +scroll to a different part of the text and jump back to the old position +using `a. You can also try the following suggestion from the Vim Online +website: + + http://www.vim.org/tip_view.php?tip_id=320 + +For more information, read + + :help mark-motions + + +31.9. How do I get gvim to start browsing files in a particular directory + when using the ":browse" command? + +You can set the 'browsedir' option to the default directory to use for the +":browse" command. + + :set browsedir='<your_dir>' + +For more information, read + + :help 'browsedir' + + +31.10. For some questions, like when a file is changed outside of Vim, Vim + displays a GUI dialog box. How do I replace this GUI dialog box with + a console dialog box? + +You can set the 'c' flag in the 'guioptions' option to configure Vim to use +console dialogs instead of GUI dialogs: + + :set guioptions+=c + +For more information, read + + :help 'guioptions' + + +31.11. I am trying to use GUI Vim as the editor for my xxx application. + When the xxx application launches GUI Vim to edit a file, the + control immediately returns to the xxx application. How do I start + GUI Vim, so that the control returns to the xxx application only + after I quit Vim? + +You have to start GUI Vim with the '-f' (foreground) command line option: + + $ gvim -f + +By default, GUI Vim will disconnect from the program that started Vim. With +the '-f' option, GUI Vim will not disconnect from the program that started +it. + +For more information, read + + :help gui-fork + :help -f + + +31.12. Why does the "Select Font" dialog doesn't show all the fonts + installed in my system? + +Vim supports only fixed width (mono-spaced) fonts. Proportional fonts are +not supported. In the "Select Font" dialog, only fixed width fonts will be +displayed. + +For more information, read + + :help font-sizes + :help 'guifont' + + +31.13. How do I use the mouse in Vim command-line mode? + +You can set the 'c' flag in the 'mouse' option to use mouse in the Vim +command-line mode: + + :set mouse+=c + +For more information, read + + :help mouse-using + :help gui-mouse + :help 09.2 + + +31.14. When I use the middle mouse button to scroll text, it pastes the + last copied text. How do I disable this behavior? + +You can map the middle mouse button to <Nop> to disable the middle mouse +button: + + :map <MiddleMouse> <Nop> + :map! <MiddleMouse> <Nop> + +For more information, read + + :help gui-mouse-mapping + :help <Nop> + + +31.15. How do I change the location and size of a GUI Vim window? + +You can use the "winpos" command to change the Vim window position. To +change the size of the window, you can modify the "lines" and "columns" +options. + +For example, the following commands will position the GUI Vim window at the +X,Y co-ordinates 50,50 and set the number of lines to 50 and the number of +columsn to 80. + + :winpos 50 50 + :set lines=50 + :set columns=80 + +The arguments to the 'winpos' command specify the pixel co-ordinates of the +Vim window. The 'lines' and 'columns' options specify the number of lines +and characters to use for the height and the width of the window +respectively. + +For more information, read + + :help 31.4 + :help :winpos + :help 'lines' + :help 'columns' + :help GUIEnter + + +============================================================================= + +SECTION 32 - VIM ON UNIX + + +32.1. I am running Vim in a xterm. When I press the CTRL-S key, Vim + freezes. What should I do now? + +Many terminal emulators and real terminal drivers use the CTRL-S key to +stop the data from arriving so that you can stop a fast scrolling display +to look at it (also allowed older terminals to slow down the computer so +that it did not get buffer overflows). You can start the output again by +pressing the CTRL-Q key. + +When you press the CTRL-S key, the terminal driver will stop sending the +output data. As a result of this, it will look like Vim is hung. If you +press the CTRL-Q key, then everything will be back to normal. + +You can turn off the terminal driver flow control using the 'stty' command: + + $ stty -ixon -ixoff + +or, you can change the keys used for the terminal flow control, using the +following commands: + + $ stty stop <char> + $ stty start <char> + + +32.2. I am seeing weird screen update problems in Vim. What can I do to + solve this screen/display update problems? + +You have to use a proper terminal emulator like xterm with correct TERM +settings (TERM=xterm) and a correct terminfo/termcap file. +For more information, read + + :help 'term' + + +32.3. I am using the terminal/console version of Vim. In insertmode, When I + press the backspace key, the character before the cursor is not + erased. How do I configure Vim to do this? + +You have to make sure that Vim gets the correct keycode for the backpspace +key. You can try using the command: + + :fixdel + +Make sure the TERM environment variable is set to the correct terminal +name. You can try using the 'stty' command: + + $ stty erase ^H + +where, you have to enter the ^H character by pressing the CTRL-V key and +then the CTRL-H key. + +For more information, read + + :help :fixdel + :help Linux-backspace + :help NetBSD-backspace + + +32.4. I am using Vim in a xterm. When I quit Vim, the screen contents are + restored back to the original contents. How do I disable this? + +The xterm has a capability called "alternate screen". If this capability +is present, vim switches to that alternate screen upon startup and back on +exit, thus restoring the original screen contents. To disable this +feature, add the following line to your .vimrc file: + + :set t_ti= t_te= + +For more information, read + + :help restorescreen + :help xterm-screens + + +32.5. When I start Vim, it takes quite a few seconds to start. How do I + minimize the startup time? + +This may be related to Vim opening the X display for setting the xterm +title and using the X clipboard. Make sure the DISPLAY variable is set to +point to the correct host. Try using the command line: + + $ vim -X + +This will prevent Vim from opening the X display. With this command-line +option, the X clipboard cannot be used and also Vim will not be able to +change the xterm title. + +You can also set the 'clipboard' option to + + :set clipboard=exclude:.* + +This has the same effect as using the -X command-line argument. + +For more information, read + + :help -X + :help 'clipboard' + + +32.6. How can I make the cursor in gvim in unix stop blinking? + +You can modify the 'guicursor' option, to stop the cursor from blinking. +For example: + + :set guicursor=a:blinkon0 + +For more information, read + + :help 'guicursor' + + +32.7. How do I change the menu font on GTK Vim? + +You can modify the ~/.gtkrc file to change the menu font on GTK Vim. For +example: + + style "default" + { font ="smooth09" } + class "*" style "default" + +The last line changes the font of all widgets. + +For more information, read + + :help gui-gtk + + +32.8. How do I prevent <Ctrl-Z> from suspending Vim? + +You can map <Ctrl-Z> to prevent the suspending. Here are some suggestions: + +- Make <Ctrl-Z> do nothing: + + :map <C-Z> <Nop> + +- Make <Ctrl-Z> start a shell: + + :map <C-Z> :shell<CR> + +- Make <Ctrl-Z> give an error message: + + :map <C-Z> :"suspending disabled<CR> + +For the last example, the double quote is necessary in order to keep the +message on the status line. + + +32.9. When I kill the xterm running Vim, the Vim process continues to run + and takes up a lot of CPU (99%) time. Why is this happening? + +When Vim is built with support for Python interface, you will have this +problem. This is a known problem with the python thread library and Vim. To +solve this problem, use a Vim binary built without the Python interface. + +For more information, read + + :help +python + :help python + + +32.10. How do I get the Vim syntax highlighting to work in a Unix terminal? + +The easiest and simplest way to get Vim syntax highlighting is to use the +GUI version of Vim (GVIM). To get syntax highlighting to work in the +console/terminal version of Vim, you have to run a terminal emulator (like +Xfree86 xterm or rxvt or dtterm) that supports color. Note that if a +terminal emulator supports changing the background and foreground colors, +that does not mean that it also supports ANSI escape sequences for changing +the color. You can download the latest version of Xfree86 xterm from +http://dickey.his.com/xterm/xterm.html. You can download the latest version +of rxvt from http://www.rxvt.org. You have to install the terminfo/termcap +file that supports colors for the terminal emulator. Also, set the TERM +environment variable to the correct name of the term that supports colors. + +You can use the colortest.vim script supplied with the Vim runtime +package to test the color setup. To use this script, follow these steps: + + :e $VIMRUNTIME/syntax/colortest.vim + :source % + +For more information, read + + :help 06.2 + :help terminal-colors + :help termcap-colors + :help startup-terminal + :help xterm-color + :help colortest.vim + + +============================================================================= + +SECTION 33 - VIM ON MS-WINDOWS + + +33.1. In MS-Windows, CTRL-V doesn't start the blockwise visual mode. What + happened? + +The mswin.vim script provides key mappings and options to make Vim behave +like a MS-Windows application. One of the keys mapped is CTRL-V which is +used for pasting text in MS-Windows applications. This will disable the use +of CTRL-V to start the blockwise visual mode. The mswin.vim script maps +CTRL-Q for staring the blockwise visual mode. So you can use CTRL-Q instead +of CTRL-V. + +For more information, read + + :help CTRL-V + :help CTRl-V-alternative + :help CTRL-Q + :help 10.5 + + +33.2. When I press the CTRL-Y key, it acts like the CTRL-R key. How do I + configure Vim to treat CTRL-Y as CTRL-Y? + +The mapping of the CTRL-Y key to the CTRL-R key is done by the mswin.vim +script. The mswin.vim script maps CTRL-Y to make Vim behave like a standard +MS-Windows application. This is explained in ":help CTRL-Y". You can either +comment out the line in mswin.vim that maps the CTRL-Y key or you can +remove the line in your .vimrc file that sources the mswin.vim script. + + +33.3. How do I start GUI Vim in a maximized window always? + +You can use the "simalt" command to maximize the Vim window. You can use +the GUIEnter autocmd to maximize the Vim window on startup: + + autocmd GUIEnter * simalt ~x + +For more information, read + + :help :simalt + :help GUIEnter + :help gui-win32-maximized + + +33.4. After doing some editing operations, Vim freezes. The cursor becomes + an empty rectangle. I am not able enter any characters. What is + happening? + +Most probably, you used the mouse wheel to scroll the text in Vim. There is +a known problem in using intellimouse mouse wheel with Vim. To avoid this +problem, disable Universal scrolling support for Vim. + +For more information, read + + :help intellimouse-wheel-problems + + +33.5. I am using Windows XP, the display speed of maximized GVim is very + slow. What can I do to speed the display updates? + +This may be due to the fact that you have enabled 'Smooth edges of screen +fonts' in the display properties. Try turning off font smoothing or try +changing the smoothing method to "Standard". + + +33.6. What are the recommended settings for using Vim with cygwin? + +You may want to set the following shell related Vim settings: + + :set shellcmdflag=-c + :set shellquote= + :set shellslash " Use the forward slash for expansion. + :set shellxquote=\" + :set shell=d:\cygwin\bin\bash.exe " Use the bash shell + :set shellpipe=2>&1| tee + :set shellredir=>%s 2>&1 + + +33.7. I am trying to use GNU diff with Vim diff mode. When I run the diff + from command line, it works. When I try to use the diff with Vim it + doesn't work. What should I do now? + +There is a problem with using GNU diff with Vim. You can try using the +GNU diff.exe built by Ron Aaron from the following link: + + http://www.mossbayeng.com/~ron/vim/builds.html + + +33.8. Is it possible to use Vim as an external editor for MS-Windows + Outlook email client? + +You can use the "cubiclevim" COM Add-In to use Vim as an external editor +for MS-Windows Outlook email client. Visit the following URL for more +information: + + http://sourceforge.net/projects/cubiclevim + +Note that currently this works only with MS-Office 2000 and XP. + + +33.9. I am using Vim to edit HTML files. How do I start internet explorer + with the current file to preview the HTML file? + +You can use the following command: + + :!start c:\progra~1\intern~1\iexplore.exe file://%:p<CR> + + +33.10. I would like to use Vim with Microsoft Visual Studio. How do I do + this? + +You have to download and use the OLE version of Vim (for example: +gvim61ole.zip). This file also contains instructions on how to use Vim with +Visual Studio. + +For more information, read + + :help MSVisualStudio + + +33.11. Where do I place the _vimrc and _gvimrc files? + +You can place the _vimrc and _gvimrc files under the directory pointed to +by the VIM environment variable. If you are sharing this system with other +users, then you can place the files in a directory and set the HOME +environment variable to this directory. + +For more information, read + + :help $HOME-use + :help _vimrc + + +33.12. Everytime I save a file, Vim warns about the file being changed + outside of Vim. Why? + +If you get the following warning message, everytime you save a file: + + WARNING: The file has been changed since reading it!!! + Do you really want to write to it (y/n)? + +then this problem could be related to a bug in MS-Windows on the day +daylight saving time starts. Vim remembers the timestamp of the file after +it was written. Just before the next write the timestamp is obtained again +to check if the file was changed outside of Vim. This works correctly, +except on the day daylight saving time starts. + +This problem will go away the next day after the day the daylight saving +time starts. + +For more information, read + + :help W11 + + +============================================================================= + +SECTION 34 - PRINTING + + +34.1. How do I print a file along with line numbers for all the lines? + +You can set the 'printoptions' option and use the ":hardcopy" command to +print your file: + + :set printoptions=number:y + :hardcopy + +For more information, read + + :help 'printoptions' + :help :hardcopy + + +34.2. How do I print a file with the Vim syntax highlighting colors? + +You can use the ":hardcopy" command to print a file with the Vim syntax +highlighting colors. You can also convert your file to a HTML file using +the 2html.vim script and print the HTML file. + +For more information, read + + :help syntax-printing + :help 2html.vim + :help :hardcopy + :help printing + + +============================================================================= + +SECTION 35 - BUILDING VIM FROM SOURCE + + +35.1. How do I build Vim from the sources on a Unix system? + +For a Unix system, follow these steps to build Vim from the sources: + +- Download the source and run-time files archive (vim-##.tar.bz2) from the + ftp://ftp.vim.org/pub/vim/unix directory. +- Extract the archive using the bzip2 and tar utilities using the command: + + $ bunzip2 -c <filename> | tar -xf - + +- Run the 'make' command to configure and build Vim with the default + configuration. +- Run 'make install' command to install Vim in the default directory. + +To enable/disable various Vim features, before running the 'make' command +you can run the 'configure' command with different flags to include/exclude +the various Vim features. To list all the available options for the +'configure' command, use: + + $ configure -help + +For more information, read + + :help install + + +35.2. How do I install Vim in my home directory or a directory other + than the default installation directory in Unix? + +To install Vim in a directory other than the default installation +directory, you have to specify the directory using the --prefix option +while running the configure script. + + $ ./configure --prefix=/users/xyz + +You can enable/disable various Vim feature by supplying different arguments +to the configure script. For more information about all these options, run + + $ ./configure --help + +For more information, read + + :help install-home + :help install + + +35.3. How do I build Vim from the sources on a MS-Windows system? + +For a MS-Windows system, Vim can be built using either the Visual C++ +compiler or the Borland C++ compiler or the Ming GCC compiler or the cygwin +gcc compiler. Follow these steps to build Vim from the sources for +MS-Windows: + +- Download the source (vim##src.zip), runtime (vim##rt.zip) and the extra + (vim-##-extra.tar.gz) archives from the ftp://ftp.vim.org/pub/vim/pc + directory. +- Extract the archives into a directory (for example, c:\vimsrc) +- Depending on the installed compiler, you can use the corresponding + makefile to build the Vim sources. For Visual C++ use the Make_mvc.mak + makefile, for borland C++ use the Make_bc5.mak makefile, for ming GCC use + the Make_ming.mak makefile, for cygwin gcc use the Make_cyg.mak makefile. + +Depending on whether you want to build the GUI version of Vim or the +console version of Vim, you have to pass different arguments to the +makefiles. After successfully building the sources, you can copy the +vim.exe or gvim.exe file to the desired directory along with the files from +the runtime archive. + +You can visit the following site for extensive information about building +Vim on a MS-Windows system using the various compilers: + + http://mywebpage.netscape.com/SharpPeople/vim/howto/index.html + +For more information, read + + :help install + + +35.4. The Vim help, syntax, indent files are missing from my Vim + installation. How do I install these files? + +The Vim help, syntax, indent and other runtime files are part of the Vim +runtime package. You need to download and install the Vim runtime package. +For example, for MS-Windows, the name of the Vim 6.1 runtime package is +vim61rt.zip. + +For more information, read + + :help install + + +35.5. I have built Vim from the source and installed the Vim package using + "make install". Do I need to keep the Vim source directory? + +No. Once you have built and installed Vim in some directory other than the +original source directory (for example, /usr/bin or /usr/local/bin), then +you can remove the source directory. + + +35.6. How do I determine the Vim features which are enabled at compile + time? + +You can use the ":version" command to determine the Vim features that are +enabled at compile time. The features that are enabled will be prefixed +with a "+". The features that are not enabled will be prefixed with a "-". + +If you want to test for a feature in a script, you can use the has() +function: + + if has("menu") + " Set up some menus + endif + +For more information, read + + :help :version + :help +feature-list + :help has() + + +35.7. Can I build Vim without the GUI support? + +Yes. You can build Vim by optionally enabling/disabling many of the +features including GUI. + +For more information, read + + :help install + + +35.8. When building Vim on a Unix system, I am getting "undefined reference + to term_set_winsize' error. How do I resolve this error? + +You will get this error when the build process is not able to locate the +termlib, termcap or ncurses library. You have to install the ncurses-dev +package to resolve this error. + + +35.9. Vim configure keeps complaining about the lack of gtk-config while + trying to use GTK 2.03. This is correct, since in GTK 2 they moved to + using the generic pkg-config. I can get pkg-config to list the + various includes and libs for gtk, but for some reason the configure + script still isn't picking this up. + +Use the following shell script named gtk-config: + + #!/bin/sh + pkg-config gtk+-2.0 $1 $2 + + +============================================================================= + +SECTION 36 - VARIOUS + + +36.1. How do I edit binary files with Vim? + +You can set the following options to edit binary files in Vim: + + :set binary + :set display=uhex + +You can also use the "-b" command-line option to edit a binary file: + + $ vim -b <binary_file_name> + +You can also use the xxd utility (part of the Vim distribution) to edit +binary files. + +For more information, read + + :help 23.4 + :help edit-binary + :help hex-editing + :help -b + :help 'binary' + :help 'endofline' + :help 'display' + + +36.2. How do I disable the visual error flash and the error beep? + +You can disable both the visual error flash and the error beep using the +following command: + + :set visualbell t_vb= + +For more information, read + + :help 'visualbell' + :help 'errorbells' + :help t_vb + + +36.3. How do I display the ascii value of a character displayed in a + buffer? + +You can use the 'ga' command to display the ascii value of a displayed +character. + +For more information, read + + :help ga + :help :ascii + + +36.4. Can I use zero as a count for a Vim command? + +You cannot use zero as a count for a Vim command, as "0" is a command on +its own, moving to the first column of the line. + +For more information, read + + :help 0 + :help count + + +36.5. How do I disable the Vim welcome screen? + +You can disable the Vim welcome screen, by adding the 'I' flag to the +'shortmess' option: + + :set shortmess+=I + +For more information, read + + :help :intro + :help 'shortmess' + + +36.6. How do I avoid the "hit enter to continue" prompt? + +Vim will prompt you with the "hit enter to continue" prompt, if there are +some messages on the screen for you to read and the screen is about to be +redrawn. You can add the 'T' flag to the 'shortmess' option to truncate +all messages. This will help in avoiding the hit-enter prompt: + + :set shortmess+=T + +You can also increase the command height by setting the 'cmdheight' option: + + :set cmdheight=2 + +For more information, read + + :help hit-enter + :help avoid-hit-enter + :help 'shortmess' + :help 'cmdheight' + + +36.7. How do I invoke Vim from command line to run a group of commands on a + group of files? + +There are several ways to invoke Vim from command line to run a group of +commands on a group of files. You can use a set of "-c" command line +options to specify a group of commands: + + $ vim -c "<ex_command_1>" -c "<ex_command_2>" *.txt + +Each of the ex-command specified with the "-c" command line option is +executed one by one sequentially. You can also use a single "-c" command +line option and the "|" character to separate the ex commands: + + $ vim -c "<ex_command_1> | <ex_command_2>" *.txt + +In the above command, if an ex command fails, then all the remaining ex +commands will not be executed. + +For example, to replace "ABC" with "DEF" in a file from the command-line, +you can use the following command: + + $ vim -c "%s/ABC/DEF/ge | update" myfile.txt + +To replace "ABC" with "DEF" in multiple files from the command-line, +you can use the following command: + + $ vim -c "argdo %s/ABC/DEF/ge | update" *.txt + +You can store the group of commands into a file and use the "-s" command +line option to run the commands on a set of files. For example, if the +group of commands are stored in the file mycmds.txt, then you can use the +following command: + + $ vim -s mycmds.txt *.pl + +For more information, read + + :help -c + :help -s + + +36.8. How do I use a normal mode command from insert mode without leaving + the insert mode? + +You can use a normal command from insert mode, without leaving the insert +mode, by first pressing the CTRL-O key and then follow that with a single +normal mode command. + +To execute more than one normal mode command, press the CTRL-L key, +followed by any number of normal mode commands and then press <Esc> to get +back to the insert mode. + +For more information, read + + :help i_CTRL-O + :help i_CTRL-L + + +36.9. How do I start Vim in insert mode? + +You can start Vim in insert mode using the ":startinsert" ex command. + + $ vim +startinsert myfile.txt + +The above command will open the file "myfile.txt" and start insert mode +with the cursor in front of the first character on the first line. To open +the file and start appending after the last character on the last line, +you can use the following command: + + $ vim + +startinsert! myfile.txt + +For more information, read + + :help :startinsert + + +============================================================================= + +SECTION 37 - UNICODE +Author: Tony Mechelynck <antoine.mechelynck AT belgacom.net> + + +37.1. Is it possible to create Unicode files using Vim? + +Yes. It may be more or less complicated depending on the keyboard and fonts +available to you, but it is always possible to encode any possible Unicode +codepoint (and some illegal ones) into a file. To create a Unicode file +using Vim, you should have compiled Vim with the "+multi_byte" compile-time +option. You can get more information about Unicode from the following +sites: + + http://www.unicode.org + http://www.cl.cam.ac.uk/~mgk25/unicode.html + +For more information, read + + :help multibyte + :help usr_45.txt + + +37.2. Which Vim settings are particularly important for editing Unicode + files? + +The most important are the various "encoding" options, i.e., 'encoding', +'fileencoding', 'fileencodings' and 'termencoding'. The boolean option +'bomb' is also significant. + +For more information, read + + :help 'encoding' + :help 'fileencoding' + :help 'fileencodings' + :help 'termencoding' + :help 'bomb' + + +37.3. What is the 'encoding' option? + +Basically, the 'encoding' option defines how Vim will represent your data +internally. However, all Unicode encodings are represented internally as +utf-8 and converted (if necessary) when reading and writing. + +For more information, read + + :help 'encoding' + + +37.4. How does Vim name the various Unicode encodings? + +Utf-8 is called utf-8 or utf8; utf-16 is called ucs-2 or ucs2; utf-32 is +called ucs-4 or ucs4. Also, you may specify endianness (except for utf-8 +which does not vary for endianness) by appending le for little-endian or be +for big-endian. If you create a file with an encoding of ucs-2 or ucs-4 +without specifying endianness, Vim will use what is typical of your +machine. + +For more information, read + + :help encoding-names + :help encoding-values + :help encoding-table + + +37.5. How does Vim specify the presence or absence of a byte-order mark? + +When reading a file, if the 'fileencodings' option includes "ucs-bom", Vim +will check for a byte-order mark. When writing a file, if the 'bomb' option +is set, Vim will write a byte-order mark on files whose encoding warrants +it. + +For more information, read + + :help 'fileencodings' + :help 'bomb' + + +37.6. What is the 'fileencoding' option? + +The 'fileencoding' option defines the particular encoding which Vim will +use to write a file. If empty, then the value of the 'encoding' option is +the default. + +For more information, read + + :help 'fileencoding' + + +37.7. What is the 'fileencodings' option? + +The 'fileencodings' option defines the heuristics used by Vim when opening +an existing file. It is a comma separated list of encodings. A special +name, "ucs-bom" is used to indicate that Vim should check for the presence +of a byte-order mark; however, it will not be recognised if it comes after +"utf-8". Normally, "ucs-bom" (if present) should be first in the list. + +When Vim opens a file, it checks it against the encodings listed in +'fileencodings'. The first one that matches is used. If there is no match, +then Vim sets 'fileencoding' to the null string, i.e., the value of +'encoding' will be used. + +For more information, read + + :help 'fileencodings' + :help 'encoding' + + +37.8. What is the 'termencoding' option? + +The 'termencoding' option defines how your keyboard encodes the data you +type. If empty, Vim assumes that it has the same value as 'encoding'. +Usually it should be set to something that matches your locale. + +For more information, read + + :help 'termencoding' + :help locale + + +37.9. What is the 'bomb' option? + +When reading a file with "ucs-bom" present in the 'fileencodings' option, +Vim will set the 'bomb' option on or off depending on the presence or +absence of a byte-order mark at the start of the file. When writing, Vim +will write a byte-order mark if the 'bomb' option is set. You may set or +unset it manually do make Vim write, or not write, the b.o.m. + +For more information, read + + :help 'bomb' + + +37.10. Where can I find an example of a typical use of all these options? + +There is a "tip", with explains them in different words with an example, at +http://vim.sourceforge.net/tip_view.php?tip_id=246 . + + +37.11. How can I insert Unicode characters into a file using Vim? + +Several methods are available: + +- Characters present on your keyboard can be typed in the usual way, even + those which require a "dead-key" prefix, like (for instance) the + circumflex on French keyboards. +- Characters for which a digraph is defined can be typed as two characters + prefixed by <Ctrl-K>. +- If you have set the 'digraph' option, you can enter the characters for + which a digrph is defined as <char1><BS><char2>. +- Any character can be entered by using a <Ctrl-V> prefix (or <Ctrl-Q> if + <Ctrl-V> is remapped to paste from the clipboard). + +For more information, read + + :help digraphs + :help 'digraph' + :help i_CTRL-V_digit + + +37.12. How can I know which digraphs are defined and for which characters? + +First set the 'encoding' option properly (for instance, to utf-8), then use +the :digraphs command to list the currently defined digraphs. + +For more information, read + + :help :digraphs + :help 'encoding' + + +============================================================================= + +Current Maintainer: Yegappan Lakshmanan +Last updated on: 2 January 2005 + |