bash/readline을 사용하여 터미널의 완성 제안을 "정리"할 수 있습니까?

bash/readline을 사용하여 터미널의 완성 제안을 "정리"할 수 있습니까?

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

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

이미지 출처

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

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

이미지 출처
내가 사용하지 않는 제안은 가치가 없고 터미널에 더 많은 "노이즈"를 생성하기 때문에 zsh 동작이 나에게 더 좋습니다.
이런 방식으로 zsh와 같은 bash/readline을 구성할 수 있습니까?

답변1

간단히 말해서 가능하지만 .inputrc바인딩만큼 복잡합니다.

Long: 댓글에서 제안한 대로할 수 있다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는 전체 문자열을 가져옵니다).

관련 정보