Salvataggio automatico e conflitti Nerdtree

Sep 02 2020

Stavo cercando di impostare NeoVim per il salvataggio automatico ogni volta che viene apportata una modifica. Ho usato questo comando, che ho scritto in ~/.config/nvim/init.vim:

autocmd TextChanged, TextChangedI * silent write

Funziona perfettamente per quello di cui avevo bisogno, ma ho scoperto che entrava in conflitto con nerdtree, che ho impostato con quanto segue:

autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif

Fondamentalmente, avvia nerdtree all'avvio di Vim ogni volta che non sto modificando un file specifico.

L'errore che sto riscontrando è che il comando di salvataggio automatico tenta di salvare anche quando sono in Nerdtree; per questo motivo, Vim dà il seguente errore:

Errore rilevato durante l'elaborazione dei comandi automatici TextChanged per "*":

E382: Impossibile scrivere, l'opzione "buftype" è impostata.

Premere INVIO o digitare il comando per continuare

Ovviamente, se premo invio, scompare, ma ogni volta che premo qualcosa per navigare in Nerdtree, viene visualizzato di nuovo ed è molto fastidioso.

C'è un modo per risolvere questo problema, mantenendo il salvataggio automatico?

Risposte

2 filbranden Sep 02 2020 at 11:14

Puoi aggiornare il tuo autocmd per verificare se il buffer è di un tipo che può accettare il :writecomando.

Per esempio:

autocmd TextChanged,TextChangedI *
    \ if &buftype ==# '' || &buftype == 'acwrite' |
    \     silent write |
    \ endif

Vedi :help 'buftype'per vedere i tipi di buffer e in particolare quelli che potresti desiderare :write.