在缩写中进入插入模式时添加了额外的空间

时间:2018-03-22 10:47:55

标签: vim

我正在尝试创建一个缩写,用我想要的替换打字文本,但也移动光标并进入插入模式。

ab如下: :abbreviate MSG `MSG(("")); <Esc>F"i

一切正常,除非进入插入模式,我必须在光标前添加额外的空格。 我已经尝试添加<BS><BS>但它会导致删除第一个引用。同样的事情,如果我只放一个<BS>(这真的很奇怪,似乎第二个<BS>根本没有效果......)

我想我错过了什么,但我无法弄清楚是什么......

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

来自Vim帮助系统(:help abbreviations)的引文:

  

只有在键入非关键字时才会识别缩写   字符。这也可以是结束插入模式的<Esc>   结束命令的<CR>。结束的非关键字字符   缩写在扩展缩写后插入。一个   例外情况是字符<C-]>,用于展开   缩写而不插入任何额外的字符。

     

示例:

:ab hh       hello
       "hh<Space>" is expanded to "hello<Space>"
       "hh<C-]>" is expanded to "hello"

因此,如果您在输入<Space>后按MSG,则在扩展缩写后插入空格。

为了避免添加不必要的空间,您可以在输入<C-]>后按MSG来调用缩写,或者您可以尝试详细说明这样的映射:

:inoremap MSG `MSG(("")); <C-O>F"

但恕我直言这样的映射非常不方便。

另一种选择可能是使用许多缩写插件之一,如this(首先由Google展示)。