ヒント(PS1)はバインディングコマンドによって更新されません。

ヒント(PS1)はバインディングコマンドによって更新されません。

同じコマンドを使用する2つの異なる方法がなぜ異なる動作を引き起こすのかわかりません。

私はインストールしましたfzfそしてfdそして次の行があります.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期待どおりにディレクトリに移動でき、現在の作業ディレクトリは次のようにプロンプ​​トで更新されます。

[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]$

ご覧のとおり、プロンプトにリストされているディレクトリはPreferences2行目にあります。ただし、これはディレクトリをクリックしC-jて選択した後です。正しいディレクトリをvscode呼び出すと、lsプロンプトに表示されます。

予想される動作は、2番目の例の2行目にvscodenotを表示する必要があることですPreferences

何が間違っていますか? ? ?

答え1

@jsotolaの質問といくつかの実験のおかげで、この問題を直接解決することができました。

まず、これは-x不要で問題を引き起こすようです(@jsotolaが要求したようにEnterを押すと$ 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を変更してください!

関連情報