现在为止,我们已经见过了execute和normal!,我们可以讨论一个常用的Vimsctipt技巧。运行下面的命令:
:execute "normal! gg/foo\<cr>dd"
这个命令会让光标移动到文本的开始处,查找第一次出现“foo”的文本行,然后删除它。
之前我们曾经始终用normal!命令来执行一个搜索的命令,但是没法输入回车键来进行搜索。把normal!和execute结合起来就可以修复这个问题。
execute可以让我们构建一些很神奇的命令,所以你可以用vim的字符串里的转义字符来生成我们需要的非打印字符。运行下面的命令:
:execute "normal! mqA;\<esc>
q"`
这个命令的作用是什么呢?我们来把它分解一下。
:execute "normal ! ..." 用来执行命令,就像在normal模式下执行一样,忽略所有的映射,并且把转义字符替换为它原本的意义。
`q:返回到书签“q”的位置。
这个命令看起来有点吓人,但是却很有用:它在当前行的后面添加一个分号,并且保持光标在原来的位置不动。这个映射在你用Javascript,C语言或者其他以分号作为语句的结尾的语言编写代码的时候,如果忘了加上分号的时候会非常有用的。