화면 - Vim 종료 후 이상한 동작

화면 - Vim 종료 후 이상한 동작

구성 화면에 문제가 있습니다.

내 것은 screen.rc매우 간단하며 다음과 같습니다.

altscreen on
termcapinfo xterm ti@:te@

SSH 클라이언트를 사용하여 직접 연결하는 것과 동일하게 동작하도록 화면을 구성하고 싶습니다 MobaXterm. 그래서 내가 달성하고 싶은 것은 다음과 같습니다.

  • 마우스를 사용하여 스크롤 가능 vim(마우스 설정 없이 a)
  • 마우스로 터미널 출력 스크롤 ( Ctrl+ 없음 A Esc)
  • 다른 편집기 등을 종료한 후 출력이 아닌 이전 명령을 보거나 화면을 지우고 vim싶습니다 .vim

또한 화면을 사용하여 많은 컴퓨터에 연결하고 모든 컴퓨터에서 수정할 수 없기 .vimrc때문에 구성(및 유사한 로컬 구성 파일)이 불가능합니다 ..vimrc

나는 이것을 달성하는 것이 불가능하다는 것을 알았습니다. 따라서 내 터미널에서는 이 두 줄의 코드를 사용하여 .screenrc터미널 출력을 스크롤할 수 있지만 터미널에서는 vim키보드를 사용해야 합니다. 좋습니다.

이제 바로 요점을 살펴보겠습니다.

쉬는 시간에는 vim매우 이상한 행동을 보입니다. 콘솔로의 출력은 콘솔이 열리기 전과 동일하므로 vim이것이 제가 원하는 것입니다. 하지만 프롬프트는 마지막 명령(run vim) 뒤가 아니라 창 상단에 있습니다 . 그래서 이전 결과를 바탕으로 작성했습니다.

나는 당신이 이해할 수 있기를 바랍니다. 문제를 해결하는 방법을 알고 있나요? 어떤 도움이라도 대단히 감사하겠습니다.

이게 말이 되는지 모르겠지만 MobaXterm화면을 구성하면 가상머신에 연결이 되더라구요. 아마도 이것은 SSH와도 관련이 있을 것입니다.

편집: 또 다른 유사한 SSH 클라이언트도 시도해 보았는데 Putty마찬가지였습니다.

답변1

설명된 증상은 rc(복구 커서) 이스케이프 시퀀스로 인해 발생합니다. 생각해 보면 문제의 근원은 아마도 vim일 것입니다.

  • 주어진 를 사용하여 프로그램 .screenrcscreenxterm 대체 화면 기능을 에뮬레이트합니다.
  • 이는 terminfo smcuprmcup(termcap ti및 ) 제어 시퀀스를 사용하여 te수행 됩니다.
  • 전환할 때도착하다대체 화면에서 xterm은 (a) 커서 위치를 저장하고, (b) 대체 화면을 지우고, (c) 대체 화면을 표시합니다.
  • 전환할 때~에서대체 화면에서 xterm은 (a) 커서 위치를 일반 화면으로 복원하고 (b) 일반 화면을 표시합니다.
  • 이러한 작업은 개별적으로 수행되는 것이 아니라 단일 제어 시퀀스로 수행됩니다. 터미널 설명에서 (infocmp 출력) 을 볼 수 있습니다 1049.
  • screen프로그램은 이러한 작업을 시뮬레이션합니다.
  • 하지만,같지 않은커서 위치를 저장/복원하기 위해 단일 변수를 사용하지 않는 xterm: 빠른 확인을 통해 다음을 알 수 있습니다.
    • 커서 위치를 저장합니다( tput sc).
    • 대체 화면으로/에서 전환(tput smcup
    • 다음은 tput rmcup)이고, 마지막으로
    • 커서 위치 복원( tput rc),
    • 그런 다음 커서가 저장된 위치로 이동합니다 tput sc.

vim - 및 vim용 플러그인 - 이스케이프 시퀀스를 보낼 수 있습니다. vim 종료 중에 커서를 복원하기 위해 이스케이프 시퀀스를 보내는 것 같습니다. 여기에서 간단히 확인해 보면 vim이 제대로 작동하고 있음을 알 수 있습니다(그러나 구성과 버전이 다름). 그럼 플러그인을 확인해보겠습니다.

이 상황을 디버깅하는 경우 화면에 전송된 문자( script예: using)를 캡처하고 가장 일반적인 시퀀스를 찾습니다 rc.

  • escape7
  • escape[u

xterm의 동작을 더 밀접하게 일치시키는 것이 좋겠지만 궁극적으로 예상치 못한 저장/복원 커서 시퀀스를 보내는 데 문제가 있는 것 같습니다 screen.vim

관련 독서:

답변2

문제는 어리석은 배선으로 인해 발생한 것으로 밝혀졌습니다..bashrc

TERM=xterm; export $TERM

따라서 screen을 실행한 후에는 이 줄을 제거한 후 문제가 TERM=xterm사라 TERM=screen졌습니다.

답변3

여기서 해결책을 찾았습니다.터미널에서 화면 복구를 구성하는 방법은 무엇입니까? vim의 경우:

vim의 경우 다음과 같은 것을 포함할 수 있습니다.

set t_ti= t_te=

~/.vimrc에 있습니다.

관련 정보