nvim trick
Some Neovim tricks
[nvim]{.spurious-link target=”nvim”} [keymap]{.spurious-link target=”keymap”}
\< C-Y > scroll-up
\<C-U> scroll-down
H, M, L go to high/middle/low it should move to first non empty line
d33| | moves the cursor to the specified column in the current line
Find replace
& stands for the matched words
press * and do :%s//xxx/ the search is omitted and it is the current selected word
Move around
+ - can also be used to move to + Move to first none empty char of next line
<CR> can move to head of next line
word and WORD
The difference between words and WORDS is that the former only include letters, digits and numbers.
word can be a sequences of spaces. do dw inside a sequence of space and see what you get. w, b, e, ge are word motions.
W move on WORD boudnary. following are WORD helloVimWord(){}, [1,2,3,4,5] etc
i a; there is also I and A insert at begin of line and end of line
Y yank; it is same as yy; P past above
s and S was remapped in hop/leap. s -> cl S -> cc
**
X delete char left of cursor (\<BS> in norm mode)
command range and g / v command
:. current line
:% entire file
`$~last line
*** ~:12` line 12
:12,14s/import/export/g replace from line 12 to 14
:.,.+12 from current line to current line + 12
:.,$ from current line to eof
:g/import/d delete lines include import
:g!/import/d delete lines do NOT include import it same as v command :v/import/d
motion vs / command
all motion can be replace with find / command. e.g dft can also be d/t<cr>
delete
d0 delete to begin of line
use s to delete
-
:%s/abc//<CR> -
it can also write as
:%s/abc<CR>
db backward delete word
dvb and dve delete inclusive ; dvge;
das dap
dF* search backward and delete
with surround di* ca* da* etc
dh delete 1 char to the left; d3h delete 3chars to the right
*
#vimg
g0 go to 0; same as gg
ge jump back end of word
g& it similar to macro, a command in Vim that repeats the last substitution (:s) command on all lines in the file. It's equivalent to :%s//~/g, where // reuses the last search pattern, and ~ reuses the last replacement string.
gJ join [cnt] lines J: join with remove indent, also works in visual mode
gq format text
wrap: gj, gk jump inside long lines , g$, g^
g<C-A> in visual mode/range, increase number of each line based on fist value in range. e.g. 1 1 1 1 -> 1 2 3 4
gu|U + text obj capitalization, e.g. gu$ guW, guu whole line, gU3w, gufk (lowcase to letter k)
`g~` similar to gu|U
gv re-select text
g& apply the replace changes to full document. It is helpful when you need to replace in one line and check if replace is correct and apply to full text
*
Search and replace
*%s/.$/&;/* .$ match a none empty line `&~is what was matched
*** ~:v/^\(/s/\)/;`
-
:vinverse find/^$is empty line -
/s/$/;command ofv; replace EOL to;
\ze: \ze Zero-width ending split the search pattern into two, first half is match can be used later on, e.g. end\ze(if|for) match both endif and endfor but the matched pattern is end so :s/\vend\ze(if|for)/&_/g replace endif to end_if
put=range(1,10) add 1~10 to buffer
<C-R>= e.g. <C-R>=range(1,10) use register with value of expression
indentation
v> indent current line to the right
>G indent from current line the the end of file to the right
=G remove indent from current to eof
>{ indent to right from begin of block to current line
= in visual mode, indent current line (based on context)
>> indent to the right with normal mode
https://www.vimgolf.com/challenges/596dd9ca448256000c000011
https://www.vimgolf.com/challenges/5ba020f91abf2d000951055c
Fugutive diff merge
reference http://vimcasts.org/episodes/fugitive-vim-resolving-merge-conflicts-with-vimdiff/
Gdiff are used to merge diff conflicts. You can also use Gvdiffsplit! It opens
left(the branch you used to work on, or local branch) . The buff is named as fugutive//2
middle the current working file,
right buffer which is the remote branch that you trying to merged into current branch (remote). the buffer named fugutive://3
If the cursor in middle buffer, diffget //2 get changes from left file and use ]c to jump to next merge conflict. and use diffupdate to refresh file
when done, use only to close other windows
You can use diffput 1 to put changes throught. in fugutive, dp default alias to diffput 1
Gwrite!
Diffview
If git in merge status, DiffViewOpen will show the conflicts files
<Leader>co|ct|cb|ca select Ours, Theirs, Base and All or dx choose none
**