Làm cách nào để tìm kiếm văn bản đã chọn trong Vim?


61

Tôi biết rằng tôi có thể sử dụng /theo sau bởi một regex để tìm kiếm thứ gì đó. Và tôi có thể sử dụng ?để tìm kiếm ngược. Và tôi có thể sử dụng nNlặp lại tìm kiếm tiến và lùi.

Ngoài ra còn có hai phím tắt đẹp: *hoặc #sẽ tìm kiếm từ dưới con trỏ (tiến / lùi). Điều đó rất hữu ích! (cũng có g*g#các biến thể)

Nhưng ... Khi tôi đã chọn văn bản bằng chế độ trực quan ( v), làm cách nào tôi có thể yêu cầu Vim tìm kiếm chính xác văn bản đó? Nhìn nhanh vào :helpđã không ... huh ... giúp tôi.



Cảm ơn những lời khuyên với *#! Sẽ rất tuyệt nếu câu hỏi của bạn cũng sẽ giải thích những gì g*g#sẽ làm gì;)
winklerrr

Câu trả lời:


22

Trình tự sau đây sẽ làm những gì bạn muốn, được cung cấp một khối văn bản đã được chọn:

  • y( "mặc định văn bản đã chọn, vào sổ đăng ký theo mặc định)
  • / (vào chế độ tìm kiếm)
  • ( \ V) (tùy chọn, nhập chế độ "rất không có phép thuật" *)
  • Ctrl+ r "(chèn văn bản từ "thanh ghi)
  • Enter (Thuê!)

(*) Chế độ "rất không có phép thuật" diễn giải văn bản sau dưới dạng văn bản thuần thay vì dưới dạng biểu thức chính quy. tuy nhiên lưu ý rằng \/vẫn còn đặc biệt và sẽ phải được xử lý theo những cách khác. Nếu văn bản không có bất kỳ ký tự nào được coi là đặc biệt, bạn có thể bỏ qua bước này.

Nguồn: Wiki Vim Mẹo


1
Cảm ơn bạn! Đây là nhiều hơn nữa dễ hiểu hơn so với "Làm thế nào-To" trên vim.wikia trang
winklerrr

64

Bạn có thể kéo văn bản hightlight trước. Sau đó

  • /

  • Ctrlr

  • "

Mà sẽ dán những gì bạn đã kéo mạnh sau /.


7
Ý tưởng hay ... ngoại trừ việc văn bản được dán sẽ được hiểu là một biểu thức chính quy, điều không mong muốn. :-(
Denilson Sá Maia

4
Nếu điều này gần như đủ tốt cho bạn, thì bạn có thể làm /\V<C-r>"thay thế. Bằng cách thêm vào \Vtruy vấn tìm kiếm của bạn, bạn nói với vim sử dụng "rất không có phép thuật". Dấu gạch chéo ngược vẫn có thể gây ra sự cố cho bạn. Xem:help \V
idbrii

3
Nó có thể giúp giải thích đó Ctrl+Rlà cách bạn truy cập vào một thanh ghi, và *chỉ đơn giản là thanh ghi clipboard của hệ thống. Ví dụ, bạn cũng có thể làm: yawđể kéo một từ vào thanh ghi "(thanh ghi mặc định), sau đó /<C-r>"tìm kiếm chuỗi đó.
Ben Davis

5
@ DenilsonSá - Bạn có thể sử dụng giải pháp này, nhưng thay vì sử dụng /để thực hiện tìm kiếm của mình, ?thay vào đó, vì tìm kiếm ngược lại thoát dấu gạch chéo theo mặc định. Sau đó, bạn có thể nhấn Nđể tiếp tục tìm kiếm theo hướng chuyển tiếp.
Công viên Brad

7

Tôi chưa bao giờ cảm thấy cần một tính năng như vậy, nhưng, xem xét bạn có thể tìm thấy nhu cầu cho bất kỳ tính năng nào trên Vim, tôi nghĩ rằng điều đó sẽ giúp:

Tìm kiếm văn bản được lựa chọn trực quan

Tôi đã không kiểm tra nó, nhưng nhìn vào mã, nó dường như chính xác là những gì bạn đang tìm kiếm.


4

Bạn có thể tìm thấy một phương pháp để tạo hành vi này tại đây tại wiki vim .


Thật tuyệt, tôi tìm thấy phiên bản để thoát khỏi dấu gạch chéo là hữu ích. vnoremap // y/\V<C-r>=escape(@",'/\')<CR><CR>
thủ công

1

Giải pháp này cho phép tìm kiếm vim của bạn theo ngữ cảnh được lựa chọn trực quan ngay cả với các ký tự đa dòng và thoát.

Thêm mã sau đây vào bạn .vimrcvà tìm kiếm nội dung được chọn trực quan của bạn bằng cách //. Bạn cũng có thể thay thế toàn cầu nội dung đã chọn bằng cách /s. Hoặc Thay thế cục bộ bối cảnh đã chọn //trước, sau đó chọn trực quan một vùng và :'<,'>s//{new_text}.

set incsearch
set hlsearch
set ignorecase
function GetVisualSelection()
  let raw_search = @"
  let @/=substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
endfunction
xnoremap // ""y:call GetVisualSelection()<bar>:set hls<cr>
if has('nvim')
  set inccommand=nosplit
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s/
else
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s//
endif

Các cấu hình trên chỉ là về tìm kiếm. Đối với tất cả cấu hình vim của tôi, vui lòng truy cập .vimrc


0

Trong cấu hình của tôi trên hai máy riêng biệt, nếu tôi chọn văn bản và sau đó nhấn /nó sẽ tự động tìm kiếm văn bản đã chọn.


Đó không phải là hành vi mặc định. Ở đây, khi tôi nhấn / (trong khi ở chế độ trực quan), nó chỉ hiển thị một dấu nhắc regex trống, chờ tôi gõ một cái gì đó.
Denilson Sá Maia

Lạ, bởi vì tôi không bao giờ làm bất cứ điều gì để kích hoạt nó.
Nathan Fellman

3
Nhiều distro gửi cấu hình vim không chuẩn làm mặc định (có thể vì cấu hình vim tiêu chuẩn vô hiệu hóa nhiều tính năng hữu ích, chủ yếu là để tương thích vi).
sleske
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.