vim 下的 ex 指令(底行命令模式下)

这篇博客详细介绍了 vim 底行命令模式(ex 模式)下的各种操作,包括复制、移动、删除、粘贴等行编辑命令,以及查找、替换、文件管理、多文件编辑等高级功能。通过学习,读者可以掌握在 vim 中高效使用 ex 命令,提升编辑效率。
摘要由CSDN通过智能技术生成


vim 的底行命令模式也叫 ex 命令模式,那么什么是 ex 呢?我们要先了解下编辑器背景。

在还是黑白终端的时代,有一个流行的面向行的编辑器叫 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 169,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 行
01 输入后按回车,光标移到文档的第 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! 强制保存,若文件属性为“只读”时,强制写入该档案
wallwa 把所有的缓冲区的内容写入文件,即保存所有的文件(如果你打开了多个文件)
q 如果只有 1 个文件则会退出 vim,多个文件则仅退出当前文件,前提是已经保存过了,如果没有保存 vim 会提醒你
q! 强制退出且不储存档案
x 保存文档并退出,它与 wq 的区别在于,文档没有修改过则不会保存,从而不会更新文件的时间戳,这样文件的 mtime,atime 就不会改变,因此就不需要重新编译。而 wq 命令,即使文件未修改也会进行保存,从而修改时间戳,这样就会触发重新编译。作为程序员常用此命令!
xa 保存并退出所有的文件
exit 保存所有文件并退出 vim

注意:! 表示强制执行,在 vim 中不能放在指令的前面,因为放在指令的前面表示执行 shell 的指令,例如,输入 !q 是错误的命令,因为shell 命令终端没有 q 这个指令。

(六)另存为文件/选取内容另存文件

命令 说明
w fileName 另存为 filename,将编辑的数据储存成另一个档案(类似另存新档)
saveas newfilename 另存为
n1,n2w filename 选择性保存从 n1 行到 n2 行的内容并以 fileName 作为新文件名;将 n1 行到 n2 行的内容另存为新文件,文件名为 filename;将 n1 行到 n2 行的内容保存到文件 filename
[range] w filename range 所指定的范围的内容另存为 filename
[range] w >> filename range 所指定的范围的内容追加到文件 filename,中如果是 > 则是覆盖
20,$ w filename 把第 20 行到文件最后 1 行的文本保存到文件 filename 中
30,$w >> filename 把 30 行到文件的最后 1 行追加到文件 filename 的末尾
w %.bak 另存当前文件为 b.txt.bak,"% 是当前文件名寄存器
f filename 改变编辑的文件名,这时再保存相当于另存为

(七)查找/搜索字符

命令 说明
/ 先按 / 键,再输入您想查找的字符(字符串),按下“回车”,会在光标后面匹配查找你输入的字符(字符串),如果找到光标会移到第 1 个包含目标字符(字符串)的行的首个字符处,可以按 n ,游标会向后依次跳到匹配的字符(字符串)处,按 N 游标会向前跳到字符(字符串)处
? 先按?键,再输入您想寻找的字符(字符串),按下“回车”,会在光标前面匹配查找你输入的字符(字符串),如果找到光标会移到第 1 个包含目标字符(字符串)的行的首个字符处,可以按 n ,游标会向前依次跳到匹配的字符(字符串)处,按
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值