Modifica dei caratteri di commento predefiniti in NERDCommenter

Aug 23 2020

Ho fatto una domanda simile in passato ma non sono riuscito a risolverla in un modo troppo carino. l'unico modo in cui sono stato in grado di capire come cambiare il delimitatore è modificando la sorgente NERDCommenter stessa:

# plugin/NERD_commenter.vim
let s:delimiterMap = {
    ...
    \ 'asm': { 'left': '#', 'leftAlt': ';' },
    ...
}

Preferirei fare qualcosa di simile in modo che si trovi nel mio vimrc (o in qualche altro posto in modo che se lo sposto su un'altra macchina funziona ancora):

augroup AsmComments
   autocmd!
   autocmd Filetype asm let b:NERDCommenterDelims['left'] = '#'
augroup END

Quale sarebbe il modo corretto per farlo?


Aggiornamento : a proposito, ho appena digitato il seguente comando (nella domanda) e l'ho incollato in vim e ha funzionato, quindi penso che il mio problema dovrebbe essere risolto :)

Risposte

1 filbranden Aug 23 2020 at 11:21

Imposta g:NERDCustomDelimiterssu un Dict con le tue sostituzioni. Puoi impostarlo nel tuo vimrc:

let g:NERDCustomDelimiters = {
    \ 'asm': { 'left': '#', 'leftAlt': ';' }
    \ }

Se questa variabile è definita quando viene caricato NERDCommenter, estenderà la sua mappa delimitatore con essa .

NERDCommenter documenta anche questa variabile sotto :help 'NERDCustomDelimiters':

Utilizzare questa opzione se si dispone di nuovi tipi di file che si desidera vengano gestiti dallo script o se si desidera sovrascrivere i delimitatori predefiniti di un tipo di file.


Il problema con l'override b:NERDCommenterDelims, come hai suggerito nella domanda, è che deve accadere dopo il autocmdda NERDCommenter che lo imposta inizialmente, quindi è improbabile che quel blocco funzioni se impostato nel tuo vimrc ...

Puoi farlo funzionare archiviandolo in una after/directory, ad esempio ~/.vim/after/plugin/nerd_commenter_overrides.vimo simile.

(Idealmente, creare un ftpluginnamed asm.vimsarebbe meglio che creare un autocmdesplicitamente, ma temo che in questo caso verrebbe probabilmente eseguito prima del autocmdda NERDCommenter e non funzionerebbe neanche ... In ogni caso, l'override globale di Dict è il ben fatto!)