Как переключить визуальный поиск Vim, не отключая его - программирование
Подтвердить что ты не робот

Как переключить визуальный поиск Vim, не отключая его

Я хотел бы отобразить один ключ, например. F4, так что нажатие F4 будет переключать видимость основных элементов поиска, и поэтому запуск нового поиска позволяет видеть видимость независимо от текущей видимости.

Что я пробовал:

  • Отображение F4 до :nohlsearch временно отключает видимость подсветки, не отключая настройку hlsearch, но не переключает видимость назад.
  • Отображение F4 to :set hlsearch! делает включение/выключение, но я не хочу отключать настройку hlsearch, только настройку видимости. Если hlsearch выключен, он автоматически не возвращается с новым поиском.

Кажется, что не существует противоположной формы :nohlsearch, и сама команда вызывает проблемы из функции.

Я нашел похожие вопросы, но они не дают ответа.

Update:
Первый комментарий дает именно то, что я просил, воспроизведенный ниже:

let hlstate=0
nnoremap <F4> :if (hlstate == 0) \| nohlsearch \| else \| set hlsearch \| endif \| let hlstate=1-hlstate<cr>

(N.B. для тех, кто использует это --- кодирование карты на одну строку вместо использования функции необходимо, так как вы не можете произвести изменение выделения изнутри функции.)

Связанный с этим вопрос для немного разных функций: qaru.site/info/323940/...

4b9b3361

Ответ 1

" ctrl+c to toggle highlight.
let hlstate=0
nnoremap <c-c> :if (hlstate%2 == 0) \| nohlsearch \| else \| set hlsearch \| endif \| let hlstate=hlstate+1<cr>

Теперь просто нажмите ctrl + c, чтобы переключить подсветку. Только quirk, вы должны нажать его дважды после поиска, чтобы отключить подсветку, потому что поиск не увеличивает счетчик.

Ответ 2

Обратите внимание, что последние Vims (7.4.79) имеют переменную v:hlsearch. Это означает, что вы можете улучшить свое сопоставление:

:nnoremap <silent><expr> <Leader>h (&hls && v:hlsearch ? ':nohls' : ':set hls')."\n"

Ответ 3

Я хотел бы отобразить один ключ, например. F4, так что нажатие F4 будет переключить видимость основных элементов поиска и, таким образом, начать новый поиск позволяет видеть видимость независимо от текущей видимости.

Просто попробовал это и, похоже, сделал трюк:

" switch higlight no matter the previous state
nmap <F4> :set hls! <cr>
" hit '/' highlights then enter search mode
nnoremap / :set hlsearch<cr>/

Ответ 4

Другим ответам необходимо переключить поиск по выделенной области, это не так хорошо.

На самом деле вам нужно только

let @/ = ''

Я пишу небольшую функцию для реализации этой функции и выделяю текущее слово (точно так же, как * звездный ключ), но не перехожу к следующему совпадающему слову, а не касаюсь jumplist.

function! HLtoggle()
    if (@/ == '')
        let @/ = expand("<cword>")
    else
        let @/ = ''
    endif
endfunc

это просто, но я не нашел его в google.

Получайте удовольствие от vim!:)

Ответ 5

Хорошо, попробуйте следующее:

:map <F12> :set nohls<CR>:let @/ = ""<CR>:set hls<CR>

Затем, если вы нажмете F12, он будет высвечиваться, затем установите последнюю строку поиска на пустую (то есть: очистит ее) и снова включит подсветку.

Или, если вы хотите сохранить строку поиска, вы можете сделать что-то вроде:

:map <F12> :set nohls<CR>:let @s = @/<CR>:let @/ = ""<CR>:set hls<CR>
:map <SHIFT><F12> :let @/[email protected]<CR>

Теперь после нажатия SHIFT F12 исходная строка поиска будет установлена ​​назад и выделена.

Если это вас еще не удовлетворяет, вы все равно можете сделать это:

:map <F12> :highlight Search term=None ctermfg=None ctermbg=None guifg=None guibg=None<CR>
:map <SHIFT><F12> :highlight Search term=OV1 ctermfg=OV2 ctermbg=OV3 guifg=OV4 guibg=OV5<CR>

Где OVx - это исходные значения, которые вы можете записать при выпуске :highlight Search<CR>. Таким образом, его можно отключить, а затем снова включить, но с двумя комбинациями клавиш. Если вы хотите его с одним, вы должны создать функцию для того, что переключает ее, а затем создать сопоставление для этой функции.

Ответ 6

От Выделите все соответствия шаблону поиска, мы можем сопоставить ключ для переключения состояний выделения. В отличие от ответа trusktr, здесь мы используем переменную для хранения состояния.

"Если вы хотите быстро включить или отключить выделение, вы можете сопоставить ключ для переключения опции hlsearch":

" Press F4 to toggle highlighting on/off, and show current value.
:noremap <F4> :set hlsearch! hlsearch?<CR>

"Или, нажмите" вернуться ", чтобы временно выйти из выделенного поиска":

:nnoremap <CR> :nohlsearch<CR><CR>

Ответ 7

Хмм, не :set hlsearch противоположно :nohlsearch?

Первый включает в себя подсвечивание совпадений, второй - совпадение матчи с временным.

Я не понимаю, что вы подразумеваете под "Я не хочу переключать настройку" hlsearch ", просто настройку видимости.": :set hlsearch и ее кулон касается только видимости ( "подсветка" ) поисковых совпадений, ничего больше.

Если вы хотите, чтобы совпадения были подсвечены каждый раз, когда вы выполняете поиск, просто добавьте :set hlsearch к вашему ~/.vimrc.

Если вы хотите отключить выделение после поиска, просто переместите F4 в :nohlsearch, подсветка вернется к следующему поиску.

Ответ 8

Я использую эту немного улучшенную версию от trusktr. Обратите внимание, что ctrl + c, используемый в примере из trusktr, уже сопоставлен с Escape по умолчанию, что очень удобно.

" Toggle highlight search
let hlstate=0
nnomap <Leader>b :if (hlstate%2 == 0) \| nohlsearch \| else \| set hlsearch \| endif \| let hlstate=hlstate+1<CR>:echo "toggled visibility for hlsearch"<CR>
inomap <Leader>b <ESC>:if (hlstate%2 == 0) \| nohlsearch \| else \| set hlsearch \| endif \| let hlstate=hlstate+1<CR>:echo "toggled visibility for hlsearch"<CR>a

Ответ 9

Вы можете переключаться с помощью :set invhlsearch

Ответ 10

Для этого я добавил эту простую строку в мой .vimrc:

nmap <LEADER>h /xxxxx<CR>