提示 (PS1) 不会根据绑定命令更新

提示 (PS1) 不会根据绑定命令更新

我不明白为什么使用同一命令的这两种不同方式会导致不同的行为。

我已经安装了fzffd并有以下几行.bashrc

function updir(){
  cd ..
}
function overdir(){
  cd `fd -t d -d 1 | fzf`
}
function downdir(){
  cd `fd -t d -d 8 | fzf`
}

bind -x '"\C-i":"updir"'
bind -x '"\C-j":"overdir"'
bind -x '"\C-l":"downdir"'

export PS1="[\u@\h:\W]$ "

如果我overdir在 shell 中输入,我可以输入模式并按预期转到目录,当前工作目录会在提示中更新,如下所示

[davidlittle@deus1:~]$ overdir
[davidlittle@deus1:googledrive]$ overdir
[davidlittle@deus1:Preferences]$

请注意,在这些提示之间fzf会显示一个窗口,我选择一个目录,然后视图返回到上面显示的内容。然而,如果我使用绑定快捷方式“Cj”而不是 执行相同的操作,现在我会得到不同的结果:

[davidlittle@deus1:Preferences]$
[davidlittle@deus1:Preferences]$ ls
%Users%davidlittle%googledrive%Preferences%vscode%settings.json keybindings.json                                                settings.json
[davidlittle@deus1:vscode]$

正如您所看到的,提示中列出的目录位于Preferences第 2 行。但这是在点击C-j并选择vscode目录之后。一旦我调用ls正确的目录就会显示在提示中。

预期的行为是第二​​个示例的第 2 行应显示vscodenot Preferences

出了什么问题???

答案1

感谢@jsotola 的问题和一些实验,我自己设法解决了这个问题。

首先,这-x不是必需的,而且似乎会引起问题(当我按 Enter 键时,正如 @jsotola 所要求的那样,这会更改 $PS1,所以我可能还可以在绑定中包含 Enter 的组合键,但我不是确定如何做到这一点,我想我更喜欢看到最后一个命令是什么);其次,控制命令运行不佳(因为它们根据终端映射到其他组合键),所以我改用元键。以下是最终的工作绑定:

function updir(){
  cd ..
  exa --long --group-directories-first
}
function indir(){
  cd "`fd -t d -d 1 | fzf`"
  exa --long --group-directories-first
}
function deepdir(){
  cd "`fd -t d -d 8 | fzf`"
  exa --long --group-directories-first
}


bind '"\ek":"updir\n"'
bind '"\ej":"indir\n"'
bind '"\el":"deepdir\n"'

请注意,这些新绑定还包括一个使用以下命令显示目录的命令exa。将 bash 变成一个非常干净的文件浏览器,具有模糊匹配功能!

相关内容