bash/readline이 터미널의 완료 제안을 "정리"하는 것이 가능합니까?

bash/readline이 터미널의 완료 제안을 "정리"하는 것이 가능합니까?

zsh를 사용하고 tab명령, 경로 이름, 옵션 등을 완성하는 경우 잠재적인 일치 항목이 여러 개 있을 때마다 제안 사항이 프롬프트 아래에 표시됩니다.
제안을 선택하면 zsh는 여기에서 볼 수 있듯이 터미널에서 제안 목록을 제거합니다.

여기에 이미지 설명을 입력하세요

이미지 출처

대조적으로 bash가 완료 제안을 제공하면 목록을 출력하고 새로운 프롬프트로 돌아갑니다.

여기에 이미지 설명을 입력하세요

이미지 출처
내가 사용하지 않은 제안은 아무런 가치도 제공하지 않고 터미널에서 더 많은 "노이즈"를 생성하므로 zsh 동작이 나에게 더 좋습니다.
이런 방식으로 zsh처럼 작동하도록 bash/readline을 구성할 수 있습니까?

답변1

짧게: 가능하지만 .inputrc바인딩만큼 복잡합니다.

긴: 의견에서 제안한 대로~할 수 있었다bash 프롬프트와 readline 바인딩에서 이와 같은 작업을 수행하십시오.

커서를 저장/복원하는 것은 효과가 없습니다. 화면의 나머지 부분을 확실하게 지울 수 있는 유일한 지점은 Enter선택을 완료하기 위해 누르는 것뿐이기 때문입니다.

에 제어권을 넘긴 후에는 accept-line화면의 나머지 부분을 지우기에는 너무 늦습니다. readline이 하나 이상의 작업을 수행하도록 만들기 위해 일련의 실제 및 임시 "키 바인딩"을 정의하는 것은 가능하지만 복잡합니다. 예를 들어 참조

그러나 이 접근 방식은 bash에 문자를 보내고 readline에 명령을 실행하는 것으로 제한됩니다. readline 명령 중 어느 것도 수행하지 않습니다

printf '\033[J'

클리어하기 위해나머지화면의. 가장 가까운 것은 readline의 내장 clear-screen(~ 아니다당신이 원하는 것). 귀하의 바인딩은 다음과 같은 작업을 수행해야 합니다.

  • beginning-of-line
  • 삽입 " printf '\033[J';"
  • end-of-line
  • accept-line

이는 end-of-linereadline의 특이한 문제를 해결합니다. 누를 수 있게 해줍니다.Enter 어딘가에라인에. 커서가 줄 중앙에 있으면 입력의 일부만 표시됩니다(비록 bash는 전체 문자열을 가져옵니다).

관련 정보