저는 zsh
쉘을 사용하고 있으며 완성 메뉴를 열 때 Vim의 버퍼에서 사용하는 것과 유사한 키를 사용하도록 일부 키 바인딩을 설치하려고 합니다.
따라서 키맵 내부에 다음 줄을 추가하여 menuselect
키 j
와 위젯을 k
바인딩 합니다 .zle
down-line-or-history
up-line-or-history
~/.zshrc
bindkey -M menuselect 'j' down-line-or-history
bindkey -M menuselect 'k' up-line-or-history
down-line-or-history
그리고 다음과 같이 up-line-or-history
설명됩니다 .man zshzle
down-line-or-history (^N ESC-[B) (j) (ESC-[B)
Move down a line in the buffer, or if already at the bottom line, move to the next event in the his‐
tory list.
up-line-or-history (^P ESC-[A) (k) (ESC-[A)
Move up a line in the buffer, or if already at the top line, move to the previous event in the history
list.
C-d
이제 동일한 위젯에 및 를 바인딩 하고 싶지만 C-u
원하는 만큼 반복할 수 있습니다(예: ) 5
.
처음에는 다음과 같은 간단한 코드를 시도했습니다.
some-widget() {
zle backward-char -n 5
}
zle -N some-widget
bindkey '^D' some-widget
C-d
zle 위젯에 바인딩되어 있지만 여러 번 backward-char
반복됩니다 .5
그런 다음 키 바인딩을 기본 키맵에서 키맵으로 이동하는 코드를 다시 작성해 보았습니다 menuselect
.
some-widget() {
zle backward-char -n 5
}
zle -N some-widget
bindkey -M menuselect '^D' some-widget
C-d
하지만 완성 메뉴가 열려 있는 동안 클릭 하면 바인딩된 기본 위젯을 실행하는 것처럼 zle
보이기 때문에 예상한 대로 작동하지 않습니다 .C-d
delete-char-or-list
delete-char-or-list (^D) (unbound) (unbound)
Delete the character under the cursor. If the cursor is at the end of the line, list possible comple‐
tions for the current word.
5
현재 완성 메뉴를 종료하고 커서를 여러 번 뒤로 이동하는 대신 현재 단어에 대해 가능한 완성을 나열합니다 .
예상대로 작동한다면 결국 다음과 같은 최종 코드를 사용하게 될 것입니다.
fast-down-line-or-history() {
zle down-line-or-history -n 5
}
zle -N fast-down-line-or-history
bindkey -M menuselect '^D' fast-down-line-or-history
fast-up-line-or-history() {
zle up-line-or-history -n 5
}
zle -N fast-up-line-or-history
bindkey -M menuselect '^U' fast-up-line-or-history
zle
하지만 그렇지 않기 때문에 완성 메뉴가 열렸을 때 위젯을 반복하는 방법을 찾아야 합니다 .
down-line-or-history
완성 메뉴가 열린 상태에서 클릭하면 여러 번 반복 되도록 이전 코드를 수정하려면 어떻게 해야 합니까 ?5
C-d
답변1
위젯 때문에 코드가 작동하지 않습니다."메뉴 선택 그래프에서는 항상 동일한 작업을 수행하며, 사용자가 정의한 위젯으로 대체하거나 기능 세트를 확장할 수 없습니다.".
그러나 다음과 같은하다일하다:
bindkey -M menuselect 'j' down-line-or-history
bindkey -M menuselect 'k' up-line-or-history
bindkey -M menuselect -s '^D' 'jjjjj'
bindkey -M menuselect -s '^U' 'kkkkk'
이 -s
옵션을 사용하면 마치 직접 입력한 것처럼 ZLE(Zsh Line Editor)에 입력될 텍스트 문자열을 지정할 수 있습니다. 이제 ctrlD를 누르면 j5번의 누름이 발생하여 원하는 효과를 얻을 수 있습니다.
하지만 특별히 빠르지는 않으니 주의하세요. 실제로 커서가 한 번에 한 단계씩 위나 아래로 5단계씩 움직이는 것을 볼 수 있습니다.