Làm cách nào để tôi thực thi các thẻ ctags -Riến khi lưu các tệp * .h và * .cpp mà không có dấu nhắc xác nhận?


8

Đây là một câu hỏi không có thật, vì vậy về cơ bản trong vim tôi muốn chạy ctags -Rkhi tôi đang ghi vào tệp nguồn hoặc tiêu đề của mình ( *.hhoặc *.cpp) vì vậy tôi đã thử như sau:

autocmd BufWritePost *.cpp :!ctags -R
autocmd BufWritePost *.h :!ctags -R

Nó dường như hoạt động, nhưng mỗi khi tôi lưu, nó muốn xác nhận, vì vậy tôi phải nhấn enter, như thế này:

"coap/coap_pdu_ll.h" 30L, 793C written
:!ctags R

Press ENTER or type command to continue

Có cách nào để thoát khỏi xác nhận?

Câu trả lời:


10

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 echothay 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

2

Vì có vẻ như bạn đang sử dụng C ++, tại sao không chỉ xây dựng lại các thẻ của bạn khi bạn biên dịch? Chỉ cần thêm một quy tắc cho makefile của bạn.

Sự lựa chọn khác:


Đề xuất thực sự tốt, trong thực tế tôi đang thử gutentags ngay bây giờ. Nhưng, tôi chủ yếu là người tối giản, với tôi một dòng trong tệp .vimrc tốt hơn là một plugin, trừ khi plugin cung cấp cho tôi một thứ mà một dòng không thể làm được. Tôi nghĩ rằng plugin là cần thiết cho các cơ sở mã lớn hơn.
dùng1135541
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.