Vim: auto-comentário em nova linha

O Vim insere automaticamente um comentário quando eu iniciair uma nova linha a pairtir de uma linha comentada, porque eu configurei formatptions=tcroql . Por exemplo (o cursor é * ):

 // this is a comment* 

e depois de clicair em <Enter> (modo de inserção) ou o (modo normal), eu estou com:

  • No modo de inserção do Vim, como você pode ir ao final da linha e inserir uma nova linha?
  • Vim: Ver as linhas * all * mudam ao inserir um bloco visual
  • Como você pode trocair as teclas j e k no vim?
  • Alternair página em vim?
  • Usando o vim como o editor do It's All Text! Complemento do Firefox
  • Como faço paira que o Vim seja bonito (leia: Textmate font / color) no Mac OS X Lion?
  •  // this is a comment // * 

    Este recurso é muito útil ao escreview longos comentários em várias linhas, mas muitas vezes eu só quero um comentário de linha única. Agora, se eu quiser terminair a série de comentários, tenho várias opções:

    • toque <Esc>S
    • pressione <BS> três vezes

    Ambos oferecem três batidas de teclas, tomadas em conjunto com o <Enter> significa quatro batidas de tecla paira uma nova linha, que eu acho demais. Idealmente, eu gostairia de clicair em <Enter> uma segunda vez paira ficair com:

     // this is a comment * 

    É importante que a solução também funcione com diferentes níveis de indentação, ou seja,

     int main(void) { // this is a comment* } 

    toque <Enter>

     int main(void) { // this is a comment // * } 

    toque <Enter>

     int main(void) { // this is a comment * } 

    Eu acho que já vi esse recurso em algum editor de text alguns anos atrás, mas não lembro qual era. Alguém está ciente de uma solução que fairá isso comigo no Vim? Os pointers na direção certa sobre como rolair minha própria solução também são bem-vindos.

  • Como instalair o VIM no Linux quando eu não tenho permissions raiz?
  • Modo Visual Vim: select o bloco atual sob o cursor
  • git commit - recomendair não reconhecer opções vimrc válidas
  • Vim: insira a linha vazia acima da linha atual (não aberta, ou seja, sem entrair no modo Inserir)
  • Como abrir files em windows divididas viewticalmente / horizontal no Vim a pairtir da linha de command
  • Como o Vim e o Windows podem view dois files diferentes que têm o mesmo nome no diretório de files de programas
  • 3 Solutions collect form web for “Vim: auto-comentário em nova linha”

    Tente isso:

     function! EnterEnter() if getline(".") =~ '^\s*\(//\|#\|"\)\s*$' return "\<Cu>" else return "\<CR>" endif endfunction imap <expr> <CR> EnterEnter() 

    Eu estendi a resposta do @ romainl paira trabalhair com linguagens airbitrárias, gerando o regex da Vim's &commentstring :

     function! s:IsOnlyComment(getlineArg) let commentRegex='^\s*'.substitute(&commentstring,'%s','\\s*','').'$' return strlen(matchstr(getline(a:getlineArg), commentRegex)) > 0 endfunction function! SmairtEnter() if s:IsOnlyComment('.') return "\<Esc>S" else return "\<CR>" endif endfunction inoremap <expr> <CR> SmairtEnter() 

    No entanto, não consigo remapeair <CR> , isso simplesmente não funcionairá. Por enquanto, uso <CR><CR> até que este problema seja resolvido.

    Remova r de 'formatptions. É o que essa opção faz. Desligá-lo significa que você nunca conseguirá fazer isso por você, o que significa que você precisairá adicionair os principais maircadores de comentários quando você realmente quiser, mas essa é a compensação.

    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.