Vim이 SSH 탈출을 가로챕니다

Vim이 SSH 탈출을 가로챕니다

(내가 아는 한) 해결해야 할 문제는 없습니다. 나는 SSH를 더 잘 이해하려고 노력하고 있습니다.

내 시스템에서 ssh 이스케이프 문자는 물결표(~)입니다. 어딘가에 SSH를 연결하면 예상대로 사용할 수 있습니다.

me@local$ ssh remote
me@remote$                # here I press tilde, control+z
[1]+  Stopped                 ssh remote
me@local$

모두 괜찮습니다. 그러나 vim원격으로 실행하면 vim에 갑자기 이스케이프 문자가 표시됩니다. 이스케이프 문자가 더 이상 전송되지 않는 것 같습니다.도착하다 ssh하지만 대신통과하다 ssh, 마치 이스케이프 문자가 아닌 것처럼 보입니다.

me@local$ ssh remote
me@remote$ vim
# vim opens, here I press tilde, control+z
[1]+  Stopped                 vim
me@remote$ 

vim내 질문은 이스케이프 문자의 동작에 어떤 영향을 미치는가입니다 .ssh

답변1

댓글에서:

물결표와 Ctrl+Z 키를 누르기 전에 Return/Enter를 누르면 어떻게 됩니까? - 속삭임

이렇게 하면 ssh가 백그라운드에 놓이게 됩니다. Return/Enter 동작이 변경되는 이유는 무엇입니까? 이것은 어디에 문서화되어 있습니까? - 킬 -9

두 번째 질문에 대한 답변이 첫 번째 질문보다 더 간결하므로 거꾸로 대답해 보겠습니다.

이(~앞에 엔터를 누르세요)는 어디에 기록되어 있나요?

이것Openssh 매뉴얼 페이지의 이스케이프 문자 섹션ssh키 입력을 원격 서버에 전달하는 대신 클라이언트 프로그램이 작업을 수행하도록 하는 명령 이스케이프 시퀀스에 대해 설명합니다 . 두 번째 단락에는 다음 문장이 포함되어 있습니다.

특수 문자로 해석되려면 이스케이프 문자가 항상 개행 문자 뒤에 와야 합니다.

이것이 다소 모호하고 간과하기 쉽다고 생각하더라도 나는 당신을 비난하지 않을 것입니다. 이전에는 상황이 더 나빴습니다! 내가 처음으로 ~.종료 명령을 접한 것은 1990년대 SunOS 4.x 명령에서였습니다 tip.매뉴얼 페이지설명하다:

줄의 첫 번째 문자로 나타나는 물결표 문자(~)는 프롬프트가 특별한 작업을 수행함을 나타내는 이스케이프 신호입니다.

이 설명을 통해 독자는 ~키 에 대해 추론할 수 있습니다.줄의 첫 번째 문자, 이전 키 입력은 Return/Enter여야 합니다. 문서에서 추론하는 것은 좋은 것이 아닙니다. 대부분의 사람들은 요점을 놓치고 tip그들의 (종료) 명령이 무시되는 것처럼 보일 때 ~.좌절감을 느낍니다 . 매뉴얼 ssh페이지에서는 설명을 더욱 명확하게 개선했습니다.

~이러한 이스케이프 시퀀스(1981년 4.1BSD Unix로 거슬러 올라가는 것으로 보임)에 선행 Return/Enter가 필요한 이유 는 실수로 세션 연결이 끊어지는 것을 rlogin방지하기 위한 것입니다 (아마도 원격 서버에 업로드된 파일에서).~.

vim의 원격 세션을 실행하는 데 추가 Return 키가 필요한 것처럼 보이는 이유는 무엇입니까?

(귀하의 질문에 대한 나의 해석)

vim다른 명령을 실행하는 것과 비교하여 원격 세션 호출에 "추가" Return 키 입력이 필요한 이유를 정확히 알 수 없습니다 . 그러나 나는 몇 가지 근거 있는 추측을 제시할 수 있습니다.

  • vim원격 서버에서 실행 중이고 Enter 키를 누르면 를 입력하기 전에 이미 다른 키 입력을 입력한 것입니다 ~Ctrl-Z. 아마도 화살표나 h, j, k, l커서 이동 키를 눌렀을 것입니다. 또는 Ctrl-L디스플레이를 새로 고칩니다.
  • vim호출과 타이핑 사이에 아무 키도 누르지 않은 경우 ~Ctrl-Z프로그램 vim은 상태를 요청하기 위해 터미널 프로그램에 일련의 문자를 보내고 터미널 프로그램은 응답으로 문자를 다시 보낼 수 있습니다. 이러한 쿼리와 답변은 일반적으로 터미널 프로그램에 표시되지 않습니다. 응답 순서는 키 입력과 마찬가지로 터미널 프로그램에서 나오며 ssh 클라이언트는 ~Return 대신 그 앞에 오는 다른 문자를 보게 됩니다.

두 번째 추측은 첫 번째 추측보다 가능성이 낮지만 일부 상황에서는 이러한 추측이 발생했습니다.

마지막으로...

ssh 클라이언트 프로그램에 이스케이프 시퀀스/명령을 보내는 가장 안정적인 방법은 이스케이프 문자를 실제로 두 문자로 처리하는 것입니다. 반환 뒤에 물결표가옵니다. 대부분의 명령의 경우 시퀀스에 두 번이 아닌 세 번의 키 입력이 필요합니다.

관련 정보