set hlsearch
我的 中有。这通常非常有用,但在我执行类似替换后(运行后会突出显示每行的结尾)~/.vimrc
必须这样做很烦人。如何在像这样替换后不突出显示?:noh
'<,'>s/$/',/
vim
我在 Ubuntu 9.04 上安装了vim
7.2。我在 OS X 10.6(也是 7.2)上遇到了同样的问题vim
。希望能有一款可以在两者上运行的软件。
更新:我收到的所有答案都只是添加一个要执行的键映射:noh
(或等效操作)。我真的试图避免使用我真正习惯的自定义键行为,但如果没有它们,我会惨遭失败(例如在朋友的电脑上等)。我想在进行替换后vim
自动执行:noh
。也就是说,我只hlsearch
在使用/
或*
(可能还有其他几种情况)时才想要,而其他时候则不需要。
答案1
如果你不想永久禁用,你可以绑定一个键来切换突出显示,如对类似问题的回答在 stackoverflow 上。
map <F12> :set hls!<CR>
imap <F12> <ESC>:set hls!<CR>a
vmap <F12> <ESC>:set hls!<CR>gv
如果要永久禁用突出显示:
11.1. After I searched for a text with a pattern, all the matched text
stays highlighted. How do I turn off the highlighting
temporarily/permanently?
The 'hlsearch' option controls whether all the matches for the last
searched pattern are highlighted or not. By default, this option is not
enabled. If this option is set in a system-wide vimrc file, then you can
turn off the search highlighting by using the following command:
:set nohlsearch
(来自VIM 常见问题解答)
答案2
我有两种不同的解决方案,都很不错,但每个解决方案的行为都有细微的不同。我最喜欢的是选项 2:
我的 .vimrc 中有以下两行:
autocmd cursorhold * set nohlsearch autocmd cursormoved * set hlsearch
如果光标没有移动,第一个函数会等待超时(不可配置)并关闭 hlsearch。如果光标再次移动,第二个函数会将其重新打开。
这不是一个完美的解决方案,但对我来说是有效的(并且当超时可配置时将接近完美 - 目前,超时与 vim 的内置计时器绑定。)
或者你可以尝试以下几行:
autocmd cursorhold * set nohlsearch noremap n :set hlsearch<cr>n noremap N :set hlsearch<cr>N noremap / :set hlsearch<cr>/ noremap ? :set hlsearch<cr>?
这会在光标无移动的短暂超时后关闭 hlsearch,然后将其重新打开以执行标准搜索命令。它并未涵盖重新打开 hlsearch 的所有可能性,但足以作为概念验证的起点。
答案3
我只需输入“/asdf”(假设文件中没有“asdf”)即可取消突出显示。我知道这很简单,但对我来说很有效。
答案4
另一种可能性是@/
在替换后重置寄存器(实际上是一个读写寄存器)。这将恢复之前的突出显示:
command! -nargs=* -range S
\ let atslash=@/|exe ':'.<line1>.','.<line2>.'s'.<q-args>|let @/=atslash
但是,这仍然有几个问题:
- 它不是修改:s
,而是定义一个新命令。虽然可以使用cabbrev
映射:s
到:S
,但我没有办法捕获所有构造,例如:<range>s
。
- 如果您:nohl
之前使用隐藏了一个搜索,那么这将重新突出显示之前的搜索。我不知道如何查找:nohl
之前是否调用过。(也许可以绕过这个问题并覆盖命令:nohl
,但这也需要覆盖所有搜索命令,这可能太多了……)。