收看世界杯并快记常用Vim命令:进阶(二)

继续之前的Vim之旅。

如何在Command模式对一行或多行执行打印命令?

如果是打印光标所在行,则可以使用如下命令:

1
:print # 或者:p

如果是打印指定行,比如行号为7的行:

1
:7p

如何打印指定范围内的行,例如打印第3到第7行:

1
:3,7p

执行以上命令后,光标会指向打印的最后一行。

Command模式下,.%的意涵是什么?

.代表当前行,%代表当前文件所有行,例如如果替换当前文件所有行中的第一个A为B:

1
:%s/A/B/

每行只会替换第一个满足的字符片段,除非加上/g

如何在Command模式下实现Visual模式的选择效果?

  1. 借用Visual模式来高亮指定范围

比如按下1G + VG,可以高亮第一行到最后一行的内容,然后在Command模式按下:后会出现:

1
:'<,'>

逗号前后分别代表高亮的首行和最后一行。

  1. 用模式指定范围

比如有一段文字:

1
2
3
4
5
1 <!DOCTYPE html>
2 <html></html>
3 <head><title>Practical Vim</title></head>
4 <body><h1>Practical Vim</h1></body>
5 </html>

要打印到的内容可以使用:

1
:/<html>/,/<\/html>/p

打印内容为:

1
2 <html></html>

记得转义符号。

这里打印的都是行,哪怕在</html>后面还有内容。

  1. 用偏移地址来指定范围

修改上一个例子:

1
:/<html>/+1,/<\/html>/p

打印为:

1
2
3
3 <head><title>Practical Vim</title></head>
4 <body><h1>Practical Vim</h1></body>
5 </html>

修改的例子中,/<html>/后进行了加一,表示从该行的后一行打印。

+后的数字可以省略,省略后默认为1。

如何在Command模式进行行拷贝/剪切?

在Command模式中,:copy简写为:t或者:co

比如将第六行复制,拷贝到当前行下方:

1
:6copy.

yyp相比,yyp会使用寄存器,而本方法不会。

Command模式剪切的使用方法类似拷贝,使用的命令为:m

如何取消Vim内容中的高亮?

可以在Command模式运行下列命令:

1
:nohl

如何在非Normal模式下,操作大量重复的任务?

比如我需要在一段文字的每行最后,添加一个分号,可以这样做:

首先将光标移动到第一行,然后键入VG,接着在Command模式输入normal A;,这样就能达到要求。

记住:执行normal命令时,Vim会默认将光标移动到行的起始处。

在Command模式中如何自动补全?

输入命令的一部分后,按下<C-d>,通过<Tab>顺序遍历,通过shift <Tab>反向遍历。

如何复制当前光标下的单词到Command模式的命令行?

进入Command模式,按下<C-r><C-w>

在Vim界面中,如何查看当前目录的内容?

1
:! ls

如何在Vim界面和命令行界面间进行切换?

有两种方式:

  1. 通过:shell$exit进行切换;
  2. 通过<C-z>$fg进行切换;

通过第二种方法,可以在shell命令行中键入jobs来查看后台的作业列表。

小结

本文主要用于熟悉Command模式下常用的一些操作。

参考

《Vim实用技巧》