Autosave- und Nerdtree-Konflikte

Sep 02 2020

Ich habe versucht, NeoVim so einzurichten, dass es bei jeder Änderung automatisch gespeichert wird. Ich habe diesen Befehl verwendet, den ich geschrieben habe in ~/.config/nvim/init.vim:

autocmd TextChanged, TextChangedI * silent write

Es funktioniert perfekt für das, was ich brauchte, aber ich fand es in Konflikt mit Nerdtree, das ich mit folgendem eingerichtet habe:

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

Grundsätzlich startet es nerdtree beim Start von Vim, wenn ich keine bestimmte Datei bearbeite.

Der Fehler, auf den ich stoße, ist, dass der Befehl zum automatischen Speichern versucht, zu speichern, wenn ich mich ebenfalls in Nerdtree befinde. Aus diesem Grund gibt Vim den folgenden Fehler aus:

Fehler bei der Verarbeitung von TextChanged Autocommands für "*" festgestellt:

E382: Kann nicht schreiben, Option 'Buftype' ist gesetzt.

Drücken Sie die EINGABETASTE oder geben Sie den Befehl ein, um fortzufahren

Wenn ich die Eingabetaste drücke, verschwindet es natürlich, aber wenn ich etwas drücke, um in Nerdtree zu navigieren, wird es wieder angezeigt und ist sehr ärgerlich.

Gibt es eine Möglichkeit, dieses Problem zu beheben und die automatische Speicherung beizubehalten?

Antworten

2 filbranden Sep 02 2020 at 11:14

Sie können Ihr Autocmd aktualisieren, um zu überprüfen, ob der Puffer von einem Typ ist, der den :writeBefehl akzeptieren kann .

Beispielsweise:

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

Sehen :help 'buftype'Sie sich die Puffertypen an, insbesondere die, die Sie möglicherweise möchten :write.