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/\)/;`
-
:v
inverse 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
**