我是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中使用的替代工具是一个很好的答案 - 我的目标是保存重新键入常用的目录结构,但是让光标很方便,因为我几乎总是会添加一些内容,例如{{1} }。
在将myFile.txt
添加到结尾之前我退回空间的尾随空格(无疑由于space
触发缩写的事实)比不断地输入整个事物更不烦人,但如果我能避免这样做,那将是理想的......
答案 0 :(得分:14)
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,因为它们会在意外的位置扩展,例如搜索和输入()命令。
有关详细信息,请参阅:
:h abbreviations
:helpgrep Eatchar
:h :helpgrep
答案 1 :(得分:7)
这是可能的,没有更多的自定义只有abbrev
。
如您所知,缩写是由空格字符触发。该空格是非关键字字符,并在缩写缩放后保留。
但还有其他方法可以触发扩展,例如其他非关键字字符,包括/
。因此,如果您改为定义这样的缩写:
:ab diR1 C:/dirA/dira/dir1
也就是说,没有尾随路径分隔符,然后你可以输入diR1/
,因为斜杠/
而缩写为你,并继续输入,追加使用文件名到你的路径。
或者,您可以使用Ctrl-]
强制进行缩写扩展。也就是说,键入缩写:diR1
,没有后续空格或其他非关键字字符,然后键入Ctrl-]
。缩写将被展开,您将保持插入模式,并可以将文件名附加到扩展路径。
结帐:help abbreviations
,可能还有其他一些对您有用的内容,包括总是消费的更复杂的构造,例如触发缩写的空格字符。
答案 2 :(得分:0)
您可以使用映射代替缩写。一旦键入了映射的最后一个字符,它们就会被扩展,因此不会成为尾随空格:
:inoremap diR1 c:/dirA/dira/dir1
此方法的缺点是,在映射完成之前,不会显示在映射可以展开时键入的字母。这需要一些使用习惯。