Tmux'ta Vim'de çalışan shift + oklar ve ctrl + oklar nasıl elde edilir?


44

Bunların hepsi OS X'te iTerm2'de.

Eskiden sahiptim

export TERM='xterm-256color'

benim içinde .bashrc. Bu, tmux'taki Vim'in 256 renk kullandığı anlamına geliyordu.

Ve bir kere ekledim

set -g xterm-keys on

sonra değiştiricileri olan klavye kısayolları Vim'de iyi çalıştı. Yani: shift+left/rightVim sekmeleri arasında geçiş yapmak için ctrl+up/downeşleştirdiğim, ("balon") satırları taşımak için eşlediğim shift+left/rightve komut satırı modunda (örneğin bir şey yazarken :e foo bar baz) sözcükle atlamak için kutunun dışında çalıştığım .

Bununla birlikte, bu kurulumda Vim arkaplan renginin burada belirtildiği gibi yalnızca metnin arkasında göstermesi sorunu vardı .

Bu yüzden kaldırıldım

export TERM='xterm-256color'

benden .bashrcve bunun yerine bu benim .tmux.conf:

set -g default-terminal "screen-256color"

Bu Vim arka plan rengini düzeltti, ancak klavye kısayollarını kırdı - bunun yerine beklenmedik şeyler yapıyorlar (imleci hareket ettir, metni sil).

Kullanarak ctrl+v(anlatıldığı gibi anahtar kombinasyondan kelimesi kelimesine çıkışını eklemek için buraya ), ben etrafında işe başardı:

map [1;5A <C-Up>
map [1;5B <C-Down>
map [1;2D <S-Left>
map [1;2C <S-Right>
cmap [1;2D <S-Left>
cmap [1;2C <S-Right>

Bu, kısayolları çalıştırır, ancak doğru çözüm gibi hissetmez. Biri bana burada neler olduğunu ve nasıl düzeltileceğini söyleyebilir mi?

Yanıtlar:


68

Tmux pencere seçeneğini ayarlamanız gerekir, xterm-keysböylece tmux bu anahtarları terminallerine iletir . Muhtemelen bunu içine koymak istersiniz ~/.tmux.conf:

set-window-option -g xterm-keys on

Vim , TERM bir şey yaptığında genellikle bu tuşları kullanma xtermbiçimini otomatik olarak ayarlayacaktır , ancak TERM olduğundan bu yana atlar screen-256color. Bu anahtarları istediğiniz şekilde manuel olarak yapılandırabilirsiniz ~/.vimrc:

if &term =~ '^screen'
    " tmux will send xterm-style keys when its xterm-keys option is on
    execute "set <xUp>=\e[1;*A"
    execute "set <xDown>=\e[1;*B"
    execute "set <xRight>=\e[1;*C"
    execute "set <xLeft>=\e[1;*D"
endif

En azından bu şekilde çeşitli kombinasyonları haritalamak zorunda kalmazsınız.


Teşekkür ederim! Bu sahip olduklarımdan daha iyi görünüyor ve açıklamayı takdir ediyorum. : Burada anlatıldığı gibi oklar Command-T eklentisi iş vermedi aşağı ne vardı, ama senin çizgilerle tarafından düzeltildi Bir şey / o kadar oldu superuser.com/questions/237751/... Sadece eklendi map <Esc>[B <Down>birinden Cevapların Eklentinin kendisi tarafından yapılan bazı kötü varsayımların nedeni görülüyor.
Henrik N

Sadece açık olmak gerekirse, çözümünüz artı map <Esc>[B <Down>o başka ipliğin içinden gelen her şey yolunda demektir
Henrik N

@HenrikN Lütfen ne yaptığını açıklayabilir misiniz map <Esc>[B <Down>? .Vimrc dosyama ekleyerek hiçbir fark görmüyorum.
Francesco Boccardo

@Francesco Boccardo: Benim önceki yorumunda bağlantıyı takip ve sonra oradan tekrar bağlantıyı takip ederseniz, almak superuser.com/a/215181 :) detay dayanılmaz bunu açıklamak gibi görünüyor
Henrik N

@HenrikN Teşekkürler. Bu yüzden muhtemelen OSX ile ilgili bir meseledir, veya belki de bu 7 yılda çözüldü, çünkü komut (kontrol?) + R tuşlarına basmak benim için tmux'daki vim'deki ok tuşlarını karıştırmıyor (Linux'tayım).
Francesco Boccardo

8

Burada açıklandığı gibi , terminal seçeneğini temizleyerek Arkaplan Rengi Silme'yi (BCE) devre dışı bırakın (Vim'de t_utçalıştırın :set t_ut=ve terminalin ekranını yenilemek için Control+ tuşuna basın L), böylece renk şemaları Vim tmux ve GNU ekranı içinde kullanıldığında düzgün çalışacaktır.

Bu şekilde, uygun Vim renk şeması görüntülemesini elde ederken TERMdeğerinizi xterm-256coloruygun tuş tespiti için saklayabilirsiniz ! :-)


1
Güzel! Büyük dedektiflik işi.
Henrik N

2
Bu tam olarak değiştiğim şeydi : github.com/henrik/dotfiles/commit/… Renkler ve değiştirici tuşlar tmux’un içinde ve dışında iyi çalışıyor gibi görünüyor.
Henrik N
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.