Bagaimana saya bisa mendapatkan windows saya kembali ke formasi grid?

12

Jika saya mengatur windows menjadi empat kuadran, seperti dari urutan perintah berikut:

  • :tabnew
  • :vsplit
  • :split
  • <C-W>l
  • :split

kemudian memasukkan perintah seperti <C-W>Jakan menyebabkan ini tidak lagi persegi; dalam hal ini, itu akan memaksa satu jendela melayang di bagian bawah.

Bagaimana saya bisa melakukan yang sebaliknya — yaitu, memaksa jendela kembali ke formasi persegi?

Saya sudah membaca :help window-movingtetapi tidak melihat sesuatu yang bermanfaat.

wchargin
sumber
1
Saya agak tidak jelas tentang apa yang ingin Anda capai ketika Anda menekan <CW> J, yang menggerakkan "jendela saat ini berada di bagian paling bawah, menggunakan lebar penuh layar," Ini berarti windows akan tidak lagi berada dalam formasi grid, menurut definisi. Apa yang sebenarnya Anda coba lakukan dengan windows Anda?
Kaya
3
@ Kaya saya pikir OP hanya mencontohkan situasi setelah itu ia mungkin ingin mengatur ulang windows ke formasi grid.
Gonçalo Ribeiro
@ GonçaloRibeiro Benar.
wchargin
Meskipun bukan jawaban, jika Anda mencari contoh kode untuk membuat solusi sendiri, saya sarankan memeriksa proyek Microviche yang luar biasa .
New Alexandria

Jawaban:

4

Sejauh yang saya tahu, tidak ada cara mudah untuk mengatur split terbuka menjadi grid split. Dalam hal ini, cara termudah untuk kembali ke kotak adalah dengan memperbaiki struktur secara manual:

  1. tutup pecahan yang mengambang di atas
  2. kembali ke pembagian yang mengambil setengah layar
  3. membaginya kembali dengan :split <file>

Ini akan mengembalikan Anda ke kotak. Cara untuk melakukan manuver pemisahan tanpa mempengaruhi tata letak jendela adalah dengan menggunakan [count] Ctrl - W x , yang menukar jendela saat ini dengan jendela [count].

davidlowryduda
sumber
Saya tahu saya bisa melakukan ini, tetapi ada beberapa kelemahan. (1) Jika jendela adalah satu-satunya tampilan buffer yang diberikan, dan buffer itu kotor, Anda harus :wqatau :q!tidak menginginkan keduanya. (2) Ini akan mengatur ulang pengaturan spesifik jendela, seperti posisi kursor. (3) Ini akan memecah perbedaan dalam proses. Pada dasarnya, windows adalah warga negara kelas satu; menghancurkan mereka dan membuat yang baru tidak cukup.
wchargin
@WChargin Beberapa di antaranya hilang jika Anda mengatur vim untuk mengizinkan buffer tersembunyi. Tapi ya ...
derobert
2
Alih-alih menutup jendela dan memisahkan buffer ke lokasi yang diinginkan, bagi jendela yang baru dengan yang Anda inginkan, tukar dengan jendela yang ingin Anda pindahkan, lalu tutup jendela baru (yang dipindahkan).
tommcdo
4

Anda dapat menyimpan tata letak favorit menggunakan winsaveviewperintah. Di sini saya memetakannya \svuntuk kenyamanan:

nnoremap <Leader>sv :let g:myLayout = winsaveview()<CR>

Pastikan untuk menjalankannya sebelum Anda merusak tata letak! ;-)

Sekarang jika Anda pernah secara tidak sengaja merusak tata letak Anda, Anda dapat memulihkannya:

nnoremap <Leader>rv :call winrestview(g:myLayout)<CR>
joeytwiddle
sumber
4

Kunci default untuk mengatur ulang windows hanya berfungsi di dalam grup pemisah lokal mereka:

CTRL-W x   Exchange current window with next (in group)
CTRL-W r   Rotate windows down/right (in group)

Atau mereka memecahkan jendela ke grup teratas:

CTRL-W  H | J | K | L   Move window to left/top/bottom/right-most edge

Ini tidak memadai ketika Anda ingin memindahkan buffer ke salah satu grup split lainnya.

Tapi pada kesempatan tersebut, para Plugin WindowSwap dapat membantu . Ini memungkinkan Anda untuk menukar buffer dari dua jendela sembarang.

<leader> yw   "Yank window": Yank the current window

<leader> pw   "Paste window": Swap the current window with the yanked window
joeytwiddle
sumber