Ctrl-W olmadan Vim'deki bölmelerle nasıl çalışabilirim?


24

Terminalim Ctrl+ yazmama izin vermiyor W, çünkü bu bir terminal sekmesini kapatmak için bir kısayol.

Bölmeleri ile çalışmaktan hoşlanıyorum, ancak kullanmadan bunu yapmanın bir yolunu bulamıyorum C-W. Birlikte bunlar arasında geçiş yapabilirsiniz, çünkü bu, sekmeleri kullanın için beni zorladı gt, gTya #gt# bir sayıdır, ama sadece bir seferde bir dosyanın içeriğini gördüğünüz gibi bölünme daha bu daha az elverişli bulabilirsiniz.

Ben de kullanamam mouse=açünkü terminalim bunu desteklemiyor.

Ctrl+ WCombo olmadan Vim'deki bölmelerle nasıl çalışabilirim ?


1
Eşlemeleri kullanın. wincmd Örneğin eşleştirebilirsiniz : :nmap wj :wincmd j<cr>bu, CTRL-W j(aşağıdaki pencereye taşı) ile aynı şekilde hareket eder. :help wincmd
Alex Kroll

@AlexKroll Neden bunu bir cevap olarak göndermiyorsunuz? :-)
Martin Tournoij

1
@Carpetsmoker Bu problem için tam bir güvence değil bence. CTRL-W jSayaçlarla çalışır (şu andaki n. inci pencereye gidin) benim çözümüm yok.
Alex Kroll

2
Normalde böyle bir tavsiyeyi takdir etmiyorum, ama başka bir terminal arardım. <C-W>kısaca (Vim'deki pek çok yerde değil, aynı zamanda bash'ta) kınamak için çok yararlıdır. Terminal tarafından başka hangi önemli ciltlerin tüketildiğini merak ediyorum - <C-T>? En azından bunların terminalde yapılandırılabilir olup olmadığına bakardım.
tommcdo

Yanıtlar:


23

<C-w>Örneğin başka bir kombinasyona yeniden eşleyebilirsiniz :

:nnoremap <C-e> <C-w>

Şimdi kullanabilirsiniz <C-e>ve bastırmışsınız gibi davranır <C-w>.

Bu, varsayılan <C-e>eşlemenin üzerine yazacaktır (aşağı kaydır). Vim zaten klavyedeki her tuşu kullanıyor ve bunu önlemenin tek yolu "önek" gibi davranan lider tuşunu kullanmak.

:nnoremap <Leader>w <C-w>

Kaybolmadıysanız <Leader>, şimdi \w(birbiri ardına) kullanabilirsiniz. Aslında CTRL + tuş kombinasyonlarını sevmediğim için bunu tercih ediyorum.

Bkz. <Leader> Nedir? ve <Lider> 'in neye ayarlanmış olduğunu nasıl öğrenebilirim? Ve <Lider> 'i yeniden eşleştirmek mümkün mü? .


Sorunumu çözdü. Eşleştirmeyi vimrcime ekledik ve bir sorunla karşılaşmadan test ettik.
Mateon 1

13

Aslında + ' :wincmddan daha sık kullanıyorum çünkü kısaltmayı yazmayı daha kolay buluyorum .CtrlW:winc

Örneğin, eşdeğer Ctrl+ W Lolduğu :winc l.


7

İçimde aşağıdaki notları belirledim .vimrc:

nmap <C-h> <C-w>h
nmap <C-j> <C-w>j
nmap <C-k> <C-w>k
nmap <C-l> <C-w>l

Artık Ctrl+hsol pencereye, Ctrl+lsağ pencereye, vb. Geçmek için kullanabiliyorum. Sadece Vim'in normal navigasyonuna mantıklı bir şekilde sığıyor gibi görünüyor.


4
Bir terminalde Ctrl + h eşleştirmenin her zaman işe yaramayacağına dikkat edin, çünkü bu genellikle geri silme tuşudır. Bkz bu cevabı ve bu soruyu .
Martin Tournoij,

Ayrıca, nnoremap <cr> <c-w>wnormal modda dönüş tuşu pek kullanılmadığından da kullanabilirsiniz . O zaman bölmeler arasında geçiş yapmak zahmetsizdir.
Umarım

