我最近开始使用Vim作为我的文本编辑器,目前正在进行自己的自定义.
我认为键盘映射几乎可以做任何事情,但暂时我几乎只使用它们作为一种片段设施.
所以,例如,如果我输入def{TAB}
(:imap def{TAB} def ():
),它会扩展为:
def |(): # '|' represents the caret
这可以按预期工作,但是当我输入一个包含"def"的单词并且我没有兴趣扩展它时,当Vim等待完整命令时,我觉得很烦人.
有没有办法避免这种情况或为此更有效地使用此功能?
是否有其他Vim功能更适合这种情况?
在快速浏览一下SnippetsEmu之后,看起来它是最好的选择,并且比我想象的更容易定制.
继续前面的示例:
:Snippet def <{}>():
定义后,您可以通过键入来扩展您的代码段def{TAB}
.
Snipmate - 像texmate :) http://www.vim.org/scripts/script.php?script_id=2540
视频:http: //vimeo.com/3535418
snippet def """ ${1:docstring} """ def ${2:name}: return ${3:value}
作为使用vim内置功能的另一个建议(虽然略有不同):
:iabbrev def def(): #
现在,无论何时键入def后跟空格或其他非单词字符,它都将扩展为与您作为SnippetsEmu的输出所给出的相同(该空间来自您输入的空间以触发完成).
这种方法不会遇到您使用的"滞后"问题:inoremap,并且内置于vim中.有关此功能的更多信息,请查看:help abbrev
.
你可能会担心被空格而不是标签触发它会不必要地触发,但一般来说,vim对何时触发它非常聪明.通过仅为某些文件类型(例如,python)启用缩写,可以进一步减轻此问题:
au filetype python :iabbrev ... etc
Snip [ets](经理| Emu | Mate | .vim)当然也是一个完美的解决方案,但很高兴知道其他选择(特别是当它们内置时).
如果SnippetsEmu对你需要的东西太重或太野心了(这对我而言),我写了一个插件来管理基于文件类型的片段.选择片段时,它甚至可以完成标签!:)
得到它:snippets.vim
SnippetsEmu是一个有用的片段插件.
我刚刚安装了UltiSnips.有一篇很好的文章解释了为什么你会选择UltiSnips:为什么选择UltiSnips?
我没有使用任何其他代码段插件; 我决定采用一种似乎功能齐全的功能,并能够容纳我,因为我获得了更多的Vim技能,并希望做更复杂的事情.