ฉันจะล้างคำที่ไฮไลต์ในเอกสารปัจจุบันได้อย่างไร (เช่นหลังจากค้นหาคำ)


61

เมื่อคุณค้นหาคำในไฟล์ที่มีลักษณะคล้าย/console.logกันอินสแตนซ์ทั้งหมดของconsole.logจะถูกเน้น

เมื่อคุณไม่สนใจสิ่งเหล่านี้การไฮไลต์อาจทำให้เสียสมาธิ /asntehuaกลยุทธ์ปัจจุบันของฉันสำหรับการลบไฮไลต์คือการทำสิ่งที่ชอบ มีวิธีที่เหมาะสมในการลบคำนี้ออกหรือไม่?


2
ไม่มีอะไรจะพิมพ์เร็วไปกว่า/skldafjlksjdf)
Shahbaz

1
เพิ่มต่อไปนี้เพื่อ .vimrc :nnoremap <silent> <CR> :nohlsearch<CR><CR>ของคุณ: กดปุ่ม Return ในโหมดคำสั่งและการไฮไลต์จะหายไป
nilon

คำตอบ:


47

เป็นอีกทางเลือกหนึ่งที่:nohฉันชอบที่จะ:let @/=""แมปกับแป้นพิมพ์ลัด

ความแตกต่างคือการ:nohออกจากคำค้นหาในการลงทะเบียนการค้นหาดังนั้นnและNในโหมดปกติกลับมาค้นหาโดยการกระโดดไปที่การแข่งขันถัดไป / ก่อนหน้าและการเน้นอีกครั้ง ใช้:let @/=""บนมืออื่น ๆ ที่เป็นสาเหตุของข้อความE25: No previous regular expressionและใบเคอร์เซอร์ของคุณที่มันเป็นซึ่งมีความสะดวกโดยเฉพาะอย่างยิ่งถ้าคุณยังไม่ทราบเกี่ยวกับctrl- และยังตั้งใจตีon

สามารถใช้วิธีอื่นได้เช่นกัน ในการทำให้เสียงเรียกเข้าเพื่อเน้นข้อความโดยไม่ต้องกระโดดคุณสามารถทำได้:let @/="some text"

ในนิพจน์เหล่านี้ @ ให้คุณอ้างถึงการลงทะเบียนและ @ / คือการลงทะเบียนที่ถือรูปแบบการค้นหาล่าสุด


31

เพียงพิมพ์

:noh<cr>

(ในกรณีที่<cr>เป็นสัญลักษณ์ของกลับสายการบินเช่นใส่.) :nohlsearchเต็มรูปแบบรุ่นที่ไม่ใช่ตัวย่อของคำสั่งนี้คือ

เพื่อความสะดวกคุณสามารถทำแผนที่เช่น

nnoremap <Leader><space> :noh<cr>

.vimrcในของคุณ เนื่องจากผู้นำของฉันคือ Space สิ่งนี้ทำให้ฉันสามารถเน้นการเน้นได้อย่างง่ายดายเพียงแตะที่ช่องว่างสองครั้ง (โดยค่าเริ่มต้น<Leader>ถูกตั้งค่าเป็น\)

อีกตัวเลือกที่ได้รับความนิยมคือผูกกับCtrl+ Lเนื่องจากนี่เป็นค่าเริ่มต้นสำหรับ 'หน้าจอเทอร์มินัลวาดใหม่' ซึ่งมากหรือน้อยซึ่งเป็นสิ่งที่คุณทำอย่างคร่าวๆ :

nnoremap <silent> <C-L> :nohlsearch<CR><C-L>

นี้มีผลข้างเคียงของยัง redrawing หน้าจอขั้วซึ่งอาจจะช้าหากการเชื่อมต่อขั้วของคุณช้า (ซึ่งก็คือวันนี้หายากมาก)
หมายเหตุ: หากคุณใช้tpope / vim-sensibleจะมีการ<C-l>ทำแผนที่ตามรายการด้านบน


21

ปิดใช้งานการไฮไลต์การค้นหาอย่างถาวร

การจับคู่จะไม่ถูกเน้นเมื่อใดก็ตามที่คุณทำการค้นหาโดยใช้ /

:set nohlsearch

ล้างไฮไลต์จนกว่าจะค้นหาต่อไป

:noh

หรือ:nohlsearch(ล้างจนกว่าnหรือNกดหรือทำการค้นหาใหม่)


ล้างไฮไลต์เมื่อกด ESC

nnoremap <esc> :noh<return><esc>

ล้างไฮไลต์เมื่อกดปุ่มอื่นหรือแผนที่ที่กำหนดเอง

  • ล้างไฮไลต์เมื่อกด\(แบ็กสแลช)

    nnoremap \ :noh<return>
    
  • ล้างไฮไลต์บนการกดปุ่มESCสองครั้ง

    nnoremap <esc><esc> :noh<return>
    

ฉันเพิ่มnnoremap <esc> :noh<return><esc>ของฉันvimrcแต่มันไม่ทำงาน ฉันjkทำแผนที่เพื่อหลบหนีนั่นอาจเป็นสาเหตุหรือไม่
mbigras

เกิดอะไรขึ้นกันแน่? บางทีคุณอาจปิดการใช้งานESCกุญแจ?
Sheharyar

