Vim - 我如何使用智能手机进行/搜索,但是如何进行*搜索?

时间:2018-02-21 18:23:44

标签: vim

我喜欢smartcase,我喜欢*和#search命令。但是我希望*和#search命令区分大小写,而/和?搜索命令遵循智能手段启发式。

有什么地方隐藏在某个我无法找到的地方吗?我宁愿不必重新映射*和#命令。

总结:我想要/和?的智能行为但*和#。

的noic行为

谢谢你, 基思

3 个答案:

答案 0 :(得分:4)

完全您正在寻找的内容,但是如果您要关闭smartcase,并且只想在/之前使用\c进行搜索情况,这几乎是一回事。

请参阅区分大小写部分here

编辑:实际上根据所有文档,我看到你想要的是预期的行为,但是自己测试它看起来像Vim正在将smartcase应用于*#同样。

答案 1 :(得分:3)

您可以为'ignorecase' / 'smartcase'更改*#的值,对于任何前命令,并通过/进行搜索,然后重新开启通过CmdLineEnter autocmd事件。

nnoremap <expr> * <SID>star_power('*')
nnoremap <expr> # <SID>star_power('#')
function! s:star_power(cmd)
    let [&ignorecase, &smartcase] = [0, 0]
  return a:cmd
endfunction

augroup StarPower
    autocmd!
    autocmd CmdLineEnter * let [&ignorecase, &smartcase] = [1, 1]
augroup END

现在,如果您执行*然后执行任何前命令,那么'ignorecase''smartcase'的值将会更改。这可能是不可取的。您可能需要getcmdtype()将其限制为/?模式,或者可能使用CmdLineLeave和/或计时器更复杂。

注意:这需要Vim 8.0.1206+支持CmdLineEnter

如需更多帮助,请参阅:

:h :map-expression
:h :let-&
:h :let-unpack
:h autocommand
:h :augroup
:h :autocmd
:h CmdLineEnter

答案 2 :(得分:3)

  

总结:我想要/和?的智能行为但*和#。

的noic行为

这有点棘手,因为你没有确切地指定哪个选项&#39; smartcase&#39;并且&#39;忽视&#39;应该适用于哪些命令。但请注意,默认情况下,忽略'smartcase'选项是 * 命令的默认行为。

所以设置:set smartcase noignorecase或许已经足够了吗?另外,对于CmdlineEnterCmdlineLeave搜索命令,使用?/自动命令可以更加具体一些:

:au CmdlineEnter /,\? :set noignorecase
:au CmdlineLeave /,\? :set ignorecase

(像这样的东西,适应味道)。 请注意,这需要CmdlineEnterCmdlineLeave自动命令,这些自动命令仅在以后的8.0版本中可用。