Pergunta

Eu tenho um objetivo simples: mapa ctrl-c, um comando que acho que nunca costumava matar o vim, para inserir automaticamente no início de uma linha o (s) personagem (s) correto (s) para comentar essa linha de acordo com o FileType do arquivo.

Imaginei que eu poderia usar um autocomando autocomática o tipo de arquivo e definir uma variável VIM como o caractere de comentário correto quando o arquivo estiver aberto. Então eu tentei algo como:

" Control C, which is NEVER used. Now comments out lines!
autocmd BufNewFile,BufRead *.c let CommentChar = "//"
autocmd BufNewFile,BufRead *.py let CommentChar = "#"
map <C-C> mwI:echo &CommentChar<Esc>`wll

Esse mapa marca minha localização atual, vai para o início da linha no modo de inserção, ecoa o (s) personagem (s) do comentário naquele momento, entra no modo de comando, remonta à marca definida e segue dois caracteres corretamente para compensar os caracteres de comentários inseridos (assumindo o comentário do estilo C).

A parte em itálico é a parte com a qual estou tendo problemas; Só está lá como detentor do local para representar o que eu quero fazer. Você pode me ajudar a descobrir como conseguir isso? Pontos de bônus Se você usar o strlen (comentário) para aumentar o número correto de espaços para a direita! Pontos de bônus extras para o mestre do Vim que inclui como fazer comentários no estilo de bloco, se você estiver no modo visual !!

Ainda sou bastante novo no Vim Script; Meu .VIMRC tem 98 linhas de comprimento; portanto, se você puder me ajudar, explicando quaisquer respostas que você fornecer! Obrigado.

Foi útil?

Solução

Você pode usar <C-r> aqui:

noremap <C-c> mwI<C-r>=g:CommentChar<CR><Esc>`wll

Vejo :h i_CTRL-R.

Veja também Nerdcommenter O plugin, com ele, o mapeamento será assim:

" By default, NERDCommenter uses /* ... */ comments for c code.
" Make it use // instead
let NERD_c_alt_style=1
noremap <C-c> :call NERDComment(0, "norm")<CR>

E você não terá que definir os personagens de comentários sozinho.

Outras dicas

Eu tirei isso do Wiki do Vim Tips em algum momento e o uso sozinho. A única desvantagem é que adiciona um espaço ao final da (s) linha (s) por algum motivo, provavelmente algo pequeno que eu esqueci.

" Set comment characters for common languages
autocmd FileType python,sh,bash,zsh,ruby,perl,muttrc let StartComment="#" | let EndComment=""
autocmd FileType html let StartComment="<!--" | let EndComment="-->"
autocmd FileType php,cpp,javascript let StartComment="//" | let EndComment=""
autocmd FileType c,css let StartComment="/*" | let EndComment="*/"
autocmd FileType vim let StartComment="\"" | let EndComment=""
autocmd FileType ini let StartComment=";" | let EndComment=""

" Toggle comments on a visual block
function! CommentLines()
    try
        execute ":s@^".g:StartComment." @\@g"
        execute ":s@ ".g:EndComment."$@@g"
    catch
        execute ":s@^@".g:StartComment." @g"
        execute ":s@$@ ".g:EndComment."@g"
    endtry
endfunction

" Comment conveniently
vmap <Leader>c :call CommentLines()<CR>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top