Xung đột Autosave và Nerdtree
Tôi đã cố gắng thiết lập NeoVim để tự động lưu mỗi khi thực hiện thay đổi. Tôi đã sử dụng lệnh này, mà tôi đã viết trong ~/.config/nvim/init.vim:
autocmd TextChanged, TextChangedI * silent write
Nó hoạt động hoàn hảo cho những gì tôi cần, nhưng tôi thấy nó mâu thuẫn với nerdtree, mà tôi đã thiết lập như sau:
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
Về cơ bản, nó bắt đầu nerdtree khi khởi động Vim bất cứ khi nào tôi không chỉnh sửa một tệp cụ thể.
Lỗi tôi đang gặp phải là lệnh tự động lưu cố gắng lưu khi tôi cũng ở trong Nerdtree; vì lý do này, Vim đưa ra lỗi sau:
Đã phát hiện lỗi khi xử lý các Lệnh tự động thay đổi văn bản cho "*":
E382: Không thể viết, tùy chọn 'buftype' được đặt.
Nhấn ENTER hoặc gõ lệnh để tiếp tục
Tất nhiên, nếu tôi nhấn enter, nó sẽ biến mất, nhưng bất cứ khi nào tôi nhấn một cái gì đó để điều hướng trong Nerdtree, nó lại hiển thị và rất khó chịu.
Có cách nào để khắc phục sự cố này, duy trì lưu tự động không?
Trả lời
Bạn có thể cập nhật autocmd của mình để kiểm tra xem bộ đệm có thuộc loại có thể chấp nhận :writelệnh hay không.
Ví dụ:
autocmd TextChanged,TextChangedI *
\ if &buftype ==# '' || &buftype == 'acwrite' |
\ silent write |
\ endif
Xem :help 'buftype'để biết các loại đệm và đặc biệt là những loại bạn có thể muốn :write.