Có thể cho biết nếu một cửa sổ ở dưới cùng hoặc trên cùng, bên trái hoặc bên phải?


13

Tôi không biết nếu có một số chức năng để kiểm tra vị trí của cửa sổ, ý tôi là nó hiện đang ngồi ở dưới cùng hoặc trên cùng, bên trái hoặc bên phải ??

__________________________
|           |            |
|           |            |
|  left     |   right    |
|           |            |
|           |            |
|___________|____________|

__________________________
|                        |
|          top           |
|________________________|
|                        |
|         bottom         |
|_______________________ |

Bạn đang cố làm gì vậy? (Vấn đề XY)
mMontu

Tôi đang cố gắng viết một hàm để xoay cửa sổ chia thành dọc nếu bố cục hiện tại nằm ngang và ngược lại khi chỉ có hai cửa sổ. Vì vậy, tôi cần biết bố cục chia tách hiện tại là gì và cửa sổ hiện tại của tôi ở đâu
Aaron Shen

3
Tại sao không chỉ đơn giản là sử dụng ctrl-W_L? (hoặc ctrl-W_R)
Vitor

Tôi muốn nó là chức năng chuyển đổi thuận tiện, nó sẽ tự động phát hiện bố cục hiện tại và thực hiện xoay vòng chính xác cho tôi thay vào đó tôi cần phải suy nghĩ nó trong não và chọn đúng lệnh để sử dụng. Tất cả những gì tôi cần làm là luôn luôn nhấn cùng một ánh xạ khóa.
Aaron Shen

Câu trả lời:


4

Tóm tắt các ý kiến ​​của câu hỏi:

- Tôi đang cố gắng viết một chức năng để xoay các cửa sổ chia thành dọc nếu bố cục hiện tại theo chiều ngang và ngược lại khi chỉ có hai cửa sổ.

- Tại sao không đơn giản sử dụng ctrl-W_L? (hoặc ctrl-W_R)

- Tôi muốn nó là chức năng chuyển đổi thuận tiện, nó sẽ tự động phát hiện bố cục hiện tại và thực hiện xoay vòng chính xác cho tôi thay vào đó tôi cần phải suy nghĩ nó trong não và chọn đúng lệnh để sử dụng. Tất cả những gì tôi cần làm là luôn luôn nhấn cùng một ánh xạ khóa.

Đối với các bố cục chỉ chứa hai cửa sổ, chức năng sau sẽ hoạt động:

function! Rotate()
   " save the original position, jump to the first window
   let initial = winnr()
   exe 1 . "wincmd w"

   wincmd l
   if winnr() != 1
      " succeeded moving to the right window
      wincmd J " make it the bot window
   else
      " cannot move to the right, so we are at the top
      wincmd H " make it the left window
   endif

   " restore cursor to the initial window
   exe initial . "wincmd w"
endfunction

nnoremap <F3> :call Rotate()<CR>

chức năng tuyệt vời, mặc dù tôi không biết tất cả các tập lệnh vim, nhưng cảm ơn, nó hoạt động hoàn hảo !! btw, tôi chỉ thêm một kiểm tra bổ sung cho nó chỉ hoạt động khi chỉ có hai cửa sổ.
Aaron Shen

6

Tôi không nghĩ rằng có bất kỳ cách nào để kiểm tra điều này, thật không may.

Có thể có một cách để tạo một chức năng tùy chỉnh kiểm tra điều này: Các số cửa sổ luôn được đánh số từ 1 ở trên cùng bên trái đến n ở dưới cùng bên phải. Có lẽ người ta có thể sử dụng này kết hợp với các dữ liệu hình học từ winwidth(), winheight()và các giá trị của &lines&columnsđể tạo ra các bản đồ mong muốn?

Lưu ý, để nói chung, điều này cần hỗ trợ bố cục phức tạp hơn. Đầu ra phải là gì nếu ví dụ bên trái được chia thành hai? Có lẽ đây là lý do tại sao chức năng không tồn tại ở nơi đầu tiên ...

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.