LoginSignup
1
0

More than 5 years have passed since last update.

zshでC-pしたときfgが履歴に出ないようにする

Last updated at Posted at 2017-08-11

TLDR

下記を~/.zshrcに書いておくと、C-pしたときfgbgが履歴に出なくなる。

# fgとbgを完全に無視したC-p
_up-line-or-history-ignoring() {
    zle up-line-or-history
    case "$BUFFER" in
        fg|bg)
            zle up-line-or-history
            ;;  
    esac
}
zle -N _up-line-or-history-ignoring
bindkey '^P' _up-line-or-history-ignoring

以下のようにhist_ignore_spaceを設定する方法はよく紹介されているが、

setopt hist_ignore_space    # スペースで始まるコマンドを履歴に残さない
alias fg=' fg'

これだとfgの直後にC-pした場合fgが現れてしまう。先述の設定では現れない。

背景など

こちらの記事を参照:
edit-compile-runサイクルを快適にする方法

代替案:zshのソースを修正する方法

次のように修正すれば一応希望通りになった(簡単な動作確認しかしていない)。

--- zsh-5.3.1/Src/hist.c        2016-11-30 04:52:09.000000000 +0900
+++ zsh-5.3.1.changed/Src/hist.c        2017-08-08 21:14:52.596666658 +0900
@@ -1449,7 +1449,7 @@
        if (chwordpos <= 2)
            save = 0;
        else if (should_ignore_line(prog))
-           save = -1;
+           save = 0;
        else if (hookret == 2)
            save = -2;
        else if (hookret)

しかしzshをコンパイルするのはさすがに面倒。

ちなみにこのソース、hend()という関数がいつ呼ばれるのか、グローバル変数chwordsの意味などよく分からなかった。
gdbでもデバッグしてみようと思ったのだが、zshは端末を操作するためかうまくいかないところがあった。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0