bash에서 역 히스토리 검색 후 화살표 키를 누르면 커서가 잘못된 위치에 표시됩니다.


10

명령 줄에서 CTRL+ 를 통해 역 이력을 검색 r할 때 명령을 편집하려는 경우 화살표 키를 누르거나 CTRL+ a또는 CTRL+를 입력하면 커서가 잘못된 위치로 이동하는 경우가 있습니다. e. 그것이 점프하는 특정 위치는에 설정된 내 명령 줄 프롬프트의 크기와 동일한 오프셋 인 것처럼 보입니다 PS1.

커서의 실제 위치가 화면에 렌더링되는 위치와 다르기 때문에 문제가 발생합니다. 이후의 명령 편집 내용은 커서가 커서로 이동 한 것처럼 렌더링되지만 실제 명령은 점프없이 올바른 위치를 유지합니다.

이 문제의 원인 또는 해결 방법을 아는 사람이 있습니까?

편집 : PS1문제 의 끝에 줄 바꿈을 추가하면 사라지는 것 같습니다. 그러나 프롬프트와 같은 줄에 명령을 입력하는 것이 좋습니다.

답변:


6

이것은 종종 히스토리에서 한 줄보다 긴 명령으로 인해 발생합니다. 히스토리에서 더 짧은 항목을 선택하면 명령 행을 다시 렌더링 할 때 프롬프트 너비를 고려하지 않는 것이므로 해당 긴 명령 이후의 모든 항목은 문제가됩니다.

내가 찾은 쉬운 해결책은 홈 키를 누르고 "echo"를 삽입하고 Enter 키를 누르는 것입니다. 그런 다음 마지막 명령을 불러와 거기서 편집하십시오. (먼저 에코를 제거하십시오. :)


고마워, 나는 실제로 얼마 전에 그것을 시도했다. 필자의 경우 명령에 에코를 삼킨 파이프가 있었기 때문에 부주의하고 파일을 날려 버렸습니다. 당신은 맞습니다, 이것은 내 실험에 따라 긴 명령에만 영향을 미치는 것으로 보입니다.
jonderry

방금 찾은 echo보다 더 나은 솔루션 : echo 대신 줄의 시작 부분에 '#'을 추가하십시오. 이 방법으로 bash는 전체 줄을 주석처럼 취급합니다.
jonderry

1
그러나 더 나은 : 현재 줄을 다시 그리면 문제가 사라지는 것 같습니다. Cl을 사용하여 화면을 지우고 현재 줄을 다시 그리거나 바인딩되지 않은 함수 redraw-current-line에 대한 키 바인딩을 만듭니다.
jonderry

스크롤 버퍼를 잃는 것을 정말로 싫어하기 때문에 Cl 솔루션을 언급하는 것을 잊었습니다. 그러나 기록 탐색에서 일시적인 렌더링 결함이므로 다시 그리기를 강제하면 문제가 해결됩니다. 현재 라인 다시 그리기가 더 나은 솔루션처럼 들립니다!
cabbey

13

PS1에서 \ [및 \]로 묶지 않은 비 인쇄 이스케이프 시퀀스가있을 수 있습니다.

다음과 같이 모든 것을 동봉했는지 확인하십시오.

\[\e[33m\]\w\[\e[31m\] $ \[\e[0m\]

1
당신 만이 아닌 인쇄 순서를 동봉하면 좋은 작품 \[\](당신이이 블록 따옴표의 여러 그룹이 필요하므로)
Andomar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.