vim 脚本:如何将“put =”更改为追加?

vim 脚本:如何将“put =”更改为追加?

我正在尝试破解 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本身包括将光标移动到新注释区域之后的下一行\coj

然而,做C_RemoveCComment这将打破函数的假设(由“inverse”函数使用C_CommentCode):它期望在行*/的开头(在可选的空格之后)查找并处理。
如果您从不使用C/C++>评论>评论->代码菜单项或\co映射1,那么您可能无法使用此插件的取消注释功能。


1\如果您重新定义了映射的“领导者”可能会有所不同localmapleader
2(在我看来)这会导致多行注释看起来很奇怪(即在调用注释功能之前通过 GUI 选择或视觉模式选择多行):

选择中间两行后,

    foo();
    bar();
    baz();
    quux();

变成

    foo();
/*     bar();
 *     baz(); */
    quux();

这看起来是一种奇怪的风格(通常,如果*在中间行上使用前导符,那么开头的星号/**前导符和*/结尾的星号会放在同一列中)。

相关内容