팁(PS1)은 바인딩 명령에 따라 업데이트되지 않습니다.

팁(PS1)은 바인딩 명령에 따라 업데이트되지 않습니다.

동일한 명령을 사용하는 두 가지 다른 방법이 왜 다른 동작을 초래하는지 이해하지 못합니다.

나는 설치했다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행에 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를 바꿔보세요!

관련 정보