Vim使用心得——基本操作
前言
有一段时间特别执着于研究各种编辑器,从 Sublime,到 Vim,再到Atom, Emacs 等等,兜了一圈,现在又回到起点,继续使用 Sublime 和Vim 。现在发现,其实用什么编辑器并不重要,只要你用的顺手,能够高效的帮助你编码,就是适合你的编辑器。但是熟练使用 Vim 还是很有必要的,毕竟你不可能要求公司的服务器也为你装好 Sublime,没办法,这种时候,你必须要学会用 vi 。本文以及后续的几篇文章会系统的介绍 Vim 的基础,快捷键,命令,配置,以及各种优秀的插件。
Vim 一直被奉为神一样的编辑器,但是对新手一直不太友好,因为如果你想熟练的使用,不得不记忆很多快捷键和命令。但如果你已经比较熟练的掌握各种快捷键和命令,又碰巧你还富有极客精神,喜欢折腾自己,那么尝试各种各样的插件,DIY 自己的工作环境,又可以帮你打发大把无聊的时间。总之Vim是一款不管你玩多久,都玩不腻的编辑器,而且越玩越有趣。
5min 上手 Vim
想玩好 Vim ,学好基础的快捷键和命令还是必须的。虽然这部分需要记忆的东西比较多且乱,但是记住几个核心的,就足够日常使用了,剩下的就是边用边学呗,忘记了就看下面这张表,看多了,啥都会了。
Vim 快捷键和命令简图那么核心的内容整理如下:
首先,你需要知道,Vim 有四种模式:正常模式,编辑模式,命令模式,可视模式。刚进入 Vim 时,是处于正常模式的,在此模式下,你可以进行移动,查看操作,所以,此时你需要记住( h
, j
, k
,l
),分不清上下左右的,打开 Vim ,按几下就知道了,记不住的,多按几下,也就记住了。
如果你需要编码,按 i
进入编辑模式,敲代码,写文字就在此模式下完成,退出,请按 esc
。
在正常模式下,使用 x
删除当前光标所在字符。
在正常模式下,按 :
(冒号)进入命令模式,在此模式下,三个最简单的命令: :q
, :wq
和 :q!
,退出到正常模式,还是请按 esc
。
在正常模式下,按 v
进入可视模式,在这个模式下,使用 y
复制,使用 p
粘贴,当然还是使用 h
, j
, k
,l
来移动光标,选择需要复制的内容,退出到正常模式,仍然,请按 esc
。
总结下以上内容:
- 正常模式下,使用
h
,j
,k
,l
移动光标; - 使用
i
从正常模式进入编辑模式; - 使用
v
从正常模式进入可视模式,在该模式下,使用y
复制,使用p
粘贴; - 使用
x
删除单个字符; - 使用
:
(冒号)进入命令模式,在该模式下,使用:q
,:wq
和:q!
退出文件; - 使用
esc
从其他模式退回到正常模式。
有了上面的六条内容,基本上就能正常使用 Vim 了。当然,仅仅是能使用 Vim。想要用出高逼格的感觉,还需要继续学习,在日常使用时,留心记忆一些其他常用的快捷键和命令,如果你还富有折腾精神,用各种插件来 DIY 你的工作环境,也是很有趣味的。
15min 进阶使用 Vim
更高效的移动
如上文所说,除了使用 h
, j
, k
,l
,进行移动外,vim 还提供了多种更高效的移动方式。当然,这些移动的快捷键都需要在正常模式下使用。
- 按词移动
使用w
命令,移动到下一个单词的开始位置,如果需要移动多个单词,在w
前加前缀数字,比如3w
,移动到第三个单词的开始位置。
This is a line with example text
--->-->->----------------->
w w w 3w
相反的, 使用 b
命令向后移动到前一个单次的开始位置,如果需要跨越多个单次移动,在 b
前加数字前缀。
This is a line with example text ~
<----<--<-<---------<---
b b b 2b b
你也可以使用 e
来移动到下个单次的结尾或使用 ge
移动到前一个单词的结尾。
This is a line with example text
<-<--- -----> ---->
ge ge e e
vim按词移动总结下来就四个指令: w
, b
, e
, ge
。vim 会有一套默认分词符来判断某个字符是否是单词的一部分,如果想改变默认设置,可以使用 set iskeyword+=
或 set iskeyword-=
,这项内容将在后面 vim 配置中作详细讲解。
另外,vim还可以根据空白字符分子单词的方式进行移动,将 w
, b
, e
, ge
更换为 W
, B
, E
, gE
即可。
ge b w e
<- <- ---> --->
This is-a line, with special/separated/words (and some more).
<----- <----- --------------------> ----->
gE B W E
- 按行移动
按行移动记住三个命令:0
,^
,$
。刚开始分不清哪个对应行首,哪个对应行尾,就多用用,就记住了。
再放下面的图,三个快捷键的功能一目了然。
^
<------------
.....This is a line with example text
<----------------- --------------->
0 $
(.....代表行首的空格)
- 移动到指定行
记住5个命令:G
,gg
,H
,M
,L
| first line of a file ^
| text text text text |
| text text text text | gg
7G | text text text text |
| text text text text
| text text text text
V text text text text |
text text text text | G
text text text text |
last line of a file V
如果 G
命令不加数字,默认直接移动到文件最后一行,加前缀数字,则移动到指定行号,这个方法在使用 set num
给左边栏添加行号后,就特别好用。gg
是快速移动到文件第一行。
如果只是想在当前显示的内容中移动到第一行,中间一行或最后一行,可以使用 H
, M
, L
。( H
代表 HOME, M
代表 MIDDLE, L
代表 LAST)。
-
翻页
CTRL-U
和CTRL-D
互为逆操作,半个屏幕的进行向上或向下翻页。
CTRL-E
和CTRL-Y
互为逆操作,一行一行的进行翻页。
CTRL-F
和CTRL-B
互为逆操作,是整个屏幕进行向上或向下翻页。
zz
命令将光标所在当前行移动到 当前窗口的中间位置。 -
补充
最后再说两个命令:CTRL-G
查看文件当前位置,%
在()
,[]
,{}
这种可以互相匹配的字符之间移动。
总结: 基本上 能够熟练使用上面这些移动的命令和快捷键就足够日常使用了。也不需要刻意去记,平时多用,自然能够熟练使用。
更高效的删除
上文提到用 x
删除单个字符,在 x
加上数字前缀,就是删除当前光标开始往后指定数量的字符。
使用 d
命令,在其后缀添加各种移动命令,可以更高效的删除。比如 dw
删除一个单词。所以结合上文的各种移动命令,和 d
组合,你会发现,各种命令,乱七八糟,根本记不住。但是,简单的总结,按下 d
, 然后移动光标到你需要删除内容的末尾,就足够了。
如果删除一行文本,使用 dd
。
更高效的编辑
c
命令的用法和 d
命令基本一样,唯一的区别就是:在使用完 c
之后,如果不按 esc
,你会处于插入模式。
r
命令用于替换光标所在的字符,在 r
加前缀,替换指定数量的字符。
在可视模式下进行更快捷的选择操作
进入可视模式有两种:默认按 v
进入行可视模式,这时你移动光标都是按行进行选择的,使用 CTRL-V
进入块可视模式,这时可以选择一块区域进行操作。
在可视模式下,如果你想把光标移动到选择文本的另一端,可以使用快捷键 o
。如果在块可视模式下,你可以使用 o
和 O
在块区域的资格顶点移动。
更高效的复制粘贴
对于程序猿来说,使用最多的就是三个按键:CTRL
, C
, V
。那如果你用vim呢,情况就不是这样了。
在 vim 中,不能叫“复制-粘贴”,vim是有专有名词的,叫 "YANKING" 和 "PUT", 翻译过来就是 “拖拽-放置”。是不是瞬间感觉逼格高了很多呢。
vim 使用 "YANKING" 的首字母 y
,将选中的内容放入寄存器中(寄存器的内容会在后面讲到),用 p
将寄存器中的内容当前光标所在位置之后,复制一行文本的 快捷键是 yy
。
把 y
和上文中各种移动的快捷键组合,可以实现各种各样,乱七八糟的复制功能,当然,如果你用不习惯,直接进入可视模式,选择好文本后,直接用 y
进行复制,也是可以的。
粘贴快捷键 p
有大小写之分, p
是将文本放置在光标之后, P
是将文本放置在光标之前。
那么问题来了,如果你想把 vim 中的内容复制到其他编辑器中呢,单纯的 y
和 p
已经无效了。需要使用 "*y
将内容复制到系统剪贴板中才可以,同理如果需要从外部拷贝内容到 vim 中,使用 "*p
将内容放置在光标之后。
vim 的第五种模式
前面提到 vim 中有 正常模式,插入模式,可视模式,命令模式,编辑模式。现在要说第五种模式: 替换模式。
使用 R
进入替换模式,在替换模式下,你输入的内容会依次替换光标之后的文本。
总结
到目前为止,基本已经概括了 vim 中大部分常用的快捷键和命令了。掌握上面的进阶内容,也基本上可以实现脱离鼠标的境界。当然还是有很多命令和快捷方式本文没有涉及到。如果有兴趣,可以参考 vim 提供的官方教程:在命令行输入 vimtutor
, 或者在 vim 中输入 :help
。进行进一步的学习。本文也是参考了大量 vim 教程文档中的内容,也希望这篇文章对初入 vim 的朋友有所帮助。