我不明白为什么使用同一命令的这两种不同方式会导致不同的行为。
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 行应显示vscode
not 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 变成一个非常干净的文件浏览器,具有模糊匹配功能!