การกดjkไม่สามารถปิดข้อความที่ไฮไลต์ได้ (แต่ยังใช้งานได้Esc) การกดEscที่มุมบนซ้ายของคีย์บอร์ดจะเป็นการปิดข้อความที่ไฮไลต์
mbigras

ดังนั้นคุณมีคำตอบที่นั่น jkวางแผนที่ของคุณลงใต้ESCแผนที่และตรวจสอบให้แน่ใจว่าคุณใช้งานแบบง่ายmapแทนnoremap
Sheharyar

การแมป Escape ใหม่อาจทำให้เกิดปัญหากับแป้นลูกศรและฉันจะสมมติสถานการณ์อื่น ๆ ที่ใช้รหัสยกเว้น vi.stackexchange.com/questions/11144/…
Rob Mosher

2

หลังจากลองใช้วิธีแก้ปัญหาที่แนะนำหลายอย่างสำหรับทางลัดสำหรับสิ่งนี้ใน ~ / vimrc ฉันก็ตัดสินใจที่nmap <esc><esc> :noh<return>จะเพิ่มมันเข้าไป การหลบหนีสองครั้งช่วยป้องกันการรบกวนด้วยการทำงานของปุ่มลูกศร หากคุณอยู่ในโหมดแทรกจำเป็นต้องมีการหลบหนีสามครั้ง นี่คือการดำเนินการที่รวดเร็วและง่ายต่อการจดจำ


2

ฉันเพิ่ม autocmd ไปยัง. vimrc ของฉันซึ่งจะเป็นการลบไฮไลต์เมื่อใดก็ตามที่คุณเข้าสู่โหมดแทรก

 autocmd InsertEnter * :let @/=""

2
การใช้nohlแทนที่จะlet @/=""เป็นวิธีการที่ดีกว่าเนื่องจากคุณจะไม่ขัดขวางการค้นหาปัจจุบันของคุณ
jamessan

@jamessan ใช้งานได้กับ:let @/=""คำสั่ง แต่autocmd InsertEnter * :nohไม่ด้วยเหตุผลบางอย่าง
tobek

1
ที่จริงฉันพบเหตุผล: ตามเอกสาร 'การไฮไลต์การค้นหาไม่สามารถปิดด้วย ": nohlsearch" ใน autocommand' - รายละเอียดของสาเหตุ: vimdoc.sourceforge.net/htmldoc/autocmd.html#autocmd-searchpat
tobek

1

หากคุณไม่ต้องการเน้นหลังจากการค้นหาใด ๆ คุณสามารถใช้สิ่งนี้ (ดีกว่า):

:set nohls

หรือนี่ (แย่กว่า):

:hi Search NONE

1

เมื่อฉันพิมพ์:help incsearchฉันพบสิ่งต่อไปนี้ในคู่มือ:

augroup vimrc-incsearch-highlight
  autocmd!
  autocmd CmdlineEnter /,\? :set hlsearch
  autocmd CmdlineLeave /,\? :set nohlsearch
augroup END

ซึ่งฉันลาออกไปใช้เนื่องจากโซลูชันอื่น ๆ ที่ฉันพยายามไม่สมบูรณ์และโซลูชันนี้มา "ตรงจากปากม้า" เพื่อพูด ไฮไลต์การค้นหาที่ตรงกันทั้งหมดในหน้าต่างปัจจุบัน


1
/asdfasdf

นี่คือข้อดีที่คุณไม่ต้องพิมพ์ exaclty ข้อเสียคือมีโอกาสประมาณ 1: 68719476736 ในไฟล์ 4096 ไบต์ว่ามันไม่ทำงานและเคอร์เซอร์ของคุณจะข้ามไปที่อื่น โอกาสนี้เพิ่มขึ้นสำหรับไฟล์ขนาดใหญ่


1
ยินดีต้อนรับสู่ vi SE! ฉันคิดว่าสตริงasdfasdfนั้นพิเศษในแง่ที่ว่ามันเกิดขึ้นบ่อยครั้งในไฟล์ที่ใช้งานได้จริงมากกว่าลำดับ 8 ไบต์แบบสุ่ม ดังนั้นโอกาสสูงกว่ามาก :-)
user259412

0

ฉันไม่คิดว่าจะลบ hls เลยจะเป็นสิ่งที่ดีวิธีการเกี่ยวกับการเปิดใช้งานหรือปิดใช้งานการสร้างทางลัดที่ง่าย (บูลีน) ในกรณีของฉัน ->

" to reselect use gv in normal mode
nnoremap <S-F11> <ESC>:set hls!<cr>
inoremap <S-F11> <C-o>:set hls!<cr>
vnoremap <S-F11> <ESC>:set hls!<cr> <bar> gv

ความมหัศจรรย์เกิดขึ้นเพราะ " !" เมื่อสิ้นสุดการตั้งค่า


0

ฉันพบว่ามันยากมากสำหรับฉันที่จะต้องการไฮไลต์เลยและเมื่อฉันต้องการไฮไลต์มันเป็นเพียงช่วงเวลาสั้น ๆ ทางออกของฉันคือ

nnoremap <Leader>/ set hls!<CR>

สิ่งนี้จะช่วยให้การเน้นเมื่อคุณกด\/และปิดการใช้งานอีกครั้งถ้าคุณกดอีกครั้ง ซึ่งช่วยให้เข้าถึงไฮไลต์ในกรณีที่หายากได้ง่ายเมื่อคุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.