GNU 화면에서 vim의 CTRL- * 수정


10

GNU 화면에서 vim을 실행할 때 CTRL화살표 및 Pg * 키와의 조합이 예상대로 작동하지 않는 것으로 나타 났습니다 .

Ubuntu 10.10 vim-gnome패키지를 사용하고 있습니다.

우분투를 실행하는 다른 컴퓨터에서는 문제없이 작동했습니다. 불행히도 현재 해당 구성을 사용할 수 없습니다.

관련 질문이 있습니다 : Vim에서 Ctrl + 화살표를 수정하는 방법?

그러나 제안 된 솔루션은 vim의 키 바인딩을 다시 매핑하여 터미널 에뮬레이터 (Putty)와 함께 작동하도록하는 것입니다. 나는 일종의 일을 기억하지 못하고이 문제를 해결할 화면 구성 옵션이 있다고 생각합니다.

gnu-screen 메일 링리스트 에는 스레드 를 통해 vim을 실행 $ TERM=xterm vim하는 것이 적절한 수정 또는 해결 방법 임을 제안합니다 . 이것은 효과가 있지만 부작용이 있을까 걱정됩니다. 또한 다른 시스템에서 설정 한 솔루션 (솔루션이 필요한 경우)이 될 정도로 익숙하지 않습니다.


+1-나는 같은 문제가 있었고 제안한대로 term xterm~/.screenrc파일에 추가하면 문제가 해결 되었습니다. 다시 감사합니다!
Justin Ethier

답변:


4

그의 업데이트에서 언급했듯이 파일에 추가 term xterm하면 ~/.screenrc이 문제가 해결되는 것으로 보입니다.


글쎄 ..하지만 환경 변수를 대체하는 대신 왜 환경 변수를 screen전파하지 않는지에 대한 설명이 필요하다 . 아마도 중요한 상황이있을 것 입니다. $TERM"screen"$TERM == screen
intuited

3
@intuited : Screen set 이유 TERM=screen는 내부에서 실행중인 응용 프로그램이 Screen 터미널 내부에서 통신하기 때문입니다. 송수신하는 제어 시퀀스는 Screen 자체가 표시되는 터미널이 아닌 Screen의 제어 시퀀스입니다. Screen 세션을 분리하고 다른 유형의 터미널에 다시 연결할 수 있으므로이 간접 계층이 필요합니다.
Gilles 'SO- 악마 중지'

@Gilles : 고마워요, 그런 것 같아요. 재설정으로 인해 어떤 종류의 문제가 발생할 수 xterm있습니까?
intuited

1
xterm과 screen은 대부분 호환되기 때문에 별로는 아닙니다. 그러나 각 기능에는 다른 기능에는없는 몇 가지 기능이 있으며 응용 프로그램에 거짓말을하면 실제로 작동하지 않는 기능을 사용할 수 있습니다. 의 출력을 비교 infocmp screen하고 infocmp xterm, 그리고 화면 이스케이프 시퀀스xterm 등의 이스케이프 시퀀스를 . 제공 할 분류가 없습니다. 대부분의 응용 프로그램은 신경 쓰지 않지만 일부 응용 프로그램은 성가신 행동을 할 수 있습니다.
Gilles 'SO- 악한 중지'

2

프로세스 실행에서 작동하는 터미널을 설정하는 몇 가지 다른 방법이 있습니다.

  • 실행중인 화면 인스턴스에서 ^A-를 누르고 :명령 term xterm을 실행하면 해당 인스턴스에서 새로 열린 화면이 $TERM환경 변수로 설정되어 시작 됩니다 xterm. 그러면 호출 된 vim인스턴스 로 전파됩니다 . 이 vim 인스턴스는 CTRL- 콤보와 관련하여 올바른 동작을 표시합니다. 아직이 전략의 부작용을 발견하지 못했습니다. 이 명령은 기존 화면에는 영향을 미치지 않습니다. 이 명령은 물론 ~/.screenrc파일에서 사용할 수 있으므로이 방법이 다른 시스템에서 사용되었을 수 있습니다.

  • 실행중인 vim 인스턴스에서이 명령 set term=xterm은 해당 vim 인스턴스에서 CTRL- 콤보를 작동시킵니다. 이것은 내가 아직 이해하지 못하는 이유로 X 클립 보드 (예 : @*@+) 의 연결을 끊는 부작용이 있습니다 . 흥미롭게도 클립 보드 부작용은 명령 :set term=screen이로 시작된 vim 인스턴스에서 실행될 때도 발생합니다 $TERM=xterm.


이 답변은 OP의 업데이트에서 가져 왔습니다. 내가 한 것은 약간의 형식을 바꾸고 단어를 바꾸는 것이 었습니다.
phunehehe

2

근본적인 문제는 screen실제 터미널 ( TERMenvironment 변수 outside에 의해 식별 됨 screen)과 에뮬레이션 사이 의 매핑 screen이 불완전 하다는 것 입니다.

vttest 또는 tack을 사용하여 테스트하면 다음과 같은 결함이 있음을 알 수 있습니다

  • 그림 물감
  • 특수 키

설정 term하여 이러한 문제를 해결하려고 시도 .screenrc하면 주어진 실제 터미널에 대해서만 작동하며 다른 터미널 구현에 이식성이 없다는 단점이 있습니다. 문서 노트

기본이 아닌 목적으로 command라는 용어를 사용하지 않는 것이 좋습니다.

screen documentation 에서이 기능을 사용하는 다른 솔루션 (다른 단점이 있음)이 있습니다 .

screen이 자신의 터미널 이름을 알아 내려고하면 먼저 screen 이라는 항목을 찾습니다 . term , 여기서 term$TERM변수 의 내용입니다 . 해당 항목이 없으면 화면이 시도됩니다 screen(또는 screen-w터미널이 넓은 경우 (132 열 이상)). 이 항목도 찾을 수없는 경우 vt100대체 항목 으로 사용됩니다.

ncurses는이 경우에 대한 유용한 대체 터미널 설명 (예 : screen.xterm-new )을 제공하여 화면 매핑의 문제를 해결합니다. 실제로는을 사용 TERM=xterm-new하고 화면을 실행할 때 사용 가능한 기능 키 매핑을 가져옵니다.

term테스트에서 화면 설정 을 다시 참조 하면 매핑에 여전히 문제 가 있음을 알 수 있으며 이러한 대안에서 해결됩니다. 를 사용하여 정확한 터미널 설명을 얻을 수 있다면 term이러한 대안은 간단한 별칭 일 것 screen입니다. 그들은 아닙니다.

ncurses는 다음과 같은 이유로 (sic)을 제공 하지 않습니다screen.xterm .

전반적으로, 그러나, 대체 이름을 사용하여 사용에 비해 개선 term당신에 .screenrc: 그것이 생성보다 더 많은 문제를 해결합니다. 설정의 반대입니다 term.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.