使用Vim自动插入“奇特”评论

时间:2011-08-16 16:36:30

标签: vim vi

我希望在我的C代码中有这样的评论:

/********************************************************
 * Blah
 ********************************************************/

但我厌倦了输入所有这些星号,复制/粘贴也会让人讨厌。我想知道我是否可以用Vim创建一个宏,这样如果我按下(例如)CTRL+L,它会自动在我的代码中插入该结构并将光标对准中间(实际注释为写)。

任何建议都将不胜感激。谢谢!

4 个答案:

答案 0 :(得分:5)

如果您打算继续使用snipmate(恕我直言!这是一个不错的选择!),您应该考虑使用Garbas on github维护的版本(注意自述文件中所需的插件)。 msanders的版本不再维护。

由于我是新手,我无法在上面的答案中添加评论...抱歉

答案 1 :(得分:4)

看一下snipmate,一个类似TextMate的片段的vim插件。

  

snipMate.vim在Vim中实现了一些TextMate的片段功能。一个   片段是一段经常输入的文本,可以插入到您的文本中   文档使用触发词后跟< tab>。

答案 2 :(得分:2)

您可以使用cvim,然后根据自己的喜好编辑~/.vim/c-support/templates/c.comments.template

答案 3 :(得分:0)

嘿,就在今天,我正在加强对此的支持(因为这些标题是公司编码标准规定的)。

iabbrev //== // (96 equal characters)<Enter>//<Enter>// (96 equal characters)<C-O>k
iabbrev //-- // (96 dashes)<Enter>//<Enter>// (96 dashes)<C-O>k

这些允许我键入// ==当我按空格键时输入整个内容,我将光标留在“中间”,我想要它。

那么对于OP,如果你想使用Ctrl-L,做这样的事情:

inoremap <C-L> /*****<Enter> * <Enter>*****<C-O>k

(我自己喜欢缩写,但是......)

由于我们的编码标准中还有其他要点我们需要扩展破折号并等于第100列,我今天掀起了这一点:

iabbrev <expr> === InsertTo99Width('===')
iabbrev <expr> --- InsertTo99Width('---')

function! InsertTo99Width(insertion)
    let l:line = getline('.')
    let l:linelen = strlen(l:line)
    let l:col = col('.')
    let l:numchars = (99 - col)

    let l:inserted = a:insertion
    if (l:linelen <= l:col) && (l:numchars > 0)
        let l:numchars += len(l:inserted)
        while len(l:inserted) < l:numchars
            let l:inserted = l:inserted . l:inserted
        endwhile
        return l:inserted[0 : l:numchars]
    else
        return l:inserted
    endif
endfunction

(我有点像vim脚本newb所以可能有一种更简单的方法来制作一个N字符长的字符串,但这允许重复任意长度的任意字符串,所以如果你喜欢破折号空间相等 - 空间或东西,它仍然看起来“很好”。)

最后 - 如果需要,你也可以在inoremap中使用<expr>,这样你就可以根据函数的输出使星号达到设定的宽度。那里有很多力量,但可能需要一些摆弄才能达到你想要的方式......