2011-12-16 12 views
0

私は、選択したテキストを囲むいくつかのマップを定義しました。 "text"を "\ texttt {text}"に変換します。Vimコマンドは、行末で異なった動作をします。

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

しかしながら、このマップは、選択されたテキストが行の最後にある場合、期待どおりに動作しない:これは、マップの一例です。すなわち、

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

を末尾のスペースで:私は、行のすべての単語のために通常のコマンドviw,tを実行したときに、これは私が得る結果は

word1 word2 word3 

: たとえば、この行を取ります最後のtexttt{の挿入が間違った場所で発生しました。

マップの実行場所に関係なく、マップを変更するにはどうすればよいですか?

+2

問題は、EOLで異なるxの後のカーソル位置です。カーソルを置くための末尾の文字がないためです。提案されているようにsを使用すると役立ちます。 – Nikodemus

答えて

5

xiの代わりにsを試してみてください。これにより、選択内容が削除され、挿入モードに移行して、xで削除後にカーソルの位置が不明確にならないようになります。

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

+0

それは私が探していたものでした。ありがとう! –

1

あなただけカーソルがどこかにあることを確認して、最初の単語を選択する必要はありません

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

を試してみてください。 :help text-objectsおよび:help i_CTRL-Rを参照してください。また、nmapは:nnoremapと同様に動作しますが、:nnoremapは、ネストされたマッピングや再帰的なマッピングを引き起こすマッピングのRHSを防ぐので、良い方法です。

+0

私はたいていただ一つの単語より多くのテキストを選択します。しかし、それは私の既存のvmapに素敵な追加です! –

+1

':vnoremap 、ts \ texttt {}} 'を使用してください。選択肢が複数の行にまたがる場合、もう1つの答えは機能しません – 1983

+0

選択範囲が複数の行にまたがる場合、この地図で食べてください –

関連する問題