【发布时间】:2018-12-06 02:14:46
【问题描述】:
使用“sn-ps”插件有哪些优点和/或缺点,例如snipmate,ultisnips,用于 VIM 而不是简单地使用内置的“abbreviations”功能?
是否存在声明iabbr、cabbr 等的特定用例。缺少 sn-ps 插件提供的一些主要 功能?我一直未能找到这两个“功能”及其各自实现之间的彻底比较。
正如@peter-rincker 在评论中指出的那样:
需要注意的是,缩写也可以执行代码。通常通过
<c-r>=或通过表达式缩写(<expr>)。将@@ 扩展为当前文件路径的示例::iabbrev @@ <c-r>=expand('%:p')<cr>
以 python 为例,让我们比较一下 Vim 中的 snipmate sn-p 和 abbrev 用于插入类声明的行。
截图
# 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 模板能够做到 所有 大部分 sn-ps 做了什么?
我认为实现 sn-ps 更容易,并且它们提供了额外的美学/视觉功能。例如,如果我在 Vim 和其他插件中使用 abbr 在 vim 中运行/测试 python 代码——例如syntastic、pytest、ropevim、pep8 等等——我错过了 sn-ps 提供的一些关键功能吗?
【问题讨论】:
-
你能提供一个sn-p插件的具体例子吗?
-
请参阅 this,了解您可以使用
ultisnips做什么的演示。然后想想你如何用缩写来完成同样的事情。 :) -
正如@peter-rincker 在评论中指出的那样,您可以通过
<c-r>=...使用vimscript 实现相同的目的。我认为它更容易实现 sn-ps,以及一些美学/视觉特征。 -
我不知道 iabbr 可以执行代码!谢谢!谢谢!我有没有提到它?谢谢!!
标签: python vim text-editor