用vim优雅的编辑
Vim是从vi发展起来的一个超简洁的文本编辑器,全称为
Vi IMporved
。使用vim可以实现全键盘操作,摆脱鼠标操作痛苦。
Vim简介
Vim的设计理念是命令的组合。在Vim中可以使用各种各样的组合命令来完成我们的编辑。模式是一个编辑器所必备的,几乎所有的编辑器都会有插入和执行两种模式,可以用键盘和鼠标完成模式的切换和命令的执行。Vim具有挺多种模式,常用的有普通模式、插入模式、可视模式和命令行模式。
其中Vim强大的编辑能力有很大一部分来源于它的普通模式,而普通模式的强大就在于命令的组合。在本文的后半部分我们将看到普通模式下的一些常用命令。
在正式开始盛宴之前,我们先来几条小小的约定。
1. 停顿时请移开画笔。
不同于其他编辑器将插入模式作为默认状态,普通模式才是Vim的默认状态。所以,只在编写代码的那几分钟内进入插入模式,其他时候请保持普通模式。
2. 告别esc
,远离方向键。
Vim可以有两种方式实现普通模式和插入模式之间的切换,esc
和<C-[>
(就是Control+[
),可两种方式都很难操作,esc
太远,Control
偏下,为此我们可以尝试调换Capslock
和Control
的位置,并将<C-[>
作为默认切换方式。
方向键由于距离太远将会极大的减缓我们的操作效率,Vim中我们将用hjkl
分表代表上下左右。
3. 强大的重复操作符.
之所以将它放在约定中,是因为使用重复操作会呈几何倍数的提高我们的效率。.
命令可以重复修改上次的操作,它是Vim中最强大的多面手。
插入模式
前面提到大部分命令在普通模式下执行,不过有些功能在插入模式下可以更好的执行。
-
<C-a>
跳转到当前行首 -
<C-b>
向前移动一个单词 -
<C-d>
减少缩进 -
<C-h>
删除前一个字符(同Backspace
) -
<C-k>
删除当前行光标后面的内容 -
<C-w>
删除前一个单词 -
<C-u>
删除至行首 -
<C-t>
增加缩进
这里只列出几个较常用的,更多可以查看:help insert-index
,里面有很详细的命令解释,另外这些命令并不是Vim独有的,在shell中一样可以用。
普通模式
普通模式下我们可以执行大多数操作,并可以将操作符和动作命令结合起来实现强大的功能。还记得怎么进入普通模式吗?对了,就是<C-[>
。
1. 移动和跳转
单行跳转
-
h
左移一个字符 -
j
下移一个字符 -
k
上移一个字符 -
l
右移一个字符 -
10h
向下移动10行
单词跳转
-
w
跳到下一个单词的词首 -
e
跳到下一个单词的词尾 -
b
跳到上一个单词的词首 -
nw
跳转到后面第n个单词
行内跳转
-
^
跳到当前行的开头(忽视行首空格) -
0
或|
跳到当前行的开头(包括行首空格) -
$
或 跳到当前行的行尾 -
g _
跳到当前行的行尾(不包括空格) -
f x
跳到本行的下一个x处 -
F x
跳到本行的上一个x处 -
;
重复上一次跳转 -
n|
跳到当前行的第n列
文档内跳转
-
gg
跳到文档第一行 -
G
跳到文档最后一行 -
ngg
或nG
跳到文档的第n行 -
+
跳到下一行行首 -
-
跳到上一行行首
当前屏幕跳转
-
H
移动到当前屏幕的顶端 -
M
移动到当前屏幕的中间 -
L
移动到当前屏幕的底端
移动当前行
-
zz
移动当前行到中间 -
zt
移动当前行到屏幕顶端 -
zb
移动当前行到屏幕底端
2. 搜索和标记
文档内检索
-
/
+xxx
查找xxx -
*
查找下一个光标所在的单词 -
#
查找上一个光标所在的单词 -
n
跳到下一个查找的单词 -
N
跳到上一个查找的单词 -
:noh
取消本次高亮
文档内标记
-
m x
标记当前位置为x -
' x
跳到标记为x的位置 -
' '
跳到跳转之前的位置
3. 即时执行操作
切换到插入模式
-
i
插入到光标前 -
a
插入到光标后 -
I
插入到当前行的开始 -
A
插入到当前行的末尾 -
o
向下插入一行 -
O
向上插入一行
普通模式下编辑
-
r
修改当前字符(改完后自动切换) -
R
修改自光标起及之后的字符(需手动切换到普通模式) -
x
删除当前字符 -
X
删除光标前的字符 -
s
删除当前字符并进入插入模式 -
S
删除当前行并进入插入模式 -
c
修改(一般用于合成命令) -
d
剪切(一般用于合成命令) -
y
复制(一般用于合成命令) -
dd
删除当前行 -
yy
复制当前行 -
p
粘贴到当前行的下方 -
P
粘贴到当前行的上方 -
~
大小写反转
撤销和恢复撤销
-
u
撤销上一步操作 -
<C-r>
恢复上一步操作
缩进
-
>
增加缩进 -
<
减少缩进 -
=
自动缩进
可视模式
Vim的可视模式类似于其他编辑器按住鼠标拖动选择区域,却又有些许不同,在可视模式下可以使用普通模式的命令来操作。
激活可视模式
-
v
激活面向字符的可视模式 -
V
激活面向行的可视模式 -
<C-v>
激活面向列的可视模式 -
gv
重选上次的高亮区域
切换可视模式
-
o
在可视模式下可以切换选取的活动端
命令模式
在命令模式下我们可以为Vim开辟一块新天地。命令模式下,可以使用复杂的命令。在编辑模式下键入:
,光标就跳到屏幕最后一行,并在那里显示冒号,此时已进入命令模式。这篇文章不过多介绍命令模式。
打开、保存和退出
-
:e test.txt
在打开的vim中打开test.txt文件 -
:w
保存当前文件 -
:q
退出当前文件 -
:w test2.txt
另存文件为test2.txt(原文件依然存在) -
:qall
退出多个文件 -
:q!
强制退出当前文件(所做的修改将不会保存) -
:wq
保存并退出当前文件
分屏
-
:sp(lit)
上下分屏 -
:vsp(lit)
左右分屏 -
<C-w>
+hjkl
在不同屏之间切换
标签页
-
:tabnew
新建标签页 -
:tabnew filename
在新标签页中打开文件 -
:tabn(ext)
跳到下一个标签页 -
:tabN(ext)
跳到上一个标签页 -
:tabfir(st)
跳到第一个标签页 -
:tabl(ast)
跳到最后一个标签页 -
:tabo(nly)
关闭除当前标签页以外的其他标签页
芳草有情皆碍马,好云无处不遮楼。编辑器加IDE成百上千,没有孰好孰坏,只要是对的便是最好的。学问,重在内功修炼。