Vi

From miki
Revision as of 21:55, 3 June 2010 by Mip (talk | contribs) (→‎Miscellaneous Tips and Tricks: Interaction with the X clipboard)
Jump to navigation Jump to search

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
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

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 option paste).
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.