Bash Vi 모드에서는 키를 누르면 자동으로 삽입 모드로 들어갑니다.

Bash Vi 모드에서는 키를 누르면 자동으로 삽입 모드로 들어갑니다.

XFCE4 터미널과 함께 bash 쉘을 사용하고 있습니다. Vi 모드로 쉘을 구성했습니다.

~/.bashrc 파일에 다음 줄을 추가하여 이 작업을 수행했습니다.

set -o vi

일반 모드의 쉘에서 처음 누르는 문자는 일반 모드에서 입력되지만 이후에는 삽입 모드로 들어갑니다.

즉:

저는 일반 모드입니다. b를 누르면 한 단어 뒤로 돌아가서 삽입 모드로 들어갑니다.

bb를 누르면 한 단어 뒤로 돌아가서 삽입 모드로 들어가서 b 문자를 삽입합니다.

또 다른 예를 들어, dd를 누르면 첫 번째 d가 일반 모드로 캡처되고 두 번째 d가 삽입되는 삽입 모드로 전환됩니다.

set -o vi.bashrc에 있든 없든 쉘에 수동으로 들어가면 이 동작이 발생하지 않고 정상적인 동작이 나타납니다. 나는 Emacs 모드가 아니기 때문에 내 .bashrc의 변경 사항을 읽고 있다는 것을 알고 있습니다.

저는 bash 4.2.45(1) 릴리스를 사용하고 있습니다.

이것은 내 .bashrc의 전체 내용입니다.

  PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting
  PATH=$PATH:/home/bleakcabal/.rvm/gems/ruby-2.0.0-p247/bin
  set -o vi

답변1

@Patrick의 의견을 읽은 후 문제를 해결했습니다.

설명하는 동작은 emacs 모드입니다.

이것은 내가 vi 모드에 있지 않다는 것을 깨닫게 해주었습니다. 나도 넣어

set -o vi

내 .bash_profile을 입력했는데 이제 모든 것이 잘 작동합니다. 내가 읽은 바에 따르면 .bash_profile은 로그인 쉘용이고 .bashrc는 대화형 비로그인 쉘용이므로 내 경우라고 생각하기 때문에 이것은 이상합니다.

답변2

문제는 여전히 emacs 모드에 있다는 것입니다. 그러나 더 나은 접근 방식은 파일을 변경하는 것입니다 .inputrc. .bashrc이렇게 하면 GNU readline을 사용하는 모든 것이 쉘과 일치합니다(그리고 bash 이외의 다른 쉘에서도 작동합니다).

나는 다음 을 내 .inputrc. 키는 홈 행에 있기 때문에 손을 뻗는 것보다 터치하기가 훨씬 쉽고 텍스트에서 "jk"는 드문 조합입니다.jkesc

# Make GNU readline (including bash) use vi-mode
 
set editing-mode vi
set vi-ins-mode-string \1\e[6 q\2
set vi-cmd-mode-string \1\e[2 q\2
 
set keymap vi-insert
"jk": vi-movement-mode

관련 정보