Untuk beralih dari split vertikal ke split horizontal cepat di Vim


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?


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.


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.


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.


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
...


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.


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>

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.