Untuk beralih dari split vertikal ke split horizontal cepat di Vim

596

Bagaimana Anda bisa mengganti jendela saat ini dari split horizontal ke split vertikal dan sebaliknya di Vim?

Saya melakukannya beberapa saat yang lalu secara tidak sengaja tetapi saya tidak dapat menemukan kuncinya lagi.

Léo Léopold Hertz 준영
sumber
2
mungkin plugin dwm.vim akan agak berguna
ДМИТРИЙ МАЛИКОВ

Jawaban:

894

Milis Vim mengatakan (diformat ulang untuk keterbacaan yang lebih baik):

Untuk mengubah dua jendela yang terbagi secara vertikal menjadi terbagi secara horizontal

Ctrl- w t Ctrl-w K

Secara horizontal ke vertikal:

Ctrl- w t Ctrl-w H

Penjelasan:

Ctrl- w t membuat jendela (topleft) pertama saat ini

Ctrl- w K Memindahkan jendela saat ini ke lebar penuh di bagian paling atas

Ctrl- w H Memindahkan jendela saat ini ke ketinggian penuh di paling kiri

Perhatikan bahwa t adalah huruf kecil, dan K dan H adalah huruf besar.

Juga, dengan hanya dua jendela, sepertinya Anda dapat menghapus bagian Ctrl- w tkarena karena Anda sudah berada di salah satu dari hanya dua jendela, apa gunanya menjadikannya saat ini?

Mark Rushakoff
sumber
27
Jadi jika Anda memiliki dua jendela yang terbelah secara horizontal, dan Anda berada di jendela yang lebih rendah, Anda cukup menggunakan ^ WL.
terlalu banyak php
7
.... Kekuatannya ... vim-fu saya berlipat dua hari ini, terima kasih. Ada banyak perintah ^ w yang menarik (b, w, dll)
Alex Hart
Alangkah baiknya ini bekerja ketika menggunakan plugin NERDTree :-)
Eno
3
@ Tidak Bekerja dengan baik untuk saya. Cukup matikan panel NERDTree Anda sebelum 'memutar' splits, lalu matikan kembali. : NERDTreeToggle (Saya telah memetakannya ke tombol fungsi untuk kenyamanan).
Lambart
2
Saya telah menambahkan beberapa pemetaan pemimpin ke konfigurasi vim saya: :nmap <leader>th <C-w>t<C-w>Hdan:nmap <leader>tk <C-w>t<C-w>K
Ian Marcinkowski
324

Ctrl- wdiikuti oleh H, J, KatauL (modal) akan memindahkan jendela saat ini untuk jauh left, bottom, topatau rightmasing-masing seperti navigasi kursor normal.

Setara huruf kecil memindahkan fokus alih-alih memindahkan jendela.

hormatilah Kode
sumber
5
itu jauh lebih baik karena pengguna menggunakan hjkl untuk bergerak di antara buffer.
Afshin Mehrabani
30
Jawaban yang diterima adalah jawaban yang bagus, tetapi bagi saya, jawaban ini lebih mudah diingat. Terima kasih!
Jon Carter
Bekerja lebih baik dengan nerdtree juga.
arcseldon
Ini bekerja untuk saya di macOS dengan awalan Ctrl- w(Saya tidak tahu jika ^berarti Ctrldalam contoh Anda)
Giovanni Benussi
@GiovanniBenussi ya, saya pikir ^berarti Ctrl.
ma11hew28
47

Ketika Anda memiliki dua atau lebih jendela terbuka secara horizontal atau vertikal dan ingin mengalihkan semuanya ke orientasi lain, Anda dapat menggunakan yang berikut ini:

(beralih ke horizontal)

:windo wincmd K

(beralih ke vertikal)

:windo wincmd H

Ini secara efektif pergi ke setiap jendela secara individual dan menggunakan ^WKatau ^WH.

Steve
sumber
32

Perintah ex berikut ini akan (kembali) membagi sejumlah windows:

  • Untuk membelah secara vertikal (mis. Buat pembagi vertikal antara windows), ketik :vertical ball
  • Untuk membelah secara horizontal, ketik :ball

Jika ada buffer tersembunyi, mengeluarkan perintah ini juga akan membuat buffer tersembunyi terlihat.

Menandai
sumber
Ini harus menjadi jawaban yang diterima, karena jawaban yang diterima saat ini hanya akan berfungsi untuk dua file. Jawaban ini lebih lengkap.
DrStrangepork
:vert[ical] balldalam dokumen :vert ballitu juga ok dan lebih pendek.
Titou
:ballmengurangi 3 jendela vertikal menjadi 2 jendela horizontal, sementara :vert ball dengan benar memetakan 3 jendela horizontal menjadi 3 jendela vertikal.
Titou
27

Di VIM, lihat yang berikut ini untuk melihat berbagai alternatif untuk apa yang mungkin telah Anda lakukan:

: bantuan membuka jendela

Contohnya:

Ctrl- W s
Ctrl- W o
Ctrl- W v
Ctrl- W o
Ctrl- W s
...

Segera
sumber
11

Perpecahan horizontal ke vertikal

Ctrl+ Wuntuk perintah jendela, diikuti oleh Shift+ Hatau Shift+L


Pemisah vertikal ke horizontal

Ctrl+ Wuntuk perintah jendela, diikuti oleh Shift+ Katau Shift+J

Kedua solusi berlaku ketika hanya ada dua jendela.


Buka bantuan dalam pemisahan vertikal secara default

Tambahkan kedua baris ini ke .vimrc:

cabbrev help vert help
cabbrev h vert h

:vert[ical] {cmd}selalu menjalankan cmddalam jendela yang terbagi secara vertikal.

Serge Stroobandt
sumber
6

Terinspirasi oleh jawaban Steve, saya menulis fungsi sederhana yang beralih antara pemisahan vertikal dan horizontal untuk semua jendela di tab saat ini. Anda dapat mengikatnya ke pemetaan seperti pada baris terakhir di bawah ini.

function! ToggleWindowHorizontalVerticalSplit()
  if !exists('t:splitType')
    let t:splitType = 'vertical'
  endif

  if t:splitType == 'vertical' " is vertical switch to horizontal
    windo wincmd K
    let t:splitType = 'horizontal'

  else " is horizontal switch to vertical
    windo wincmd H
    let t:splitType = 'vertical'
  endif
endfunction

nnoremap <silent> <leader>wt :call ToggleWindowHorizontalVerticalSplit()<cr>
Adam Faryna
sumber
Bekerja lebih baik bagi saya jika saya memaksanya untuk tetap di split yang sama seperti itu if winnr() == 1 windo wincmd J windo wincmd k else windo wincmd J endif dan if winnr() == 1 windo wincmd L windo wincmd h else windo wincmd L endifHarapan itu masuk akal.
mjhoffmann
5

Berikut tip Mark Rushakoff di atas , berikut adalah pemetaan saya:

" vertical to horizontal ( | -> -- )
noremap <c-w>-  <c-w>t<c-w>K
" horizontal to vertical ( -- -> | )
noremap <c-w>\|  <c-w>t<c-w>H
noremap <c-w>\  <c-w>t<c-w>H
noremap <c-w>/  <c-w>t<c-w>H

Sunting: gunakan Ctrl- w runtuk menukar dua jendela jika tidak dalam urutan yang baik.

Jabba
sumber