Konflikty Autosave i Nerdtree

Sep 02 2020

Próbowałem skonfigurować NeoVim do automatycznego zapisywania za każdym razem, gdy wprowadzana jest zmiana. Skorzystałem z tego polecenia, które napisałem w ~/.config/nvim/init.vim:

autocmd TextChanged, TextChangedI * silent write

Działa idealnie w tym, czego potrzebowałem, ale stwierdziłem, że wchodzi w konflikt z nerdtree, który skonfigurowałem z następującymi elementami:

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

Zasadniczo zaczyna się nerdtree przy starcie Vima, gdy nie edytuję określonego pliku.

Błąd, który napotykam, polega na tym, że polecenie autozapisu próbuje zapisać, gdy jestem w Nerdtree; z tego powodu Vim podaje następujący błąd:

Wykryto błąd podczas przetwarzania poleceń automatycznych TextChanged dla „*”:

E382: Nie można zapisać, ustawiono opcję „buftype”.

Naciśnij klawisz ENTER lub wpisz polecenie, aby kontynuować

Oczywiście, jeśli naciśnę enter, znika, ale za każdym razem, gdy naciskam coś, aby nawigować w Nerdtree, pojawia się ponownie i jest to bardzo denerwujące.

Czy istnieje sposób na rozwiązanie tego problemu przy zachowaniu autozapisu?

Odpowiedzi

2 filbranden Sep 02 2020 at 11:14

Możesz zaktualizować swój autocmd, aby sprawdzić, czy bufor jest typu, który akceptuje :writepolecenie.

Na przykład:

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

Zobacz :help 'buftype'typy buforów, a zwłaszcza te, które możesz chcieć :write.