ฉันจะเน้นคำที่เลือกทั้งหมดใน GVim ได้อย่างไรเช่นใน Notepad ++?
ฉันจะเน้นคำที่เลือกทั้งหมดใน GVim ได้อย่างไรเช่นใน Notepad ++?
คำตอบ:
ในโหมดปกติ:
:set hlsearch
จากนั้นค้นหารูปแบบด้วยคำสั่ง/
ในโหมดปกติหรือ<Ctrl>o
ตามด้วย/
ในโหมดแทรก *
ในโหมดปกติจะค้นหาคำถัดไปที่อยู่ใต้เคอร์เซอร์ hlsearch
ตัวเลือกที่จะเน้นทั้งหมดของพวกเขาถ้าชุด #
จะค้นหาคำที่เกิดขึ้นก่อนหน้านี้
หากต้องการลบไฮไลต์ของการค้นหาก่อนหน้า:
:nohlsearch
คุณอาจต้องการแมป:nohlsearch<CR>
กับรหัสที่ใช้สะดวก
*
หรือ#
โดย<Ctrl>o
ในโหมดปกติ
:nohlsearch
คุณสามารถใช้:noh
.vimrc
: สำหรับสลับระหว่างไฮไลท์ไฮไลท์และลบโดยnoremap <F4> :set hlsearch! hlsearch?<CR>
<F4>
*
ที่สำคัญจะเน้นเหตุการณ์ทั้งหมดของคำที่อยู่ภายใต้เคอร์เซอร์
&hlsearch
ที่เปิด
#
หากคุณต้องการที่จะข้ามไปยังที่เกิดขึ้นก่อนหน้านี้การใช้งาน
ฉันรู้ว่ามันเป็นคำถามที่เก่ามาก แต่ถ้ามีใครสนใจคุณสมบัตินี้สามารถตรวจสอบรหัสนี้ได้ที่ http://vim.wikia.com/wiki/Auto_highlight_current_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
วิธีที่ง่ายที่สุดพิมพ์ในโหมดปกติ *
ฉันยังมีการแม็พเหล่านี้เพื่อเปิดใช้งานและปิดใช้งาน
"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
เลือกคำโดย clickin ที่มัน
set mouse=a "Enables mouse click
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>
โบนัส: 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>
การเลือกคำด้วยเมาส์และการนับที่เกิดขึ้นพร้อมกัน: OBS: โปรดสังเกตว่าในรุ่นนี้เรามีคำสั่ง "CountWord" ที่ส่วนท้าย
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>
nnoremap * *``cgn
และnnoremap # #``cgN
*
ฉันจะปิดการเน้นได้อย่างไร
:noh
หรือ:nohlsearch
nnoremap <silent> * :execute "normal! *N"<cr>
และnnoremap <silent> # :execute "normal! #n"<cr>
? สิ่งเหล่านี้เพียงแค่ไฮไลต์คำที่อยู่ใต้เคอร์เซอร์ แต่อย่าย้ายไปที่การเกิดขึ้นครั้งถัดไป
การค้นหาโซลูชันตาม ( *, /... ) เลื่อนเคอร์เซอร์ซึ่งอาจโชคร้าย
อีกทางเลือกหนึ่งคือการใช้ปลั๊กอินmark.vim ที่ปรับปรุงแล้วทำของคุณ.vimrc
ให้เสร็จสิ้นเพื่อให้ดับเบิลคลิกที่การไฮไลต์ทริกเกอร์ (ฉันไม่รู้ว่าการเลือกแป้นพิมพ์อาจเรียกคำสั่ง) ได้อย่างไร:
"Use Mark plugin to highlight selected word
map <2-leftmouse> \m
มันช่วยให้การไฮไลท์หลาย ๆ การติดตา ฯลฯ
หากต้องการลบไฮไลต์ให้ทำดังนี้
:Mark
(ปิดจนกว่าจะเลือกต่อไป):MarkClear
:set noincsearch
คุณสามารถปิดได้เช่นนี้ ในความคิดของฉันมันเป็นหนึ่งในคุณสมบัติที่น่ารำคาญที่สุดใน Vim และเป็นหนึ่งในสิ่งแรกที่ฉันปิดการใช้งานสำหรับการติดตั้งใหม่
*
จะย้ายเคอร์เซอร์โดยไม่มีเงื่อนไข และฉันไม่สามารถเห็นได้ว่าincsearch
อาจจะน่ารำคาญเพราะเป็นเพียง 'มองไปข้างหน้า' การค้นหาปัจจุบันโดยไม่ต้องเปลี่ยนตำแหน่งของคุณ
incsearch
จะป้องกันการเคลื่อนไหว แต่การทดสอบอย่างรวดเร็วยืนยันว่าคุณถูกต้อง ขอโทษด้วย. :nnoremap * *N
แต่ก็สุดง่ายต่อการสร้างแผนที่ที่ป้องกันไม่ให้การเคลื่อนไหว: ฉันไม่อยากเชื่อว่าคุณจะไม่พบว่ามันน่ารำคาญที่เคอร์เซอร์ของคุณกระโดดไปทั่วหน้าจอเมื่อคุณทำการค้นหา แต่ ... สิ่งเหล่านี้เป็นอัตวิสัยอย่างสมบูรณ์ Vive la différence ;-)
:let @/='hilight_this'
โดยสมมติว่าคุณhlsearch
เปิดใช้งาน มันเน้นข้อความโดยไม่ต้องกระโดดและคุณไม่จำเป็นต้องเปลี่ยนการตั้งค่าที่มีอยู่ สิ่งนี้จะเปลี่ยนค่าที่เก็บไว้ในทะเบียนการค้นหาในปัจจุบัน
ครั้งแรก (หรือใน. vimrc ของคุณ):
:set hlsearch
*
จากนั้นวางเคอร์เซอร์ของคุณมากกว่าคำที่คุณต้องการเน้นและตี
hlsearch
หมายถึงเน้นการค้นหาทั้งหมดที่เกิดขึ้นในปัจจุบันและ*
หมายถึงการค้นหาคำที่อยู่ใต้เคอร์เซอร์
ก่อนอื่นให้แน่ใจว่าเปิดใช้งาน hlsearch โดยออกคำสั่งต่อไปนี้
:set hlsearch
คุณยังสามารถเพิ่มสิ่งนี้ลงในไฟล์. vimrc ของคุณได้ตามที่ตั้งไว้
set hlsearch
ตอนนี้เมื่อคุณใช้กลไกการค้นหาอย่างรวดเร็วในโหมดคำสั่งหรือคำสั่งการค้นหาปกติผลลัพธ์ทั้งหมดจะถูกเน้น หากต้องการเลื่อนไปข้างหน้าระหว่างผลลัพธ์ให้กด 'n' เพื่อเลื่อนไปข้างหลังกด 'N'
ในโหมดปกติในการค้นหาอย่างรวดเร็วสำหรับคำที่อยู่ใต้เคอร์เซอร์และเพื่อข้ามไปยังสิ่งที่เกิดขึ้นต่อไปในหนึ่งคำสั่งกด '*' คุณยังสามารถค้นหาคำที่อยู่ใต้เคอร์เซอร์และย้ายไปที่เหตุการณ์ก่อนหน้าโดยการกด '# '
ในโหมดปกติคุณสามารถเรียกใช้การค้นหาอย่างรวดเร็วด้วย
/searchterm<Enter>
ในการลบไฮไลต์เกี่ยวกับการใช้งานฉันได้ผูกสิ่งนี้กับทางลัดใน. vimrc ของฉัน
:nohl
เปิดใช้งานการเน้นการค้นหา:
:set hlsearch
จากนั้นค้นหาคำว่า:
/word<Enter>
สิ่งที่ฉันชอบในการทำเช่นนี้คือปลั๊กอินmark.vim จะช่วยให้การเน้นหลายคำในสีที่ต่างกันพร้อมกัน
เพื่อไฮไลต์คำโดยไม่เลื่อนเคอร์เซอร์, ป๋อม
" 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>
เป็น vimrc ของคุณ
สิ่งที่ดีเกี่ยวกับการนี้อยู่g*
และg#
จะยังคงทำงานเหมือน "ปกติ" และ*
#
ในการตั้งค่าhlsearch
ปิดคุณสามารถใช้ "แบบสั้น" (เว้นแต่คุณจะมีฟังก์ชั่นอื่น ๆ ที่เริ่มต้นด้วย "โนห์" :noh
ในโหมดคำสั่ง): หรือคุณสามารถใช้รุ่นยาว::nohlsearch
เพื่อความสะดวกมาก (ฉันพบว่าตัวเองกำลังสลับกันhlsearch
วันละ 20 ครั้ง) คุณสามารถแมปบางอย่างเพื่อสลับhlsearch
เช่น:
" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>
.: ถ้าคุณ<leader>
มี\(มันคือการเริ่มต้น), คุณสามารถกด\st(อย่างรวดเร็ว) ในปกติhlsearch
โหมดสลับ
หรือบางทีคุณแค่ต้องการ:noh
ทำแผนที่:
" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>
ข้างต้นจะทำงาน:nohlsearch
เพื่อ (ไม่เหมือน:set hlsearch!
) มันจะยังคงเน้นคำในครั้งถัดไปที่คุณกด*หรือ#ในโหมดปกติ
ไชโย
set hlsearch
อาจจะ ?
ใช้ autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
ตรวจสอบให้แน่ใจว่าคุณได้IncSearch
ตั้งค่าบางอย่าง call s:Attr('IncSearch', 'reverse')
เช่น หรือคุณสามารถใช้กลุ่มไฮไลต์อื่นแทน
การทำเช่นนี้จะเน้นคำทั้งหมดที่อยู่ใต้เคอร์เซอร์ของคุณโดยไม่ล่าช้า ฉันพบว่าการหน่วงเวลาทำให้ฉันช้าลงเมื่อฉันใช้รหัสผ่าน สีไฮไลต์จะตรงกับสีของคำศัพท์เพื่อให้สอดคล้องกับแบบแผนของคุณ
ทำไมไม่เพียงแค่: z /
ที่จะเน้นคำปัจจุบันภายใต้เคอร์เซอร์และเหตุการณ์อื่น ๆ และคุณไม่จำเป็นต้องให้คำสั่งแยกต่างหากสำหรับแต่ละรายการที่คุณกำลังค้นหา บางทีนั่นอาจไม่พร้อมใช้งานใน gvim ที่ไม่บริสุทธิ์? เป็นค่าเริ่มต้น
* จะใช้งานได้ก็ต่อเมื่อคุณต้องการให้เคอร์เซอร์เลื่อนไปที่เหตุการณ์ถัดไป เมื่อเปรียบเทียบสองสิ่งที่มองเห็นได้บ่อยครั้งคุณไม่ต้องการให้เคอร์เซอร์เคลื่อนที่และมันน่ารำคาญที่จะกดปุ่ม * ทุกครั้ง
~/.vimrc
ไฟล์ของคุณ
" 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%
ในรูปแบบปกติไปกว่าคำว่า
กด * กด F8 เพื่อค้นหาคำซ้ำ ๆ ของโครงการ
ตัวอย่างเช่นปลั๊กอินนี้:
เพียงค้นหาภายใต้เคอร์เซอร์ในvimawesome.com
คีย์ดังที่clagccsกล่าวถึงคือไฮไลต์ไม่ขัดแย้งกับการค้นหาของคุณ : https://vim.fandom.com/Auto_highlight_current_word_when_idle
สกรีนช็อตว่าไม่ขัดแย้งกับการค้นหาอย่างไร: หมายเหตุ:
hlsearch
มากคุณอาจต้องการ map แทน:set hlsearch!
:set nohlsearch
การทำเช่นนี้จะสลับการตั้งค่าแทนที่จะปิดอยู่เสมอ