You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:22:37