我想复制Sublime Text的“ CTRL-D”行为,该行为突出显示光标下方的当前单词。
* 和#在这里不起作用,因为它们会自动移动光标(例如n和N),而我明确不希望这样做。
为了突出显示光标下的当前单词,我发现以下内容有效:
yiw
:let @/=@@
:set hls
如果您手动输入此 ,它可以按预期工作。
我的问题是我只是不明白我将其放在键盘映射表上的错误,所以我可以绑定它。
到目前为止我尝试过的是:
function SearchWordUnderCursor()
silent! yiw
silent! :let @/ = @@
silent! :set hls
endfunction
nmap <C-D> yiw | :let @/ = @@ | :set hls
这两种方法不能均按预期工作,我不知道自己在做什么错。
搜索模式/寄存器设置得很好,但是立即突出显示不起作用,您必须手动n或N一次才能显示突出显示,但是与“手动”方法相反,它可以移动光标
为什么很难像手动键入一样完成它?
我正在使用NVIM v0.2.2。
我们将不胜感激,谢谢您。
答案 0 :(得分:2)
第一个无效,因为您必须在VimScript中使用normal! yiw
(因为VimScript语句是:commands
,而不是普通模式的键)。
第二个键不起作用,因为它们是键,而不是Ex-command,因此您必须在适当的地方放入:
和<CR>
(并且使用反斜杠,因为第一个“栏”将以“ map”命令结尾,否则)。
因此,您应该阅读有关普通模式和命令行模式的更多信息。
此外,使用hlsearch
看起来也不好,因为您没有搜索任何内容。最好使用:h :match
代替IMO。例如,
nnoremap <C-D> :execute 'match Search /\V' . escape(expand('<cword>'), '\/') . '/'<CR>
使用:match NONE
将其关闭。
答案 1 :(得分:1)
一个简单的非光标移动解决方案是
nnoremap <C-D> *N
答案 2 :(得分:0)
silent!
,vim会哭yiw: not an editor command
。在函数中,每一行都是:
(ex-)命令。您的yiw
等效于:yiw
,这不是编辑器命令。 (这也意味着您可以安全地在命令前省略:
)。要运行普通模式命令,请明确说出:normal
:
function SearchWordUnderCursor()
silent! normal yiw
silent! let @/ = @@
silent! set hls
endfunction
<BAR>
而不是|
分隔命令,并传递所按的 all 键,包括 Enter :nmap <C-D> yiw <BAR> :let @/ = @@<CR> <BAR> :set hls<CR>
答案 3 :(得分:0)
我为解决此问题所做的尝试:
" [I shows lines with word under the cursor
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>
nnoremap <Leader>* :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>
if !exists('*CountWordFunction')
fun! CountWordFunction()
try
let l:win_view = winsaveview()
exec "%s/" . expand("<cword>") . "//gn"
finally
call winrestview(l:win_view)
endtry
endfun
endif
您可以使用这些选项
1 - double mouse clik
2 - <leader>*