Khi bạn thực thi một lệnh bên ngoài :!
, Vim không biết lệnh bên ngoài nào có thể đã được ghi vào thiết bị đầu cuối, vì vậy nó chờ bạn xác nhận rằng bạn đã sẵn sàng tiếp tục.
Để tránh điều đó, bạn có thể sử dụng system()
chức năng như thế này:
autocmd BufWritePost *.cpp call system("ctags -R")
autocmd BufWritePost *.h call system("ctags -R")
Bạn cũng có thể đơn giản hóa điều đó thành một lệnh:
autocmd BufWritePost *.cpp,*.h call system("ctags -R")
Một vấn đề với việc gọi điện system()
là bạn mất bất kỳ thông báo lỗi nào mà nó có thể tạo ra. Điều đó có thể được giải quyết bằng cách sử dụng echo
thay vì call
, như thế này:
autocmd BufWritePost *.cpp,*.h echo system("ctags -R")
Tuy nhiên, điều đó lặp lại một dòng trống vào màn hình khi lệnh thành công, gây ra một dấu nhắc "Nhấn ENTER hoặc gõ lệnh tiếp tục". Giải pháp đơn giản nhất cho việc đó là tăng chiều cao của dòng lệnh:
:set cmdheight=2
Một giải pháp khác, phức tạp hơn sẽ chỉ lặp lại một tin nhắn nếu có. Sau đó, bạn tránh lời nhắc mà không mất bất kỳ không gian màn hình.
autocmd BufWritePost *.cpp,*.h let msg=system('ctags -R') | if msg!="" | echo msg | endif