Скрипт tmux для быстрого переключения окон с помощью fzf-tmux дает мне неправильные параметры
Я написал следующее, что позволяет мне переключать окно tmux с помощью fzf:
tmux list-windows -F "#I:#W" | fzf-tmux | cut -d ":" -f 1 | xargs tmux select-window -t
Когда я запускаю это в оболочке, она работает отлично, давая мне fzf
список окон, через которые я могу искать и переключаться.
Я связал это с f
введите tmux:
# fast window switching
unbind f
bind-key f run "tmux list-windows -F \"#I:#W\" | fzf-tmux | cut -d \":\" -f 1 | xargs tmux select-window -t"
Но когда я запускаю его, оно отображает одно и то же окно N раз (где N - количество открытых у меня окон).
Так что если у меня открыто 3 окна, запуск скрипта в zsh дает мне:
1. first window
2. second window
3. third window
где связывание ключей Tmux дает мне
1. first window
1. first window
1. first window
Я раньше не писал сценарии tmux, так что, возможно, есть лучший способ получить окна, чем то, что я делаю здесь? В противном случае, я не понимаю, почему я получаю разные опции при запуске из tmux и в оболочке.
Обновить:
Кажется, что run-shell "tmux list-windows"
правильно выводит разные окна (но с загрузкой информации о макете, которая мне не нужна), тогда как run-shell "tmux list-windows -F '#I:#W'"
дает мне исходную проблему повторения одного и того же окна для каждой записи окна.
Я думаю, что проблема в том, что tmux расширяется #I:#W
для текущего окна, вместо того, чтобы передать его list-windows
команда, поэтому мне нужно сбежать от них. Есть идеи, как это сделать?
Обновление 2:
Ответ заключается в двойном хешировании переменных (##I:##W
вместо #I:#W
).
2 ответа
В случае, если кто-то захочет использовать этот скрипт в будущем, правильная версия это:
# fast window switching
bind -n C-f run-shell "tmux list-windows -F \"##I:##W\" | fzf-tmux | cut -d \":\" -f 1 | xargs tmux select-window -t"
Спасибо, что поделились своим решением! Мне очень помогло:)
Для людей, которые сталкиваются с этим постом и задаются вопросом, как использовать эту команду для переключения между сеансами tmux:
bind-key C-f run-shell "tmux list-sessions -F \"##S\" | fzf-tmux | xargs tmux switch -t"