2012-08-24 52 views
5

我想學習Vimscript從LearnVimscriptTHW和我碰到使用:execute and :normal爲什麼:執行沒有按預期在Vim中工作:學習VimscriptTheHardWay

Example from LVSTHW

:normal! gg/a<cr> 

從書: 問題是normal!不承認 「特殊字符」 像<cr>。有很多方法可以解決這個問題,但最容易使用和閱讀的是execute

現在,當我使用:execute "normal! gg/a<cr>"它不會爲我工作。它不會搜索a(char)在我目前的文件,而不是,它只是執行gg,比什麼也不做,但如果是使用:execute "normal! gg/a\r"它的工作原理,併成功地突出了我的文件char a

我也試過低於以下方式,但沒有一次成功。

:execute "normal! gg/a"<cr> 
:execute normal! gg/a<cr> 
:execute "normal! gg/a<cr>"<cr> 

從書中看來execute內部轉換<cr> to \r。那麼,爲什麼它不會發生在我的情況。

回答

5

你需要躲避<cr>用反斜槓:exe "norm! iHello\<cr>World"

+0

好它的工作,但我在幻想'execute'將處理一切,包括'逃脫SP。 chars'。那麼,是否有任何Vim函數可以包裝我的上述命令,以便它可以處理需要自動轉義的字符。像'exe'norm!escapefunc(iHello \ World)' – RanRag

+0

那麼,當使用'norm'時,你將不得不逃離特殊字符,否則vim不知道你是否想要鍵入''或執行' \ r'。超出'norm'這個自動生效 – Conner

+0

是的,使用'escape(「iHello \ World」)'或養成使用文字符號的習慣 – romainl

5

一看:help :execute可能是有用的,在這裏。你必須轉義任何<CR><ESC>用,當你在表達式中使用反斜槓:\<CR>\<Esc> ......這些標記,只適用於映射,如果我理解正確。

另一種選擇是,輸入密鑰 「字面意思是」:

  • i進入插入模式,不需要如果yoou是在命令行上
  • <C-v>
  • <CR>

你將會獲得一個看起來像^M的單個字符,並且不需要轉義。

相關問題