Bật con trỏ và con trỏ sau khi cửa sổ Quickfix được mở


7

Do hiệu suất, tôi vô hiệu hóa cursorlinecursorcolumntrong Vim. Tuy nhiên, trong trường hợp nhảy qua một Quickfixcửa sổ, thật khó để xác định vị trí con trỏ trong tệp. Vì vậy, tôi muốn kích hoạt cursorlinecursorcolumntự động sau khi một Quickfixcửa sổ được mở (bằng bất kỳ hành động nào).

Bây giờ tôi có giải pháp bằng cách sử dụng Autocmdnhư thế này:

autocmd BufferEnter quickfix :bufdo set cursorline cursorcolumn

Đây có phải là giải pháp thích hợp? Còn ý tưởng nào hay hơn không?

Cảm ơn rất nhiều!


2
Có thể bạn có thể sử dụng sự kiện QuickFixCmdPost ( :h QuickFixCmdPost) nhưng tôi không chắc điều đó sẽ tốt hơn.
statox

@statox Cảm ơn, nó hoạt động với Ack, vimgrepv.v. Nhưng nó không hoạt động trong trường hợp :copen. Giải pháp khá hay!
tamlok

Xem :h QuickFixCmdPrenó chứa một danh sách các lệnh kích hoạt sự kiện QuickFixCmdPre(và do đó là sự kiện QuickFixCmdPost) và thực sự :copenkhông phải là một trong số chúng. Vì vậy, hành vi bạn gặp phải là bình thường nhưng tôi không biết làm thế nào để nó hoạt động với :copen...
statox

Câu trả lời:


2

Tạo tệp trong ~/.vim/ftplugin/qf.vim(hoặc $HOME/vimfiles/ftplugin/qf.vimnếu bạn đang ở trên Windows) với các nội dung sau:

" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
   finish
endif

wincmd p " go to original window
set cursorline
set cursorcolumn
wincmd p " back to quickfix window

Các tệp ftplugin được thực thi bất cứ khi nào filetype được đặt cho bộ đệm tệp đã cho (quickfix và cửa sổ vị trí có filetyp qf).

Sử dụng các tệp plugin filetype thay vì autocmds sẽ tránh làm lộn xộn vimrc của bạn. Bạn có thể tìm thêm chi tiết tại :help ftplugin-name, :help 43Vim FAQ 26,8 .


Biên tập:

Việc kiểm tra b:did_ftpluginlà cần thiết để cho phép vô hiệu hóa nó nếu cần thiết và để tránh tải nó hai lần (xem :help ftplugin).

Cái let b:did_ftplugin = 1này được bỏ qua khỏi tệp này vì mục đích của tệp này là tăng plugin filetype mặc định cho quickfix và không ghi đè. Nếu dòng này được thêm vào thì các cài đặt tại $VIMRUNTIME/ftplugin/qf.vimsẽ bị bỏ qua, như được giải thích tại :help ftplugin-overrule.


Cảm ơn rất nhiều! Nhưng điều đó b:did_ftplugincó nghĩa là gì? Kịch bản của bạn dường như không thay đổi nó ở bất cứ đâu. Tôi đã thử nó trong vimrc của tôi và nó hoạt động!
tamlok

@tamlok rất vui vì tôi có thể giúp. Lưu ý rằng bạn không được phép sao chép nó vào vimrc của bạn, nhưng vào một tệp như được đề cập trong cụm từ đầu tiên. Vim xử lý loại tập tin đó một cách đặc biệt. Tôi cập nhật câu hỏi về b:did_ftpluginphần này.
mMontu
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.