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"는 드문 조합입니다.j
k
esc
# 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