Vim命令在行尾有不同的行为

时间:2011-12-16 10:18:19

标签: vim

我定义了几个地图,这些地图包含了一段选定的文本,例如:将“text”转换为“\ texttt {text}”。这是这种地图的一个例子:

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

但是,当所选文本位于行尾时,此映射无法按预期工作。 以这一行为例:

word1 word2 word3

当我对该行中的每个单词执行正常命令viw,t时,这是我得到的结果:

\texttt{word1} \texttt{word2}\texttt{word3} 
带有尾随空格的

,即最后texttt{的插入位置发生在错误的位置。

如何将地图更改为无论其执行位置如何都能正常工作?

2 个答案:

答案 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触发任何嵌套或递归映射。

相关问题