vim是一款优秀的命令行编辑器。

进入vim

vim file:打开或新建文件
vim +n file:打开文件,光标定位到第n行
vim + file:打开文件,光标定位到最后一行
vim -r file:恢复上次使用vim时崩溃的文件
vim file1 file2 ...:打开多个文件

vim工作模式

vim有3种基本模式:命令模式输入模式末行模式

vim基本模式.png

命令模式

打开vim编辑器模式进入命令模式,命令模式下可以进行光标移动、复制、剪切、删除、粘贴、撤销等一系列文本操作。

从其它模式切换到命令模式,可以使用ESC键。

  • 光标移动
h:左
j:下 
k:上
l:右
control+f:向前(下)翻页
control+b:向后(上)翻页
control+d:向前翻半页
control+u:向后翻半页
gg/H:光标定位到第一行(Highest)
ngg/nH:光标定位到第n行
M:光标定位到屏幕中间(Middle)
G/L:光标定位到最后一行(Loweset)
nG:光标定位到第n行
$:光标移动到行末
^:光标移动到行首(不包括空白)
0:光标移动到行首(包括空白)
  • x 删除字符
x:删除光标所在处的字符;
#x:删除光标所在处起始的#个字符;
xp:交换光标所在处的字符与其后面的字符的位置;
  • r 替换字符(replace)

  • d 删除行

d$:删除光标至行末
d^:删除光标至行首(不包括行首空白)
d0:删除光标至行首(包括行首空白)
dw:删除光标至词尾(包括空格)
de:删除光标至词尾(不包括空格)
db:删除光标至词首
dd:删除光标所在处的行;
#dd:删除光标所处的行起始的共#行;
  • c 改变命令(change, c):
    与d类似,额外多了一个进入输入模式的动作。
c$
c^
c0
cb
ce
cw
cc:删除光标所在的行,并转换为输出模式;
#cc:
  • y 复制
# 工作行为相似于d命令;
y$
y^
y0					
ye
yw
yb						
yy:复制一整行
#yy:复制#行
  • p 粘贴缓冲区的内容
    p(小写):缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后方;
    P(大写):缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方;

  • u 撤销

u:撤销上一步操作;
#u:撤销此前的#个操作;

撤销此前的撤销:Ctrl+r

  • .
    使用.可以重复执行上一个操作

输入模式

从命令模式进入输入模式可以使用iaoIAO6个指令。

指令 操作
i insert,在光标所在处输入
a append,在光标在处后方输入
o 在光标所在处的下方打开一个新行
I 在光标所在行的行首输入
A 在光标所在行的行尾输入
O 在光标所在处的上方打开一个新行

可视化模式:

v:按字符选定;
V:按行选定;
结合命令d, c, y完成删除行、删除字符、复制等操作

末行模式

末行模式下,可以对文本进行查找、替换,设置vim编辑环境,保存和退出文件。

# 退出vim
:q 直接退出
:q! 强制退出
:wq  保存并退出
:wq! 强制保存并退出

# 查找
/PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串;
?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串;
:/str/  正向搜索,将光标移动到下方第一个包含str的行;
:?str?  反向搜索,将光标移动到上方第一个包含str的行;
查找到匹配结果后,可以使用n将光标移到下一个匹配项,N移到上一个匹配项。

# 末行命令限定(在限定的行执行命令;也可以单独使用移动光标)
:n 特定的第n行,例如:5即第5行;
:.  当前行;
:$ 最后一行;
:m,n  从第m行到第n行;
:%  全文,同:1,$
:/pattern/  从光标所在处起始向文件尾部第一次被模式所匹配到的行;
:/pat1/,/pat2/  从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pat2匹配到的行结束之间的所有行;

# 替换 s
# 命令后选项:g 单行内所有匹配项  i 忽略大小写  c  确认是否替换   
# 关键词 old 替换为 new 
# 分隔符/可以换成其它非常用字符,如@#等 
:s/old/new              将光标所在行第一个 old 替换为 new  
:s/old/new/g            将光标所在行所有 old 替换为 new  
:%s/old/new/gc          全文执行替换,询问是否替换  
:3,10s/old/new/gic      将第3行到第10行内容替换,忽略大小写,且每个询问是否替换

# 获取帮助
:help
:help subject

#其它操作
:noh  取消高亮
...

# 末行模式下还可以不退出vim执行shell命令
:!commond

# 设置vim选项
# 在末行模式下的设定,仅对当前vim进程有效;如果希望永久有效,可以修改/etc/vimrc(全局)、~/.vimrc(个人)。
1、行号
显示:set number, 简写为set nu
取消显示:set nomber, set nonu
2、括号匹配高亮
匹配:set showmatch, set sm
取消:set nosm
3、自动缩进
启用:set ai
禁用:set noai
4、高亮搜索
启用:set  hlsearch
禁用:set nohlsearch
5、语法高亮
启用:syntax on
禁用:syntax off 
6、忽略字符大小写
启用:set ic
禁用:set noic

多文件操作

vim FILE1 FILE2 ...

在文件间切换:

:next  下一个
:prev  上一个
:first   第一个 
:last   最后一个 

退出所有文件:

:wqall 保存所有文件并退出;
:wall  保存所有文件
:qall  退出所有文件

多窗口操作

vim除了可以同时编辑多个文件,还可以以多个窗口打开文件

# 纵向
vim -o file1 file2 file3 ...
# 横向
vim -O file1 file2 file3 ...
# 在窗口间切换(先按control+w,再按w或其它)
control+w+w|h|j|k|l
w:依次切换
h:向左切换
j:向下切换
k:向上切换
l:向右切换

vim自带的练习教程:vimtutor