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

Bash中FZF高度小于100%时选择补全后提示符消失的问题

问题原因

当FZF以非100%高度运行时,它会在终端光标位置下方创建局部交互窗口,退出后未能正确恢复终端的光标位置与屏幕状态,导致Bash提示符被覆盖或未重新渲染。而100%高度模式下FZF会占用整个终端屏幕,退出时会自动恢复全屏状态,因此提示符能正常显示。

解决方案

提供两种可靠的修复方式:

方式1:让FZF窗口显示在光标上方

修改FZF调用参数,添加--reverse,让选择窗口出现在当前命令行上方,退出后光标自动回到原位置,不会干扰提示符:

_mycmd_fzf_completions() {
    if (( COMP_CWORD == 1 )); then
        local dir_select
        dir_select=$(find -L "${COMP_WORDS[COMP_CWORD]:-.}" -maxdepth 1 -mindepth 1 -type d 2> /dev/null | fzf --height 50% --reverse --query="${COMP_WORDS[COMP_CWORD]}" )
        case "$?" in
                0) COMPREPLY=( "${dir_select}" );;
                *) return 0;;
        esac
    fi
}

complete -F _mycmd_fzf_completions mycmd

方式2:强制Bash重绘提示符

如果--reverse不符合使用习惯,可在FZF执行完成后添加终端控制命令,强制Bash重新渲染提示符和当前命令行:

_mycmd_fzf_completions() {
    if (( COMP_CWORD == 1 )); then
        local dir_select
        dir_select=$(find -L "${COMP_WORDS[COMP_CWORD]:-.}" -maxdepth 1 -mindepth 1 -type d 2> /dev/null | fzf --height 50% --query="${COMP_WORDS[COMP_CWORD]}" )
        case "$?" in
                0) COMPREPLY=( "${dir_select}" );;
                *) return 0;;
        esac
        # 强制刷新终端并重新绘制提示符
        echo -ne "\r$PS1$COMP_LINE"
        printf "\e[0m"
    fi
}

complete -F _mycmd_fzf_completions mycmd

注意:代码中已为路径变量添加双引号,避免路径含空格时出现解析错误。

内容的提问来源于stack exchange,提问作者Rishi K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:45:57