読者です 読者をやめる 読者になる 読者になる

tmux pane中の文字を補完する

zsh tmux

Julius Plenz - Blog - zsh: complete words from tmux pane


上記のサイトのままなんですが、日本語での参考記事がなかったので。
gitのリビジョン IDを表示して、それを git showするとき、いちいち
tmuxのコピーモードでコピーしたり、GUIの機能でコピペというのが
面倒だったので探していたら見つかりました。

設定

大文字、小文字の区別をなくすことは不要だったのでなくしています。
あとキーバインドEmacsっぽく "M-/", "M-?"にしてみました。

# for tmux complete
_tmux_pane_words() {
  local expl
  local -a w
  if [[ -z "$TMUX_PANE" ]]; then
    _message "not running inside tmux!"
    return 1
  fi
  w=( ${(u)=$(tmux capture-pane \; show-buffer \; delete-buffer)} )
  _wanted values expl 'words from current tmux pane' compadd -a w
}

zle -C tmux-pane-words-prefix   complete-word _generic
zle -C tmux-pane-words-anywhere complete-word _generic
bindkey '^[/' tmux-pane-words-prefix
bindkey '^[?' tmux-pane-words-anywhere
zstyle ':completion:tmux-pane-words-(prefix|anywhere):*' completer _tmux_pane_words
zstyle ':completion:tmux-pane-words-(prefix|anywhere):*' ignore-line current
zstyle ':completion:tmux-pane-words-anywhere:*' matcher-list 'b:=*'

"M-/"で入力文字と一致するものを補完、"M-?"の場合は入力文字列が含まれる文字列を
補完します。ただし後者の方は "/"とか入っていると期待通りにならないので、
使いづらいです。補完関数の書き方でなんとかなるんだろうけど、全然わからないんで
今のところはこれでよしとします。

おわりに

tmux使っている人は便利に使えるんじゃないかなと思います。