vim map命令是否有“逐字”模式?

时间:2010-07-08 08:53:42

标签: vim templates

我正在尝试在vim中设置一些有用的编码模板,例如我已映射

map `cl iclass <+CLASSNAME+><CR>{<CR><Esc>Iprotected:<CR><+PROTECTED MEMBERS+><CR><Esc>Ipublic:<CR><+PUBLIC INTERFACE+><CR>};<CR><++><CR><Esc>3kv<0v3k<2k

这样当我输入`cl in vim时,我得到

class <+CLASSNAME+>
{
protected:
    <+PROTECTED MEMBERS+>
public:
    <+PUBLIC INTERFACE+>
};
<++>

(这样我就可以在&lt; + +&gt;标签之间用C-j跳转)。这工作正常,但我发现上面的重映射非常模糊。有没有办法输入我希望vim输入“逐字模式”的内容?所以我想写一些类似

的东西
map `cl i{VERBATIMSTART}class <+CLASSNAME+>
{
protected:
    <+PROTECTED MEMBERS+>
public:
    <+PUBLIC INTERFACE+>
};
<++>{VERBATIMEND}

谢谢 保罗

3 个答案:

答案 0 :(得分:4)

我不知道是否存在映射的“逐字”模式。 我个人会使用其中一个代码段插件来执行此操作。 请访问www.vim.org并搜索 为“片段”。我没有尝试过所有这些(只是SnippetsMgr ;-)), 但我想他们更容易定义多行片段。

vim.org上的一些可用代码段插件:snippets.vim, snippetsEmu,snipMate,SnippetsMgr等

答案 1 :(得分:4)

正如Habi所提到的,解决这个问题的一种方法是使用代码片段插件。

另一种方法是将该代码片段复制到自己的文件中并设置映射以在光标下插入该文件:

map `cl :r /path/to/code_snippet<CR>

答案 2 :(得分:1)

显而易见(可能不是你想要的):

map `cl iclass <+CLASSNAME+>
\<CR>{
\<CR>protected:
\<CR>    <+PROTECTED MEMBERS+>
\<CR>public:
\<CR>    <+PUBLIC INTERFACE+>
\<CR>};
\<CR><++>
\<CR>
第一行中的

\表示该行是前一行的延续。但这是字面上的延续:它不会添加新行,因此必须手动添加它们。由于它使用插入模式,因此操作也会受到当前缩进模式的影响。 (虽然可以尝试使用:set paste / :set nopaste来处理它。)

我会尝试将文本放入临时变量或注册,然后将P put(或:put)放入缓冲区。例如。 setreg()允许人们告诉寄存器的内容是行,因此无论缩进如何,P都可以使用它。

否则,查看:help line-continuation:help variables我看不出如何指定多行字符串或文字。