쉘에서 Vi 키 바인딩을 사용할 때 현재 Vi 모드를 표시하는 방법은 무엇입니까?


15

내 tcsh 쉘에서 vi 키 바인딩을 사용합니다.

이제 어떤 모드가 ( insert모드 또는 command모드) 에 있는지 알지 못하여 많은 좌절을 초래합니다.

누구나 셸에서 현재 vi 모드를 표시하는 방법을 알고 있습니까? (프롬프트 또는 다른 것을 포함하여)

답변:


4

어떤 모드를 시각적으로 결정할 수있는 방법이 없다고 생각하지만 행동을 약간 수정하면 문제가되지 않습니다.

명령 모드를 사용하려면 명령을 입력하기 전에 ESC를 누르십시오.

삽입 모드에 들어가려면 내용을 입력하기 전에 ESC와 i를 누르십시오.

ESC를 많이 누르게 되겠지만, 내가 만난 모든 vi 사용자는 어쨌든 그렇게합니다.


1
문제는 쉘에서 여분의 ESC가 무시되지 않는다는 것입니다. 추가 ESC를 제공 한 다음 명령을 입력하면 (예 : 왼쪽으로 이동) 단순히 경고음을 내고 아무것도하지 않습니다.
sundar-복 직원 모니카

2
"추가 ESC"라는 말은 이미 명령 모드에있을 때 ESC를 누르는 것을 의미합니다. 어떤 모드에 있는지 모르기 때문에 많은 일을합니다.
sundar-Reinstate Monica

당신이 올바른지. 나는 그것을 더 이상 사용하지 않도록 너무 오랫동안 사용했습니다. 가장 간단한 답변입니다. ESC와 h를 눌렀는데 아무런 반응이 없으면 h를 다시 누르십시오. 나는 그것이 또 다른 질문을 열어 준다고 생각한다. vi 키 바인딩의 '명령'모드에서 ESC를 누르면 다음 문자가 올바르게 해석되지 않는 이유는 무엇입니까? vi 자체는 이것을하지 않습니다. ESC를 10 번 입력해도 다음 명령은 여전히 ​​예상대로 작동합니다.
Bob Weber

또 다른 팁은 종을 끄십시오. 설명하는 이유와 탭 완성시 경고음이 발생하기 때문에 매우 성가시다. 환경에 따라 여러 가지 방법이 있습니다.
Bob Weber

1
좋아, 나는 현재이 솔루션을 시험 해보고있다. Caps Lock을 Escape에 매핑하면 구현이 더 쉬워졌지만 아직 삽입 모드를 위해 ESC-i에 익숙하지 않았습니다. 나는 곧 희망한다. > ESC를 누르고 h가 아무 것도 발생하지 않으면 h를 다시 누르십시오. 이것의 문제점은 상당히 실망스럽고 흐름을 많이 중단시킵니다. 내가 만들고있는 명령 외에도 고려해야 할 추가 사항입니다. 나는 그들이 내 근육 메모리에이고 생각하는 하나 개의 작은 것은주는 바로 그 이유 VI 키 바인딩 선호 - 휴식 이런 종류의 목적 자체가 ...
다르 - 분석 재개 모니카

3

설명서를 살펴본 결과 현재 vi 모드를 감지하고 표시하는 방법을 찾을 수 없다고 말해야했습니다. 나는 당신이 즐거운 놀라움을 원하고 누군가가 해결책을 제시하기를 바랍니다.

나는 이것을 할 수있는 방법이 있다고 생각하지만, 작은 성가심 때문에 엄청난 과잉이며, 나는 이것이 당신 이이 질문을 제기했을 때 염두에두고 있다고 생각하지 않습니다. 이것이 사실이라면 지금 읽기를 중단하고 인생을 즐기십시오.

OTOH, 이것이 정말로 당신의 애완 동물 친구이고 그것이 당신을 미치게 만들고 있다면, 당신은 정말로이 문제를 헤치고 싶을 것입니다.

  1. W. Richard Stevens 의 UNIX (R) 환경에서 고급 프로그래밍 사본을 받으십시오 .
  2. 스트림 및 터미널 I / O 에 관한 장을 읽으십시오 .
  3. 터미널에 계층화 할 수있는 스트림의 예를 포함하는 소스 코드 를 위에서 언급 한 책으로 다운로드하십시오 .
  4. Esc 키 조합 (또는 두 모드 변경 키 누르기)에 대한 처리를 구현하고 현재 회선의 벨 또는 백그라운드 조작을 통해이를 표시하십시오.

