Скрипт 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"

Другие вопросы по тегам