2011-12-16 43 views
0

我已經定義了幾個封裝選定文本的地圖,例如,將「文本」轉換爲「\ texttt {text}」。這是這樣的一個地圖的一個例子:Vim命令在行尾有不同的行爲

vmap <buffer> ,t xi\texttt{<Esc>pa}<Esc> 

然而,當所選文本在行尾時,該圖不能按預期工作。 就拿這條線:

word1 word2 word3 

當我執行正常的命令viw,t在線路的每一句話,這是我得到的結果是:

\texttt{word1} \texttt{word2}\texttt{word3} 

後面有個空格,即插入最後的texttt{發生在錯誤的地方。

無論執行何處,我如何更改地圖工作?

+2

問題是在X之後的光標位置,這在EOL處是不同的,因爲沒有將光標放到的尾部字符。按照建議使用s可能會有幫助。 – Nikodemus 2011-12-16 10:41:23

回答

5

嘗試使用s而不是xi。刪除選擇並直接進入插入模式,避免用x刪除後的不確定光標位置。

vmap <buffer> ,t s\texttt{<Esc>pa}<Esc>

+0

這就是我正在尋找的東西。謝謝! – 2011-12-16 13:17:16

1

嘗試

:nnoremap <buffer> ,t ciw\texttt{<C-R>"}<Esc> 

你並不需要首先選擇的話,只需確保光標在它的地方。 見:help text-objects:help i_CTRL-R。另外:在這種情況下,nmap的工作方式和:nnoremap一樣好,但是:nnoremap是很好的做法,因爲它可以防止映射的RHS觸發任何嵌套或遞歸映射。

+0

我通常選擇的文字多於單個單詞。但是,這對我現有的vmap來說是一個很好的補充! – 2011-12-16 13:17:00