zsh에서 Vim 바인딩과 함께 `Alt + .`를 사용하는 방법

zsh에서 Vim 바인딩과 함께 `Alt + .`를 사용하는 방법

저는 zsh와 bindkeys -v.

Alt + .예상대로 작동하지 않습니다. 현재 표준 입력에 입력되었지만 입력되지 않은 내용이 다음 줄에 반복되는 것 같습니다.

이 게시물bash에서와 같이 작동한다는 것을 암시하는 것 같습니다. 즉, 입력된 마지막 명령의 마지막 인수를 가져옵니다.

이 작업이 예상대로 이루어지려면 무엇이 필요합니까?

답변1

터미널에서 Alt+는 char일반적으로 와 동일합니다 Esc char. (일부 단말기는 다르게 구성될 수 있습니다.)

vi 삽입 모드에서 Esc명령 모드로 전환합니다. vi 명령 모드에서는 Esc아무 작업도 수행되지 않습니다. vi 명령 모드에서 .이전 명령을 반복하십시오.

작은 부품insert-last-word기본 바인딩은 emacs 모드에서 Alt+ .Alt+ _이지만 vi 모드에는 기본 바인딩이 없습니다. vi 모드에서 사용하려면 바인딩을 지정해야 합니다.

bindkey -M vicmd _ insert-last-word

이는끼워 넣다명령: 커서 앞에 텍스트를 삽입합니다. 줄 끝에서는 수행할 수 없습니다. 이는 줄 끝에서 자주 사용되는 명령의 경우 매우 불편합니다. 당신은 정의를 선호할 수도 있습니다 append-last-word.

function append-last-word { ((++CURSOR)); zle insert-last-word; }
zle -N append-last-word
bindkey -M vicmd _ append-last-word                        

답변2

이 답변을 참조하십시오.https://stackoverflow.com/a/34293570/340947다른 답변과는 달리 vicmd매핑에는 (비포괄적) 테스트에서 심각한 문제가 있습니다! 이 viins매핑이 트릭인 것 같습니다.

견적은 다음과 같습니다(에 대한 ~/.zshrc).

bindkey -M viins '\e.' insert-last-word

bash의 경우에도 마찬가지입니다 ~/.inputrc.

set keymap vi-insert
"\e.":yank-last-arg

좋습니다. 이것은 가장 일반적인 사용 사례인 Alt+를 다룹니다. 이러한 셸에서는 삽입 모드에 있지만 때로는 일반 모드에서 탐색하여 이전의 마지막 인수를 삽입하려고 합니다. 그때 @gilles의 또 다른 답변이 들어옵니다. 기본적인 답변만 커서를 올바른 위치에 유지합니다. 예, 커서 앞에 삽입됩니다. 이 문제를 해결할 방법이 없는 것 같습니다.

관련 정보