Có nhiều cách tiếp cận khác nhau, tùy thuộc vào ngữ cảnh.
: nếu có một (trên dòng hiện tại làm foo: endif
Bạn có thể sử dụng search()
, theo @ câu trả lời Kent Nó hỗ trợ {stopline}
lập luận, để tránh điều đó nó vượt xa những dòng hiện tại. (mà bạn có thể vượt qua thông qua line('.')
). Nhưng nó chỉ tìm kiếm theo một hướng (hoặc là tiến hoặc lùi), vì vậy bạn phải đặt con trỏ ở vị trí con trỏ
Vì vậy, âm thanh như if getline('.') =~ '('
là một thử nghiệm tốt hơn. so sánh cụm từ thông dụng của dòng hiện tại với (
. Bạn cũng có thể sử dụng match()
thay thế (tra cứu bất kỳ hàm nào qua :help
để có tài liệu API đầy đủ và ví dụ BTW) hoặc không regexp stridx()
(có thể nhanh hơn, nhưng cũng ít rõ ràng hơn để đọc).
: nếu/searchtarget thành công làm thanh: endif
Một lần nữa, điều này nghe có vẻ giống như một sử dụng cho search()
, mà lại vị trí của con trỏ trên một trận đấu như /search
. Nhưng bạn cũng có thể sử dụng sau (với :normal
), và kiểm tra nhảy bằng cách so sánh vị trí con trỏ (thu được qua getpos('.')
) trước và sau lệnh.
Nguồn
2014-12-26 18:14:43
Một lưu ý khi kiểm tra xem vị trí con trỏ có thay đổi sau khi tìm kiếm bằng ': normal/': Nếu chỉ có một đối sánh trong tệp và nó sẽ xảy ra ở vị trí con trỏ ở đầu tìm kiếm, sau đó tìm kiếm sẽ quấn qua phần cuối của tệp (giả sử tùy chọn đó đang bật) và hạ cánh tại vị trí con trỏ hiện tại. Trong trường hợp này, tìm kiếm sẽ thực sự thành công, nhưng việc kiểm tra vị trí con trỏ đã thay đổi sẽ cho biết (sai) mà nó không có. –