使用“snippets”插件,例如snipmate,ultisnips,与简单使用内置的“abbreviations”功能相比,有哪些优点和/或缺点?
是否存在声明iabbr
、cabbr
等的特定用例,从而缺少snippets插件提供的一些主要特性?我一直未能在这两个“特性”和它们各自的实现之间找到一个彻底的比较。在
正如@peter rincker在评论中指出的:
It should be noted that abbreviations can execute code as well. Often via
<c-r>=
or via an expression abbreviation(<expr>)
. Example which expands @@ to the current file's path::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}
当Vim的abbr
和:help template
模板能够完成代码片段中大部分的功能时,我是不是缺少了一些基本的功能,或者假设它们在很大程度上是多余的呢?在
我认为代码片段更容易实现,它们还提供了额外的美学/视觉特性。例如,如果我在Vim和其他插件中使用abbr
来运行/测试Vim中的python代码——例如syntastic、pytest、ropevim、pep8)等等,我是否遗漏了代码片段提供的一些关键特性?在
片段类似于类固醇的内置
:abbreviate
,通常有:在一个snippet插件中需要评估三件事:第一,代码段引擎本身的特性,第二,作者或其他人提供的代码段的质量和广度;第三,添加新代码段有多容易。在
代码片段更强大。在
根据实现的不同,代码段可以让您更改(或接受默认值)多个占位符,甚至可以在扩展代码段时执行代码。在
例如,使用ultisnips,您可以让它执行shell命令、vimscript以及Python代码。在
一个(ultisnips)示例:
这将为您提供三个要填充的占位符(它提供其中两个的默认值),并设置文件名、文件类型和当前日期和时间。在
在单词“snippet”之后,开始行包含三个项目
就个人而言,我主要使用
b
选项,其中代码段在行首展开,而w
选项用于在触发器字符串从单词开头开始时展开代码段。在请注意,您必须键入触发器字符串和,然后输入一个键或键组合来实际触发扩展。因此,除非您希望,否则片段不会展开。在
此外,代码段可以按文件类型进行专门化。假设您要定义四个级别的标题,
h1
。。h4
。您可以在HTML、markdown、LaTeX或RestructedText文件之间使用不同的扩展名。在所有可以用代码片段完成的事情都可以用缩写来完成,反之亦然。你可以有(镜像或不镜像)带有缩写的占位符,也可以有上下文敏感的代码段。在
有两个重要区别:
while
+tab)。w
+tab就足够了)。在还有一些其他的区别。例如,缩写总是在任何地方被触发。在注释或字符串上下文中看到},这肯定不是最终用户所期望的。对于代码段,这不再是一个问题:我们可以期望最终用户在请求扩展代码段时知道他在做什么。不过,我们可以提出context-aware snippets在注释中将},或者在其他地方扩展到{}。在
for
扩展为{throw
扩展为{相关问题 更多 >
编程相关推荐