FakeVim Modes and Commands

In the FakeVim mode, most keystrokes in the main editor are intercepted and interpreted in a way that resembles Vim. Most of the supported commands can be followed by a motion command or executed in visual mode, or they work with registers, or can be prefixed with a number of repetitions.

The following sections describe the commands emulated in the supported modes and how they diverge from Vim in functionality:

  • Normal
  • Visual
  • Command line (:)
  • Insert and replace

For more information about using Vim, see Documentation on the Vim web site.

Normal and Visual Modes

  • Basic movement, such as h/j/k/l, <C-U>, <C-D>, <C-F>, <C-B>, gg, G, 0, ^, $
  • Word movement, such as w, e, b
  • Inner/a movement, such as ciw, 3daw, ya{
  • f and t movement
  • [ and \c ] movement
  • { and } paragraph movement
  • Delete/change/yank/paste with register
  • Undo and redo
  • <C-A> and <C-X> increase or decrease a number in decimal, octal, or hexadecimal format (for example 128<C-A> on or before "0x0ff" changes it to "0x17f")
  • . repeats the last change
  • /search, ?search, *, #, n, N - most of regular expression syntax is used in Vim except that \< and \> are the same as \b in QRegExp
  • @ and q (macro recording and execution) special keys are saved as <S-Left>
  • Marks
  • gv goes to last visual selection; can differ if text is edited around it
  • Indentation using =, <<, >>, with movement, count, and in visual mode
  • to upper/lower, such as ~, gU, gu
  • i, a, o, I, A, and O enter insert mode
  • Scroll window, such as zt, zb, zz
  • Wrap line movement, such as gj, gk, g0, g^, g$

Command-Line Mode

  • :map, :unmap, :inoremap, and so on
  • :source sources vimrc files line-by-line
  • :substitute substitutes an expression in a range
  • :'<,'>!cmd filters through an external command (for example, sorts the lines in a file with :%!sort)
  • :<range>sor[t][!]
  • :.!cmd inserts the standard output of an external command
  • :read
  • :yank, :delete, :change
  • :move, :join
  • :20 goes to an address
  • :history
  • :registers, :display
  • :nohlsearch
  • :undo, :redo
  • :normal
  • :<, :>
  • set formatoptions=, see :h fo-table in the Vim documentation. Currently supported letters: fo-j

Insert Mode

  • <C-O> executes a single command and returns to insert mode
  • <C-V> inserts a raw character
  • <insert> toggles replace mode

Options

Use :set ... to set the options listed in the following table:

Long NameShort NameArguments
autoindentai
backspacebsindent, eol, start
blinkingcursorbc
clipboardcb
expandtabet
hlsearchhls
ignorecaseic
incsearchis
iskeywordiskA combination of the following characters: @, 48-57, _, 192-255, a-z, A-Z
relativenumberrnu
scrolloffso
shiftwidthsw
showcmdsc
smartcasescs
smartindentsi
smarttabsta
startoflinesol
tabstopts
tildeoptop
usecoresearchucs
wrapscanws

Vimrc Example

 " highlight matched
 set hlsearch
 " case insensitive search
 set ignorecase
 set smartcase
 " search while typing
 set incsearch
 " wrap-around when searching
 set wrapscan
 " show pressed keys in lower right corner
 set showcmd
 " tab -> spaces
 set expandtab
 set tabstop=4
 set shiftwidth=4
 " keep a 5 line buffer for the cursor from top/bottom of window
 set scrolloff=5
 " X11 clipboard
 set clipboard=unnamed
 " use ~ with movement
 set tildeop

 " mappings
 nnoremap ; :
 inoremap jj <Esc>

 " clear highlighted search term on space
 noremap <silent> <Space> :nohls<CR>

 " reselect visual block after indent
 vnoremap < <gv
 vnoremap > >gv

 " MOVE LINE/BLOCK
 nnoremap <C-S-J> :m+<CR>==
 nnoremap <C-S-K> :m-2<CR>==
 inoremap <C-S-J> <Esc>:m+<CR>==gi
 inoremap <C-S-K> <Esc>:m-2<CR>==gi
 vnoremap <C-S-J> :m'>+<CR>gv=gv
 vnoremap <C-S-K> :m-2<CR>gv=gv
 

See also Edit like in Vim and FakeVim.