В настоящее время нет прямого способа сбросить привязку ключа к его значению по умолчанию; инициализация привязок по умолчанию (in key_bindings_init()
) выполняется один раз, когда сервер tmux запускается впервые (in server_start()
), и нет механизма для сброса одного ключа.
Для нужного сценария , в котором вы хотите акт поиске файла конфигурации , чтобы восстановить значения по умолчанию привязки , который ранее был переопределен обычае связывания , который с тех пор был удален из файла конфигурации, метод , который вы разработали разумно (хотя , к сожалению , многословен): unbind-key -a
, затем восстановите все привязки «по умолчанию», затем установите пользовательские привязки (некоторые из которых могут переопределять привязку «по умолчанию»).
Текущие привязки сервера могут быть извлечены с помощью list-keys
команды * ; это может помочь сгенерировать / сохранить предложенный .tmux.reset.conf
файл, но вам нужен способ извлечения привязок по умолчанию , а не текущих привязок.
* В некоторых ситуациях выходные данные в list-keys
настоящее время не могут использоваться напрямую: для привязки точки с запятой требуется ее точка с запятой, чтобы она не интерпретировалась как разделитель команд tmux , а также любые привязки, аргументы которых использовали двойные кавычки внутри одинарной кавычки (ни одна из привязок по умолчанию не похожа на эту) будут появляться в виде двойных кавычек внутри двойных кавычек.
Чтобы получить привязки по умолчанию, вам нужен временный сервер с минимальной конфигурацией (то есть без пользовательских привязок), чтобы вы могли захватывать его list-keys
выходные данные. Количество серверов tmux, которые вы можете запустить, не ограничено , но каждый из них должен использовать свой путь к сокету; то -L
и -S
tmux параметры могут быть использованы для указания имени сокета (в $TMPDIR/tmux-$UID
или полный путь к сокету таким образом, чтобы поговорить с (или начать) новый сервер сокет с именем. temp
Вы бы использовать это:
tmux -L temp …
Чтобы убедиться, что он не использует ваш .tmux.conf
, вы -f
должны сказать ему прочитать /dev/null
(специальный файл, который всегда пуст):
tmux -f /dev/null -L temp …
Примечание : это не мешает обработке /etc/tmux.conf
, если такой файл существует; путь к этому «файлу конфигурации системы» жестко запрограммирован, и нет возможности его обойти (если не считать исправления кода).
Обычно вам нужна new-session
команда для фактического запуска сервера, но нам не нужны какие-либо сеансы, только инициализированный сервер для запроса. Команда start-server
делает именно это: запускает сервер без создания каких-либо сессий.
tmux -f /dev/null -L temp start-server …
Теперь нам просто нужно добавить нашу команду «запрос» ( list-keys
в данном случае):
tmux -f /dev/null -L temp 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
имеет возможность завершиться).