2010-10-25 337 views
4

Vim est presque parfait pour moi. Mais je veux toujours un commentaire de ligne et une fonction de commentaire de bloc, je veux savoir comment écrire un vimrc pour le faire en python et javascript.vim: ajouter un commentaire macros

portland pur

+0

Ou quoi? – alesplin

+0

oui, sélectionnez un bloc avec le mode visuel, puis placez des commentaires de bloc –

+0

Édité ma réponse pour inclure une fonction qui commentera les blocs visuellement sélectionnés. – alesplin

Répondre

3

Si vous voulez des commentaires de ligne de style c (que je crois légale en javascript), vous pouvez définir ce qui suit dans votre fichier .vimrc, qui commentera la ligne sur laquelle le curseur est en mode normal.

map \lo I/*<Esc>A*/<Esc> 

Si vous voulez des commentaires de python, vous pouvez effectuer les opérations suivantes:

map \lo I#<Esc> 

Si vous voulez avoir une seule déclaration, vous pouvez faire:

if match(expand("%:t"), ".py") != -1 
    map \lo I#<Esc> 
else 
    map \lo I/*<Esc>A*/<Esc> 
endif 

qui utilisera le # commentez si vous modifiez un fichier .py et utilisez le commentaire/* ... * /.

EDIT: la fonction suivante commentera un bloc sélectionné visuellement avec les commentaires de style appropriés en vérifiant le type de fichier. Vous pouvez ensuite le mapper sur quelque chose de facile comme l'instruction vmap qui suit la fonction.

function! BlockComment(top,bottom) 

    " deal with filetypes that don't have block comments 
    let fileName = expand("%:t") 
    echo fileName 

    if fileName =~ "\.py" || fileName =~ "\.sh" || fileName =~ "\.pl" 
     execute "normal I# " 
     return 
    elseif fileName =~ "\.vim" 
     execute 'normal I" ' 
     return 
    endif 

    " for c-style block comments (should work for javascript) 
    let topLine = line("'<") 

    " the + 1 is because we're inserting a new line above the top line 
    let bottomLine = line("'>") + 1 

    " this gets called as a range, so if we've already done it once we need to 
    " bail 
    let checkLine = getline(topLine - 1) 
    if (checkLine =~ '\/\*') 
     return 
    endif 

    let topString = "normal " . topLine . "GO/*" 
    let bottomString = "normal " . bottomLine . "Go*/" 

    execute topString 
    execute bottomString 

    endfunction 

    vmap <Leader>bco<CR> :call BlockComment()<CR> 

Ignorez la mise en évidence de la syntaxe farfelue. Il semble que la syntaxe highlighter ne soit pas compatible avec vimscript. Par fonctionnalité de commentaire de bloc, voulez-vous dire sélectionner un bloc avec le mode visuel, puis placer des commentaires de bloc autour de lui?

+0

vous voulez commenter sur la ligne du curseur, mais comment sélectionner un bloc visuel, et commentez-le. –

+0

Je vais devoir faire quelques recherches à ce sujet ... :) – alesplin

+0

J'ai ajouté la carte à mon vimrc, mais comment l'utiliser? – chovy

Questions connexes