Người ta có thể viết một hàm trích xuất kết quả của mẫu tìm kiếm cuối cùng xung quanh con trỏ và tạo ánh xạ để gọi nó.
nnoremap <silent> <leader>y :call setreg('"', MatchAround(@/), 'c')<cr>
function! MatchAround(pat)
let [sl, sc] = searchpos(a:pat, 'bcnW')
let [el, ec] = searchpos(a:pat, 'cenW')
let t = map(getline(sl ? sl : -1, el), 'v:val."\n"')
if len(t) > 0
let t[0] = t[0][sc-1:]
let ec -= len(t) == 1 ? sc-1 : 0
let t[-1] = t[-1][:matchend(t[-1], '.', ec-1)-1]
end
return join(t, '')
endfunction
Chức năng trên xác định thời gian bắt đầu và vị trí kết thúc của trận đấu và cẩn thận sẽ đưa ra các văn bản phù hợp, chính xác xử lý multiline mẫu và ký tự nhiều byte.
Tùy chọn khác là tạo ánh xạ đối tượng văn bản (xem :help text-object
) cho hoạt động trên mẫu tìm kiếm cuối cùng khớp với con trỏ.
vnoremap <silent> i/ :<c-u>call SelectMatch()<cr>
onoremap <silent> i/ :call SelectMatch()<cr>
function! SelectMatch()
if search(@/, 'bcW')
norm! v
call search(@/, 'ceW')
else
norm! gv
endif
endfunction
Để sao chép khớp hiện tại bằng cách sử dụng các ánh xạ này, hãy sử dụng yi/
. Đối với các đối tượng khác, ví dụ: đối tượng, bạn cũng có thể chọn bằng cách sử dụng vi/
, hoặc xóa bằng cách sử dụng di/
.
Nguồn
2012-01-02 05:34:00
Bạn cũng có thể quan tâm đến câu hỏi "[Xóa mẫu tìm kiếm phù hợp trong VIM] (http://stackoverflow.com/q/7842333/254635)". –
[Mục này] (http://vim.wikia.com/wiki/Copy_the_search_results_into_clipboard) trong Vim Tips FAQ bao gồm chủ đề này. – eckes