Linux最全的vim快捷键
Linux最全的vim快捷键
vim是我最喜欢的编辑器,也是下第⼆强⼤的编辑器。 虽然emacs是公认的世界第⼀,我认为使⽤emacs并没有使⽤vi进⾏编辑来得⾼效。如果是初学vi,运⾏⼀下vimtutor是个聪明的决定。 (如果你的系统环境不是中⽂,⽽你想使⽤中⽂的vimtutor,就运⾏vimtutor zh)
正常模式:可以使⽤快捷键命令,或按:输⼊命令⾏。
插⼊模式:可以输⼊⽂本,在正常模式下,按i、a、o等都可以进⼊插⼊模式。
可视模式:正常模式下按v可以进⼊可视模式, 在可视模式下,移动光标可以选择⽂本。按V进⼊可视⾏模式, 总是整⾏整⾏的选中。
ctrl+v进⼊可视块模式。
替换模式:正常模式下,按R进⼊。
vim -c cmd file: 在打开⽂件前,先执⾏指定的命令;
vim -r file: 恢复上次异常退出的⽂件;
vim -R file: 以只读的⽅式打开⽂件,但可以强制保存;
vim -M file: 以只读的⽅式打开⽂件,不可以强制保存;
vim -y num file: 将编辑窗⼝的⼤⼩设为num⾏;
vim + file: 从⽂件的末尾开始;
vim +num file: 从第num⾏开始;
vim +/string file: 打开file,并将光标停留在第⼀个到的string上。
vim --remote file: ⽤已有的vim进程打开指定的⽂件。 如果你不想启⽤多个vim会话,这个很有⽤。但要注意, 如果你⽤vim,会寻名叫VIM的服务器;如果你已经有⼀个gvim在运⾏了, 你可以⽤gvim --remote file在已有的gvim中打开⽂件。
:e file --关闭当前编辑的⽂件,并开启新的⽂件。 如果对当前⽂件的修改未保存,vi会警告。
:e! file --放弃对当前⽂件的修改,编辑新的⽂件。
:e+file -- 开始新的⽂件,并从⽂件尾开始编辑。
:e+n file -- 开始新的⽂件,并从第n⾏开始编辑。
:enew --编译⼀个未命名的新⽂档。(CTRL-W n)
:e -- 重新加载当前⽂档。
:e! -- 重新加载当前⽂档,并丢弃已做的改动。
:e#或ctrl+^ -- 回到刚才编辑的⽂件,很实⽤。
:f或ctrl+g -- 显⽰⽂档名,是否修改,和光标位置。
:f filename -- 改变编辑的⽂件名,这时再保存相当于另存为。
gf -- 打开以光标所在字符串为⽂件名的⽂件。
:w -- 保存修改。
:n1,n2w filename -- 选择性保存从某n1⾏到另n2⾏的内容。
:
wq -- 保存并退出。
ZZ -- 保存并退出。
:x -- 保存并退出。
:q[uit] ——退出当前窗⼝。(CTRL-W q或CTRL-W CTRL-Q)
:saveas newfilename -- 另存为
:browse e -- 会打开⼀个⽂件浏览器让你选择要编辑的⽂件。 如果是终端中,则会打开netrw的⽂件浏览窗⼝; 如果是gvim,则会打开⼀个图形界⾯的浏览窗⼝。 实际上:browse后可以跟任何编辑⽂档的命令,如sp等。 ⽤browse打开的起始⽬录可以由browsedir来设置:
:set browsedir=last -- ⽤上次访问过的⽬录(默认);
:set browsedir=buffer -- ⽤当前⽂件所在⽬录;
:set browsedir=current -- ⽤当前⼯作⽬录;
:Sex -- ⽔平分割⼀个窗⼝,浏览⽂件系统;
:Vex -- 垂直分割⼀个窗⼝,浏览⽂件系统;
以下移动都是在normal模式下。
h或退格: 左移⼀个字符;
l或空格: 右移⼀个字符;
j: 下移⼀⾏;
k: 上移⼀⾏;
gj: 移动到⼀段内的下⼀⾏;
gk: 移动到⼀段内的上⼀⾏;
+或Enter: 把光标移⾄下⼀⾏第⼀个⾮空⽩字符。
-: 把光标移⾄上⼀⾏第⼀个⾮空⽩字符。
w: 前移⼀个单词,光标停在下⼀个单词开头;
W: 移动下⼀个单词开头,但忽略⼀些标点;
e: 前移⼀个单词,光标停在下⼀个单词末尾;
E: 移动到下⼀个单词末尾,如果词尾有标点,则移动到标点;
b: 后移⼀个单词,光标停在上⼀个单词开头;
B: 移动到上⼀个单词开头,忽略⼀些标点;
ge: 后移⼀个单词,光标停在上⼀个单词末尾;
gE: 同 ge ,不过‘单词’包含单词相邻的标点。
(: 前移1句。
): 后移1句。
{: 前移1段。
}: 后移1段。
fc: 把光标移到同⼀⾏的下⼀个c字符处
Fc: 把光标移到同⼀⾏的上⼀个c字符处
tc: 把光标移到同⼀⾏的下⼀个c字符前
Tc: 把光标移到同⼀⾏的上⼀个c字符后
;: 配合f & t使⽤,重复⼀次
,: 配合f & t使⽤,反向重复⼀次
上⾯的操作都可以配合n使⽤,⽐如在正常模式(下⾯会讲到)下输⼊3h, 则光标向左移动3个字符。
0: 移动到⾏⾸。
g0: 移到光标所在屏幕⾏⾏⾸。
^: 移动到本⾏第⼀个⾮空⽩字符。
g^: 同 ^ ,但是移动到当前屏幕⾏第⼀个⾮空字符处。
$: 移动到⾏尾。
g$: 移动光标所在屏幕⾏⾏尾。
n|: 把光标移到递n列上。
nG: 到⽂件第n⾏。
:n<cr> 移动到第n⾏。
:$<cr> 移动到最后⼀⾏。linux的vi编辑器命令
H: 把光标移到屏幕最顶端⼀⾏。
M: 把光标移到屏幕中间⼀⾏。
L: 把光标移到屏幕最底端⼀⾏。
gg: 到⽂件头部。
G: 到⽂件尾部。
ctrl+f: 下翻⼀屏。
ctrl+b: 上翻⼀屏。
ctrl+d: 下翻半屏。
ctrl+u: 上翻半屏。
ctrl+e: 向下滚动⼀⾏。
ctrl+y: 向上滚动⼀⾏。
n%: 到⽂件n%的位置。
zz: 将当前⾏移动到屏幕中央。
zt: 将当前⾏移动到屏幕顶端。
zb: 将当前⾏移动到屏幕底端。
使⽤标记可以快速移动。到达标记后,可以⽤Ctrl+o返回原来的位置。 Ctrl+o和Ctrl+i 很像浏览器上的 后退 和 前进 。
m{a-z}: 标记光标所在位置,局部标记,只⽤于当前⽂件。
m{A-Z}: 标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。
`{a-z}: 移动到标记位置。
'{a-z}: 移动到标记⾏的⾏⾸。
`{0-9}:回到上[2-10]次关闭vim时最后离开的位置。
``: 移动到上次编辑的位置。''也可以,不过``精确到列,⽽''精确到⾏ 。如果想跳转到更⽼的位置,可以按C-o,跳转到更新的位置⽤C-i。
`": 移动到上次离开的地⽅。
`.: 移动到最后改动的地⽅。
:marks 显⽰所有标记。
:delmarks a b -- 删除标记a和b。
:delmarks a-c -- 删除标记a、b和c。
:delmarks a c-f -- 删除标记a、c、d、e、f。
:delmarks! -- 删除当前缓冲区的所有标记。
:help mark-motions 查看更多关于mark的知识。
i: 在光标前插⼊;⼀个⼩技巧:按8,再按i,进⼊插⼊模式,输⼊=, 按esc进⼊命令模式,就会出现8个=。 这在插⼊分割线时⾮常有⽤,如30i+<esc>就插⼊了36个+组成的分割线。
I: 在当前⾏第⼀个⾮空字符前插⼊;
gI: 在当前⾏第⼀列插⼊;
a: 在光标后插⼊;
A: 在当前⾏最后插⼊;
o: 在下⾯新建⼀⾏插⼊;
O: 在上⾯新建⼀⾏插⼊;
:r filename在当前位置插⼊另⼀个⽂件的内容。
:[n]r filename在第n⾏插⼊另⼀个⽂件的内容。
:r !date 在光标处插⼊当前⽇期与时间。同理,:r !command可以将其它shell命令的输出插⼊当前⽂档。
c[n]w: 改写光标后1(n)个词。
c[n]l: 改写光标后n个字母。
c[n]h: 改写光标前n个字母。
[n]cc: 修改当前[n]⾏。
[n]s: 以输⼊的⽂本替代光标之后1(n)个字符,相当于c[n]l。
[n]S: 删除指定数⽬的⾏,并以所输⼊⽂本代替之。
注意,类似cnw,dnw,ynw的形式同样可以写为ncw,ndw,nyw。
[n]x: 剪切光标右边n个字符,相当于d[n]l。
[n]X: 剪切光标左边n个字符,相当于d[n]h。
y: 复制在可视模式下选中的⽂本。
yy or Y: 复制整⾏⽂本。
y[n]w: 复制⼀(n)个词。
y[n]l: 复制光标右边1(n)个字符。
y[n]h: 复制光标左边1(n)个字符。
y$: 从光标当前位置复制到⾏尾。
y0: 从光标当前位置复制到⾏⾸。
:m,ny<cr> 复制m⾏到n⾏的内容。
y1G或ygg: 复制光标以上的所有⾏。
yG: 复制光标以下的所有⾏。
yaw和yas:复制⼀个词和复制⼀个句⼦,即使光标不在词⾸和句⾸也没关系。
d: 删除(剪切)在可视模式下选中的⽂本。
d$ or D: 删除(剪切)当前位置到⾏尾的内容。
d[n]w: 删除(剪切)1(n)个单词
d[n]l: 删除(剪切)光标右边1(n)个字符。
d[n]h: 删除(剪切)光标左边1(n)个字符。
d0: 删除(剪切)当前位置到⾏⾸的内容
[n] dd: 删除(剪切)1(n)⾏。
:m,nd<cr> 剪切m⾏到n⾏的内容。
d1G或dgg: 剪切光标以上的所有⾏。
dG: 剪切光标以下的所有⾏。
daw和das:剪切⼀个词和剪切⼀个句⼦,即使光标不在词⾸和句⾸也没关系。
d/f<cr>:这是⼀个⽐较⾼级的组合命令,它将删除当前位置 到下⼀个f之间的内容。
p: 在光标之后粘贴。
P: 在光标之前粘贴。
aw:⼀个词
as:⼀句。
ap:⼀段。
ab:⼀块(包含在圆括号中的)。
y, d, c, v都可以跟⽂本对象。
a-z:都可以⽤作寄存器名。"ayy把当前⾏的内容放⼊a寄存器。
A-Z:⽤⼤写字母索引寄存器,可以在寄存器中追加内容。 如"Ayy把当前⾏的内容追加到a寄存器中。
:reg 显⽰所有寄存器的内容。
"":不加寄存器索引时,默认使⽤的寄存器。
"*:当前选择缓冲区,"*yy把当前⾏的内容放⼊当前选择缓冲区。
"+:系统剪贴板。"+yy把当前⾏的内容放⼊系统剪贴板。
/something: 在后⾯的⽂本中查something。
something: 在前⾯的⽂本中查something。
/pattern/+number: 将光标停在包含pattern的⾏后⾯第number⾏上。
/pattern/-number: 将光标停在包含pattern的⾏前⾯第number⾏上。
n: 向后查下⼀个。
N: 向前查下⼀个。
可以⽤grep或vimgrep查⼀个模式都在哪些地⽅出现过,
其中:grep是调⽤外部的grep程序,⽽:vimgrep是vim⾃⼰的查算法。
⽤法为: :vim[grep]/pattern/[g] [j] files
g的含义是如果⼀个模式在⼀⾏中多次出现,则这⼀⾏也在结果中多次出现。
j的含义是grep结束后,结果停在第j项,默认是停在第⼀项。
vimgrep前⾯可以加数字限定搜索结果的上限,如
:1vim/pattern/ % 只查那个模式在本⽂件中的第⼀个出现。
其实vimgrep在读纯⽂本电⼦书时特别有⽤,可以⽣成导航的⽬录。
⽐如电⼦书中每⼀节的标题形式为:n. xxxx。你就可以这样:
:vim/^d{1,}./ %
然后⽤:cw或:copen查看结果,可以⽤C-w H把quickfix窗⼝移到左侧,
就更像个⽬录了。
:s/old/new - ⽤new替换当前⾏第⼀个old。
:
s/old/new/g - ⽤new替换当前⾏所有的old。
:n1,n2s/old/new/g - ⽤new替换⽂件n1⾏到n2⾏所有的old。
:%s/old/new/g - ⽤new替换⽂件中所有的old。
:%s/^/xxx/g - 在每⼀⾏的⾏⾸插⼊xxx,^表⽰⾏⾸。
:%s/$/xxx/g - 在每⼀⾏的⾏尾插⼊xxx,$表⽰⾏尾。
所有替换命令末尾加上c,每个替换都将需要⽤户确认。 如:%s/old/new/gc,加上i则忽略⼤⼩写(ignore)。还有⼀种⽐替换更灵活的⽅式,它是匹配到某个模式后执⾏某种命令,
语法为 :[range]g/pattern/command
例如 :%g/^ xyz/normal dd。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论