İki pencerenin konumunu değiştir


29

Aşağıdakileri söyle, penceremin şu anki yapısı:

+ ----- + ----------------------------
| |
| A |
| |
+ ----- +
| |
| B |

A ve B'nin sırası doğal değil. B tepesinde olsaydı daha iyi olurdu.

Ancak, eğer gidersem <C-w>K, B istediğim gibi olmayan tüm pencerelerin en üstünde olacak. B'yi A'nın üstüne nasıl koyabilirim, ama zaten A'nın üstünde olan herhangi bir pencerenin üstüne değil?

Ve eğer iki pencere dikey olarak bölünmüşse, bunları yatay olarak nasıl bölebilirim?


7
Bu yazı pencerelerin nasıl döndürüleceğini açıklar. Bu , bölmeleri dikeyden yatayya çevirmekle ilgilidir.
lcd047

@ lcd047 Bunlar bu sitenin dışındaki sorular. Buraya küçük bir cevap yazmakta yarar var mı ve linkleri içeriyor (hangileri değerli)?
Bernhard

1
@ Bernhard Sanırım bu meta için iyi bir soru .
lcd047,

1
@ Bernhard Evet . Yalnızca bağlantılar yerine tam bir cevap yazdığınızdan emin olun.
Gilles 'SO- kötü olmayı bırak'

1
Öyleyse lütfen ne yapmaya çalıştığınızı ve neden sizi yanıtladığımı belirttiğim iki cevabı soruyu açıklamayın.
lcd047

Yanıtlar:


33

Bölünmüş bir pencerenin iki bölümünü değiştirmek için yapmanız gerekenler: <C-w> <C-r>


Yanılıyor olabilirim ama çözümün pencereleri döndürdüğü için 2'den fazla bölünmüş sonuç OP'nin aradığı şey olmayacak.
statox

Kesinlikle haklısın. OP s.th.'i arıyordu. "bölünmüş bir pencerenin iki parçasını değiştirmekten" daha karmaşık.
modesto

Aslında OP iki ayrık pencereyi değiştirmek için bir komut arıyor ancak çözümünüz mevcut tüm ayrık pencereleri döndürüyor. Şunlarda belirtildiği gibi :h CTRL-W_CTRL-R: The second window becomes the first one, the third one becomes the second one, etc.Eğer 3 bölünme varsa, altta bulunan ve <c-w><c-r>3. pencereye How can I put B above A, but not above any other window that is already above A?
basan imleç

6

windowKonumları değiştirmek için , efekt, bu iki pencerenin gösterdiği takas tamponlarına eşdeğerdir.
Örn: A penceresi tampon 2'ye sahipse ve B penceresi tampon 8'e sahipse, Pencere A'ya, tampon 8'i ve ardından Pencere B'ye, tampon 2'yi seçmek isteyeceksiniz.

Bu fikir bana senaryo yazmam için ilham verdi - ve zaten kendi araç kutumda da var

İşlev kodu:

function! WinBufSwap()
  let thiswin = winnr()
  let thisbuf = bufnr("%")
  let lastwin = winnr("#")
  let lastbuf = winbufnr(lastwin)

  exec  lastwin . " wincmd w" ."|".
      \ "buffer ". thisbuf ."|".
      \ thiswin ." wincmd w" ."|".
      \ "buffer ". lastbuf
endfunction

command! Wswap :call WinBufSwap()
map <Leader>bs <C-c>:call WinBufSwap()<CR>
  1. Pencere seç
  2. B penceresini seçin
  3. :call WinBufSwap()
    Bu, arabellekleri önceden seçilen iki pencerede değiştirir ve imleci orijinal pencerede bırakır.

Önceden değiştirilmek istenen iki pencereyi seçmek, hangisinin birlikte çalışacağını belirlemek için gerekli olan kilit detaydır.


Sadece "A, sonra B penceresini seç" deyince, en son görülen arabelleklerin ve pencerelerin sırasını değiştirmek için A'ya, sonra B'ye odaklanmayı mı kastediyorsunuz? "odağa odaklan"
ifadesinden

Evet tam olarak: “odaklan” olarak “seç” kullanıyorum.
Cometsong,

6
CTRL-W x N penceresini içeren geçerli pencereyi değiştir
                   (varsayılan: sonraki pencere)

( index.txtbölüm 2.2, "Pencere komutları")

Eğer A geçerli pencere ise, bir sonraki B olacaktır; <C-w> x

Eğer B mevcut pencere ise (ve aşağıda daha fazla pencere varsa), o zaman önce A'ya gitmelisiniz, sonra takas: <C-w> k <C-w> x


4

Pencereleri değiştirmeye veya arabellekleri değiştirmeye başka bir alternatif , dosyalarınızdaki konumları işaretlemektir ( büyük harf kullanarak ) ve seçtiğiniz pencerelerde bu işaretleri açmaktır.

Örneğin, iki dosyam varsa, file_A ve file_B :

  • File_A ile pencereye gider ve işaretlerdim:mA
  • file_B ile pencereye gidin ve işaretleyin:mB
  • Ardından file_A işaretini bu pencereye getirin:'A
  • daha sonra ilk pencereye geri dönün ve işareti getirme file_B orada: 'B.

Bu yöntemin avantajı, herhangi bir nedenden dolayı bölmenizi bir kereden fazla bölmeniz ve saat 12'de ve saat 7'de bölmeleri değiştirmek istediğinizde olduğu gibi, onları yerlerinden değiştirmek için açık bir mantık bulunmamasıdır. t Sadece camları çevirin ancak arabellekleri kolayca değiştirebilirsiniz.


0

Aşağıdaki işlevle arabellekleri iki pencere arasında değiştirebilirsiniz:

function! SwitchWindow(count) abort
    let l:current_buf = winbufnr(0)
    exe "buffer" . winbufnr(a:count)
    exe a:count . "wincmd w"
    exe "buffer" . l:current_buf
    wincmd p
endfunction
nnoremap <C-w>x :<C-u>call SwitchWindow(v:count1)<CR>

Şimdi, çoğu zaman, arabelleklerin değiştirilmesi teknik olarak pencere değiştirme gibi davranacaktır. Manuel olarak pencereleri takip etmediğiniz için, hangi pencerenin hangi tamponu tuttuğunu takip edersiniz. Bu nedenle, yukarıdaki işlev çoğu durumda size yardımcı olacaktır.

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.