Làm thế nào bạn có thể chuyển đổi các cửa sổ hiện tại của bạn từ phân chia theo chiều ngang sang phân chia theo chiều dọc và ngược lại trong Vim?
Tôi đã làm điều đó một lúc trước một cách tình cờ nhưng tôi không thể tìm thấy chìa khóa một lần nữa.
Làm thế nào bạn có thể chuyển đổi các cửa sổ hiện tại của bạn từ phân chia theo chiều ngang sang phân chia theo chiều dọc và ngược lại trong Vim?
Tôi đã làm điều đó một lúc trước một cách tình cờ nhưng tôi không thể tìm thấy chìa khóa một lần nữa.
Câu trả lời:
Danh sách gửi thư của Vim cho biết (được định dạng lại để dễ đọc hơn):
Để thay đổi hai cửa sổ phân chia theo chiều dọc thành phân chia theo chiều ngang
Ctrl- w t Ctrl-w K
Theo chiều dọc:
Ctrl- w t Ctrl-w H
Giải thích:
Ctrl- w t làm cho cửa sổ đầu tiên (topleft) hiện tại
Ctrl- w K di chuyển cửa sổ hiện tại sang toàn bộ chiều rộng ở trên cùng
Ctrl- w H di chuyển cửa sổ hiện tại lên toàn bộ chiều cao ở bên trái
Lưu ý rằng chữ t là chữ thường và K và H là chữ hoa.
Ngoài ra, chỉ với hai cửa sổ, có vẻ như bạn có thể bỏ phần Ctrl- w tbởi vì nếu bạn đã ở một trong hai cửa sổ, thì điểm nào khiến nó hiện tại?
:nmap <leader>th <C-w>t<C-w>H
và:nmap <leader>tk <C-w>t<C-w>K
Ctrl- wTiếp theo H, J, Khoặc L(vốn) sẽ di chuyển cửa sổ hiện tại đến vị trí góc left
, bottom
, top
hoặc right
tương ứng như định hướng con trỏ bình thường.
Tương đương chữ thường di chuyển tiêu điểm thay vì di chuyển cửa sổ.
Ctrl
- w
(Tôi không biết nếu ^
có nghĩa Ctrl
trong ví dụ của bạn).
^
là có nghĩa Ctrl
.
Các lệnh ex sau đây sẽ (lại) chia bất kỳ số lượng cửa sổ nào:
:vertical ball
:ball
Nếu có bộ đệm ẩn, việc ban hành các lệnh này cũng sẽ làm cho bộ đệm ẩn hiển thị.
:vert[ical] ball
trong tài liệu như vậy :vert ball
cũng ok và ngắn hơn.
:ball
giảm 3 cửa sổ dọc thành 2 cửa sổ ngang, trong khi :vert ball
ánh xạ chính xác 3 cửa sổ ngang thành 3 cửa sổ dọc.
Tách ngang sang dọc
Ctrl+ Wcho lệnh window, theo sau là Shift+ Hhoặc Shift+L
Tách dọc
Ctrl+ Wcho lệnh window, theo sau là Shift+ Khoặc Shift+J
Cả hai giải pháp áp dụng khi chỉ có hai cửa sổ tồn tại.
Thêm cả hai dòng này vào .vimrc
:
cabbrev help vert help
cabbrev h vert h
:vert[ical] {cmd}
luôn luôn thực hiện cmd
trong một cửa sổ chia theo chiều dọc.
Lấy cảm hứng từ câu trả lời của Steve, tôi đã viết hàm đơn giản chuyển đổi giữa các phân chia dọc và ngang cho tất cả các cửa sổ trong tab hiện tại. Bạn có thể liên kết nó với ánh xạ như trong dòng cuối cùng bên dưới.
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>
if winnr() == 1 windo wincmd J windo wincmd k else windo wincmd J endif
và if winnr() == 1 windo wincmd L windo wincmd h else windo wincmd L endif
Hy vọng điều đó có ý nghĩa.
Theo mẹo của Mark Rushakoff ở trên , đây là bản đồ của tôi:
" 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
Chỉnh sửa: sử dụng Ctrl- w rđể trao đổi hai cửa sổ nếu chúng không theo thứ tự tốt.