「インライン」zsh機能

「インライン」zsh機能

私の.zshrcには、vimの履歴を印刷し、vimで選択したファイルを開く次の関数定義があります。

vim_hist() {
    n=$(sed -n "s|~|$HOME|;s|^> \(.*\)|\1|p" ~/.vim/viminfo | fzf)
    [ "$n" != "" ] && [ -f "$n" ] && vim $n
}

これは .zshrc の宣言です。

zle -N VH vim_hist
bindkey '^a' VH

vim_histシェルに入ると、すべてがうまくいきます。ただし、これによりCTRL-A警告が表示され、Vim: Warning: Input is not from terminalコマンドの実行速度が著しく遅くなります。ここで問題は何ですか?

ベストアンサー1

マニュアル(info zsh widgets)を参照してください。

カスタムウィジェットはシェル関数として実装され、一般的なシェルコマンドを実行できます。また、zle組み込みコマンドを使用して別のウィジェット(組み込みまたはカスタマイズ)を実行することもできます。 機能の標準入力は/ dev / nullからリダイレクトされ、外部コマンドが端末から読み取られ、ZLEを誤ってブロックするのを防ぎます。ただし、read -kまたはread -qを使用して文字を読み取ることはできます。最後に、以下に説明する特別なパラメータを読み取って設定することで、編集中のZLEバッファを調べて編集できます。

ここで行うことができます元に戻すこれにより:

vim_hist() {
    n=$(sed -n "s|~|$HOME|;s|^> \(.*\)|\1|p" ~/.vim/viminfo | fzf)
    if [ "$n" != "" ] && [ -f "$n" ]; then
        vim < /dev/tty $n
        zle -I
    fi
}

(また、zle -Iヒントを無効にして返されたときに再描画されるように呼び出されますvim

おすすめ記事