vim 命令学习(高级篇)

时间:2021-11-29 00:22:57

【1】打开文件方式

(1)vim +n filename

作用:打开文件,并定位到第n行

例如:vim +103 2019-02-26-errorrepeat.txt

效果:打开2019-02-26-errorrepeat.txt文件,同时,光标定位在103行的行首。

(2)vim + filename

作用:打开文件,并定位到最后一行

例如:vim + 2019-02-26-errorrepeat.txt

效果:打开2019-02-26-errorrepeat.txt文件,同时,光标定位在最后一行的行首。

(3)vim +/pattern filename

作用:定位至第一次被pattern匹配到的行的行首

例如:vim +/"2019-02-26 17:03:21" 2019-02-26-errorrepeat.txt

效果:打开2019-02-26-errorrepeat.txt文件,同时,光标定位在第一次匹配到字符串"2019-02-26 17:03:21"的行的行首。

注意,此时按n键往下继续查找匹配字符串。

(4)vim +?pattern filename

作用:定位至第一次被pattern匹配到的行的行首

例如:vim +/"2019-02-26 17:03:21" 2019-02-26-errorrepeat.txt

效果:打开2019-02-26-errorrepeat.txt文件,同时,光标定位在第一次匹配到字符串"2019-02-26 17:03:21"的行的行首。

注意,此时按n键会往上继续查找匹配字符串。与上一个命令功能类似。

(5)vim -r filename

作用:在上次正用vim编辑文件时发生系统崩溃,恢复filename

【2】末行模式

(1)vim中执行shell命令,有以下几种形式:

1.1 [:!command]

作用:不退出vim正在编辑的文件,直接执行shell命令command,将命令执行结果输出显示在vim的命令区域,不会改变当前编辑文件的内容。

例如:[:!ls -l]

示例:打开文件study.txt,不关闭文件,直接执行命令[:!ls -l],执行输出显示在vim命令区域。

命令:

vim 命令学习(高级篇)

结果:

vim 命令学习(高级篇)

当然,特别的,也可以直接运行[:!bash]来启动一个bash shell并执行命令,不需要退出vim。

1.2 [:r!command]

将shell命令command的结果插入到当前行的下一行

例如 [:r!date] 读取系统时间并插入到当前行的下一行

示例:打开文件study.txt,不关闭文件,直接执行命令[:r!date],读取系统时间并插入到当前光标行的下一行。

命令:

vim 命令学习(高级篇)

结果:

vim 命令学习(高级篇)

1.3 [:起始行号,结束行号!command]

1.3.1 将起始行号和结束行号指定的范围中的内容输入让shell命令command处理,并将处理结果替换起始行号和结束行号指定的范围中的内容

例如 [:1,10!sort] 将1行到10行的内容进行排序,并将结果替换起始行号和结束行号范围中的内容

命令:

vim 命令学习(高级篇)

结果:

vim 命令学习(高级篇)

1.3.2 可以只指定起始行(即范围为一行)

例如 [:3 !tr [a-z] [A-Z]] 将第3行的小写字母转为大写字母

命令:

vim 命令学习(高级篇)

效果:

vim 命令学习(高级篇)

1.3.3 针对当前光标所在行,除可以指定行号外,也可以用.表示

例如 [:. !tr [a-z] [A-Z]] 将当前行的小写转为大写。试想一下,当你不确定行号的时候,只需要关注光标行,这样的形式是不是很高大上!

命令:

vim 命令学习(高级篇)

结果:

vim 命令学习(高级篇)

1.4 [起始行号,结束行号 w !command]

将起始行号和结束行号所指定的范围的内容作为命令command的输入,不会改变当前编辑的文件的内容。

例如 [:1,10 w !sort] 将1至10行的内容作为命令sort的输入,对1至10行的内容进行排序,但排序的结果并不会直接输出到当前编辑的文件中,而是显示在vim敲命令的区域。

命令:

vim 命令学习(高级篇)

结果:

vim 命令学习(高级篇)

特殊的情况,也可以下面这么用

[:62 w !bash] 将会把第62行的内容作为bash命令来执行并显示结果,而且不会改变当前编辑的文件的内容

同样的 [:. w !bash] 将当前行的内容作为bash命令来执行

例如,第3行内容为: ls -l 那么输入[:3 w !bash]就跟执行!ls -l是一样的效果。

命令:

vim 命令学习(高级篇)

结果:

vim 命令学习(高级篇)

如果你用的shell是bash shell 如果输入的是[:52 !bash],那么会把第52行的内容也就是ls -l作为命令执行,同时命令的输出结果会替换第52行的内容。

比如上例,执行结果:

vim 命令学习(高级篇)

注意以上两者其中的区别。

1.5 vim同时打开多个文件时,可以利用[:args]命令查看当前正在编辑的文件(正编辑的文件使用[]方括号括起来)

打开三个文件:

vim 命令学习(高级篇)

命令:

vim 命令学习(高级篇)

结果:

vim 命令学习(高级篇)

如上,[study.txt]为正在编辑的文件。

【3】命令模式

命令模式的操作技巧

【4】编辑模式

编辑模式的操作技巧

【5】其他

其他技巧

备注:为了区别内容中的冒号,所有命令均用[]方括号括起来了,使用过程中注意命令格式。

Good Good Study, Day Day Up.

顺序 选择 循环 总结