2010-07-08 30 views
1

我试图建立在vim一些实用的编码模板,例如我制订vim map命令是否有“逐字”模式?

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

这样,当我在vim中键入'CL我得到

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

(让我能用Cj跳转到< + +>标签之间)。这工作正常,但我觉得上面的重映像很模糊。有没有办法输入我想让vim键入“逐字模式”?所以我想写点类似于

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

谢谢 保罗

回答

4

我不知道如果有一个映射,这样的“逐字” - 模式。 我个人会使用其中一个片段插件来做到这一点。 查看www.vim.org并搜索 查看“snippet”。我没有尝试过所有这些(只是SnippetsMgr ;-)),但我想他们更容易定义多行代码片段。

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

+0

嗨哈比, 感谢指出了这一点,我将有一看... – Paul 2010-07-08 10:20:00

+1

+1对于snipMate。这也许是所列出的最成熟的。 (SnippetsMgr是我唯一没有试过的) – sleepynate 2010-07-08 12:42:49

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)入缓冲区。例如。 setreg()允许告诉一个寄存器的内容是行,因此P不管缩进如何都可以工作。

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

+0

另一个愚蠢的选择是使用list(':help List')来存储这行,并使用'join()'在行之间自动添加\ n。但是,我再也看不到任何可能有助于这样的语法。 – Dummy00001 2010-07-08 10:51:33

+0

真正愚蠢的选择:将文本放入一个文件(一些固定的位置),并简单地粘贴其内容。 – Dummy00001 2010-07-08 10:52:27

4

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

另一种方法是的代码片段复制到自己的文件和设置您的映射插入光标下面这个文件:

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

提及+1:阅读 – matias 2010-07-08 14:20:39