在Vim中如何获取模式匹配结果对应的起始列号?
Vim 获取模式匹配起始列号的实操方法
针对「ABC .DEF」文本场景,匹配字面.取对应起始列号,完全对齐示例的计数规则,可按场景直接使用以下方案:
手动搜索定位匹配项后查看列号
- 输入搜索命令
/.回车,Vim会自动将光标定位到.的匹配起始位置 - 两种快捷查看列号的操作:
- 命令行执行
:echo col('.'),直接输出1起始规则的列号,示例场景下对应4 - 按下组合键
g + Ctrl+g,Vim会在底部状态栏直接展示当前光标对应的行、列位置,无需额外输入命令
- 命令行执行
不挪动光标、直接计算匹配列号
如果不想让搜索操作改变当前光标位置,可直接调用内置函数计算,不会跳位置:
- 简单单行匹配场景:执行
:echo match(getline('.'), '\.') + 1- 逻辑说明:
getline('.')读取当前行的原始文本,match()返回匹配内容的0起始偏移,加1后对齐Vim通用的1起始列号规则
- 逻辑说明:
- 复杂正则匹配场景:执行
:echo searchpos('\.', 'n')[1]- 逻辑说明:带
n参数的searchpos会执行非移动式搜索,返回的结果元组中第二项就是匹配位置的1起始列号,支持配置匹配范围、匹配次数等高级正则规则
- 逻辑说明:带
避坑提醒
.是Vim正则的通用元字符,默认可以匹配任意单个字符,*必须转义写为\.*才能精准匹配字面的点字符,否则会出现匹配结果偏移、列号计算错误的问题
内容的提问来源于stack exchange,提问作者RAHUL KUMAR BUDHWANI
相关产品推荐
相关产品推荐