5

Bölmeleri ele almak için oldukça uygun olan alt-mod eklentisini kullanıyorum : Yeni anahtar bağları tanımladığınız yeni bir mod (normal modda, "mod", görsel mod, ekleme modu vb. .

Bununla birlikte Ctrl+wartık kullanmak zorunda değilsiniz ve yeni bir moddayken tüm tuşların bağlanması ücretsizdir: "Lanet olsun" gibi bir sorun yok. "

Eklentiyi herhangi bir normal eklenti yöneticisi ile yükleyebilirsiniz ve işte size ilham vermek için yapılandırmalarımdan bazıları:


Aradığımda WindowsModebölmelerimi değiştirdiğim yeni bir mod yarattım :

call submode#enter_with('WindowsMode', 'n', '', '<Leader>k', ':echo "windows mode"<CR>')
call submode#leave_with('WindowsMode', 'n', '', '<Leader>')

Birlikte modunda girmek olduğunu Bu satırlar araçları Leaderkve I modundan çıkmak Leaderı vurmak sonra: LeaderkI will vurmak tüm anahtarları:

  • Bu modda onlar için bir harita tanımlamazsam hiçbir şey yapmayın
  • Bu modda onları haritalandırmaya karar verdim (cevabın geri kalanına bakınız).
  • Vurursam normal moda dön Leader

WindowsModeBu çizgilere girdiğimde hjklbölmeler arasında gezinti yap.Ctrl+whjkl

" Change of windows with hjkl
call submode#map('WindowsMode', 'n', '', 'j', '<C-w>j')
call submode#map('WindowsMode', 'n', '', 'k', '<C-w>k')
call submode#map('WindowsMode', 'n', '', 'h', '<C-w>h')
call submode#map('WindowsMode', 'n', '', 'l', '<C-w>l')

Bu satırları pencereleri /ve ile bölmek için kullandım !:

" split windows with / and !
call submode#map('WindowsMode', 'n', '', '/', '<C-w>s')
call submode#map('WindowsMode', 'n', '', '!', '<C-w>v')

Ve qbir bölmeyi kapat:

call submode#map('WindowsMode', 'n', '', 'q', '<C-w>c')

Bölmeleri Ctrlhjkl:

call submode#map('WindowsMode', 'n', '', '<C-j>', '<C-w>J')
call submode#map('WindowsMode', 'n', '', '<C-k>', '<C-w>K')
call submode#map('WindowsMode', 'n', '', '<C-h>', '<C-w>H')
call submode#map('WindowsMode', 'n', '', '<C-l>', '<C-w>L')

Vim-submode bir çok güçlü şey yapmanıza izin verir, daha fazla ayrıntı için doktora bakınız.


EDIT Pencere alt-modunun bir başka yaklaşımı burada tarif edilmiştir . Yazar tarafından kullanılan yöntemin soruyu cevaplamak için daha da yakın olduğunu düşünüyorum: İşte yeni bir mod oluşturmak için kullanılır, ancak tüm <c-w>somethingeşlemeler alt modda aynı tuşlarla kullanılabilir:

" Go through every letter
for key in ['a','b','c','d','e','f','g','h','i','j','k','l','m',
\           'n','o','p','q','r','s','t','u','v','w','x','y','z']
  " maps lowercase, uppercase and <C-key>
  call submode#map('window', 'n', '', key, '<C-w>' . key)
  call submode#map('window', 'n', '', toupper(key), '<C-w>' . toupper(key))
  call submode#map('window', 'n', '', '<C-' . key . '>', '<C-w>' . '<C-'.key . '>')
endfor

" Go through symbols. Sadly, '|', not supported in submode plugin.
for key in ['=','_','+','-','<','>']
  call submode#map('window', 'n', '', key, '<C-w>' . key)
endfor

Bu şekilde tüm eşleştirmeleri <c-w>lowerCaseKey, <c-w>upperCaseKey, <c-w><c-Key>ve eşleştirmeleri <c-w>=_+-<>öneki olmadan tüm pencere modunda erişilebilir<c-w>

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.