diff --git a/.tmux.conf b/.tmux.conf
index 873a1613..104dd19d 100644
--- a/.tmux.conf
+++ b/.tmux.conf
@@ -100,7 +100,8 @@ bind -r - resize-pane -D 3
bind -r + resize-pane -U 3
bind -r = resize-pane -U 3
-unbind r
+bind C-y run-shell -b ~/.dotfiles/bin/,tmux-copy
+
bind r source-file ~/.tmux.conf \; display 'Reloaded tmux.conf'
if-shell "[[ -e ~/.tmux.conf.local ]]" "source-file ~/.tmux.conf.local"
diff --git a/bin/,tmux-copy b/bin/,tmux-copy
new file mode 100755
index 00000000..6d166224
--- /dev/null
+++ b/bin/,tmux-copy
@@ -0,0 +1,20 @@
+#!/usr/bin/env zsh
+
+set -euo pipefail
+
+TMPFILE=$(mktemp)
+RG_OPTS="--word-regexp"
+PATTERNS=(
+ "[a-f0-9]{5,}" # hex, assuming only want to copy 5+ characters
+ "[^\\s]+"
+)
+PATTERN=${(j[|])PATTERNS}
+
+tmux capture-pane -p -S -2 > "$TMPFILE"
+
+rg "$RG_OPTS" --ignore-case --only-matching "$PATTERN" "$TMPFILE" |
+ ruby -e 'ARGF.readlines(chomp: true).uniq.each { puts _1 }' |
+ fzf-tmux -p 80%,60% --layout=reverse \
+ --print0 \
+ --preview "rg $RG_OPTS --color=always --context=3 {} $TMPFILE" \
+ --bind "enter:execute-silent(pbcopy <<< {})+abort" || true