Autosave- und Nerdtree-Konflikte
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
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.