我正在尝试破解 c-vim 插件,因为我不喜欢它插入注释的方式。我要这个:
/* comment */
但它给了我这个:
/* comment
*/
我确信它有它的理由,但我不喜欢它。所以我正在研究 c.vim 文件,我发现了这个:
function! C_CodeComment( mode, style )
if a:mode=="a"
if a:style == 'yes'
silent exe ":s#^#/\* #"
silent put = ' */'
else
silent exe ":s#^#//#"
endif
endif
if a:mode=="v"
if a:style == 'yes'
silent exe ":'<,'>s/^/ \* /"
silent exe ":'< s'^ '\/'"
silent exe ":'>"
silent put = ' */'
else
silent exe ":'<,'>s#^#//#"
endif
endif
endfunction
我无法找到有关该put =
声明的任何文档,我很确定我必须更改该声明才能让 vim 附加*/
到注释的最后一行。有人能指出我正确的方向吗?
答案1
C_CodeComment
最近版本的 Vim 附带的任何文件中都没有定义该函数。我搜索了一下,看起来你正在使用Fritz Mehner 的 C/C++ 插件。它提供了一个C/C++>评论>代码 -> 注释 /* */使用 的菜单项(和\c*
映射1C_CodeComment
) 。
该命令put = ' */'
附加一个新行(请参见:help :put
)包含的内容特别登记册=
,它只是将其后面的内容评估为Vim 表达。这里使用的特定表达式只是一个简单的三个字符串(空格、星号、正斜杠)。
您可以通过添加如下行将其安排在最后一行2*/
的末尾
silent normal kJ^
在silent put = ' */'
线条之后。它向上移动到最后一个注释行 ( k
),将其与*/
行 ( J
) 连接,然后将光标移动到该行 ( ) 的第一个非空白字符^
;映射1本身包括将光标移动到新注释区域之后的下一行\co
。j
然而,做C_RemoveCComment
这将打破函数的假设(由“inverse”函数使用C_CommentCode
):它期望在行*/
的开头(在可选的空格之后)查找并处理。
如果您从不使用C/C++>评论>评论->代码菜单项或\co
映射1,那么您可能无法使用此插件的取消注释功能。
1\
如果您重新定义了映射的“领导者”可能会有所不同localmapleader
。
2(在我看来)这会导致多行注释看起来很奇怪(即在调用注释功能之前通过 GUI 选择或视觉模式选择多行):
选择中间两行后,
foo();
bar();
baz();
quux();
变成
foo();
/* bar();
* baz(); */
quux();
这看起来是一种奇怪的风格(通常,如果*
在中间行上使用前导符,那么开头的星号/*
、*
前导符和*/
结尾的星号会放在同一列中)。