Vimscript编程指南

Execute Normal! 命令

现在为止,我们已经见过了execute和normal!,我们可以讨论一个常用的Vimsctipt技巧。运行下面的命令:

:execute "normal! gg/foo\<cr>dd"

这个命令会让光标移动到文本的开始处,查找第一次出现“foo”的文本行,然后删除它。

之前我们曾经始终用normal!命令来执行一个搜索的命令,但是没法输入回车键来进行搜索。把normal!和execute结合起来就可以修复这个问题。

execute可以让我们构建一些很神奇的命令,所以你可以用vim的字符串里的转义字符来生成我们需要的非打印字符。运行下面的命令: :execute "normal! mqA;\<esc>q"`

这个命令的作用是什么呢?我们来把它分解一下。

:execute "normal ! ..." 用来执行命令,就像在normal模式下执行一样,忽略所有的映射,并且把转义字符替换为它原本的意义。

  • mq: 把当前的位置保存在书签“q”里。
  • A:移动到当前文本行的结尾处,然后再最后一个字符后面进入insert模式。
  • ;:现在我们在insert模式,这是在最后一个字符后面插入分号 i- \:这个带有转义符的字符串,会被解析成相当于按下了escape键,这样就会让我们退出insert模式。
  • `q:返回到书签“q”的位置。

    这个命令看起来有点吓人,但是却很有用:它在当前行的后面添加一个分号,并且保持光标在原来的位置不动。这个映射在你用Javascript,C语言或者其他以分号作为语句的结尾的语言编写代码的时候,如果忘了加上分号的时候会非常有用的。

练习

  • 再次阅读:help expr-quote(你之前已经看过了)来复习一下怎么用execute来给normal!传递特殊字符。
  • 在你阅读下一章前,先放下本书,吃个三明治,或者喝杯咖啡,如果有个宠物的话,你也可以喂喂它,然后休息一会。