tmux kopyalama modu - metin bloğunu seçin


39

Tmux ile vi tuşlarını kullanıyorum ve kopyala / yapıştır işlemi, bir metin satırı seçtiğinizde veya yalnızca bir pencereniz olduğu sürece çalışır. Bir metin bloğu seçmek istediğimde (birden fazla satır, ancak tam genişlikte değil), sonra başım belaya giriyor. Birden fazla vim pencerem açıksa, hepsinden metin seçer ve tek ihtiyacım olan metni sadece bir pencereden seçmem gerekir. Yani, tıpkı görsel bir seçim gibi.

Bunu yapmak mümkün mü?


Tmux’da Vi tuş takımlarını nasıl etkinleştirirsiniz?
romainl

~ / .tmux.conf dosyasına "set-window-option -g mod tuşları vi" ekle
Srećko Toroman

1
Görünüşe göre cevaplar görsel blok modunu kullanma sorunuzu cevaplamıyor gibi görünüyor - "çoklu çizgiler, ancak tam genişlik değil" de aradığım şey. Kendi çözümünüzü buldunuz mu?
dmonopoly

Hayır, hala çözüm yok.
Srećko Toroman

Aslında, bir çözüm var.
Srećko Toroman

Yanıtlar:


46

.Tmux.conf dosyanıza gitmeniz gereken bağlayıcılar için bu yazının altını kontrol ettiğinizden emin olun.

