vi 쉘 모드에 대한 사용자 정의 키 바인딩, 즉 "set -o vi"?


18

방금의 경이를 발견했으며 set -o vivi 또는 vim을 사용자 정의 할 수있는 것과 동일한 방법 으로이 vi 쉘 모드를 사용자 정의 할 수 있는지 궁금하십니까?

예를 들어,보다 편리한 키 또는 키 콤보를 esc?

현재 지원되지 않는 경우 일부 사용자 지정에서 프로그램의 소스 코드와 하드 코드를 변경하는 것이 얼마나 어려울까요? 아니면 나쁜 생각입니까?


나는 여기에서 답을 찾았다 < unix.stackexchange.com/questions/27699/remap-bash-vi-keys >
DinizBr

답변:


17

예, 내장 된 키 매핑 (vi 또는 emacs와 유사한 모드)을 변경할 수 있습니다 bind. 이것은 실제로 readline 기능입니다 (따라서 bash뿐만 아니라 모든 readline 프로그램에서 vi와 같은 바인딩을 가질 수 있습니다).

찾고있는 키는 vi-movement-mode이며 기본값은 \e(이스케이프)입니다. 추가로 이것을 다음과 동일하게 묶을 수 있습니다 (그리고 이것은 다소 어리 석습니다). 두 번째 줄은 바인딩을 제거하여 이스케이프합니다.

$ bind "=":vi-movement-mode 
$ bind -r "\e"

실행 bind -p하면 바인딩 할 수있는 모든 키와 현재 바인딩 (있는 경우)이 표시됩니다.

bind명령을 넣거나 실행하는 모든 readline 프로그램에 적용되도록 .bashrc편집 할 수 있습니다 ~/.inputrc. readline 문서에는 자세한 내용이 포함되어 있습니다.


1
대단해. 정말 고마워. 키 콤보를 바인딩하는 방법을 알아낼 수있었습니다 bind "Control-Space":vi-movement-mode. 그러나 예를 들어 vim에서는 트리거로 트리거로 두 문자를 입력합니다. 예를 들어 esc입력 jj하면 일반 모드로 돌아갑니다. bind로 시도했을 때 작동하지 않았습니다. 작동하는 특별한 방법이 있습니까?
요나

@Jonah는 내가 알지 못한다는 것을 알지 못했지만 최근에는 readline 문서를
읽지 않았습니다

@chishaku @ Jonah의 이름 앞에 at 기호 ( @) 를 붙여야합니다 . 그렇지 않으면 알림을받지 않습니다.
derobert

2
@Jonah 방금 같은 일을하려고했습니다. 이것을 알아 낸 적이 있습니까?
chishaku

1
unix.stackexchange.com/questions/303282/… 어떤 이유로 따옴표가 필요합니다bind '"jk":vi-movement-mode'
Hielke Walinga
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.