autocmd 行为不符合预期

autocmd 行为不符合预期

当我在 vim 中输入缓冲区时,我尝试默认设置 hlsearch。

:set hls进入缓冲区后手动运行会执行我期望的操作。但是,当我添加autocmd BufEnter * set hls到 .vimrc(并重新加载 vim)时,打开缓冲区时什么也没有发生。在前面添加冒号set不会改变行为。

为了便于理解,我尝试使用这个脚本,但默认将其设置为“开启”。我尝试了页面“启动时加载”部分中提到的两个技巧,但均未成功。

我从 .vimrc 中删除了其他所有内容,因此不会受到其他内容的干扰。

编辑:

我使用的是 Vim 7.4,‘巨大’版本,通过 homebrew 获取。

这是我测试该选项时 .vimrc 的内容call AutoHighlightToggle()。它在启动时不会突出显示,但按两次后z/可以正常工作。:

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

call AutoHighlightToggle()

答案1

该命令:se hls仅打开一个选项。您将从视觉上看不到任何变化。请参阅:

:help 'hlsearch'

(引号是需要输入的。)

如果您尝试让 Vim 在每次输入新缓冲区时开始突出显示最后使用的搜索字符串,那么该命令将对您没有帮助。

不幸的是,Vim 没有该:nohlsearch命令的逆命令,该命令告诉 Vim 停止突出显示最后搜索的字符串,并且 Vim 似乎拒绝让您在自动命令中对其进行组合(即标记光标位置,再次运行最后一次搜索,然后返回到标记)。Vim 似乎认为自动命令永远不会触发搜索突出显示。

如果您需要此功能,您应该直接向开发人员列表或 Vim 维护人员发送电子邮件并请求:hlsearch添加命令。

答案2

另一个选择是使用参数启动 vim:

nvim -c ":call AutoHighlightToggle()" -c "set hls" $@

相关内容