*
我复制了这个函数来用and进行视觉搜索#
:
function! s:VSetSearch(cmdtype)
let temp = @s
norm! gv"sy
let @/ = '\V' . substitute(escape(@s, a:cmdtype.'\'), '\n', '\\n', 'g')
let @s = temp
endfunction
xnoremap * :<C-u>call <SID>VSetSearch('/')<CR>/<C-R>=@/<CR><CR>
xnoremap # :<C-u>call <SID>VSetSearch('?')<CR>?<C-R>=@/<CR><CR>
映射工作正常,#
但*
映射不会退出视觉选择(它将视觉选择的范围扩展到下一个搜索词)。我不明白为什么会这样。有解决办法吗?
编辑:要重现问题,请保存代码片段,下载MS Installer,打开cmd.exe
并启动 vim vim -u NONE
,然后执行:set nocp
并最终获取保存的代码。事实上,下面的简单映射也不起作用:
nnoremap * *<C-o>
编辑2:其他人可以重现这个问题吗?是否应该被举报?
编辑3:我认为问题(错误?)是*
(星号)键无法重新映射:如果我用vim -N -u NONE
(带有补丁1-274的Vim 7.4)启动vim并运行命令:noremap * :echo "star"<CR>
并按*
,vim会尝试执行搜索. 我也向 vim 开发组报告了这一点。