GNU/Linux >> Linux の 問題 >  >> Linux

Zshで、完了をキャンセルしますが、完了のみですか?

完了機能に時間がかかる場合は、 Ctrlを押すと中断できます。 + C (端末割り込みキー、SIGINTを送信)または Ctrl + G send-breakにバインドされています )。その後、未完成の単語が残ります。

ただし、たまたま Ctrlを押した場合 + C またはCtrl + G 完了機能が終了するのと同じように、キーを押すとコマンドラインがキャンセルされ、完了をキャンセルする代わりに新しいプロンプトが表示される場合があります。

特定のキーが進行中の完了をキャンセルするが、完了機能がアクティブでない場合は何もしないようにzshを設定するにはどうすればよいですか?

承認された回答:

これは、 Ctrlを作成するSIGINTハンドラーを設定するソリューションです。 + C 完了がアクティブな場合にのみ割り込みます。

# A completer widget that sets a flag for the duration of
# the completion so the SIGINT handler knows whether completion
# is active. It would be better if we could check some internal
# zsh parameter to determine if completion is running, but as 
# far as I'm aware that isn't possible.
function interruptible-expand-or-complete {
    COMPLETION_ACTIVE=1

    # Bonus feature: automatically interrupt completion
    # after a three second timeout.
    # ( sleep 3; kill -INT $$ ) &!

    zle expand-or-complete

    COMPLETION_ACTIVE=0
}

# Bind our completer widget to tab.
zle -N interruptible-expand-or-complete
bindkey '^I' interruptible-expand-or-complete

# Interrupt only if completion is active.
function TRAPINT {
    if [[ $COMPLETION_ACTIVE == 1 ]]; then
        COMPLETION_ACTIVE=0
        zle -M "Completion canceled."            

        # Returning non-zero tells zsh to handle SIGINT,
        # which will interrupt the completion function. 
        return 1
    else
        # Returning zero tells zsh that we handled SIGINT;
        # don't interrupt whatever is currently running.
        return 0
    fi
}

Linux
  1. Faclは「x」権限を無視しますが、ファイルのみですか?

  2. カスタムコマンドの動的Zshオートコンプリート?

  3. 画面にStderrのみを表示しますが、StdoutとStderrの両方をファイルに書き込みますか?

  1. デバイスにスペースが残っていませんが、パーティションは半分しか使用されておらず、inode は使用可能です

  2. /lib と /lib64 があるのに /bin しかないのはなぜですか?

  3. すべてのユーザーがディレクトリにファイルを作成できるようにするが、所有者のみが削除できる

  1. Zshの使用を開始する

  2. どちらの端末が優れているか:BashとZsh

  3. $ {!foo}そしてZsh?