zsh - ctrl+c, ctrl+x, ctrl+v를 사용하여 복사, 잘라내기, 붙여넣기 최적화

zsh - ctrl+c, ctrl+x, ctrl+v를 사용하여 복사, 잘라내기, 붙여넣기 최적화

나는 내 안에 있다 .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.

관련 정보