私は私の中にいます.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
概要説明:
「カット」自体が遅い場合は、おそらく^X
他のキーバインドの前に「カット」を付けている可能性があります。どのバインディングが存在するかを確認し、関連するバインディングを変更できます。
$ 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"
。
また、ゼロに設定するには、REGION_ACTIVE
割り当ての周りに括弧は必要ありません。あなたの代わりに((REGION_ACTIVE = 0))
あなたはあなたになることができますREGION_ACTIVE=0
。