在声明iabbr,cabbr等时,是否存在特定用例缺少片段插件提供的一些重要功能?我无法找到这两个“功能”及其各自实现之间的全面比较。
正如@peter-rincker在评论中指出的那样:
请注意,缩写也可以执行代码。通常是通过
<c-r>=
或表达式缩写(<expr>)
来实现的。例如,将@@扩展为当前文件的路径::iabbrev @@ <c-r>=expand('%:p')<cr>
以python为例,让我们比较一下Snipmate代码片段和Vim中用于插入类声明行的缩写。# New Class
snippet cl
class ${1:ClassName}(${2:object}):
"""${3:docstring for $1}"""
def __init__(self, ${4:arg}):
${5:super($1, self).__init__()}
self.$4 = $4
${6}
Vimscript
au FileType python :iabbr cl class ClassName(object):<CR><Tab>"""docstring for ClassName"""<CR>def __init__(self, arg):<CR><Tab>super(ClassName, self).__init__()<CR>self.arg = arg
我是否缺少了“片段”基本功能,还是正确地认为它们在大多数情况下过于繁琐,当Vim的
abbr
和:help template
模板能够完成片段所做的大部分工作时?我假设实现片段更容易,并且它们提供了额外的美学/视觉特性。例如,如果我在Vim中使用abbr
以及其他插件来运行/测试Python代码--例如syntastic, pytest, ropevim, pep8等--我是否错过了一些片段提供的关键功能?
ultisnips
的演示。然后思考如何使用缩写实现相同的功能。 :) - lcd047<c-r>=...
使用vimscript实现相同的功能。我认为使用代码片段以及一些美学/视觉特性更容易实现。 - ILMostro_7