我是vim的新用户(在Windows中使用gvim),并且发现缩写节省了很多时间 - 但是如果我能够有时停止尾随空格,它们会更好.
我有一些我经常使用的目录,所以我在我的_vimrc中添加了一些缩写/路径对:
:ab diR1 C:/dirA/dira/dir1/
:ab diR2 C:/dirA/dirb/dir2/
Run Code Online (Sandbox Code Playgroud)
等......
现在,当我输入时,diR1 <space>我得到C:/dirA/dira/dir1/[]|了空格所代表的位置[],而光标就是|字符.我想摆脱[]==空白.
这是一个小小的抱怨:但是你似乎能够在Vim中定制其他内容,所以我想我会问 - 当在vim中使用缩写时是否可以避免尾随空格?
在Vim中使用的另一个工具是一个很好的答案 - 我的目标是保存重新键入常用的目录结构,但是让光标很方便,因为我几乎总是会添加一些东西到底,例如myFile.txt.
space在添加myFile.txt到结尾之前我退回的尾随空白区域(无疑由于触发缩写的事实而言)比反复输入整个东西更不烦人,但如果我能避免这样做,那将是理想的. .
Pet*_*ker 15
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>
Run Code Online (Sandbox Code Playgroud)
您可以将该Eatchar函数放入您的~/.vimrc文件中,然后在缩写中使用:
iabbr <silent> diR1 C:/dirA/dira/dir1/<c-r>=Eatchar('\m\s\<bar>/')<cr>
Run Code Online (Sandbox Code Playgroud)
这将"吃掉"任何尾随的空格字符或斜线.请注意,我使用iabbr的不仅仅是abbr,因为实际上很少需要在命令行模式下扩展缩写.在命令行模式下必须小心缩写,因为它们会在意外的位置扩展,例如search和input()命令.
有关更多信息,请参阅
:h abbreviations
:helpgrep Eatchar
:h :helpgrep
Run Code Online (Sandbox Code Playgroud)
这是可能的,没有更多的定制abbrev.
缩写是由空格触发,你也知道.该空间是非关键字字符,并在缩写缩放后保留.
但是还有其他方法可以触发扩展,例如其他非关键字字符,包括/.所以,如果您改为定义这样的缩写:
:ab diR1 C:/dirA/dira/dir1
Run Code Online (Sandbox Code Playgroud)
也就是说,如果没有尾随路径分隔符,则可以键入diR1/,由于斜杠/而缩写为您,然后继续键入,使用文件名附加到路径.
或者,您可以使用强制缩写扩展Ctrl-].也就是说,键入缩写:diR1,没有后续空格或其他非关键字字符,然后键入Ctrl-].缩写将被展开,您将保持插入模式,并可以将文件名附加到展开的路径.
退房:help abbreviations,那里可能还有其他有用的东西,包括更复杂的构造,总是消耗,例如触发缩写的空格字符.