我喜欢smartcase和*和#搜索命令。但是,我希望*和#搜索命令区分大小写,而/和?搜索命令则遵循smartcase启发式规则。
是否有一些隐藏的设置我还没有找到?我不想重新映射*和#命令。
总之:我希望在/ 和 ?搜索命令中使用smartcase行为,而在*和#搜索命令中使用noic行为。
谢谢, Keith
我喜欢smartcase和*和#搜索命令。但是,我希望*和#搜索命令区分大小写,而/和?搜索命令则遵循smartcase启发式规则。
是否有一些隐藏的设置我还没有找到?我不想重新映射*和#命令。
总之:我希望在/ 和 ?搜索命令中使用smartcase行为,而在*和#搜索命令中使用noic行为。
谢谢, Keith
smartcase
,并且只在想忽略大小写时在你的 /
搜索前加上 \c
,它几乎是相同的东西。请参见这里的大小写敏感性部分。smartcase
应用于 *
和 #
。:set smartcase noignorecase
已经足够了?否则,您可以更具体地使用 CmdlineEnter
和 CmdlineLeave
自动命令来针对 ?
和 /
搜索命令进行操作。:au CmdlineEnter /,\? :set noignorecase
:au CmdlineLeave /,\? :set ignorecase
(类似这样,根据需要进行调整)。
注意,这需要CmdlineEnter
和CmdlineLeave
自动命令,这些命令仅在较新的8.0版本中可用。
您可以通过CmdLineEnter
自动命令事件,更改*
/#
和任何ex命令以及通过/
搜索的'ignorecase'
和'smartcase'
的值,并将它们重新启用。
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
如果您执行 *
命令,然后执行任何 ex 命令,'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
'inccommand'
感兴趣。 - Peter Rincker
:au CmdlineEnter /,\? :set noignorecase
和:au CmdlineLeave /,\? :set ignorecase
在.vimrc
中,并查看是否有效。目前我手头没有8.0版本可用。 - RyanArr