Vim
Variables
In order to see variables you can simply use :let <variable>
or
without a variable to see all the variables defined.
Variables have also scope (see :help internal-variables
)
Prefix | Description |
---|---|
g: |
global variables |
b: |
local buffer variables |
w: |
local window variables |
t: |
local tab page variables |
s: |
script-local variables |
l: |
local function variables |
v: |
Vim variables |
a: |
function argument |
Predefined variables
Environment
Command | Description |
---|---|
:abbreviate |
list abbreviations |
:args |
argument list |
:augroup |
augroups |
:autocmd |
list auto-commands |
:buffers |
list buffers |
:breaklist |
list current breakpoints |
:cabbrev |
list command mode abbreviations |
:changes |
changes |
:cmap |
list command mode maps |
:command |
list commands |
:compiler |
list compiler scripts |
:digraphs |
digraphs |
:file |
print filename, cursor position and status (like Ctrl-G) |
:filetype |
on/off settings for filetype detect/plugins/indent |
:function |
list user-defined functions (names and argument lists but not the full code) |
:function Foo |
user-defined function Foo() (full code list) |
:highlight |
highlight groups |
:history c |
command history |
:history = |
expression history |
:history s |
search history |
:history |
your commands |
:iabbrev |
list insert mode abbreviations |
:imap |
list insert mode maps |
:intro |
the Vim splash screen, with summary version info |
:jumps |
your movements |
:language |
current language settings |
:let |
all variables |
:let FooBar |
variable FooBar |
:let g: |
global variables |
:let v: |
Vim variables |
:list |
buffer lines (many similar commands) |
:lmap |
language mappings (set by keymap or by lmap) |
:ls |
buffers |
:ls! |
buffers, including "unlisted" buffers |
:map! |
Insert and Command-line mode maps (imap, cmap) |
:map |
Normal and Visual mode maps (nmap, vmap, xmap, smap, omap) |
:map<buffer> |
buffer local Normal and Visual mode maps |
:map!<buffer> |
buffer local Insert and Command-line mode maps |
:marks |
marks |
:menu |
menu items |
:messages |
message history |
:nmap |
Normal-mode mappings only |
:omap |
Operator-pending mode mappings only |
:print |
display buffer lines (useful after :g or with a range) |
:reg |
registers |
:scriptnames |
all scripts sourced so far |
:set all |
all options, including defaults |
:setglobal |
global option values |
:setlocal |
local option values |
:set |
options with non-default value |
:set termcap |
list terminal codes and terminal keys |
:smap |
Select-mode mappings only |
:spellinfo |
spellfiles used |
:syntax |
syntax items |
:syn sync |
current syntax sync mode |
:tabs |
tab pages |
:tags |
tag stack contents |
:undolist |
leaves of the undo tree |
:verbose |
show info about where a map or autocmd or function is defined |
:version |
list version and build options |
:vmap |
Visual and Select mode mappings only |
:winpos |
Vim window position (gui) |
:xmap |
visual mode maps only |
Registers
There are ten types of registers (see :help registers
):
- The unnamed register
""
- 10 numbered registers
"0
to"9
- The small delete register "-
- 26 named registers
"a
to"z
or"A
to"Z
- Three read-only registers
":
(most recent executed command line),".
(last inserted text) and"%
(relative file path) - Alternate buffer register
"#
- The expression register
"=
- The selection and drop registers
"*
,"+
and"~
- The black hole register
"_
- Last search pattern register
"/
Commands
Command | Description | Binding |
---|---|---|
:argdo |
execute action on each file passed as argument when vim was started |
|
:bufdo |
execute action on each buffer | |
:diffthis |
make the current window part of the diff window | |
:echom[sg] |
print message | |
:exe[cute] |
execute command passed as string | |
:mks |
save session to disk | |
:norm[al] |
run command in normal mode | |
:r[ead] !{cmd} |
execute {cmd} and insert the standard output |
|
:scrollbind |
Binds two or more windows to scroll together | |
:vsplit |
split vertically | Ctrl-w v |
:windo |
execute action on the visible buffers opened |
Quickfix and location list
- https://freshman.tech/vim-quickfix-and-location-list/
Substitutions
Use &&
to repeat the last substitution.
- http://vimregex.com/
Scripting
- https://devhints.io/vimscript
Normal mode
g Ctrl-g
: give information about selected textgi
return in insert mode in the last place you exited itgv
reselect the last selectiong;
go to older position in the changelistg,
go to newer position in the changelistCtrl-e
: move viewport one line upCtrl-y
: move viewport one line down
Shortcut | Description |
---|---|
Ctrl-u |
move a page up |
Ctrl-d |
move a page down |
zz |
move the current line at the center |
Window
Shortcut | Description |
---|---|
Ctrl-w + K |
change vertical split to horizontal |
Ctrl-w + H |
change horizontal split to vertical |
Insert mode
Ctrl-r %
: relative path of the current fileCtrl-t
: indent current lineCtrl-d
: backdent current line
Cookbook
Multiline editing
It's not immediate like other editors but it's possible, the best option is to use a plugin like vim-multiple-cursors.
Append text
This works out of the box in vim: with Visual block mode select the lines
you want to append text to, press $
to move the cursor at the end of line
and then press A
to start append mode. After you terminated to insert the
text, ESC
and wait the text to update.
Edit multiple files at once
Plugins
- ALE Asynchronous Lint Engine is a plugin providing linting (syntax checking and semantic errors)