我希望在我的C代码中有这样的评论:
/********************************************************
* Blah
********************************************************/
但我厌倦了输入所有这些星号,复制/粘贴也会让人讨厌。我想知道我是否可以用Vim创建一个宏,这样如果我按下(例如)CTRL+L
,它会自动在我的代码中插入该结构并将光标对准中间(实际注释为写)。
任何建议都将不胜感激。谢谢!
答案 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>
,这样你就可以根据函数的输出使星号达到设定的宽度。那里有很多力量,但可能需要一些摆弄才能达到你想要的方式......