0

*我复制了这个函数来用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 开发组报告了这一点。

4

2 回答 2

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*我还为& 类似地添加了很好的映射g#,还为调用 grep 添加了一堆我觉得非常有用的映射。

编辑:对代码的小修复。

于 2014-05-26T14:37:21.350 回答
0

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

于 2014-07-02T17:46:57.037 回答