我是vim(Windows中的gvim)的新用户,并且发现缩写词可以节省时间-但是,如果我有时可以停止尾随空格,它们甚至会更好。

我有一些经常使用的目录,因此我在_vimrc中添加了一些缩写/路径对:

:ab diR1 C:/dirA/dira/dir1/
:ab diR2 C:/dirA/dirb/dir2/


等...

现在,当我键入diR1 <space>时,我会得到C:/dirA/dira/dir1/[]|,其中空格由[]表示,光标是|字符。我想摆脱[] ==空格。

这是一个小小的抱怨:但是您似乎可以在Vim中自定义其他所有内容,因此我想问一下-当在Vim中使用缩写时是否可以避免尾随空格?

在Vim中使用的替代工具是一个很好的答案-我的目标是保存对经常使用的目录结构的重新键入,但要使光标方便,因为我几乎总是在末尾添加一些内容,例如myFile.txt

我在末尾添加space之前将其退格的尾随空格(毫无疑问,由于myFile.txt触发了缩写),而不是一遍又一遍地键入整个内容,这很烦人,但是如果我可以避免这样做...

最佳答案

pb2q答案正是您当前情况下想要的,但不能完全回答标题中提出的问题。这个确切的问题在vim帮助文件中已解决。参见:helpgrep Eatchar。它给出的示例是这样的:

You can even do more complicated things.  For example, to consume the space
typed after an abbreviation: >
   func Eatchar(pat)
      let c = nr2char(getchar(0))
      return (c =~ a:pat) ? '' : c
   endfunc
   iabbr <silent> if if ()<Left><C-R>=Eatchar('\s')<CR>


您可以将Eatchar函数放在~/.vimrc文件中,然后在缩写中像这样使用:

iabbr <silent> diR1 C:/dirA/dira/dir1/<c-r>=Eatchar('\m\s\<bar>/')<cr>


这将“吃掉”任何结尾的空格字符或斜杠。请注意,我使用的是iabbr而不是abbr,因为实际上很少希望缩写在命令行模式下进行扩展。您必须为careful with abbreviations in command line mode,因为它们会在意外的地方扩展,例如searchs和input()命令。

有关更多信息,请参见:

:h abbreviations
:helpgrep Eatchar
:h :helpgrep

10-07 13:13
查看更多