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

Fish Shell范围扩展缩写:将{数字..数字}转换为(seq 数字 数字)

Fish Shell 实现{start..end}到(seq start end)的缩写转换

核心问题排查:正则表达式有效性验证

先单独测试正则替换逻辑,确认是否能正确匹配并转换格式:

# 在Fish终端执行以下命令,验证正则是否生效
echo '{218..220}' | string replace -r '\{(\d+)\.\.(\d+)\}' '(seq \1 \2)'

如果输出为(seq 218 220),说明正则逻辑没问题;如果未替换,检查两点:

  • Fish版本是否≥3.0(正则缩写是3.0+新增特性)
  • 是否正确转义了{和}:在Fish的ERE正则中,这两个是特殊元字符,必须用\转义才能匹配字面量

完整实现方案

1. 直接用正则缩写实现(推荐)

无需额外函数,直接通过Fish的正则缩写功能完成转换:

# 添加正则缩写,输入{数字..数字}时自动展开为(seq 数字 数字)
abbr --regex '\{(\d+)\.\.(\d+)\}' '(seq \1 \2)'

测试:在终端输入{218..220}后按空格/回车,会自动替换为(seq 218 220)

2. 结合自定义函数实现(适合后续扩展)

如果需要后续支持步长(如{1..10..2})等复杂逻辑,可先定义处理函数,再绑定到缩写:

# 定义范围转换函数
function expand_range
    # 接收输入字符串,执行正则替换
    echo (string replace -r '\{(\d+)\.\.(\d+)\}' '(seq \1 \2)' -- $argv)
end

# 绑定函数到正则缩写
abbr --regex '\{(\d+)\.\.(\d+)\}' expand_range

持久化配置

要让缩写在每次启动Fish时自动生效,把上述命令添加到~/.config/fish/config.fish文件末尾即可。

内容的提问来源于stack exchange,提问作者Ahmad Ismail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:20:26