Làm cách nào tôi có thể làm nổi bật tất cả sự xuất hiện của một từ đã chọn trong GVim, như trong Notepad ++?
Làm cách nào tôi có thể làm nổi bật tất cả sự xuất hiện của một từ đã chọn trong GVim, như trong Notepad ++?
Câu trả lời:
Ở chế độ Bình thường:
:set hlsearch
Sau đó tìm kiếm một mẫu bằng lệnh /
ở chế độ Bình thường hoặc <Ctrl>o
theo sau /
trong chế độ Chèn. *
trong chế độ Bình thường sẽ tìm kiếm sự xuất hiện tiếp theo của từ dưới con trỏ. Các hlsearch
tùy chọn sẽ đánh dấu tất cả trong số họ nếu thiết lập.#
sẽ tìm kiếm sự xuất hiện trước đó của từ này.
Để xóa phần tô sáng của tìm kiếm trước:
:nohlsearch
Bạn có thể muốn ánh xạ :nohlsearch<CR>
tới một số phím thuận tiện.
*
hoặc #
bởi <Ctrl>o
trong chế độ bình thường.
:nohlsearch
, bạn chỉ có thể sử dụng:noh
.vimrc
: noremap <F4> :set hlsearch! hlsearch?<CR>
để chuyển đổi giữa tô sáng và xóa tô sáng bằng <F4>
.
Các *
chủ chốt sẽ làm nổi bật tất cả các lần xuất hiện của từ đó là dưới con trỏ.
&hlsearch
được bật.
#
.
Tôi biết hơn đó là một câu hỏi thực sự cũ, nhưng nếu ai đó quan tâm đến tính năng này, có thể kiểm tra mã này http://vim.wikia.com/wiki/Auto_highlight_cản_word_when_idle
" Highlight all instances of word under cursor, when idle.
" Useful when studying strange source code.
" Type z/ to toggle highlighting on/off.
nnoremap z/ :if AutoHighlightToggle()<Bar>set hls<Bar>endif<CR>
function! AutoHighlightToggle()
let @/ = ''
if exists('#auto_highlight')
au! auto_highlight
augroup! auto_highlight
setl updatetime=4000
echo 'Highlight current word: off'
return 0
else
augroup auto_highlight
au!
au CursorHold * let @/ = '\V\<'.escape(expand('<cword>'), '\').'\>'
augroup end
setl updatetime=500
echo 'Highlight current word: ON'
return 1
endif
endfunction
cách đơn giản nhất, gõ ở chế độ bình thường *
Tôi cũng có các ánh xạ này để bật và tắt
"highligh search enabled by default
set hlsearch
"now you can toggle it
nnoremap <S-F11> <ESC>:set hls! hls?<cr>
inoremap <S-F11> <C-o>:set hls! hls?<cr>
vnoremap <S-F11> <ESC>:set hls! hls?<cr> <bar> gv
Chọn từ bằng cách nhấp vào nó
set mouse=a "Enables mouse click
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>
Phần thưởng: CountWordFunction
fun! CountWordFunction()
try
let l:win_view = winsaveview()
let l:old_query = getreg('/')
let var = expand("<cword>")
exec "%s/" . var . "//gn"
finally
call winrestview(l:win_view)
call setreg('/', l:old_query)
endtry
endfun
" Bellow we set a command "CountWord" and a mapping to count word
" change as you like it
command! -nargs=0 CountWord :call CountWordFunction()
nnoremap <f3> :CountWord<CR>
Chọn từ bằng chuột và đếm số lần xuất hiện cùng một lúc: OBS: Lưu ý rằng trong phiên bản này, chúng tôi có lệnh "CountWord" ở cuối
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>
nnoremap * *``cgn
vànnoremap # #``cgN
*
, làm cách nào để tắt phần tô sáng?
:noh
hoặc:nohlsearch
nnoremap <silent> * :execute "normal! *N"<cr>
và nnoremap <silent> # :execute "normal! #n"<cr>
? Chúng chỉ làm nổi bật từ dưới con trỏ nhưng không chuyển từ này sang lần xuất hiện tiếp theo.
Tìm kiếm giải pháp dựa trên ( *,/ ...) di chuyển con trỏ, điều này có thể không may.
Một cách khác là sử dụng plugin mark.vim nâng cao , sau đó hoàn tất .vimrc
để cho phép nhấp đúp vào tô sáng kích hoạt (Tôi không biết cách lựa chọn bàn phím có thể kích hoạt lệnh):
"Use Mark plugin to highlight selected word
map <2-leftmouse> \m
Nó cho phép nhiều điểm nhấn, kiên trì, vv
Để xóa phần tô sáng, một trong hai:
:Mark
(tắt cho đến khi lựa chọn tiếp theo):MarkClear
:set noincsearch
. Theo tôi đó là một trong những tính năng khó chịu nhất trong Vim và là một trong những điều đầu tiên tôi vô hiệu hóa cho các bản cài đặt mới.
*
sẽ di chuyển con trỏ vô điều kiện. Và tôi không thể thấy làm thế nào incsearch
có thể gây phiền nhiễu, vì đó chỉ là một 'nhìn về phía trước', thực hiện tìm kiếm hiện tại mà không thực sự thay đổi vị trí của bạn.
incsearch
sẽ ngăn chặn chuyển động, nhưng một bài kiểm tra nhanh xác nhận bạn đã đúng. Lời xin lỗi của tôi. Tuy nhiên, thật dễ dàng để tạo một bản đồ ngăn chặn sự di chuyển : :nnoremap * *N
. Tôi không thể tin rằng bạn không thấy phiền khi con trỏ của bạn nhảy khắp màn hình khi bạn thực hiện tìm kiếm. Nhưng ... những điều này là hoàn toàn chủ quan. Vive la différence ;-)
:let @/='hilight_this'
, giả sử bạn đã hlsearch
kích hoạt. Nó làm nổi bật văn bản mà không cần nhảy và bạn không phải thay đổi cài đặt hiện có. Điều này thay đổi giá trị hiện được lưu trữ trong sổ đăng ký tìm kiếm.
Đầu tiên (hoặc trong .vimrc của bạn):
:set hlsearch
Sau đó định vị con trỏ của bạn trên từ bạn muốn tô sáng và nhấn *
.
hlsearch
có nghĩa là làm nổi bật tất cả các lần xuất hiện của tìm kiếm hiện tại và *
có nghĩa là tìm kiếm từ dưới con trỏ.
Trước tiên hãy đảm bảo rằng hlsearch được bật bằng cách ban hành lệnh sau
:set hlsearch
Bạn cũng có thể thêm tệp này vào tệp .vimrc của mình như đã đặt
set hlsearch
bây giờ khi bạn sử dụng cơ chế tìm kiếm nhanh trong chế độ lệnh hoặc lệnh tìm kiếm thông thường, tất cả các kết quả sẽ được tô sáng. Để di chuyển về phía trước giữa các kết quả, nhấn 'n' để di chuyển về phía sau nhấn 'N'
Ở chế độ bình thường, để thực hiện tìm kiếm nhanh từ dưới con trỏ và chuyển sang lần xuất hiện tiếp theo trong một lệnh nhấn '*', bạn cũng có thể tìm kiếm từ dưới con trỏ và di chuyển đến lần xuất hiện trước bằng cách nhấn '# '
Trong chế độ bình thường, tìm kiếm nhanh cũng có thể được gọi với
/searchterm<Enter>
để loại bỏ các điểm nổi bật trong việc sử dụng ocuurences, tôi đã ràng buộc điều này với một phím tắt trong .vimrc của tôi
:nohl
Cho phép đánh dấu tìm kiếm:
:set hlsearch
Sau đó tìm kiếm từ:
/word<Enter>
Yêu thích của tôi để làm điều này là plugin mark.vim . Nó cho phép làm nổi bật một số từ trong các màu sắc khác nhau cùng một lúc.
để tô sáng từ mà không di chuyển con trỏ, hãy ngồi phịch
" highlight reg. ex. in @/ register
set hlsearch
" remap `*`/`#` to search forwards/backwards (resp.)
" w/o moving cursor
nnoremap <silent> * :execute "normal! *N"<cr>
nnoremap <silent> # :execute "normal! #n"<cr>
vào vimrc của bạn.
Những gì tốt đẹp về điều này là g*
và g#
vẫn sẽ hoạt động như "bình thường" *
và #
.
Để hlsearch
tắt, bạn có thể sử dụng "dạng ngắn" (trừ khi bạn có một chức năng khác bắt đầu bằng "noh" trong chế độ lệnh) : :noh
. Hoặc bạn có thể sử dụng phiên bản dài::nohlsearch
Để thuận tiện hơn (tôi thấy mình hlsearch
có thể bật 20 lần mỗi ngày), bạn có thể lập bản đồ để chuyển đổi hlsearch
như vậy:
" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>
.:. nếu <leader>
là \(theo mặc định), bạn có thể nhấn \st(nhanh chóng) ở chế độ bình thường để chuyển đổi hlsearch
.
Hoặc có thể bạn chỉ muốn có :noh
bản đồ:
" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>
Ở trên chỉ đơn giản là chạy :nohlsearch
như vậy (không giống như :set hlsearch!
) nó vẫn sẽ làm nổi bật từ khi bạn nhấn *hoặc #ở chế độ bình thường .
chúc mừng
Sử dụng autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
Hãy chắc chắn rằng bạn đã IncSearch
thiết lập một cái gì đó. ví dụ call s:Attr('IncSearch', 'reverse')
. Ngoài ra, bạn có thể sử dụng một nhóm nổi bật khác ở vị trí của nó.
Điều này sẽ làm nổi bật tất cả các lần xuất hiện của các từ dưới con trỏ của bạn mà không có độ trễ. Tôi thấy rằng một sự chậm trễ làm tôi chậm lại khi tôi lướt qua mã. Màu nổi bật sẽ phù hợp với màu của từ, vì vậy nó vẫn phù hợp với sơ đồ của bạn.
Tại sao không chỉ: z /
Điều đó sẽ làm nổi bật từ hiện tại dưới con trỏ và bất kỳ lần xuất hiện nào khác. Và bạn không phải đưa ra một lệnh riêng cho từng mục bạn đang tìm kiếm. Có lẽ đó là không có sẵn trong gvim u ám? Đó là trong vim theo mặc định.
* chỉ tốt nếu bạn muốn con trỏ di chuyển đến lần xuất hiện tiếp theo. Khi so sánh trực quan hai thứ, bạn thường không muốn con trỏ di chuyển và thật khó chịu khi nhấn phím * mỗi lần.
~/.vimrc
tập tin của bạn
" highlight the searched items
set hlsearch
" F8 search for word under the cursor recursively , :copen , to close -> :ccl
nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>
:so%
Trong mô hình bình thường đi qua từ.
Nhấn * Nhấn F8 để tìm kiếm đệ quy dưới toàn bộ dự án của bạn qua từ
Ví dụ: plugIns này:
Chỉ cần tìm kiếm theo con trỏ trong vimawclaw.com
Chìa khóa, như clagccs đã đề cập, là điểm nổi bật KHÔNG xung đột với tìm kiếm của bạn : https://vim.fandom.com/wiki/Auto_highlight_cản_word_when_idle
Ảnh chụp màn hình về cách nó KHÔNG xung đột với tìm kiếm: Ghi chú:
hlsearch
nhiều, bạn có thể muốn lập bản đồ:set hlsearch!
thay vì:set nohlsearch
. Điều này bật tắt cài đặt thay vì luôn tắt nó.