간단히 말해서, Unix는 터미널 I / O를 장치 드라이버와 사용자 프로세스 사이의 전이중 I / O 스트림으로 구현하여 모듈을 삽입 할 수 있습니다. 스택으로 구성되므로 원하는만큼 스트림을 계층화 할 수 있습니다. 주입 된 스트림의 합은 터미널 I / O 동작을 만듭니다.

문자를 입력하면 첫 번째 모듈에서 해당 문자를 검사하여 전달합니다 (원하는 경우). 응답이 반대 방향으로 도착하면 다시 검사하여 전달할 기회를 얻습니다. 이것이 Ctrl-C가 일반 문자 키보다 높은 수준에서 처리되는 방식입니다.

스트림 모듈을 구현하는 이진 파일을 만들 수 있습니다.이 모듈을 호출하면 포 그라운드에서 자동으로 실행되어 모든 키 입력을 검사하고 전달하여 원하는 키 입력에 대해 원하는 작업을 수행합니다. 모든 의도와 목적을 위해 마치 쉘에서 작업하는 것처럼 나타납니다. 우우 이 바이너리는 .tcshrc의 마지막 (또는 첫 번째 또는 다른) 줄에서 호출 할 수 있으며 거기에 있는지조차 알 수 없습니다.

이 좋은 입문서이다 여기에 ,하지만 난 그것의 주요한 과거의 아마 때문에,이 주제에 많이 찾을 수 없습니다.


2

이 페이지 에는 zsh 에서 원하는 것을 설정하는 상당히 자세한 스크립트가 있습니다. 아마도 tcsh와 함께 작동하도록 적응 될 수 있습니다 (그 쉘에 대해서는별로 익숙하지 않습니다).


나는 tcsh에 익숙하지 않지만, 당신이 보여준 페이지가 zsh 위젯 (zle 포함)을 사용한다고 생각합니다. 나는 다른 포탄이 그것을 가지고 있다고 생각하지 않지만, 그렇게하면 분명히 속임수를 쓸 것입니다.
BrianH

1

이 정확한 문제가있는 사람 (예 : 나 자신) : stackoverflow 에서 해결책을 찾았습니다 . 분명히 readline에서 이것에 대한 기본 지원이 있으므로 다음을 추가 할 수 있습니다 ~/.inputrc.

set show-mode-in-prompt on

실제 캐릭터 사용을 사용자 정의하려면 다음을 수행하십시오.

set vi-ins-mode-string "custom-ins"
set vi-cmd-mode-string "custom-cmd"

0

tcsh를 사용한 명령 줄 편집


가장 일반적으로 사용되는 두 개의 텍스트 편집기 인 Emacs와 vi를 기반으로 명령 행을 편집하기위한 두 가지 기본 모드가 있습니다 .

vi 바인딩을 사용하면 삽입 모드 와 명령 모드를 전환해야 합니다.
각 모드마다 다른 명령이 유용합니다.

vi 모드에는 삽입 모드와 명령 모드의두 가지 하위 모드가있습니다.

  • 기본 모드는 insert 입니다.
  • 를 눌러 모드 간을 전환 할 수 있습니다Esc .
  • 또는 명령 모드에서
    'a'(추가) 또는 'i'(삽입)를 입력 하면 삽입 모드로 돌아갑니다
    .

이미 링크 된 tcsh사용자 정의 페이지 에 대한 추가 정보


2
귀하의 링크는 저작권으로 보호되는 O'Reilly 책으로 이동합니다 ...
BrianH

0

나는 똑같은 문제가 있었고 우연히 해결책을 찾았습니다. 이 스레드는 오래되었지만 솔루션을 제공하는 다른 웹 사이트를 찾을 수 없으므로이 스레드에 게시해도 괜찮습니다.

터미널 프로그램 또는 쉘의 설정을 재설정하기 만하면됩니다. 현재 PuTTY를 사용하고 있으며 저장된 연결에 대해 저장된 설정을 삭제하고 저장된 세션을 다시 만들었습니다. 매력처럼 일했다.

도움이 되었기를 바랍니다!


0

SO에 대한 답변을 참조하십시오 . Bash 4.4 / Readline 7.0은이 기능에 대한 지원을 추가 할 예정이며, 중간에 Bash 4.3 / Readline 6.3의 패치 버전을 github에 게시했습니다 .

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