我喜欢smartcase,我喜欢*和#search命令。但是我希望*和#search命令区分大小写,而/和?搜索命令遵循智能手段启发式。
有什么地方隐藏在某个我无法找到的地方吗?我宁愿不必重新映射*和#命令。
总结:我想要/和?的智能行为但*和#。
的noic行为谢谢你, 基思
答案 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
或许已经足够了吗?另外,对于CmdlineEnter
和CmdlineLeave
搜索命令,使用?
和/
自动命令可以更加具体一些:
:au CmdlineEnter /,\? :set noignorecase
:au CmdlineLeave /,\? :set ignorecase
(像这样的东西,适应味道)。
请注意,这需要CmdlineEnter
和CmdlineLeave
自动命令,这些自动命令仅在以后的8.0版本中可用。