Domanda

Ho un semplice obiettivo: Mappa Ctrl-C, un comando non credo che abbia mai usato per uccidere vim, per inserire automaticamente all'inizio di una riga il carattere corretto (s) per commentare quella linea in base al tipo di file del file.

ho pensato che avrei potuto usare un autocomando il riconoscere il tipo di file e impostare una variabile vim al commento carattere corretto quando il file è aperto. Così ho provato qualcosa di simile:

" 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

che segna mappa mia posizione attuale, passa all'inizio della riga in modalità di inserimento, echi del carattere di commento (s) a quel punto , entra in modalità di comando, risale al segno set, e va due personaggi diritto di compensare i caratteri di commento inserito (assumendo commento stile C).

La parte in corsivo è la parte che sto avendo problemi con; è solo lì come un segnaposto per rappresentare quello che voglio fare. Potete aiutarmi a capire come raggiungere questo obiettivo? I punti di bonus se si utilizza strlen (CommentChar) a intensificare il numero corretto di spazi a destra! punti bonus extra per il vim-master che include come fare commenti blocco in stile se si è in modalità visiva !!

Sono ancora abbastanza nuovo a scripting vim; la mia Vimrc è un misero 98 linee lunghe, per cui se si potesse Please help me spiegando alcuna risposta forniti! Grazie.

È stato utile?

Soluzione

È possibile utilizzare <C-r> qui:

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

vedi :h i_CTRL-R.

Anche guardare NERDCommenter plug-in, con esso mappatura sarà simile in questo modo:

" 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 non dovrete definire i caratteri di commento da soli.

Altri suggerimenti

Ho tirato fuori questo il vim punte wiki ad un certo punto e lo uso io. L'unico lato negativo è che aggiunge uno spazio alla fine della linea (s) per qualche ragione, probabilmente qualcosa di piccolo ho trascurato.

" 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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top