我定义了几个地图,这些地图包含了一段选定的文本,例如:将“text”转换为“\ texttt {text}”。这是这种地图的一个例子:
vmap <buffer> ,t xi\texttt{<Esc>pa}<Esc>
但是,当所选文本位于行尾时,此映射无法按预期工作。 以这一行为例:
word1 word2 word3
当我对该行中的每个单词执行正常命令viw,t
时,这是我得到的结果:
\texttt{word1} \texttt{word2}\texttt{word3}
带有尾随空格的,即最后texttt{
的插入位置发生在错误的位置。
如何将地图更改为无论其执行位置如何都能正常工作?
答案 0 :(得分:5)
尝试使用s
代替xi
。删除选择并直接进入插入模式,避免使用x
删除后不确定的光标位置。
vmap <buffer> ,t s\texttt{<Esc>pa}<Esc>
答案 1 :(得分:1)
尝试
:nnoremap <buffer> ,t ciw\texttt{<C-R>"}<Esc>
您不需要先选择单词,只需确保光标位于某处。
请参阅:help text-objects
和:help i_CTRL-R
。另外:在这种情况下,nmap与:nnoremap
一样有效,但:nnoremap
是一种很好的做法,因为它可以防止映射的RHS触发任何嵌套或递归映射。