Làm thế nào tôi có thể đưa các cửa sổ của tôi trở lại thành một lưới hình?


12

Nếu tôi có các cửa sổ được sắp xếp thành bốn góc phần tư, như từ chuỗi lệnh sau:

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

sau đó nhập một lệnh như thế <C-W>Jsẽ khiến những cái này không còn vuông nữa; trong trường hợp này, nó sẽ buộc một cửa sổ nổi ở phía dưới.

Làm thế nào tôi có thể làm điều ngược lại, đó là buộc các cửa sổ trở lại thành một hình vuông?

Tôi đã đọc :help window-movingnhưng không thấy gì hữu ích.


1
Tôi hơi không rõ những gì bạn đang cố gắng đạt được khi nhấn <CW> J, di chuyển "cửa sổ hiện tại ở dưới cùng, sử dụng toàn bộ chiều rộng của màn hình", Điều này có nghĩa là các cửa sổ sẽ theo định nghĩa, không còn trong một sự hình thành lưới. Bạn đang cố gắng làm gì với cửa sổ của mình?
Giàu

3
@Rich Tôi nghĩ OP chỉ đang minh họa một tình huống mà sau đó anh ta có thể muốn thiết lập lại các cửa sổ để hình thành lưới.
Gonçalo Ribeiro

@ GonçaloRibeiro Đúng.
wchargein


Mặc dù không phải là một câu trả lời, nếu bạn thấy mình đang săn lùng các ví dụ mã để đưa ra giải pháp của riêng mình, tôi khuyên bạn nên kiểm tra dự án Microviche tuyệt vời .
New Alexandria

Câu trả lời:


4

Theo như tôi biết, không có cách nào dễ dàng để sắp xếp các phần tách mở thành một lưới các phần tách. Trong trường hợp này, cách dễ nhất để quay lại lưới là chỉnh sửa cấu trúc theo cách thủ công:

  1. đóng tách nổi ở trên cùng
  2. trở lại phần tách chiếm một nửa màn hình
  3. chia lại với :split <file>

Điều này sẽ đưa bạn trở lại lưới. Cách để điều động chia tách mà không ảnh hưởng đến bố cục cửa sổ là sử dụng [đếm] Ctrl - W x , trao đổi cửa sổ hiện tại với cửa sổ [đếm].


Tôi biết rằng tôi có thể làm điều này, nhưng có một vài nhược điểm. (1) Nếu cửa sổ là chế độ xem duy nhất của bộ đệm nhất định và bộ đệm bị bẩn, bạn sẽ phải :wqhoặc :q!, không ai trong số đó là mong muốn. (2) Điều này sẽ đặt lại mọi cài đặt dành riêng cho cửa sổ, như vị trí con trỏ. (3) Điều này sẽ phá vỡ bất kỳ khác biệt trong tiến trình. Về cơ bản, cửa sổ là công dân hạng nhất; phá hủy chúng và tạo ra cái mới chỉ đơn giản là không đủ.
wchargein

@WChargin Một số thứ sẽ biến mất nếu bạn đặt vim để cho phép bộ đệm ẩn. Nhưng vâng ...
derobert

2
Thay vì đóng cửa sổ và tách bộ đệm đến vị trí mong muốn, hãy chia một cửa sổ mới nơi bạn muốn đến, trao đổi nó với cửa sổ bạn muốn di chuyển, sau đó đóng cửa sổ mới (đã di chuyển).
tommcdo

4

Bạn có thể lưu bố cục yêu thích của bạn bằng cách sử dụng winsaveviewlệnh. Ở đây tôi đang ánh xạ nó để \svthuận tiện:

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

Hãy chắc chắn để chạy nó trước khi bạn phá vỡ bố trí của bạn! ;-)

Bây giờ nếu bạn vô tình phá vỡ bố cục của mình, bạn có thể khôi phục nó:

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

4

Các khóa mặc định để sắp xếp lại các cửa sổ chỉ hoạt động trong nhóm phân chia cục bộ của chúng:

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

Hoặc họ phá vỡ cửa sổ ra khỏi nhóm hàng đầu:

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

Điều này là không đủ khi bạn muốn di chuyển bộ đệm vào một trong các nhóm phân chia khác.

Nhưng vào những dịp như vậy, các Plugin WindowSwap có thể giúp . Nó cho phép bạn trao đổi bộ đệm của bất kỳ hai cửa sổ tùy ý.

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

<leader> pw   "Paste window": Swap the current window with the yanked window
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.