Я экспериментировал с различными настройками связывания ключей tmux и заметил следующее:
Если я перезагружу свой конфиг tmux (изнутри tmux), загруженные мной комбинации клавиш останутся загруженными. Единственный способ (я знаю) очистить это, чтобы выйти из всех сеансов tmux и перезапустить. Таким образом, похоже, что tmux запоминает все ранее загруженные сочетания клавиш и удаляет их только при новом запуске или путем явного снятия привязки.
Чтобы воссоздать это:
- открыть терминал (A)
- начать Tmux
- проверьте, показывает ли привязка клавиш часы (нажмите
PREFIX C-t
) - нажмите,
PREFIX ?
чтобы увидеть связку клавиш в списке - редактировать
~/.tmux.conf
- добавить связывание клавиш (
bind C-t display "Keybinding C-t"
) - перезагрузить конфигурацию tmux (
PREFIX : source-file ~/.tmux.conf
) - проверьте, работает ли связывание клавиш (нажмите
PREFIX C-t
) - нажмите,
PREFIX ?
чтобы увидеть новую связку клавиш в списке - редактировать
~/.tmux.conf
снова - удалить привязку клавиш (так что удалите
bind C-t display "Keybinding C-t"
) - перезагрузить конфигурацию tmux (
PREFIX : source-file ~/.tmux.conf
) - проверьте, работает ли связывание клавиш (нажмите
PREFIX C-t
), оно по-прежнему отображает «Keybinding Ct» - нажмите,
PREFIX ?
чтобы увидеть, что новая комбинация клавиш все еще находится в списке - выход из Tmux
- введите Tmux
- проверьте, работает ли исходная привязка клавиш снова (нажмите
PREFIX C-t
), теперь снова должны отображаться часы - нажмите,
PREFIX ?
чтобы увидеть, что новая привязка клавиш была удалена из списка
Мой вопрос: есть ли способ дать tmux команду "забыть" все загруженные конфиги и затем загрузить .tmux.conf
?
источник
unbind-key -a
удаляет все сочетания клавиш. Я отмечу ваш ответ как правильный, но ради других зрителей я также добавлю «хак», который я применил, чтобы исправить проблемуunbind-key -a
.Правильное решение (от Питера
Таким образом, @peterph дал правильный ответ, который заключается
unbind-key -a
в следующем: (man tmux)Работоспособное решение
Проблема (для меня) в том, что «все» на самом деле означает все. Включая сочетания клавиш, с которыми поставляется tmux . Если вы выполните
unbind-key -a
команду, tmux мгновенно больше не будет иметь никаких комбинаций клавиш, так что вы даже не сможете войти в командный режим или сделать что-либо в принципе.Мое (довольно некрасивое) исправление заключается в следующем:
.tmux.reset.conf
который удаляет все сочетания клавиш, а затем заново связывает все те, которые есть у tmux по умолчанию.tmux.conf
Мой
.tmux.conf
:Мой
.tmux.reset.conf
:Похоже, это могло бы работать с таблицами ключей tmux (насколько я могу судить), но вы не можете добавлять новые таблицы ключей.
источник
.tmux.reset.conf
, запустивtmux list-keys
«чистый» сеанс.tmux -f /dev/null -L temp start-server \; list-keys
будет эффективно генерировать значения по умолчанию (хотя вам нужно добавить обратную косую черту перед точкой с запятой в ее привязке).В настоящее время нет прямого способа сбросить привязку ключа к его значению по умолчанию; инициализация привязок по умолчанию (in
key_bindings_init()
) выполняется один раз, когда сервер tmux запускается впервые (inserver_start()
), и нет механизма для сброса одного ключа.Для нужного сценария , в котором вы хотите акт поиске файла конфигурации , чтобы восстановить значения по умолчанию привязки , который ранее был переопределен обычае связывания , который с тех пор был удален из файла конфигурации, метод , который вы разработали разумно (хотя , к сожалению , многословен):
unbind-key -a
, затем восстановите все привязки «по умолчанию», затем установите пользовательские привязки (некоторые из которых могут переопределять привязку «по умолчанию»).Текущие привязки сервера могут быть извлечены с помощью
list-keys
команды * ; это может помочь сгенерировать / сохранить предложенный.tmux.reset.conf
файл, но вам нужен способ извлечения привязок по умолчанию , а не текущих привязок.* В некоторых ситуациях выходные данные в
list-keys
настоящее время не могут использоваться напрямую: для привязки точки с запятой требуется ее точка с запятой, чтобы она не интерпретировалась как разделитель команд tmux , а также любые привязки, аргументы которых использовали двойные кавычки внутри одинарной кавычки (ни одна из привязок по умолчанию не похожа на эту) будут появляться в виде двойных кавычек внутри двойных кавычек.Чтобы получить привязки по умолчанию, вам нужен временный сервер с минимальной конфигурацией (то есть без пользовательских привязок), чтобы вы могли захватывать его
list-keys
выходные данные. Количество серверов tmux, которые вы можете запустить, не ограничено , но каждый из них должен использовать свой путь к сокету; то-L
и-S
tmux параметры могут быть использованы для указания имени сокета (в$TMPDIR/tmux-$UID
или полный путь к сокету таким образом, чтобы поговорить с (или начать) новый сервер сокет с именем.temp
Вы бы использовать это:Чтобы убедиться, что он не использует ваш
.tmux.conf
, вы-f
должны сказать ему прочитать/dev/null
(специальный файл, который всегда пуст):Примечание : это не мешает обработке
/etc/tmux.conf
, если такой файл существует; путь к этому «файлу конфигурации системы» жестко запрограммирован, и нет возможности его обойти (если не считать исправления кода).Обычно вам нужна
new-session
команда для фактического запуска сервера, но нам не нужны какие-либо сеансы, только инициализированный сервер для запроса. Командаstart-server
делает именно это: запускает сервер без создания каких-либо сессий.Теперь нам просто нужно добавить нашу команду «запрос» (
list-keys
в данном случае):Примечание : точку с запятой необходимо экранировать или заключать в кавычки, чтобы оболочка не воспринимала ее как разделитель команд оболочки, поскольку мы хотим, чтобы она была разделителем команд tmux .
Поскольку сеансы для обслуживания отсутствуют, сервер автоматически завершит работу после завершения выполнения
list-keys
команды.Таким образом, вы можете использовать такую команду, чтобы сгенерировать большую часть ваших данных,
.tmux.reset.conf
не беспокоясь о временном удалении вашего.tmux.conf
файла (чтобы вы могли видеть только привязки по умолчанию) и без необходимости выключать любые существующие серверы.Если
run-shell
команда была синхронной, вы могли бы встроить такой вызов в файл конфигурации (запись во временный файл, который вы затем обработали быsource-file
) вместо статического файла (вашего.tmux.reset.conf
). Это позволит вам всегда использовать привязки по умолчанию из текущей версии tmux (привязки по умолчанию изменяются время от времени). Увы, завершение команды вrun-shell
настоящее время асинхронно по отношению к последующим командам (команды, которые следуют послеrun-shell
команды, обычно выполняются до того, как процесс, порожденный им,run-shell
имеет возможность завершиться).источник
Вот сводка всех других ответов в bash-скрипт, который будет автоматически генерироваться
.tmux.reset.conf
из привязок клавиш по умолчанию:Встроенная
sed
командная строка заботится о экранировании различных частей выходных данныхlist-keys
. Это может потребовать некоторой настройки для специфики вашей системы.В вашем
.tmux.conf
файле просто отсоедините все ключи и создайте этот файл, прежде чем определять свои собственные привязки ключей:источник
Пожалуйста, также обратитесь к другим ответам здесь, так как они хорошо объясняют ситуацию. Здесь у меня есть tmux 1.8- совместимый tmux.reset.conf, который я должен был сделать несколько модификаций после копирования
tmux -f /dev/null -L temp start-server \; list-keys
вывода. В частности, нужно было процитировать несколько вещей.источник
Я спросил вверх по течению, они, кажется, не желают это исправить (если кто-то не представит пиар).
Вот мой вручную экранированный
tmux list-keys
, полученный через новый экземпляр сервера с(благодаря предыдущим ответам)
Выше на github, так что вы можете сделать:
ПРИМЕЧАНИЕ. Каким-то образом ответ Ричарда Кука все еще приводил к выходу проблем.
источник
Вот измененная версия ответа Ричарда Кука, чтобы исправить проблемы с выходом в tmux 2.1
Добавьте следующие строки в начало
.tmux.conf
источник