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