
Fishシェルでは、を押すとAlt+l
コマンドの出力が見栄えよく表示されますls
。押す前に作成したコマンドは保持されます。 zshに入れたいです。
私の非常に奇妙な試みは次のとおりです。
function myls {
awk '{len = length($0); for(i=0;i<len;i++) printf "\b"}' <<< "$LBUFFER"
zle push-input
zle accept-line
print $(ls --color=always --indicator-style=slash)
}
zle -N myls
bindkey -- '^[l' myls
私は既存のコマンドを消去するのが難しく、最終的にhacky\b
を使用するようになりました。長く、複数行では正しく動作しません。
誰でも良いことができますか?
答え1
zle -R
push-input
バッファなしで行を再表示するには、後で使用してください。
ほとんどの場合、zshの完成リストはlsを実行するためにウィジェットを必要としません。 lsスタイルの色とファイルタイプのサフィックスがあります。すべてのコンテキストでファイル補完を実行し、長いls -l
スタイルリストを実行する次のバインディングがあります。
zstyle ":completion:file-complete::::" completer _files
zle -C file-complete complete-word _generic
zstyle ':completion:file-complete:*' file-list true
bindkey '^X^F' file-complete
答え2
@okapiのコメントのおかげで、このような気がしました。
function myls {
[[ "$CONTEXT" = cont ]] && return
zle push-input
zle -R
zle accept-line
print -n $(ls --color=always --indicator-style=slash)
}
zle -N myls
bindkey -- '^[l' myls
はるかに優れていますが、「for>...」や「while>...」ループなどの連続では機能しないため、今は返します。