codecamp

Vimscript 执行normal!

既然已经学了executenormal!,我们就可以深入探讨一个Vimscript惯用法。 执行下面的命令:

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

这将移动到文件的开头,查找foo的首次出现的地方,并删掉那一行。

之前我们尝试过用normal!来执行一个搜索命令却无法输入必须的回车来开始进行搜索。 结合executenormal!将解决这个问题。

execute允许你创建命令,因而你能够使用Vim普通的转义字符串来生成你需要的"打不出"的字符。 尝试下面的命令:

:execute "normal! mqA;\<esc>`q"

这个命令做了什么?让我们掰开来讲:

  • :execute "normal! ...":执行命令序列,一如它们是在normal模式下输入的,忽略所有映射, 并替换转义字符串。
  • mq:保存当前位置到标记"q"。
  • A:移动到当前行的末尾并在最后一个字符后进入insert模式。
  • ;:我们现在位于insert模式,所以仅仅是写入了一个";"。
  • \<esc>:这是一个表示Esc键的转义字符串序列,把我们带离insert模式。
  • `q:回到标记"q"所在的位置。

看上去有点绕,不过它真的很有用:它在当前行的末尾补上一个分号并保持光标不动。 在写Javascript,C或其他以分号作为语句分隔符的语言时,一旦忘记加上分号,这样的映射将助你一臂之力。

练习

重读:help expr-quote(你之前应该看过)来提醒你怎么用execute通过转义字符串传递特殊字符给normal!

在翻开下一章之前,放下本书休息一下。吃一个三明治或喝一杯咖啡(译注:或者茶!), 喂一下你的宠物——如果你有的话。

Vimscript Normal命令
Vimscript 基本的正则表达式
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

vi命令手册

Vimscript编程参考

Vim 其他内容

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }