Vi

From miki
Revision as of 22:21, 4 May 2010 by Mip (talk | contribs) (→‎Splitting windows: tabbing)
Jump to navigation Jump to search

Links

See Vimrc for configuration settings to store in the file ~/.vimrc.

General
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
  • Avoiding the ESC key [2]
  • Vim map tutorial [3]
Manual & Doc

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
:tab {command} Execute the command in a new tab
:tabonly Close all tabs but the current one

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

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.