如何在Vim脚本中编写函数获取两个字符之间的内容?
实现提取指定字符间内容的Vim函数
以下是满足需求的foo(string, startChar, endChar)函数实现,基于Vimscript编写:
function! foo(string, startChar, endChar) abort " 转义正则特殊字符,避免匹配异常 let l:escaped_start = escape(a:startChar, '.*~[]\') let l:escaped_end = escape(a:endChar, '.*~[]\') " 构建正则模式,仅捕获起始与结束字符之间的内容 let l:pattern = printf('\V%s\zs.*\ze%s', l:escaped_start, l:escaped_end) " 返回匹配结果,无匹配时返回空字符串 return matchstr(a:string, l:pattern) endfunction
使用示例
当光标定位在<header>上时,执行以下命令即可提取出header:
echo foo(expand("<cword>"), '<', '>')
关键说明
escape()函数用来处理起始/结束字符是正则特殊符号(比如.,*,[)的场景,避免正则匹配逻辑出错\V启用非魔法模式,让正则表达式里的普通字符无需额外转义\zs和\ze用来标记匹配内容的起始和结束位置,最终只返回两者之间的部分
内容的提问来源于stack exchange,提问作者MAGED AL-WARD
相关产品推荐
相关产品推荐

