当我选择文字并按F3
时,我目前正在使用此功能,就像在Geany(我的旧编辑器)中一样:
vnoremap <silent> * :<C-U>
\let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR>
\gvy/<C-R><C-R>=substitute(
\escape(@", '/\.*$^~['), '\_s\+', '\\_s\\+', 'g')<CR><CR>
\gV:call setreg('"', old_reg, old_regtype)<CR>
vnoremap <silent> # :<C-U>
\let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR>
\gvy?<C-R><C-R>=substitute(
\escape(@", '?\.*$^~['), '\_s\+', '\\_s\\+', 'g')<CR><CR>
\gV:call setreg('"', old_reg, old_regtype)<CR>
当然,*
用于搜索所选文本,#
用于向后搜索所选文字。
我无法弄清楚的是如何在找到它们时重新选择找到的单词(或任何被选中的单词),这样我就可以继续按下*
或{{1}继续搜索。因此,如果那不是我想要的并且想继续搜索,我不必重新选择它所发现的内容。
答案 0 :(得分:2)
您添加v//e<CR>
的解决方案有效,但它有将搜索结束到最后的副作用,这会影响其他命令,例如n
/ N
。更好的选择是通过1v
(或1vl
'selection'
时exclusive
)重新建立当前位置的先前选择。
vnoremap <silent> * :<C-U>
\let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR>
\gvy/<C-R><C-R>=substitute(
\escape(@", '/\.*$^~['), '\_s\+', '\\_s\\+', 'g')<CR><CR>
\gV:call setreg('"', old_reg, old_regtype)<CR>1v
vnoremap <silent> / :<C-U>
\let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR>
\gvy?<C-R><C-R>=substitute(
\escape(@", '?\.*$^~['), '\_s\+', '\\_s\\+', 'g')<CR><CR>
\gV:call setreg('"', old_reg, old_regtype)<CR>1v
答案 1 :(得分:0)
GOT IT !!!在另一个与我相关的Stackoverflow问题上找到它,但很难找到。正确的用法是将其添加到每个查询的末尾:
<Esc>v//e<CR>
这将我带回正常模式,然后是视觉模式,然后重复上次搜索,然后选择结束。所以最终的代码是:
vnoremap <silent> * :<C-U>
\let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR>
\gvy/<C-R><C-R>=substitute(
\escape(@", '/\.*$^~['), '\_s\+', '\\_s\\+', 'g')<CR><CR>
\gV:call setreg('"', old_reg, old_regtype)<CR><Esc>v//e<CR>
vnoremap <silent> / :<C-U>
\let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR>
\gvy?<C-R><C-R>=substitute(
\escape(@", '?\.*$^~['), '\_s\+', '\\_s\\+', 'g')<CR><CR>
\gV:call setreg('"', old_reg, old_regtype)<CR><Esc>v//e<CR>
这为快速搜索选定区域提供了快速简便的方法!