Önek anahtarınızın Ca olduğunu farz ediyorum:

  • Ca şu anlama gelir: Ctrl+A
  • Ca [anlamına gelir: Ctrl+ Atuşuna basın sonra[

Tmux'ta (1,1) ila (2,2) arasında dikdörtgen bir metin seçimi yapmak için :

  • Kopyalama moduna gidin: Ca [
  • Bir çizginin ortasını taşı
  • Cv tuşuna basın
  • Boşluğa basın
  • Seçimi jkhl ile taşı
  • Seçiminizden memnun kaldıktan sonra Enter tuşuna basın (veya konf dosyanızda cilt varsa y).
  • En son kopya arabelleğini şuna yapıştırabilirsiniz: Ca]

spaceDikdörtgen seçimi için basmanın gerekli olduğuna dikkat edin .

Normalde yaptığınız gibi satırları seçmek için, kopyalama moduna gidin ve v tuşuna basın, jkhl tuşlarıyla seçin ve Y tuşuna basın.

.Tmux.conf dosyamda bu bağlantılar var:

2.4 sürümünden önce (20 Nisan 2017) :

setw -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection     # Begin selection in copy mode.
bind-key -t vi-copy 'C-v' rectangle-toggle  # Begin selection in copy mode.
bind-key -t vi-copy 'y' copy-selection      # Yank selection in copy mode.

2.4 sürümünden sonra :

setw -g mode-keys vi
bind-key -T copy-mode-vi 'v' send -X begin-selection     # Begin selection in copy mode.
bind-key -T copy-mode-vi 'C-v' send -X rectangle-toggle  # Begin selection in copy mode.
bind-key -T copy-mode-vi 'y' send -X copy-selection      # Yank selection in copy mode.

Varsayılan dikdörtgen geçişli ciltlemenin bağlantısını kaldırmak önemlidir:

unbind-key -t vi-copy v  # Prior to version 2.4
unbind-key -T copy-mode-vi v

Aksi takdirde yeni 'Cv' bağlaması çalışmaz.

Not: .tmux.confSürümlerde çalışan bir tanesine sahip olmak için , bu soruya bakın .


1
Çok teşekkür ederim. Vurgu tmux.conf'unuz üzerinde - cevabı bind-key -t vi-copy 'Cv' dikdörtgen-toggle'ı baştan başlayarak içerecek şekilde düzenleyebilirsiniz.
Srećko Toroman

Orijinal soru, "vi-mode-key-vi" ile dikdörtgen seçimin nasıl yapıldığını sorar. Bu soruyu cevaplamak için anahtarları tekrar bağlamak gerekmez. Diğer cevaplara bakınız; seçim modundan sadece "v" ve "boşluk".
Lqueryvg

bu, jkhl'nin çalışmadığı gerçeğinden başka çalışır, dolaşmak için ok tuşlarını kullanmak zorundayım, bunu değiştirmenin bir yolu var mı?
Maksimum

Arasındaki fark nedir sendve send-keys. Superuser.com/questions/196060/selecting-text-in-tmux-copy-mode adresinde görüyorum send-key. Ayrıca tırnak işaretleri önemli mi?
user2442366

15

vSeçime başlamadan önce vi - type gibi bir görsel blok seçebilirsiniz . Manpage'de buna "Dikdörtgen geçişi" denir.


2
Bu tam olarak ne kullanıyorum. Ama bunun yukarıda tarif ettiğim bir sorunu var. Dikdörtgen her zaman tam genişliktedir. VIM benzeri bir dikdörtgene ihtiyacım var (x1, y1) - (x2, y2) :)
Srećko Toroman

1
@ Srećko Toroman tam olarak tam genişlikte ne demek istiyorsunuz?
gitaarik

9

Lars'ın işaret ettiği gibi, vaslında dikdörtgen mod ile tam hat seçim modu arasında geçiş yaparak ne istediğinizi yapar. spaceve enterbunu yeni bir seçim başlangıç ve kopyalamak için sırasıyla kullanılır. Ön ekinizi kullanarak kopyalama moduna girin [ve ardından kopyalanan seçiminizi kullanarak herhangi bir tmux penceresine yapıştırın.]

Bu da beni şaşırttı çünkü seçimde başlamak için tmux'ta volduğu spacegibi vim'de de çalışıyor

Düzenleyen :list-keys -t vi-copytmux kopyalama modunda komutların tam tablosunu gösterecektir.

bind-key -t vi-copy    C-b page-up                                                      
bind-key -t vi-copy    C-c cancel
bind-key -t vi-copy    C-e scroll-down
bind-key -t vi-copy    C-f page-down
bind-key -t vi-copy    C-h cursor-left
bind-key -t vi-copy  Enter copy-selection
bind-key -t vi-copy    C-y scroll-up
bind-key -t vi-copy Escape clear-selection
bind-key -t vi-copy  Space begin-selection
bind-key -t vi-copy      $ end-of-line
bind-key -t vi-copy      , jump-reverse
bind-key -t vi-copy      / search-forward
bind-key -t vi-copy      0 start-of-line
bind-key -t vi-copy      1 start-number-prefix
bind-key -t vi-copy      2 start-number-prefix
bind-key -t vi-copy      3 start-number-prefix
bind-key -t vi-copy      4 start-number-prefix
bind-key -t vi-copy      5 start-number-prefix
bind-key -t vi-copy      6 start-number-prefix
bind-key -t vi-copy      7 start-number-prefix
bind-key -t vi-copy      8 start-number-prefix
bind-key -t vi-copy      9 start-number-prefix
bind-key -t vi-copy      : goto-line
bind-key -t vi-copy      ; jump-again
bind-key -t vi-copy      ? search-backward
bind-key -t vi-copy      B previous-space
bind-key -t vi-copy      D copy-end-of-line
bind-key -t vi-copy      E next-space-end
bind-key -t vi-copy      F jump-backward
bind-key -t vi-copy      G history-bottom
bind-key -t vi-copy      H top-line
bind-key -t vi-copy      J scroll-down
bind-key -t vi-copy      K scroll-up
bind-key -t vi-copy      L bottom-line
bind-key -t vi-copy      M middle-line
bind-key -t vi-copy      N search-reverse
bind-key -t vi-copy      T jump-to-backward
bind-key -t vi-copy      W next-space
bind-key -t vi-copy      ^ back-to-indentation
bind-key -t vi-copy      b previous-word
bind-key -t vi-copy      e next-word-end
bind-key -t vi-copy      f jump-forward
bind-key -t vi-copy      g history-top
bind-key -t vi-copy      h cursor-left
bind-key -t vi-copy      j cursor-down
bind-key -t vi-copy      k cursor-up
bind-key -t vi-copy      l cursor-right
bind-key -t vi-copy      n search-again
bind-key -t vi-copy      q cancel
bind-key -t vi-copy      t jump-to-forward
bind-key -t vi-copy      v rectangle-toggle
bind-key -t vi-copy      w next-word
bind-key -t vi-copy BSpace cursor-left
bind-key -t vi-copy  NPage page-down
bind-key -t vi-copy  PPage page-up
bind-key -t vi-copy     Up cursor-up
bind-key -t vi-copy   Down cursor-down
bind-key -t vi-copy   Left cursor-left
bind-key -t vi-copy  Right cursor-right
bind-key -t vi-copy   C-Up scroll-up
bind-key -t vi-copy C-Down scroll-down

Bir daha anlamadım. Düşey bölmeli bir Vim penceresi göz önüne alındığında, yalnızca ilk bölmedeki dikdörtgeni nasıl seçersiniz? Burada, çok satırlı dikdörtgen her zaman tam Tmux bölmesini saracak. Bir Vim blok seçimi gibi değil. Tmux 1.5 kullanıyorum, sürümünüzde belki farklı olabilir?
Srećko Toroman

Evet, v, başlangıç ​​seçimine eşlenir. Dikdörtgen geçişi tanımsız. Sanırım ikiniz de haklısınız, müvekkilimi güncellemem gerekiyor mu?
Srećko Toroman

Tek bir tmux bölmesinde açık bir bölme vim pencereniz varsa, vim'in yank ve paste özelliğini kullanamaz mısınız? Öte yandan, her birinin kendi vim penceresi olan iki tmux bölmeniz varsa, tmux select / copy bölmenin kenarlarına sarılabilmelidir. Tmux 1.7 kullanıyorum
burada

6

Diğer cevapların hiçbiri soruna en uygun çözümü vermediği için, ben büyücülüğün üstünde değilim.

Blok seçiminin Vim'de olduğu gibi, boşluk bırakmak zorunda kalmadan çalışmasının bir yolu var. Kas hafızanızda yerleşik olan basit bir Ctrl-V.
.Tmux.conf dosyanızı düzenlemeyi gerektirir (ancak vi-mode zaten böyle yapar) ve tmux <2.4 için çalıştığından emin değilim.

Vim seçimini ve yank bağlantılarını çoğaltmak için .tmux.conf dosyasına bunu ekleyin:

# set vi-mode
set-window-option -g mode-keys vi
# keybindings
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle \; send -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
# comment the preceding line and uncomment the following to yank to X clipboard
# bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"

Seçim moduna girin ve seçime başlamak istediğiniz yere gidin. Şimdi vnormal (karakter-karakter, çizgi-bilge) seçimini <C-v>başlatır, blok seçimini başlatır ve V(shift-v) satır seçimini başlatır. Seçim türünden bağımsız olarak, ytmux paste buffer (veya X clipboard; yukarıdaki kod yorumlarına bakın) için yanks.

Vim ile aynı.


Benim için çalıştı, sizin komutanlığınız için bir oyalama var 👏👏👏
mahemoff

2

EDIT: Kaynak kodunu kontrol ettikten sonra cevabımı tamamen yeniden yazdım.

Aslında bunun mümkün olmadığını düşündüm çünkü bunun işe yaramasını sağlayamadım, ancak diğer cevaplar vbunun için doğru anahtar olduğu konusunda doğru, ancak bunu nasıl kullanacağınız belli değil, özellikle de kullanmaya alışkınsanız.

Ayrıca, benim için işe yaramazdı çünkü buna vmecbur kaldım begin-selection- Sanırım bu fikri başka bir yerden kör bir şekilde kopyalamış olmalıyım, karakter seçimine başlamak için vim yolunu taklit etmek için, yolun aşağısında daha fazla soruna yol açacağını bilmeden. seçimleri engelle.

$ tmux -V
tmux 1.9a
$ tmux list-keys -t vi-copy  | grep " v "
bind-key -t vi-copy      v begin-selection     # suppressed my block selection mode

Bir kez bu bağlamayı .tmux.confkestikten sonra (benim dizimde yorum yaparak ve tmux'umu yeniden başlatarak), çalışmaya başladı, ama yine de oldukça kafa karıştırıcı çünkü bu hiç de vim ile aynı değil.

Varsayılan ciltlemelerde, aşağıdaki şekilde çalışması gerekir:

  1. Eğer tmux ile unning emin olun setw -g mode-keys viGözlerinde farklı .tmux.conf.
  2. C-a [kopyalama modunu başlatmak için yazın
  3. imleci seçime başlamak istediğiniz yere getirin
  4. tip v
  5. Spaceseçimi başlatmak için yazın
  6. imleci hareket ettirdiğinizde dikdörtgen bir seçim göreceksiniz
  7. vseçimi tekrar karakter seçimine veya tam tersine çevirmek için tekrar basabilirsiniz .

vTuşuna basmadan önce yazmak zorunda değilsiniz Space. Karakter seçimi seçimine Spaceönce ile başlayabilir ve vdaha sonra tuşuna basarak dikdörtgen seçim moduna geçebilirsiniz .

Tmux’da iki karakter yazmanız gerekecek Spaceve vdikdörtgen seçim moduna geçmek için vim'den oldukça farklı . Vim'de sadece yazmak zorundasın Ctrl-V.

Ayrıca vim'de v, blok değil, karakter bazında bir seçim başlar.

Ne yazık ki, tmux'da ( Shift-vvim cinsinden) bir satır seçimi modu görünmüyor .
EDIT: Tmux sürüm 2.0 ile uyumlu bir seçim modu sunuyor gibi gözüküyor Shift-v(Henüz denemedim bile!)


"V" ye basın ve çizgileri seçebilirsiniz. Uzaya gerek yok.
Amir H. Sadoughi

1
@ AmirH.Sadoughi, çünkü (cevabınıza göre) varsayılanları değiştirdiniz ve "boşluk" yerine seçime başlamak için "v" yi bağladınız. Boş bir .tmux.conf ile başlarsanız, tanımladığım davranışın doğru olduğunu bulmalısınız; seçimi başlatmak için "boşluk" tuşuna basmanız gerekir.
Lqueryvg

1
Beni düzelttiğin için teşekkürler. Son cümlenize hitap etmek için (çizgi tipi seçim hakkında), config ile, cv-space ile bir blok seçimi yapabilirim ve v. İle bir çizgi seçimi yapabilirim, yani "öneki v" ye basarak "satır seçmeme izin veriyor.
Amir H. Sadoughi

Doğru seçimin sadece son zamanlarda Tmux'a ( Shift-v2.0 Mart 2015 tarihli sürümde) eklenmesi nedeniyle , kesinlikle cevabımdan sonra ve orjinal cevabınızdan uzun bir süre sonra inanmak çok zor . Muhtemelen sen ve ben, çizgi seçimi hakkında konuştuğumuzda iki farklı şeyden bahsediyoruz. Lütfen VIM'deki 3 seçim moduyla (ve v, Shift-vile Ctrl-v) karşılaştırın.
Lqueryvg

Haklısın, daha yeni test ettim. Seçimim vkarakter bilgedir. Ben 1.9a sürümünde yaşıyorum ve vim benzeri çizgi akıllıca seçim yok. Yani sürüm 2.0 ile vim'in tam üç modu tmux'ta da mümkün, değil mi?
Amir H. Sadoughi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.