- (一)复制
- (二)文档光标移动
- (三)删除
- (四)粘贴
- (五)保存/退出
- (六)另存为文件/选取内容另存文件
- (七)查找/搜索字符
- (八)搜索指令 vimgrep
- (九)使用搜索指令 grep
- (十)文本行移动
- (十一)匹配模式替换
- (十二)显示行号
- (十三)normal 命令
- (十四)文件信息统计
- (十五)打印输出
- (十六)文件管理器
- (十七)标记
- (十八)翻阅历史命令
- (十九)执行上一次的命令
- (二十)执行外部的 shell 命令
- (二十一)vim 与 shell 互相切换
- (二十二)直接执行 shell 命令
- (二十三)range 的使用示例
-
- 指定具体的行号
- 指定某个区间的行号
- 使用匹配模式 pattern 来指定范围
- (二十四)文件设置和取消密码
- (二十五)文件编码
- (二十六)文件格式
- (二十七)读取其它文件内容到当前文件中
- (二十八)多文件编辑/多窗口操作
-
- vim 同时打开多个文件
- 多文件间切换
- 编辑新文件
- 多标签形式编辑多个文件
- 以分割形式打开新窗口
- 从文件系统中选择要打开的文件
- 关闭窗口
- 窗口大小调整
- (二十九)显示缓冲区内容
- (三十)组合 ex 命令
- (三十一)vim 设置指令
在还是黑白终端的时代,有一个流行的面向行的编辑器叫 ed,ed 是一行一行地读取文件,即每次只显示一行,然后编辑这行。ed 是一个面向行的编辑器,也叫行编辑器。
当你希望显示某行,输入相关命令,“显示器”上才会显示那行。而控制这个“显示器”显示文本的命令行工具,就是 ex。vim 为了支持行编辑器 ed,所以加入“底行命令模式”,也就是说所有在“底行命令模式”下输入的指令都属于 ex 命令。所以 vim “底行命令模式”也叫 ex 模式。
这些 ex 指令由于是面向行的编辑命令,所以基本单位是行,比如拷贝和剪切都是以行为单位(也即最少为一行)。
所以 vim 中的 ex 命令都是 ed 编辑器所支持的命令,现代所用的流编辑器 sed 中的命令是 ed 命令的扩展。所以掌握了 Vim 中的 ex 编辑命令,稍加变通就连 sed 也一起搞定了。
Vim是全屏编辑器,因此不会像ed那样只显示一行。对于 vim,ex 命令编辑的一般都是当前行,这就相当于 ed 中所显示的那行,实际上也是文件的当前行。
我们使用 vim -e
命令打开一个文件,与使用 ex 命令打开一个文件,是一样的。
vim/vi 其实可以看成是 ex 的 visual mode
,ex 算是 vi/vim 的底层行编辑器。
举例体验下 ex 指令和vim 指令的区别,例如,将文档的第 3 行到第 6 行放到 14 行的后面,ex 命令只需要:
:3,6 m 14
vim 命令需要这样:
3G # 光标移到第3行
4dd # 向下删除4行,包含光标所在行,相当于剪切
14G # 光标移到第14行
p # 粘贴
(一)复制
命令
说明
co 或 copy 或 t
复制文本行。例如:9,15 copy 16
或 9,15 co 16
,将第 9
行至第 15
行的文本内容,复制到第 16
行的后面;例如:6t.
或 6t
表示将第 6
行文本复制到当前行的下一行;例如:.t$
或者 t$
表示将当前行复制到文本的末尾
m,n y
复制 m 行到 n 行的内容
2,5 y a
将第 2 行到第 5 行复制到寄存器 a
中
(二)文档光标移动
这里指的是文档的光标移动,不是命令行的光标移动。
命令 说明#
#
号表示一个数字,在冒号后输入一个数字,再按“回车”就会跳到该行了,如输入数字15
,再“回车键”,就会跳到文档的第15
行
$
输入美元符号 $
后,再按“回车”游标就会跳到文档的最后 1 行
0
或 1
输入后按回车,光标移到文档的第 1 行
注:上述命令是在“底行命令模式”下输入。
(三)删除 命令 说明m,n d
剪切(删除)m 行到 n 行的内容
-,+ d
删除游标所在行,上一行和下一行,共三行
-2,+2 d
删除游标所在行,前二行和后二行,共五行
.,$ d
将当前行至文档最后 1 行的内容全部删除
% d
删除文档的所有行
2,+50 d
删除文档第 2 行到游标所在行往后数第 50 行之间的内容。注意,这个是逗号 ,
,所以当前行是游标所在行
2; +50 d
删除文档第 2 行及其后面的 50 行文本,共计删除了 51 行文本。其实就是先跳到第 2 行,然后执行 +50 d
。注意,这里是分号 ;
,所以当前行就是文档的第 2 行,所以从第 2 行后面开始数 50 行
/old/; +10 d
删除游标所在行后面的第 1 个含有 old 的行及其后面的 10 行文本,合计删除了 11 行文本
注:上述的命令是在“底行命令模式”下输入。
(四)粘贴 命令 说明n pu
把默认寄存器的内容粘贴到第 n
行下面
n pu -
将行内删除寄存器 "-
的内容粘贴到第 n 行下面
n pu a
将寄存器 "a
的内容粘贴到第 n 行下面
n pu _
在第 n 行下面插入换行符,即插入一个空行
注:pu
是 ex 指令,是 put
的缩写,表示放置、粘贴之意;而 vim 的粘贴指令是 p
,不要混淆了!
w
把当前缓冲区(buffer)的内容写入文件,即进行保存动作,但不退出 vim
wq
保存后退出 vim
wq!
则为强制保存后退出vim(常用)
w!
强制保存,若文件属性为“只读”时,强制写入该档案
wall
或 wa
把所有的缓冲区的内容写入文件,即保存所有的文件(如果你打开了多个文件)
q
如果只有 1 个文件则会退出 vim,多个文件则仅退出当前文件,前提是已经保存过了,如果没有保存 vim 会提醒你
q!
强制退出且不储存档案
x
保存文档并退出,它与 wq
的区别在于,文档没有修改过则不会保存,从而不会更新文件的时间戳,这样文件