-
-
Save yxliang01/02b4f141a3c79d70edfcf68335e5f273 to your computer and use it in GitHub Desktop.
ZSH configuration to complete words from tmux pane(s)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Complete words from tmux pane(s) {{{1 | |
# Source: http://blog.plenz.com/2012-01/zsh-complete-words-from-tmux-pane.html | |
# Gist: https://gist.github.com/blueyed/6856354 | |
_tmux_pane_words() { | |
local expl | |
local -a w | |
if [[ -z "$TMUX_PANE" ]]; then | |
_message "not running inside tmux!" | |
return 1 | |
fi | |
# Based on vim-tmuxcomplete's splitwords function. | |
# https://github.com/wellle/tmux-complete.vim/blob/master/sh/tmuxcomplete | |
_tmux_capture_pane() { | |
tmux capture-pane -J -p -S -100 $@ | | |
# Remove "^C". | |
sed 's/\^C\S*/ /g' | | |
# copy lines and split words | |
sed -e 'p;s/[^a-zA-Z0-9_]/ /g' | | |
# split on spaces | |
tr -s '[:space:]' '\n' | | |
# remove surrounding non-word characters | |
=grep -o "\w.*\w" | |
} | |
# Capture current pane first. | |
w=( ${(u)=$(_tmux_capture_pane)} ) | |
echo $w > /tmp/w1 | |
local i | |
for i in $(tmux list-panes -F '#D'); do | |
# Skip current pane (handled before). | |
[[ "$TMUX_PANE" = "$i" ]] && continue | |
w+=( ${(u)=$(_tmux_capture_pane -t $i)} ) | |
done | |
_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 '^X^Tt' tmux-pane-words-prefix | |
bindkey '^X^TT' 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 | |
# Display the (interactive) menu on first execution of the hotkey. | |
zstyle ':completion:tmux-pane-words-(prefix|anywhere):*' menu yes select interactive | |
# zstyle ':completion:tmux-pane-words-anywhere:*' matcher-list 'b:=* m:{A-Za-z}={a-zA-Z}' | |
zstyle ':completion:tmux-pane-words-(prefix|anywhere):*' matcher-list 'b:=* m:{A-Za-z}={a-zA-Z}' | |
# }}} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment