tìm kiếm vim xung quanh ngắt dòng


12

Khi tôi đang chỉnh sửa tài liệu LaTeX trong vim, thường thì tôi muốn tìm kiếm một cụm từ. Bởi vì tôi có thiết lập LaTeX để ngắt dòng, đôi khi một nửa cụm từ sẽ nằm trên một dòng trong khi nửa còn lại nằm ở dòng tiếp theo. Trong trường hợp như vậy, tìm kiếm không tìm thấy những gì tôi đang tìm kiếm. Ví dụ

blah blah blah hello
world blah blah blah

Khi tìm kiếm bằng cách sử dụng /hello world, tôi không tìm thấy những gì tôi đang tìm kiếm. Có cách nào nhanh chóng và dễ dàng để sửa đổi tìm kiếm này để đưa tôi đến nơi tôi muốn không? Hoặc tốt hơn, một cách để nói vim khớp với bất kỳ khoảng trắng nào (khoảng trắng, tab, dòng mới) với một khoảng trắng trong chuỗi tìm kiếm?

Câu trả lời:


14

Sau khi tìm kiếm nhiều hơn, có vẻ như cách dễ nhất để làm điều này là với \_s. Ví dụ:

/hello\_sworld

4
Tất nhiên, bạn có thể muốn hello\_s\+worldnếu có nhiều hơn một ký tự khoảng trắng giữa chúng.
Wodin

5

Vấn đề này đã được giải quyết tại http://vim.wikia.com/wiki/Search_across_mult Môn_lines . Bao gồm là một chức năng có thể làm những gì tôi cần.

function! SearchMultiLine(bang, ...)
  if a:0 > 0
    let sep = (a:bang) ? '\_W\+' : '\_s\+'
    let @/ = join(a:000, sep)
  endif
endfunction
command! -bang -nargs=* -complete=tag S call SearchMultiLine(<bang>0, <f-args>)|normal! /<C-R>/<CR>

Sau đó, bạn có thể thực hiện tìm kiếm nhiều dòng bằng cách sử dụng :S hello worldvà nó sẽ chuyển đổi nó thành hello\s\+worldvà tìm kiếm nó. Một tính năng hay khác là điều này cũng sẽ thêm tìm kiếm mới này vào lịch sử tìm kiếm. Điều này cho phép bạn quay lại và sửa đổi tìm kiếm bằng cách sử dụng q/nếu bạn cần. Nó cũng có thể được sử dụng để thay thế bằng :%s//new thing/g. Nhược điểm của nó là nó không sử dụng incsearchnếu bạn kích hoạt nó.


3

Cách tôi biết không khó, nhưng hơi tẻ nhạt. Thay thế mọi không gian trong truy vấn tìm kiếm của bạn bằng cách sau:

[ \t\n]\+

(Lưu ý khoảng trắng sau [.) Đây là cú pháp khớp biểu thức chính quy. Bị hỏng, nó có nghĩa là:

  • [...] có nghĩa là khớp bất kỳ một trong danh sách các ký tự bên trong ngoặc.
  • \t là Tab
  • \n là dòng mới
  • ...\+ có nghĩa là phù hợp với một hoặc nhiều trước đó.

Để biết thêm thông tin về các biểu thức thông thường, bạn có thể hỏi vim:

:help regexp
:help usr_27

1

Cá nhân tôi sẽ sử dụng [ \t\n]*thay vì không gian. Điều này sẽ khớp với 0 hoặc nhiều hơn '', tab và dòng mới. Bằng cách này nếu một phiên bản của mẫu tìm kiếm của bạn kéo dài ngắt dòng, nhưng một phiên bản khác thì không, cả hai sẽ được khớp.

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.