script vim: como alterar “put =” para um acréscimo?

2

Estou tentando hackear o plugin c-vim porque não gosto da maneira como ele insere comentários. Eu quero isso:

/* comment */

mas isso me dá isso:

/* comment
 */

Tenho certeza que tem suas razões, mas não gosto disso. Então, estou pesquisando o arquivo c.vim e descobri isso:

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

Eu não consegui encontrar nenhuma documentação sobre a declaração put = , o que eu tenho certeza é a que eu tenho que mudar a fim de obter o vim para anexar */ à última linha do comentário. Alguém pode me apontar na direção certa, por favor?

    
por Wolf 18.08.2011 / 02:24

1 resposta

3

A função C_CodeComment não está definida em nenhum dos arquivos que vêm com versões recentes do Vim. Eu procurei um pouco e parece que você está usando o plug-in C / C ++ de Fritz Mehner . Ele fornece um C / C ++ > Comentários > código - > comentário / * * / item de menu (e \c* mapping 1 ) que usa C_CodeComment .

O comando put = ' */' acrescenta uma nova linha (consulte :help :put ) que contém o conteúdo do registro especial = , que avalia apenas o que vem depois dele como Expressão do Vim . A expressão específica usada aqui é apenas uma cadeia de três caracteres simples (espaço, asterisco, barra).

Você pode organizar que */ esteja no final da última linha 2 adicionando uma linha como

silent normal kJ^

após as linhas silent put = ' */' . Move-se para a última linha comentada ( k ), une-a com a linha */ ( J ) e, em seguida, move o cursor para o primeiro caractere não vazio da linha ( ^ ); o \co mapping 1 inclui um j para mover o cursor para a próxima linha após a região recém-comentada.

Entretanto, ao fazer isso quebrará as suposições da função C_RemoveCComment (que é usada pela função C_CommentCode “inverse”): espera encontrar e processar */ no início da linha (depois do espaço em branco opcional).
Se você nunca usa o C / C ++ > Comentários > comentário - > código do item de menu ou \co mapping 1 , então você poderá viver sem a capacidade de usar o recurso de comentário deste plug-in.

1 O \ "líder" dos mapeamentos pode ser diferente se você tiver redefinido localmapleader .
2 Isso (na minha opinião) faz com que os comentários de múltiplas linhas pareçam estranhos (ou seja, selecionar mais de uma linha através da seleção da GUI ou modo visual antes de invocar os comentários) funcionalidade):

Com as duas linhas intermediárias selecionadas,

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

torna-se

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

que parece um estilo estranho (normalmente, se * de líderes são usados em linhas de intervenção, os asteriscos do /* opener, os * leaders e o */ ender são colocados no mesmo coluna).

    
por 18.08.2011 / 08:06

Tags