Pregunta

Tengo un objetivo simple: Mapa Ctrl-C, un comando no creo que he usado para matar vim, para insertar automáticamente al comienzo de una línea el carácter correcto (s) de comentar que la línea de acuerdo con el tipo de archivo del archivo.

pensé que podría utilizar un AutoCommand al reconocer el tipo de archivo y establecer una variable vim con el carácter de comentario correcto cuando el archivo está abierto. Así que he intentado 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

que marca el mapa de mi ubicación actual, va al principio de la línea en el modo de inserción, ecos el carácter de comentario (s) en ese punto , entra en modo de comando, se remonta hasta la marca de conjunto, y va dos personajes derecho a compensar los caracteres de comentario insertados (suponiendo comentario estilo C).

La parte en cursiva es la parte que estoy teniendo problemas con; que sólo está allí como un marcador de posición para representar lo que yo quiero hacer. ¿Puede usted ayudarme a averiguar cómo lograr esto? Los puntos de bonificación si se utiliza STRLEN (CommentChar) al paso el número correcto de espacios a la derecha! puntos de bonificación extra para el vim-maestra que incluye cómo hacer comentarios a modo de bloque si se encuentra en modo visual !!

Estoy todavía bastante nuevo en vim secuencias de comandos; mi .vimrc es un mísero 98 líneas largas, así que si usted podría por favor me ayude explicando las respuestas que proporcionan! Gracias.

¿Fue útil?

Solución

Se puede utilizar <C-r> aquí:

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

ver :h i_CTRL-R.

También se fijan en NERDCommenter plugin, con ella se parecerá a la cartografía esto:

" 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>

Y usted no tendrá que definir caracteres de comentario por sí mismo.

Otros consejos

Saqué esto de la vim consejos wiki en algún momento y lo uso yo. El único inconveniente es que añade un espacio al final de la línea (s) por alguna razón, probablemente algo pequeño pasé por alto.

" 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top