Conflitos de salvamento automático e Nerdtree

Sep 02 2020

Eu estava tentando configurar o NeoVim para salvamento automático sempre que uma alteração é feita. Usei este comando, que escrevi em ~/.config/nvim/init.vim:

autocmd TextChanged, TextChangedI * silent write

Funciona perfeitamente para o que eu precisava, mas descobri que entrava em conflito com a nerdtree, que configurei da seguinte maneira:

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

Basicamente, ele inicia o nerdtree na inicialização do Vim sempre que não estou editando um arquivo específico.

O erro que estou encontrando é que o comando autosave também tenta salvar quando estou em Nerdtree; por esse motivo, o Vim dá o seguinte erro:

Erro detectado durante o processamento de TextChanged Autocommands para "*":

E382: Não é possível escrever, a opção 'buftype' está definida.

Pressione ENTER ou digite o comando para continuar

Claro, se eu pressiono enter, ele desaparece, mas sempre que pressiono algo para navegar no Nerdtree, ele aparece novamente e é muito chato.

Existe uma maneira de corrigir esse problema, mantendo o autosave?

Respostas

2 filbranden Sep 02 2020 at 11:14

Você pode atualizar seu autocmd para verificar se o buffer é de um tipo que pode aceitar o :writecomando.

Por exemplo:

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

Consulte :help 'buftype'para ver os tipos de buffer e, principalmente, aqueles que você deseja :write.