vim:视觉星搜索无法按预期工作

时间:2013-08-22 18:18:09

标签: vim

我将此功能复制到使用*#

进行直观搜索
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启动vim(Vim) 7.4使用补丁1-274)并运行命令:noremap * :echo "star"<CR>并按*,vim尝试执行搜索。我还向vim开发组报告了this

2 个答案:

答案 0 :(得分:1)

以下是我使用的内容:

function! s:Vword()
  return getline('.')[col("'<")-1:col("'>")-1]
endfunction

xnoremap <silent> * <Esc>/\v<<C-R>=<SID>Vword()<CR>><CR>
xnoremap <silent> g* <Esc>/\v<C-R>=<SID>Vword()<CR><CR>

xnoremap <silent> # o<Esc>?\v<<C-R>=<SID>Vword()<CR>><CR>
xnoremap <silent> g# o<Esc>?\v<C-R>=<SID>Vword()<CR><CR>

nnoremap <silent> g// :grep -w <cword> <C-R>=getcwd()<CR><CR>
nnoremap <silent> g/* :grep <cword> <C-R>=getcwd()<CR><CR>

xnoremap <silent> g// :<C-U>grep -w <C-R>=<SID>Vword()<CR> <C-R>=getcwd()<CR><CR>
xnoremap <silent> g/* :<C-U>grep <C-R>=<SID>Vword()<CR> <C-R>=getcwd()<CR><CR>

我还为 g * &amp;添加了很好的映射。类似地 g#以及用于调用grep的一堆映射,我发现它非常有用。

编辑:对代码的小修复。

答案 1 :(得分:0)

映射<kMultiply>而非*解决了问题。真奇怪,因为我不使用键盘乘法键。