Vi: Difference between revisions
Jump to navigation
Jump to search
mNo edit summary |
(→Miscellaneous Tips and Tricks: Interaction with the X clipboard) |
||
Line 313: | Line 313: | ||
vimdiff file1.txt file2.txt |
vimdiff file1.txt file2.txt |
||
</source>}} |
</source>}} |
||
* Interaction with X Clipboard |
|||
: '''vim''' can use the X clipboard if it has been compiled with the <tt>clipboard</tt> feature (run <code>vim --version</code> and see if you have <tt>+clipboard</tt> in the output). In that case, yanking to the '''<code>+</code>''' register, or simply selecting with the mouse, will actually copy in the X clipboard, hence allowing other applications, or even other instances of '''vim''' to exchange text snippets. Also, it will ease the copy-paste of indented text, since in that case, '''vim''' will first disable ''autoindentation'' before pasting the text (see option <code>paste</code>). |
|||
: On system like ''Ubuntu'', you need to install an instance of '''gvim''' (like package '''vim-gnome''' or '''vim-gtk''') to have feature <code>+clipboard</code> turned on (i.e. installing package '''vim''' is not enough). |
|||
== To Do == |
== To Do == |
Revision as of 21:55, 3 June 2010
Related Pages
This page is about the editor vim itself. The other related pages are
- Vimrc, which is dedicated to vim configuration settings and to the file ~/.vimrc.
External Links
- General
- My links on vi on del.icio.us.
- Official vim homepage.
- Fun
- Vi would not be vi without a bit of fun...
- Guides & Cheat sheets
- Very good post explaining why vi is superior and defeating common misconception (with examples) [1].
- Very good graphical cheatsheet
- Direct links: overview and per-lesson.
- Avoiding the ESC key [2]
- Vim map tutorial [3]
- Manual & Doc
Invocation
vi -p file1.txt file2.txt # Open each file in a different tab
view file.txt # View file in vim, with syntax highlighting... (read-only)
vimdiff file1.txt file2.txt # View differences in vim
Keyboard Shortcuts
Help
Shortcut | Description | Custom |
---|---|---|
Ctrl+] <LeftMouse> |
Jump to a subject. On azerty keyboard, do Ctrl-AltGr-] (but doesn't with Synergy). The mouse shortcut requires :set mouse=a
|
|
Ctrl+O Ctrl-T g<RightMouse> <C-RightMouse> |
Back. |
Splitting windows
Shortcut | Description | Custom |
---|---|---|
:{height}split [filename] | Split the screen into two windows, optionally opening another file (with the optional specified height) | |
:new | Open a new window on a new empty file | |
:close | Close the current windows | |
:only | Close all other windows | |
Ctrl-W w | Switch between windows | |
Ctrl-W + Ctrl-W - |
Increase / decrease window height | |
{height}Ctrl-W _ | Set window height, or maximize it if no height specified | |
:qa[ll] :wa[ll] |
Quit all windows / Write change for all windows |
Tabs
Shortcut | Description | Custom |
---|---|---|
:tab {command} | Execute the command in a new tab | |
:tabonly | Close all tabs but the current one | |
:tabn[ext] C-PageDown gt |
Go to the next tab page | |
:tabp[ext] C-PageUp gT |
Go to the previous tab page |
Miscellaneous
! If keys HJKLM have been remapped to MHJKL, shortcut below must be changed accordingly !
Shortcut | Description | Custom |
---|---|---|
Ctrl+[ | Same effect as Esc, but a bit faster/easier to type. Works on AZERTY keyboard in Windows, but not on Linux. | |
Ctrl+c | Same effect as Esc, but a bit faster/easier to type. Also works on AZERTY keyboard | |
Ctrl+Space | Same effect as Esc, but a bit faster/easier to type (see [4]). | Yes |
Ctrl+L | Omni and keyword completion. | Yes |
* | Search next occurence of word under cursor (Here more like this...) | |
# | Search previous occurence of word under cursor | |
gd | Search first occurence of current search | |
^d<BS> | Concatenate current line at the end of previous lines (assuming <BS> does wrap-around. See option whichwrap) | |
J | Concatenate current line with next line | |
/ ↑ | Recall previous search string | |
: ↑ | Recall previous command | |
. | Redo last command | |
Ctrl + o | to execute more commands (see [5]) |
Block Indenting
(ref: [6])
Shortcut | Description | Custom |
---|---|---|
>> | Indent current line | |
5>> | Indent 5 lines | |
Vjjjj>> | Indent 5 lines - same as above but using visual mode | |
>% | (while cursor is on a curly brace) Indent a curly-braces block | |
]p | paste & indent block based on surrounding text | |
={ | (C-indenting) Auto-indent the current block (:help = for more info) | |
== | (C-indenting) Auto-indent the current line | |
gg=G | Intends everything! |
Operator & motion
List of available operators:
c change d delete y yank into register (does not change the text) ~ swap case (only if 'tildeop' is set) g~ swap case gu make lowercase gU make uppercase ! filter through an external program = filter through 'equalprg' or C-indenting if empty gq text formatting g? ROT13 encoding > shift right < shift left zf define a fold g@ call function set with the 'operatorfunc' option
List of frequently used operator motion (see :help operator). They are used like diB (delete inner {} block)
iw | inner word | aw | a word | i[ | inner [] block | a[ | a [] block | i" | inner "" string | a" | a "" string |
iW | inner WORD | aW | a WORD | ib i( | inner () block | ab a( | a () block | i' | inner '' string | a' | a '' string |
is | inner sentence | as | a sentence | i< | inner <> block | a< | a <> block | i` | inner `` string | a` | a `` string |
ip | inner paragraph | ap | a paragraph | it | inner tag block | at | a tag block | ||||
iB i{ | inner {} block | aB a{ | a {} block |
Commands
Shortcut | Description | Custom |
---|---|---|
:s/search/replace/ | Search & replace - current line | |
:%s/search/replace/ | Search & replace - global scope |
Miscellaneous Tips and Tricks
- Inserting only a single character (http://vim.wikia.com/wiki/Insert_a_single_character).
- Macro
- qq to start recording a macro q. End macro with q again.
- @q to replay macro, followed by . to replay it again.
- Visual Block
- Ctrl-v to start VISUAL BLOCK mode.
- Shift-I to insert some text at the start of each line of selected block.
- wrap-around
- Set option whichwrap or ww that allows specified keys that move the cursor left/right to move to the previous/next line when the cursor is on the first/last character in the line.
- In Vim, <space> and <backspace> are set to wrap-around by default.
- Read-only viewer (with syntax highlighting):
$ vi -R sensitive_file
$ view sensitive_file
- Retab
- To convert tabs in current file to current tab settings, use command
:retab
[7]. For instance to convert tabs into space
:set expandtab :retab
- View differences in vim
vimdiff file1.txt file2.txt
- Interaction with X Clipboard
- vim can use the X clipboard if it has been compiled with the clipboard feature (run
vim --version
and see if you have +clipboard in the output). In that case, yanking to the+
register, or simply selecting with the mouse, will actually copy in the X clipboard, hence allowing other applications, or even other instances of vim to exchange text snippets. Also, it will ease the copy-paste of indented text, since in that case, vim will first disable autoindentation before pasting the text (see optionpaste
). - On system like Ubuntu, you need to install an instance of gvim (like package vim-gnome or vim-gtk) to have feature
+clipboard
turned on (i.e. installing package vim is not enough).
To Do
- Done Find a way to prevent vim to mess up with my register when deleting text.
- Auto-complete, use cursor keys instead of up/down to search in the drop down list.