나는 내 안에 있다 .zshrc
.
if [[ -t 0 && $- = *i* ]]
then
# change Ctrl+C to Ctrl+I
stty start ''
stty stop ''
stty quit ''
stty erase ''
stty kill ''
stty eof '' # Ctrl + D
stty rprnt ''
stty werase ''
stty lnext ''
stty discard ''
fi
# change Ctrl+C to Ctrl+Q
stty intr '^q'
# change Ctrl+z to Ctrl+j
stty susp '^j'
# change Ctrl+V to Ctrl+K
bindkey '^k' quoted-insert # for zle
_copy-using-xsel() {
if ((REGION_ACTIVE)) then
zle copy-region-as-kill
printf "$CUTBUFFER" | xsel -i --clipboard
((REGION_ACTIVE = 0))
fi
}
zle -N _copy-using-xsel
bindkey '^C' _copy-using-xsel # Copy text
_cut-using-xsel() {
if ((REGION_ACTIVE)) then
zle copy-region-as-kill
printf "$CUTBUFFER" | xsel -i --clipboard
zle kill-region
fi
}
zle -N _cut-using-xsel
bindkey '^X' _cut-using-xsel # Cut text
_paste-copy-using-xsel() {
LBUFFER+="$(xsel -b -o)"
}
zle -N _paste-copy-using-xsel
bindkey '^V' _paste-copy-using-xsel # Paste
ctrl+복사, 사용+ 잘라내기, 사용+붙여넣기를 사용할 수 있습니다 c. 그러나 작업이 매우 느리다는 것을 알았습니다. 내 생각에는 자르는 데 0.5초 정도 걸린다는 뜻이다. 사용 때문인가요? 지연이 사라지도록 키 바인딩을 최적화하려면 어떻게 해야 합니까?ctrlxctrlvxsel
답변1
요약 설명:
"cut" 자체가 느리다면 아마도 ^X
다른 키바인드 앞에 "cut"을 붙이고 있을 가능성이 높습니다. 어떤 바인딩이 존재하는지 확인하고 관련 바인딩을 변경할 수 있습니다.
$ bindkey | grep '\^X'
"^X^B" vi-match-bracket
"^X^F" vi-find-next-char
"^X^J" vi-join
"^X^K" kill-buffer
"^X^N" infer-next-history
"^X^O" overwrite-mode
"^X^U" undo
"^X^V" vi-cmd-mode
"^X^X" exchange-point-and-mark
"^X*" expand-word
"^X=" what-cursor-position
"^XG" list-expand
"^Xg" list-expand
"^Xr" history-incremental-search-backward
"^Xs" history-incremental-search-forward
"^Xu" undo
보시다시피 zsh에는 내 시스템에 바로 사용할 수 있는 여러 바인딩이 있습니다.
이를 변경하지 않으려면 KEYTIMEOUT
환경 변수를 기본값인 0.4초보다 짧은 값으로 설정하면 대기 시간도 줄어들지만 이와 같은 다중 키 바인딩에는 더 빠른 입력 속도가 필요하다는 점에 유의하세요.
스크립트 품질 사항:
제어되지 않는 변수를 첫 번째 인수로 사용하는 printf
것은 문제가 있습니다. 첫 번째 인수는 형식 문자열이므로 재해석되어 원하는 대로 작동하지 않을 수 있습니다.
printf '%d' # prints a "0" with no trailing newline
printf '%s' '%d' # prints "%d"
그래서 당신은 사용해야합니다 printf '%s' "$CUTBUFFER"
.
또한 0으로 설정하려면 REGION_ACTIVE
할당 주위에 괄호가 필요하지 않습니다. 당신 대신에 ((REGION_ACTIVE = 0))
당신은 당신이 될 수 있습니다 REGION_ACTIVE=0
.