Vimscript 執(zhí)行normal!

2018-02-24 16:02 更新

既然已經(jīng)學(xué)了executenormal!,我們就可以深入探討一個(gè)Vimscript慣用法。 執(zhí)行下面的命令:

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

這將移動(dòng)到文件的開頭,查找foo的首次出現(xiàn)的地方,并刪掉那一行。

之前我們嘗試過用normal!來執(zhí)行一個(gè)搜索命令卻無法輸入必須的回車來開始進(jìn)行搜索。 結(jié)合executenormal!將解決這個(gè)問題。

execute允許你創(chuàng)建命令,因而你能夠使用Vim普通的轉(zhuǎn)義字符串來生成你需要的"打不出"的字符。 嘗試下面的命令:

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

這個(gè)命令做了什么?讓我們掰開來講:

  • :execute "normal! ...":執(zhí)行命令序列,一如它們是在normal模式下輸入的,忽略所有映射, 并替換轉(zhuǎn)義字符串。
  • mq:保存當(dāng)前位置到標(biāo)記"q"。
  • A:移動(dòng)到當(dāng)前行的末尾并在最后一個(gè)字符后進(jìn)入insert模式。
  • ;:我們現(xiàn)在位于insert模式,所以僅僅是寫入了一個(gè)";"。
  • \<esc>:這是一個(gè)表示Esc鍵的轉(zhuǎn)義字符串序列,把我們帶離insert模式。
  • `q:回到標(biāo)記"q"所在的位置。

看上去有點(diǎn)繞,不過它真的很有用:它在當(dāng)前行的末尾補(bǔ)上一個(gè)分號并保持光標(biāo)不動(dòng)。 在寫Javascript,C或其他以分號作為語句分隔符的語言時(shí),一旦忘記加上分號,這樣的映射將助你一臂之力。

練習(xí)

重讀:help expr-quote(你之前應(yīng)該看過)來提醒你怎么用execute通過轉(zhuǎn)義字符串傳遞特殊字符給normal!。

在翻開下一章之前,放下本書休息一下。吃一個(gè)三明治或喝一杯咖啡(譯注:或者茶!), 喂一下你的寵物——如果你有的話。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號