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

如何修改fzf命令返回所有选中项的{1}:{2}格式组合?

解决fzf多选时返回{1}:{2}格式空格分隔字符串的问题

你遇到的核心问题是{+1}:{+2}的行为不符合预期——它会把所有选中项的第一个字段拼接在一起,再拼接所有第二个字段,而不是为每个选中项单独组合{1}:{2}。以下是几种可行的修改方案:

方案1:用fzf输出选中行 + awk + paste(最简洁)

直接让fzf输出所有选中的行,再通过后续工具处理每一行并拼接:

echo -e "a 1 10\nb 2 20\nc 3 30\nd 4 40" | fzf -m | awk '{print $1":"$2}' | paste -sd ' ' -
  • 工作流程:
    1. fzf -m输出所有选中的行(每行对应一个选中项)
    2. awk提取每行的前两个字段,组合成字段1:字段2的格式
    3. paste -sd ' ' -将所有行用空格连接成单一字符串

方案2:保留原bind结构的内部处理

如果你需要保留原命令中bind触发的逻辑,可以调整execute内的命令,用{+}获取所有选中行后处理:

echo -e "a 1 10\nb 2 20\nc 3 30\nd 4 40" | fzf -m --bind 'enter:execute(echo "{+}" | awk "{print \$1\":\" \$2}" | paste -sd " " -)+abort'
  • 说明:
    • {+}会将所有选中的行作为整体传递
    • 后续逻辑和方案1一致,处理后退出fzf(+abort)

方案3:用awk直接完成拼接(无需paste)

如果不想额外调用paste,也可以让awk一次性完成处理和拼接:

echo -e "a 1 10\nb 2 20\nc 3 30\nd 4 40" | fzf -m | awk '{printf "%s%s:%s", sep, $1, $2; sep=" "} END{print ""}'
  • 工作流程:通过sep变量控制是否添加前置空格,第一行无空格,后续行前加空格,最后END块输出换行符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:40:14