如何创建多行缩写vim

时间:2014-08-28 19:00:13

标签: perl vim

如何创建多行VIM缩写。

例如,我想创建一个缩写为subflowclass的缩写,扩展为:

package foo;

sub new {

}

sub test {

}

sub abc {

}

1;

2 个答案:

答案 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)

查看插件SnipMateUltiSnips

它们提供您想要的功能。您创建了一个名为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