From 9eef44718da202b17d360e5189a8d3b79cf6c74a Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Wed, 18 Dec 2019 01:31:09 +0100 Subject: Make visual and operator-pending mode mappings work The existing `s:CRAndNohlsearch()` function doesn't work as-is in visual or operator-pending modes. Add special handling for these modes that results in the command mode mapping behaving differently in order to support a selection. TODO: Need to handle `cg/` `cg?`. Currently this inserts `hlsearchgv`. --- autoload/nohai.vim | 24 ++++++++++++++++++------ plugin/nohai.vim | 12 ++++++------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/autoload/nohai.vim b/autoload/nohai.vim index 71f7f3a..2d9592e 100644 --- a/autoload/nohai.vim +++ b/autoload/nohai.vim @@ -14,8 +14,12 @@ " along with Nohai. If not, see . " Remaps in command mode to run `nohlsearch` after accepting the command. -function! s:AddMapping() - cnoremap CRAndNohlsearch() +function! s:AddMapping(mode) + if a:mode ==# 'n' + cnoremap CRAndNohlsearch() + elseif a:mode ==# 'v' || a:mode ==# 'o' + cnoremap CRAndNohlsearchV() + endif endfunction " Removes the Nohai cmap. @@ -34,12 +38,20 @@ function! s:CRAndNohlsearch() return "\:nohlsearch\" endfunction +function! s:CRAndNohlsearchV() + let expr = "\" + let expr .= ":\nohlsearch\" + let expr .= 'gv' + + return expr +endfunction + " Turn on Nohai autocmds. -function! s:AutocmdOn() +function! s:AutocmdOn(mode) augroup nohai autocmd! - autocmd CmdlineEnter [/\?] call s:AddMapping() + execute 'autocmd CmdlineEnter [/\?] call s:AddMapping("' . a:mode . '")' autocmd CmdlineLeave [/\?] call s:Deactivate() augroup END endfunction @@ -51,8 +63,8 @@ endfunction " Expr mapping function that turns on Nohai and starts the search command " specified by `command`, either '/' or '?'. -function! nohai#Search(command) - call s:AutocmdOn() +function! nohai#Search(command, mode) + call s:AutocmdOn(a:mode) return a:command endfunction diff --git a/plugin/nohai.vim b/plugin/nohai.vim index fc573b5..abbadbb 100644 --- a/plugin/nohai.vim +++ b/plugin/nohai.vim @@ -20,14 +20,14 @@ if exists('g:loaded_nohai') endif let g:loaded_nohai = 1 -nnoremap (nohai-search-backward) nohai#Search('?') -nnoremap (nohai-search) nohai#Search('/') +nnoremap (nohai-search-backward) nohai#Search('?', 'n') +nnoremap (nohai-search) nohai#Search('/', 'n') -xnoremap (nohai-search-backward) nohai#Search('?') -xnoremap (nohai-search) nohai#Search('/') +xnoremap (nohai-search-backward) nohai#Search('?', 'v') +xnoremap (nohai-search) nohai#Search('/', 'v') -onoremap (nohai-search-backward) nohai#Search('?') -onoremap (nohai-search) nohai#Search('/') +onoremap (nohai-search-backward) nohai#Search('?', 'o') +onoremap (nohai-search) nohai#Search('/', 'o') if exists('g:nohai_no_maps') && g:nohai_no_maps finish -- cgit v1.2.3