Vim命令在行尾的行为不同

Vim命令在行尾的行为不同,vim,Vim,我定义了几个映射来封装选定的文本,例如将“text”转换为“\texttt{text}”。这是此类地图的一个示例: vmap <buffer> ,t xi\texttt{<Esc>pa}<Esc> 当我对行中的每个字执行正常命令viw,t时,我得到的结果是: \texttt{word1} \texttt{word2}\texttt{word3} 带有尾随空格,即最后一个texttt{的插入发生在错误的位置 无论在何处执行,我如何才能将地图更改为工作状态?

我定义了几个映射来封装选定的文本,例如将“text”转换为“\texttt{text}”。这是此类地图的一个示例:

vmap <buffer> ,t xi\texttt{<Esc>pa}<Esc>
当我对行中的每个字执行正常命令
viw,t
时,我得到的结果是:

\texttt{word1} \texttt{word2}\texttt{word3} 
带有尾随空格,即最后一个
texttt{
的插入发生在错误的位置


无论在何处执行,我如何才能将地图更改为工作状态?

尝试使用
s
而不是
xi
。这样可以删除选择并直接进入插入模式,避免使用
x
删除后光标位置不确定


vmap,ts\textt{pa}

尝试使用
s
而不是
xi
。这样可以删除选择并直接进入插入模式,避免使用
x
删除后光标位置不确定

vmap,ts\textt{pa}

试试看

:nnoremap <buffer> ,t ciw\texttt{<C-R>"}<Esc>
:nnoremap,t ciw\textt{
您不需要先选择单词,只需确保光标位于单词的某个位置即可。 请参见
:help text objects
:help i_CTRL-R
。另外:在这种情况下,nmap与
:nnoremap
一样有效,但
:nnoremap
是一种很好的做法,因为它可以防止映射的RHS触发任何嵌套或递归映射。

请尝试

:nnoremap <buffer> ,t ciw\texttt{<C-R>"}<Esc>
:nnoremap,t ciw\textt{
您不需要先选择单词,只需确保光标位于单词的某个位置即可。
请参见
:help text objects
:help i_CTRL-R
。此外:在这种情况下,nmap与
:nnoremap
一样有效,但
:nnoremap
是一种良好的做法,因为它可以防止映射的RHS触发任何嵌套或递归映射。

问题是光标在x之后的位置,这在EOL处是不同的,因为没有可放置光标的尾随字符。按建议使用s可能会有所帮助。问题是光标在x之后的位置,这在下线处是不同的,因为没有可放置光标的尾随字符。按建议使用s可能会有所帮助。我通常选择的文本多于单个单词。但这是对现有vm的一个很好的补充ap!然后使用
:vnoremap,ts\texttt{}
。如果您的选择跨越多行,则另一个答案将不起作用。如果选择跨越多行,则我的选择之后的空间将被此映射吞噬。确实如此。这看起来像是一个错误。尽管如此:
:vnoremap,ts\texttt{p`]a}
。我通常会选择比单个单词更多的文本。但这是对现有vmap的一个很好的补充!然后使用
:vnoremap,ts\texttt{}
。如果您的选择跨越多行,则另一个答案将不起作用。如果选择跨越多行,则我的选择后的空格将被此贴图占用。确实如此。这看起来像是一个错误。但这应该可以起作用:
:vnoremap,t s\texttt{p`]a}
。这就是我要找的。谢谢!这就是我要找的。谢谢!