我最近开始使用Vim作为我的文本编辑器,目前正在进行自己的自定义。
我认为键盘映射几乎可以做任何事情,但暂时我几乎只使用它们作为一种片段设施。
因此,例如,如果我输入def{TAB}
(:imap def{TAB} def ():<ESC>3ha
),它会扩展为:
def |(): # '|' represents the caret
这可以按预期工作,但是当我输入一个包含“def”的单词并且我对扩展它不感兴趣时Vim等待完整命令时,我觉得很烦人。
快速查看SnippetsEmu后,它看起来是最好的选择,比我原先想象的更容易定制。
继续上一个例子:
:Snippet def <{}>():
定义完毕后,您可以通过输入def{TAB}
来扩展您的代码段。
答案 0 :(得分:35)
Snipmate - 喜欢texmate :) http://www.vim.org/scripts/script.php?script_id=2540
snippet def
""" ${1:docstring} """
def ${2:name}:
return ${3:value}
答案 1 :(得分:11)
使用vim内置功能的另一个建议(尽管略有不同):
:iabbrev def def(): #<LEFT><LEFT><LEFT><LEFT><LEFT>
现在,无论何时键入def后跟空格或其他非单词字符,它都将扩展为与您作为SnippetsEmu的输出所给出的相同(该空间来自您输入的空间以触发完成) 。
这种方法不会遇到您使用的“滞后”问题:inoremap,并且内置于vim中。有关此功能的更多信息,请查看:help abbrev
。
你可能担心被空格而不是标签触发它会不必要地触发,但一般来说vim对何时触发它非常聪明。通过仅为某些文件类型(例如,python)启用缩写,可以进一步减轻该问题:
au filetype python :iabbrev ... etc
Snip [ets](经理| Emu | Mate | .vim)当然也是一个完美的解决方案,但很高兴知道其他选择(特别是当它们内置时)。
答案 2 :(得分:6)
如果SnippetsEmu过于繁重或雄心勃勃,无法满足您的需求(这对我而言),我编写了一个基于文件类型管理片段的插件。选择片段时,它甚至可以完成标签! :)
在此处获取:snippets.vim
答案 3 :(得分:5)
SnippetsEmu是一个有用的代码段插件。
答案 4 :(得分:5)
我刚刚安装了UltiSnips。有一篇很好的文章解释了为什么你可以选择UltiSnips:Why UltiSnips?
我没有使用任何其他代码段插件;我决定采用一种看起来功能齐全的功能,并能够容纳我,因为我获得了更多的Vim技能,并希望做更复杂的事情。
答案 5 :(得分:4)
正如MDCore所指出的那样,SnippetsEmu是一个流行的Vim脚本,可以做到这一点以及更多。如果只需要扩展(不需要移回插入符号),则可以使用标准:ab[breviate]
命令。
:ab[breviate] [<expr>] {lhs} {rhs}
add abbreviation for {lhs} to {rhs}. If {lhs} already
existed it is replaced with the new {rhs}. {rhs} may
contain spaces.
See |:map-<expr>| for the optional <expr> argument.