Eksperymentowałem z różnymi ustawieniami klawiszy Tmux i zauważyłem, co następuje:
Jeśli ponownie załaduję konfigurację tmux (z poziomu tmux), skróty, które kiedyś załadowałem, pozostaną załadowane. Jedynym sposobem (wiem o tym), aby to wyczyścić, jest zamknięcie wszystkich sesji Tmux i ponowne uruchomienie. Wygląda więc na to, że tmux zapamiętuje wszystkie wcześniej załadowane skróty klawiszowe i usunie je dopiero od nowa lub przez jawne ich odblokowanie.
Aby odtworzyć to:
- otwórz terminal (A)
- uruchom tmux
- sprawdź, czy skrót klawiszowy pokazuje zegar (naciśnij
PREFIX C-t
) - naciśnij,
PREFIX ?
aby zobaczyć skrót klawiszowy na liście - edytować
~/.tmux.conf
- dodaj skrót klawiszowy (
bind C-t display "Keybinding C-t"
) - przeładuj tmux config (
PREFIX : source-file ~/.tmux.conf
) - sprawdź, czy działa skrót klawiszowy (naciśnij
PREFIX C-t
) - naciśnij,
PREFIX ?
aby zobaczyć nowe skrót klawiszowy na liście - edytuj
~/.tmux.conf
ponownie - usuń przypisanie klawiszy (więc usuń
bind C-t display "Keybinding C-t"
) - przeładuj tmux config (
PREFIX : source-file ~/.tmux.conf
) - sprawdź, czy klawisz działa (naciśnij
PREFIX C-t
), nadal wyświetla „Ct klawiszowania ” - naciśnij,
PREFIX ?
aby zobaczyć, że nowe klawisze są nadal na liście - wyjdź z tmux
- wpisz tmux
- sprawdź, czy oryginalne klawisze działają ponownie (naciśnij
PREFIX C-t
), teraz powinien ponownie wyświetlić zegar - naciśnij,
PREFIX ?
aby zobaczyć, że nowe przypisanie klawiszy zostało usunięte z listy
Moje pytanie: czy istnieje sposób, aby pouczyć tmux, aby „zapomniał” wszystkie załadowane konfiguracje, a następnie załadował .tmux.conf
?
źródło
unbind-key -a
usuwa wszystkie skróty klawiszowe. Oznaczę twoją odpowiedź jako poprawną, ale ze względu na innych widzów dodam również „hack”, który zastosowałem w celu rozwiązania problemuunbind-key -a
.Prawidłowe rozwiązanie (autor: Peter
Więc @peterph podał poprawną odpowiedź, która jest
unbind-key -a
następująca: (man tmux)Realne rozwiązanie
Problem (dla mnie) polega na tym, że „wszystko” w rzeczywistości oznacza wszystko. Łącznie ze skrótami klawiszowymi, które posiada tmux . Jeśli wykonasz
unbind-key -a
polecenie, tmux natychmiast nie ma już żadnych skrótów klawiszowych, więc nie możesz nawet przejść do trybu poleceń ani nic innego robić.Moja (raczej brzydka) poprawka do tego jest następująca:
.tmux.reset.conf
który usunie wszystkie skróty klawiszowe, a następnie ponownie powiąże wszystkie te, które domyślnie ma tmux.tmux.conf
Mój
.tmux.conf
:Mój
.tmux.reset.conf
:Wyglądało na to, że mogło to działać z tabelami kluczy Tmux (o ile mi wiadomo), ale nie można dodawać nowych tabel kluczy.
źródło
.tmux.reset.conf
, uruchamiająctmux list-keys
sesję „czystą”.tmux -f /dev/null -L temp start-server \; list-keys
skutecznie wygeneruje wartości domyślne (choć trzeba dodać ukośnik odwrotny przed średnikiem w powiązaniu).Obecnie nie ma bezpośredniego sposobu, aby zresetować powiązanie klucza z domyślnym; inicjalizacja domyślnych powiązań (in
key_bindings_init()
) odbywa się raz, gdy serwer tmux uruchamia się po raz pierwszy (inserver_start()
), i nie ma mechanizmu do resetowania pojedynczego klucza.W pożądanym scenariuszu, w którym chcesz, aby proces pozyskiwania pliku konfiguracyjnego ponownie ustanowił domyślne powiązanie, które zostało wcześniej zastąpione niestandardowym powiązaniem, które zostało później usunięte z pliku konfiguracyjnego, opracowana metoda jest rozsądna (choć niestety pełna):
unbind-key -a
, następnie przywróć wszystkie „domyślne” wiązania, a następnie utwórz własne wiązania (niektóre z nich mogą zastąpić „domyślne”).Bieżące powiązania serwera można wyodrębnić za pomocą
list-keys
polecenia * ; może to pomóc w generowaniu / utrzymywaniu proponowanego.tmux.reset.conf
pliku, ale potrzebujesz sposobu na wyodrębnienie domyślnych powiązań, a nie bieżących .* Istnieją sytuacje, w których dane wyjściowe
list-keys
nie są obecnie bezpośrednio użyteczne: wiązanie średnika wymaga, aby jego średnik uciekł odwrotnym ukośnikiem, aby zapobiec interpretacji go jako separatora poleceń tmux oraz wszelkich powiązań, które miały argumenty wykorzystujące podwójne cudzysłowy wewnątrz pojedynczego cytaty (żadne z domyślnych powiązań nie są takie) pojawią się jako podwójne cudzysłowy wewnątrz podwójnego qoutes.Aby uzyskać domyślne powiązania, potrzebujesz tymczasowego serwera z minimalną konfiguracją (tj. Bez niestandardowych powiązań), abyś mógł przechwytywać jego
list-keys
dane wyjściowe. Nie ma ograniczeń co do liczby serwerów Tmux , które możesz uruchomić, ale każdy z nich musi używać innej nazwy ścieżki gniazda; te-L
i-S
tmux opcje mogą być wykorzystane, aby określić nazwę gniazda (w$TMPDIR/tmux-$UID
lub pełną ścieżkę gniazdo tak, to do rozmowy (lub uruchomić) nowy serwer o nazwie gniazda.temp
, należy użyć tego:Aby upewnić się, że nie używa twojego
.tmux.conf
, możesz-f
powiedzieć mu, aby przeczytał/dev/null
(specjalny plik, który jest zawsze pusty):Uwaga : nie uniemożliwia to przetwarzania
/etc/tmux.conf
, jeśli taki plik istnieje; ścieżka do tego „pliku konfiguracji systemu” jest zakodowana na stałe i nie ma możliwości ominięcia go (bez łatania kodu).Zwykle potrzebujesz
new-session
polecenia, aby faktycznie uruchomić serwer, ale nie chcemy żadnych sesji, tylko zainicjowany serwer do zapytania.start-server
Komenda właśnie to robi: uruchamia serwer bez tworzenia sesji.Teraz wystarczy dołączyć nasze polecenie „zapytanie” (
list-keys
w tym przypadku):Uwaga : średnik musi być poprzedzony znakiem zapytania lub cudzysłowem, aby powłoka nie traktowała go jako separatora poleceń powłoki, ponieważ chcemy, aby był tmux separatorem poleceń .
Ponieważ nie ma żadnych sesji do utrzymania, serwer zakończy działanie automatycznie po zakończeniu działania
list-keys
polecenia.Możesz więc użyć takiego polecenia, aby wygenerować większość
.tmux.reset.conf
bez konieczności tymczasowego usuwania.tmux.conf
pliku (aby zobaczyć tylko domyślne powiązania) i bez konieczności zamykania istniejących serwerów.Jeśli
run-shell
polecenie było synchroniczne, możesz osadzić takie wywołanie w pliku konfiguracyjnym (przechwytywanie do pliku tymczasowego, który następnie przetworzyłbyśsource-file
) zamiast mieć plik statyczny (twój.tmux.reset.conf
). Pozwoliłoby to zawsze używać domyślnych powiązań z bieżącej wersji tmux (domyślne wiązania czasami się zmieniają). Niestety, wykonanierun-shell
polecenia jest obecnie asynchroniczne w odniesieniu do kolejnych poleceń (polecenia, które pojawiają się porun-shell
poleceniu, zwykle są uruchamiane, zanim proces spawnowanyrun-shell
miał szansę zakończyć).źródło
Oto zestawienie wszystkich innych odpowiedzi w skrypcie bash, który będzie automatycznie generowany
.tmux.reset.conf
z domyślnych powiązań klawiszy:Osadzony
sed
wiersz poleceń dba o uniknięcie różnych części danych wyjściowychlist-keys
. Może to wymagać drobnych poprawek ze względu na specyfikę twojego systemu.W swoim
.tmux.conf
pliku po prostu rozpisz wszystkie klucze i źródłowy plik przed zdefiniowaniem własnych powiązań klawiszy:źródło
Proszę również odnieść się do innych odpowiedzi tutaj, ponieważ wykonują dobrą robotę wyjaśniając sytuację. Mam tutaj mój tmux.reset.conf kompatybilny z Tmux 1.8 , który musiałem wprowadzić kilka modyfikacji po skopiowaniu danych
tmux -f /dev/null -L temp start-server \; list-keys
wyjściowych. W szczególności trzeba było zacytować kilka rzeczy.źródło
Zapytałem wcześniej, że wydaje się, że nie chcą tego naprawiać (chyba że ktoś prześle PR).
Oto moja ręcznie ocalona
tmux list-keys
, uzyskana przez nową instancję serwera za pomocą(dzięki poprzednim odpowiedziom)
Powyższe znajduje się na github, dzięki czemu możesz:
UWAGA: W jakiś sposób odpowiedź Richarda Cooka wciąż powodowała ucieczkę.
źródło
Oto poprawiona wersja odpowiedzi Richarda Cooka, aby rozwiązać problemy związane z ucieczką w tmux 2.1
Dodaj następujące wiersze na początku
.tmux.conf
źródło