Ubuntu 22.04でzsh 5.8.1を実行しています。プロンプトにいくつかのテキストが表示され、Ctrl+と入力すると期待uどおりに行が消去されます。しかし、Ctrl+を入力yすると
$ ^Y
読み出しラインバッファが固定されない原因は何ですか?
これは私の.zshrcです。
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME=""
plugins=(
colored-man-pages
colorize
git
zsh-autosuggestions
zsh-interactive-cd
vi-mode
)
ZSH_AUTOSUGGEST_STRATEGY=(history completion)
source $ZSH/oh-my-zsh.sh
unalias ls
unalias ll
unalias lsa
unalias gst
alias gs='git status'
alias gcob='git checkout -b'
bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word
bindkey "^[." insert-last-word
_sig_array=($(kill -l))
_return_status() {
ret=$?
if [ $ret -ne 0 ]; then
if [ $ret -le 128 ]; then
echo $ret
else
sig=$(( $ret - 128 ))
desc=$_sig_array[sig]
if [ "$desc" != INT -a "$desc" != TSTP ]; then
echo SIG$desc
fi
fi
fi
}
_return_status_formatted() {
out=$(_return_status)
if [ -n "$out" ]; then
echo "%F{red}[$out]%f "
fi
}
_current_branch_formatted() {
out=$(current_branch)
if [ -n "$out" ]; then
if [ -n "$(git status -s | grep -v '^\?')" ]; then
color=magenta
else
color=cyan
fi
echo "%F{$color}(git:$out)%f "
fi
}
export PS1='%F{blue}%n%f@%F{green}%m%f:%F{red}%~%f $ $(_return_status_formatted)$(_current_branch_formatted)'
答え1
zsh
または、変数に含まれている場合(必要に応じて)、デフォルトではvi
キーバインディングが使用されます。$EDITOR
$VISUAL
vi
vi
^Y
貼り付けはemacsキーバインディングです(vi
/と同じp
)P
。
次に追加:
bindkey -e
~/.zshrc
どのエディタを選択しても、emacsキーバインディングが必要であることを示します(と同じtcsh
)。またはset -o emacs
(kshと同じ)。
あなたに関するその他の注意~/.zshrc
:
bindkey "^[." insert-last-word
これはデフォルトでスキーマにすでに存在するため、emacs
必要ありません。
すでに組み込み$signals
配列があります(== 0で始まるので、数字から名前を取得するEXIT
必要があります)。$signals[signum+1]
アクションがgrep -v '^\?'
指定されていません。grep -v '^?'
で始まる行を削除する、?
またはgrep -v '^\\?'
で始まる行を削除するために使用されます\?
。
local
関数がグローバル変数でない場合は、関数で変数を宣言することをお勧めします。
また、見ることができます[[ $desc = (INT|TSTP) ]] || echo SIG$desc
。
通常、他のシェルと同様に、組み込み-a
演算子は[
使用されなくなりました。
ここでは、以下を((...))
一貫して使用できます。
_return_status() {
local sig desc ret="$?"
if (( ret != 0 )); then
if (( ret <= 128 )); then
echo $ret
else
(( sig = ret - 128 ))
desc=$signals[sig+1]
if [[ $desc != (INT|TSTP) ]] echo SIG$desc
fi
fi
}