Używam tmux z klawiszami vi, a kopiowanie / wklejanie działa dobrze, dopóki wybierasz jeden wiersz tekstu lub jeśli masz tylko jedno okno. Kiedy chcę wybrać blok tekstu (wiele wierszy, ale nie pełnej szerokości), mam kłopoty. Jeśli mam otwartych wiele okien vim, wówczas zaznacza tekst ze wszystkich, a potrzebuję tylko zaznaczać tekst z jednego okna. To znaczy, podobnie jak wizualny wybór w vimie.
Czy to się da zrobić?
Odpowiedzi:
Pamiętaj, aby sprawdzić na dole tego postu niezbędne powiązania, które muszą przejść do pliku .tmux.conf.
Zakładam, że twój klucz prefiksu to Ca:
Aby zaznaczyć prostokątnie tekst od (1,1) do (2,2) w tmux:
Zauważ, że naciśnięcie spacejest konieczne do wyboru prostokąta.
Aby wybrać linie tak jak zwykle, przejdź do trybu kopiowania i naciśnij v, wybierz za pomocą klawiszy jkhl i naciśnij y.
Mam te wiązania w moim pliku .tmux.conf:
Przed wersją 2.4 (20 kwietnia 2017 r.) :
Po wersji 2.4 :
Ważne jest, aby odznaczyć domyślne wiązanie przełączania prostokąta:
W przeciwnym razie nowe wiązanie „Cv” nie będzie działać.
Uwaga: aby mieć taki,
.tmux.conf
który działa w różnych wersjach, zobacz to pytanie .źródło
send
isend-keys
. Widzę w superuser.com/questions/196060/selecting-text-in-tmux-copy-modesend-key
jest używany. Czy ważne są również cudzysłowy?Możesz wybrać blok wizualny tak jak w vi - type
v
przed rozpoczęciem wyboru. Na stronie podręcznej nazywa się to „Przełączaniem prostokąta”.źródło
Jak zauważa Lars,
v
faktycznie robi to, o co prosisz, przełączając między trybem prostokąta a trybem zaznaczania pełnej linii.space
ienter
służą odpowiednio do rozpoczęcia nowego wyboru i skopiowania go. Wejdź do trybu kopiowania za pomocą prefiksu, a następnie[
wklej skopiowany wybór do dowolnego okna tmux za pomocą]
Zdezorientowało mnie to również, ponieważ
v
działa w vimie, podobniespace
jak w tmuxie, aby rozpocząć selekcję.Wydanie
:list-keys -t vi-copy
w tmux wyświetli pełną tabelę poleceń w trybie kopiowania.źródło
Ponieważ żadna z pozostałych odpowiedzi nie daje optymalnego rozwiązania problemu, nie jestem ponad nekromancją.
Istnieje sposób, aby wybór bloku działał tak samo jak w Vimie, bez konieczności naciskania spacji. Po prostu prosty Ctrl-V, zakorzeniony w pamięci mięśni.
Wymaga edycji .tmux.conf (ale już to robi w trybie vi) i nie jestem pewien, czy to działa dla tmux <2.4.
Dodaj to do swojego .tmux.conf, aby zreplikować wybór Vima i powiązania yank:
Wejdź do trybu wyboru i przejdź do miejsca, w którym chcesz rozpocząć wybór. Teraz
v
rozpoczyna regularne zaznaczanie (znak po znaku, wiersz),<C-v>
rozpoczyna blokowanie iV
(shift-v) rozpoczyna wiersz. Niezależnie od rodzaju wyboru,y
szarpa do bufora wklejania tmux (lub schowka X; patrz komentarze do kodu powyżej).Taki sam jak Vim.
źródło
EDYCJA: Po sprawdzeniu kodu źródłowego całkowicie ponownie napisałem swoją odpowiedź.
Początkowo myślałem, że to nie jest możliwe, ponieważ nie mogłem tego uruchomić, ale inne odpowiedzi są poprawne, jeśli chodzi o
v
bycie odpowiednim kluczem do tego, ale nie jest oczywiste, jak tego użyć, szczególnie jeśli jesteś przyzwyczajony do vim.Nie zadziałałoby to również dla mnie, ponieważ
v
zobowiązałem się do tegobegin-selection
- myślę, że musiałem ślepo skopiować ten pomysł z innego miejsca, aby naśladować sposób vimów, aby rozpocząć mądry wybór postaci, nie wiedząc, że spowoduje to problemy na dalszych etapach blokuj wybory.Kiedy
.tmux.conf
usunąłem to wiązanie (komentując linię w moim i ponownie uruchamiając tmux), zaczęło działać, ale nadal jest dość mylące, ponieważ wcale nie jest takie samo jak vim.W przypadku domyślnych powiązań powinno ono działać w następujący sposób:
setw -g mode-keys vi
w twojej.tmux.conf
.C-a [
aby rozpocząć tryb kopiowaniav
Space
aby rozpocząć wybórv
ponownie, aby przełączyć wybór z powrotem na wybór znakowy lub odwrotnie.Nie musisz pisać
v
przed naciśnięciemSpace
. Możesz rozpocząć wybór znakowy odSpace
pierwszego, av
następnie nacisnąć, aby przełączyć do trybu wyboru prostokątnego.Zupełnie różni się od vima tym, że w tmux musisz wpisać dwa znaki:
Space
iv
przejść do trybu selekcji prostokątnej. W vimie musisz tylko pisaćCtrl-V
.Również w vim
v
rozpoczyna się wybór znakowy, a nie blokowy.Niestety, tmux (
Shift-v
in vim) nie wydaje się być liniowym trybem selekcji .EDYCJA: Wygląda na to, że Tmux wersja 2.0 zapewnia liniowy tryb wyboru z
Shift-v
(chociaż jeszcze tego nie próbowałem!)źródło
Shift-v
w wersji 2.0 marca 2015), z pewnością po mojej odpowiedzi i długo po twojej oryginalnej odpowiedzi. Być może ty i ja mówimy o dwóch różnych rzeczach, kiedy mówimy o selekcji liniowej. Porównaj z 3 trybami wyboru w VIM (zv
,Shift-v
iCtrl-v
).v
wybór jest mądry. Jestem w wersji 1.9a i nie mam wyboru podobnego do vima. Tak więc, w wersji 2.0, dokładnie trzy tryby, które ma vim, są również możliwe w tmux, prawda?