JSRUN 用代码说话

Normal命令

编辑教程

Normal命令

目前为止我们已经介绍了几个最为常用的Vimscript命令,但都跟日常中在normal模式下处理文本的方式无关。 有没有一种办法能把我们的脚本跟日常的文本编辑命令结合起来呢?

答案显然是肯定的。之前我们已经见过normal命令,是时候更详细地介绍它了。 执行下面的命令:

:normal G

Vim将把你的光标移到当前文件的最后一行,就像是在normal模式里按下G。现在执行下面命令:

:normal ggdd

Vim将移动到文件的第一行(gg)并删除它(dd)。

normal命令简单地接受一串键值并当作是在normal模式下输入的。就是那么简单!

避免映射

执行下面的命令来映射G键到别的东西:

:nnoremap G dd

现在在normal模式按下G将删除一整行。试试这个命令:

:normal G

Vim将删除当前行。normal命令将顾及当前的所有映射。

这意味着我们需要给normal提供类似于nnoremap之于nmap的版本, 否则我们没法使用它——考虑到我们猜测不了用户的映射方式。

幸好Vim真的有这样的命令叫normal!。执行这个命令:

:normal! G

这次Vim将移动光标到文件底部,即使G已经被映射了。

在写Vim脚本时,你应该总是使用normal!,永不使用normal。不要信任用户在~/.vimrc中的映射。

特殊字符

如果你使用normal!一段时间了,就很可能注意到一个问题。试试下面的命令:

:normal! /foo<cr>

第一眼看上去它应该会开始搜索foo,但你将看到它不会正常工作。 问题在于normal!不会解析像<cr>那样的特殊字符序列。

于是,Vim认为你想要搜索字符串序列"foo",没有意识到你甚至按下了回车来进行搜索! (译注:原文为you even pressed return to perform the search! 按后文的意思应该是没有按下return,待问作者) 我们将在下一章讨论如何应对这个问题。

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