zshのコマンドラインスタックを便利に使う方法

My Hipster PDA in Dock zshには、一時的にコマンドを退避させておく機能があります。今回は、その使い方の紹介です。
photo credit: Andy Woo



コマンドラインスタック



# http://d.hatena.ne.jp/kei_q/20110308/1299594629
# http://qiita.com/items/1f2c7793944b1f6cc346
show_buffer_stack() {
POSTDISPLAY="
stack: $LBUFFER"
zle push-line-or-edit
}
zle -N show_buffer_stack
setopt noflowcontrol
bindkey '^Q' show_buffer_stack


これで、 C-qを押すと、入力したコマンドが一時的に退避され、コマンドが実行された時に、退避したコマンドが表示されます。説明が分かりにくいので、実際の例を示します。

# 特定のフォルダにファイルをコピーしようとします。しかし、ここで、フォルダがないことに気づくという事案。
$ cp miku.mp3 ~/Download/Chrome/App/Media

[C-q]

$ mkdir -p ~/Download/Chrome/App/Media

$ cp miku.mp3 ~/Download/Chrome/App/Media


クリップボードに記録しておきたい場合



表示されているコマンドをクリップボードに記録しておきたい場合は、 pbcopyを使います。以下のようにすると、 C-x, C-pで表示されているコマンドをクリップボードに記録できます。



# http://d.hatena.ne.jp/hiboma/20120315/1331821642
pbcopy-buffer(){
print -rn $BUFFER | pbcopy
zle -M "pbcopy: ${BUFFER}"
}

zle -N pbcopy-buffer
bindkey '^x^p' pbcopy-buffer


その他、クリップボードを使うには、 pbpaste, xclip, xsel などがあります。ちなみに、本格的にクリップボードを使いたい場合は、やはり、エディタがベストです(コマンドラインではその用途上、あまりおすすめできません)。 YankRing.vim でも使いましょう。