我是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