如何用 fzf 的 --ghost 参数显示输入占位提示并用 change-ghost 动态修改

发布时间:2026/9/13 16:22:24
如何用 fzf 的 --ghost 参数显示输入占位提示并用 change-ghost 动态修改 如何用 fzf 的 --ghost 参数显示输入占位提示并用 change-ghost 动态修改【免费下载链接】fzf:cherry_blossom: A command-line fuzzy finder项目地址: https://gitcode.com/GitHub_Trending/fz/fzf在命令行中打开 fzf 时输入区是空白的用户不知道该怎么输入。--ghostTEXT参数可以在输入为空时显示一段灰色占位提示文本而change-ghost(...)动作让你通过按键在运行时动态更换这段文本。两者组合起来可以做出类似 GUI 输入框的 placeholder 效果。注意版本前提--ghost、change-ghost和transform-ghost都是 fzf 0.61.0 引入的功能见 CHANGELOG0.61.0 之前的版本不支持需要先升级 fzf。第一步用 --ghost 显示静态占位提示--ghost的格式是--ghostTEXTman 页man/man1/fzf.1对其的定义是 Ghost text to display when the input is empty——也就是说只有输入区为空时才显示一旦开始输入ghost 文本立即消失。最简单的用法来自 CHANGELOG 中的官方示例# 输入为空时显示 Type to search fzf --ghost Type to search运行后不输入任何字符输入区会显示灰色的Type to search输入任意字符后提示消失清空输入例如C-u后提示重新出现。调整 ghost 文本的颜色fzf 的颜色元素列表中ghost元素默认应用dim属性Ghost text (--ghost, dim applied by default)见 man 页的--color元素说明。从 0.65.x 起默认样式属性只在完全没有指定该元素的颜色或样式时生效所以你可以直接覆盖例如 CHANGELOG 中的示例# 只应用红色和斜体不再带默认的 dim fzf --ghost Type to search --color ghost:red:italic也就是说--color ghost:...中你写的部分会替换默认的dim表现不需要再显式写regular去重置。第二步用 change-ghost 动态修改 ghost 文本man 页的 KEY/EVENT BINDINGS 动作表中列出了两个与 ghost 相关的动作change-ghost(...)—— change ghost text to the given string把 ghost 文本改成给定字符串transform-ghost(...)—— transform ghost text using an external command用外部命令的输出替换 ghost 文本两者都没有默认按键需要通过--bind绑定。--bind的表达式格式是KEY:ACTION逗号分隔多个绑定。项目测试用例 test/test_core.rb 中的test_ghost给出了一条完整的可参考命令seq 100 | fzf --prompt X \ --ghost Type in query ... \ --bind space:change-ghost:Y Z \ --bind enter:transform-ghost:echo Z Y这条命令的行为以下断言来自该测试用例作为示例结果呈现启动后输入为空输入区显示X Type in query ...按下空格change-ghost:Y Z触发ghost 文本被替换为Y Z再次按下回车transform-ghost:echo Z Y触发外部命令echo Z Y的输出Z Y成为新的 ghost 文本输入100后列表只匹配一项ghost 文本不再显示按C-u清空查询后ghost 文本此时已是Z Y重新出现。change-ghost的括号参数就是新文本本身直接写进绑定字符串即可transform-ghost则执行括号里的命令并取其输出适合需要根据外部状态计算提示文本的场景。可选分支让 ghost 文本与 info 行内联显示默认布局下 ghost 文本单独占输入区。如果想让输入区同时显示 info 信息测试用例test_ghost_inline展示了内联写法seq 100 | fzf --info inline: Y --no-separator \ --prompt X --ghost Type in query ...此时输入为空时显示形如X Type in query ... Y100/100示例结果具体 info 文本取决于你的--info参数输入100后变为X 100 Y1/100。--no-separator是关闭 info 行分隔线的开关man 页将其说明为 Do not display horizontal separator on the info line。验证与限制判断这套配置是否生效按上面的步骤逐项检查即可输入为空时能看到--ghost指定的文本触发绑定按键后ghost 文本变为change-ghost的参数或transform-ghost命令的输出输入任意字符 ghost 消失清空查询后重新出现——这是--ghost的定义行为不是 bug。边界情况提醒该功能要求 fzf 0.61.0 或更高版本--ghost只影响输入为空的显示对已有查询不生效change-ghost/transform-ghost没有默认绑定必须通过--bind显式指定按键或事件否则不会触发。参数细节的完整定义可对照 man/man1/fzf.1 中的--ghost、--bind、--color条目和动作表行为验证用例在 test/test_core.rb 的test_ghost与test_ghost_inline中。【免费下载链接】fzf:cherry_blossom: A command-line fuzzy finder项目地址: https://gitcode.com/GitHub_Trending/fz/fzf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考