如何在(neo)vim中像替换操作一样限制搜索范围(含行列定位、可视选择)
在(neo)Vim中限制搜索到指定行范围的方法
要实现像替换命令那样限制搜索范围,有几种实用的方式:
1. 行范围结合vimgrep+快速修复列表
这是最贴合替换命令行列定位逻辑的方法:
- 执行带行范围的
vimgrep命令,比如要在9-99行搜索foo:
这里:9,99vimgrep /foo/ %%代表当前缓冲区文件,搜索结果会存入快速修复列表 - 用
:cnext(简写:cn)跳转到下一个匹配,:cprev(简写:cp)跳转到上一个匹配 - 想提升跳转效率的话,可以给这些命令绑定快捷键,比如在配置文件里加:
nnoremap <leader>n :cnext<CR> nnoremap <leader>p :cprev<CR>
2. 搜索正则中直接限定行范围
可以在搜索表达式里加入行范围标记,让n/N只在指定范围内跳转:
- 比如要搜索9-99行的
foo,搜索命令写为:
其中/foo\%>8l\%<100l\%>8l表示匹配第8行之后的内容,\%<100l表示匹配第100行之前的内容,合起来就是9-99行的范围 - 这种方式无需依赖额外列表,直接用默认的
n/N就能在指定范围内循环跳转
3. 可视选择范围后限定搜索
如果已经用可视模式选中了目标区域,只需在搜索时加入\%V标记:
- 先选中要搜索的文本范围(可视模式
v/V/Ctrl-v) - 执行搜索命令:
这里/\%Vfoo\%V表示只在当前可视选中的区域内搜索,n/N只会在选中范围内跳转 - 之后想重复该范围搜索的话,用
gv就能重新选中之前的区域,再执行搜索即可
内容的提问来源于stack exchange,提问作者user17227456
相关产品推荐
相关产品推荐

