昨日、zshでsudoや|を無視して履歴から補完する設定を紹介しましたが、
これをC-P/C-Nにしてしまうと、例えば本当にsudo付きだったldconfigを補完する目的で

sudo l(補完)

とすると肝心の物が引っかからず、

sudo ls ..

などと補完されてしまうのが時々鬱陶しいので、Alt-P / Alt-Nに設定してみました。

zle -N smart-search-history-backward
bindkey '^[p' smart-search-history-backward
zle -N smart-search-history-forward
bindkey '^[n' smart-search-history-forward

この辺は好みに応じてC-P/Nの場合はパイプだけ無視して補完、M-P/Nはsudoも含めて無視して補完、などとすると良いかもしれません。

ちょっと嵌ったのが、bindkeyのキーでAlt(Meta)を指定するには\M-pとか^[pとかありますが、これは大文字小文字センシティブらしいこと。Ctrlでは気にする必要無かったので全部大文字にしてたら引っかかりました。

ちなみに^[は本当のC-[ではなく、単にハットと開始カギ括弧です。