File | Description |
---|---|
.exrc |
basic initialization file for the original ex/vi, in case vim isn't installed. It has to be symlinked to ~/.exrc |
.vimrc |
main initialization file. It has to be symlinked to ~/.vimrc |
.vimrc.post |
contains personal commands invoked after .vimrc . You can create this file with your own customizations here. |
setup.sh |
sets up the files to be ready for vim. |
Requires:
- curl
- gpg [just for my private .vimrc.post.gpg]
[ -d ~/.vim ] && mv ~/.vim ~/.vim-OLD
git clone https://github.com/huyz/dot-vim.git .vim
cd ~/.vim
./setup.sh
These are useful commands that are easy to forget because they're needed only occasionally.
Mapping | Description |
---|---|
cgn + . |
Incrementally change matches |
q: q/ q? |
Open comand-line window (^F if already in command-line) |
\`. |
Jump to last modification |
gv |
Reselect last visual selection |
ga |
ASCII/Unicode value of current character |
gP then . … |
Paste successively |
viw cis dap yab ci' cit dat ci` |
Operations on word, inner sentence, paragraph, () block, quoted strings, html tags |
/<C-R><C-W> |
Pull current word into search |
/<C-R>" |
Pull in last yank |
[I |
Show lines that match current word |
`[ or `] |
Go to beginning/end of last change |
<C-X><C-L> |
Starts line completion |
<C-X><C-K> |
Starts dictionary completion |
== |
Reindent line(s) |
:ce |
Center line(s) |
!!date |
Replace current line with date (different from my \-d ) |
:-1r |
Read in file above current line |
:argdo %s/f// |
Operate over all files listed on command line |
:windo %s/f// |
Operate over all viewable split windows |
:bufdo normal :%s,^,^R%,^M |
perform an operation on all buffers when a register needs to be accessed (note that ^R ^M are typed by hitting control-v and then control-r or -m) |
:bufdo exe "normal :%s,^,\<C-R>%,\<CR>" |
same as above |
:verbose set history? |
Find where an option is set |
:w !sudo tee % |
Save the current file with sudo privileges |
I tend to forgot I defined these mappings:
Mapping | Description |
---|---|
<C-s> |
Save buffer |
<C-q><C-s> |
Save buffer and reload configs |
<C-q><C-r> |
Reload configs |
ZA |
Exit vim but prompt for unsaved buffers |
Zw |
Close buffer without saving |
gb |
Re-select last pasted block |
Q gq <M-q> |
In visual mode, format by par , vim |
<M-f><C-S-BS> |
Discard consecutive blank lines |
<M-x>#- or #= or#~ |
Underline line |
<D-M-S--> <D-M-S-+> |
Increment/decrement (all-mode alternative to <C-a> and <C-x> ) |
i_<C-s> |
Swap last two characters (my own function) |
Mapping | Description |
---|---|
\ww |
Set first or second window to swap |
Mapping | Description |
---|---|
<C-q><C-w> |
Close buffer without messing up split window |
Mapping | Description |
---|---|
<C-n> or n |
Select word at cursor, or next occurrence of current selection |
<C-S-n> or N |
Select previous occurrence of current selection |
<M-q> or q |
Skip current occurrence |
<M-S-Q> or Q |
Unselect occurrence |
<M-S-G> or \\A |
Select all occurrences |
<M-S-/> or \\/ |
Select by regex |
<C-Down> |
Add cursor(s) vertically |
\\S or \\gS |
Reselect last |
Mapping | Description |
---|---|
-abc |
Highlight n-character matches |
_ |
Go to previous n-character match |
+ |
Go to next n-character match |
\\w |
Highlight consecutive targets of word motion |
\\t |
Highlight consecutive targets of character motion |
Mapping | Description |
---|---|
,w ,b ,e |
like regular motions but respecting word boundaries |
ci,w di,w |
like regular change/delete but respecting word boundaries |
c2i,b y2i,b v2i,b |
change/yank/select the current word and previous word |
Mapping | Description |
---|---|
ysiw' |
surround inner word with single quotes |
yss) |
surround sentence with parentheses and no space |
ys2w( |
surround next 2 words with parentheses and spaces |
ySS{ |
surround sentence with braces on their own lines |
v_S{ |
in line visual mode, surround lines with braces on their own lines |
v_gS| |
in block visual mode, surround each line with bars, with alignment |
dst |
delete surrounding tags |
cs't |
change surrounding quotes to tag with prompt |
csw( |
shortcut for ysiw( |
My more concise shortcuts:
Mapping | Description |
---|---|
ys` |
surround inner word with backticks |
yS* |
surround outer word with ** markdown bold ** |
v_sw |
surround with [[ wikilink ]] |
Mapping | Description |
---|---|
<C-z> |
Toggle value (to match <C-a> and <C-x> |
Mapping | Description |
---|---|
<M-Up> |
Move current character/selection up |
<M-Left> |
Move current character/selection left |
Mapping | Description |
---|---|
V_gA= |
in line visual mode, start aligning around first = character |
gAip= |
start aligning for inner paragraph |
V_\\ |
In Github-Flavored Markdown file, re-align current table |
Mapping | Description |
---|---|
gr{motion} |
Replace {motion} text with register |
grr |
Replace line(s) with register |
Mapping | Description |
---|---|
:Subvert |
case-preserving subsitution |
Mapping | Description |
---|---|
:S |
PCRE2 substitution |
<M-s>/ |
Toggle PCRE search |
Mapping Description | |
---|---|
cx{motion} |
Sets first or second text to swap/exchange |
cxx |
Sets first or second line to swap/exchange |
cxx |
Sets first or second line to swap/exchange |
<M-x><M-x> |
Swap last two words (my own function) |
Mapping | Description |
---|---|
⇧⌥. or <. |
Shift function argument right |
Mapping | Description |
---|---|
cia |
Change function argument |
daa |
Delete function argument |
Mapping | Description |
---|---|
vai |
Select indentation level + line above |
vii |
Select indentation level |
vaI |
Select idnentation level + line below (useful for closing bracket) |
Mapping | Description |
---|---|
<M-m>f |
Reformat table |
<M-m>t |
Toggle table mode |
<M-m>i |
Insert column |
<M-m>a |
Append column |
<M-m>x |
Delete column |
<M-m>d |
Delete row |
Mapping | Description |
---|---|
gS |
Trigger smart split wherever cursor is |
gJ |
Trigger smart join wherever cursor is |
Mapping | Description |
---|---|
<M-c>: |
Trigger completion |
\\^U |
Convert :emoji_name: into unicode emojis |