同じコマンドを使用する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]$
ご覧のとおり、プロンプトにリストされているディレクトリはPreferences
2行目にあります。ただし、これはディレクトリをクリックしC-j
て選択した後です。正しいディレクトリをvscode
呼び出すと、ls
プロンプトに表示されます。
予想される動作は、2番目の例の2行目にvscode
notを表示する必要があることです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を変更してください!