vim - Vim:在光标下搜索单词(不是 * 或 # pls)
问题描述
我想复制 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。
感谢您提供任何帮助并提前感谢您。
解决方案
第一个不起作用,因为您必须normal! yiw
在 VimScript 中使用(因为 VimScript 语句是:commands
,而不是普通模式键)。
第二个不起作用,因为这些是键,而不是前命令,因此您必须输入合适的位置(:
并且<CR>
还要用反斜杠转义所有“条”,因为第一个“条”将结束“地图” " - 否则命令)。
因此,您应该阅读更多关于普通模式与命令行模式的信息。
此外,使用hlsearch
看起来不太好,因为您没有搜索任何内容。最好使用 IMO :h :match
。例如,
nnoremap <C-D> :execute 'match Search /\V' . escape(expand('<cword>'), '\/') . '/'<CR>
用于:match NONE
将其关闭。
推荐阅读
- html - 带有 Flex Column 的模态弹出窗口不允许内容采用自己的高度,而是缩小它?
- javascript - 在简单输入脚本中找不到名称“进程”
- node.js - MongoDB Node Express - 使用 user.save() 时未保存数据
- python - 如何从内存分配发生在C层的python脚本将float *数组传递给C方法
- javascript - JavaScript 对象数组中的增量 ID
- sql - 没有这样的功能:SQLITE 中的 iif
- python - 如何在 Python 中平均聚合 Dataframe 的值?
- python - 使用 python 进行弹性搜索批量更新,如何在数组字段中追加新数据
- node.js - 如何在我的 nodejs 代码中实现 maven 依赖项?
- reactjs - 在 Reactjs 中编辑 Png 文件文本