如何创建多行VIM缩写。
例如,我想创建一个缩写为subflowclass
的缩写,扩展为:
package foo;
sub new {
}
sub test {
}
sub abc {
}
1;
答案 0 :(得分:3)
如果您不想处理插件,可以按<Ctrl-v><Enter>
将字面换行字符放入映射中。当您编写它们时(例如在您的vimrc中),它们不会显示为换行符,但在使用缩写时将被视为常规换行符。
所以,例如缩写
ab subflowclass package foo;^M^Msub new {^M^M}^M^Msub test {^M^M}^M^Msub abc {^M^M}^M^M1;
将扩展为您想要的文字。 (我在^M
写了这里,因为它是如何由Vim显示的,但是这些都应该通过键入<Ctrl-v><Enter>
来取代
编辑:正如Peter Rincker in the comments所指出的,这实际上并不是必要的(虽然这个想法在其他情况下仍然有用)。您只需插入<CR>
,当使用缩写时,也会替换为换行符。
答案 1 :(得分:1)
它们提供您想要的功能。您创建了一个名为filetype.snippets
的文件(因此,如果您想为perl创建代码段,则可以使用perl.snippets
)。然后你可以从那里定义你的片段:
例如,在java.snippets
中,我有以下代码段:
snippet println
System.out.println(${0});
现在,每当我输入println后跟tab(我使用snipmate,不确定ultisnips是否是相同的键绑定)时,它会扩展为
System.out.println(*Cursor here*);
${0}
定义了一个tabstop,因此你可以跳转到参数或诸如此类的东西。
此外,还有一堆预先定义的片段可供下载here(如果使用病原体,只需将片段文件夹放入您的包文件夹中)。它们适用于snipmate和ultisnips。
您的示例代码段为:
snippet subflowclass
package foo;
sub ${1:new} {
}
sub ${2:test} {
}
sub ${3:abc} {
}
1;
${n:name}
表示法意味着在其中放置一个tabstop(用户可以通过按Tab跳转到的位置)并为其指定默认值name
。