Nhờ this answer trên trang web SE dành riêng cho Vim, tôi đã đưa ra để thay thế khác trong đó sử dụng một plugin để tạo ra một submode dành riêng cho quản lý cửa sổ. Nó có nghĩa là với một sự kết hợp của các phím tôi nhập vào một chế độ mới, trong đó một số phím sẽ cho phép tôi làm các hành động khác nhau trên các cửa sổ.
Sau khi cài đặt vim-submode chúng ta hãy thêm một số dòng để vimrc
của chúng tôi để cấu hình một chế độ mới:
" Create a submode to handle windows
" The submode is entered whith <Leader>k and exited with <Leader>
call submode#enter_with('WindowsMode', 'n', '', '<Leader>k', ':echo "windows mode"<CR>')
call submode#leave_with('WindowsMode', 'n', '', '<Leader>')
Bây giờ bạn chỉ cần phải nhấn Leader + k để vào chế độ mới (Bạn có thể thay đổi điều này với dòng submode#enter_with
) và nhấn Leader để thoát khỏi nó.
" Change of windows with hjkl
call submode#map('WindowsMode', 'n', '', 'j', '<C-w>j')
call submode#map('WindowsMode', 'n', '', 'k', '<C-w>k')
call submode#map('WindowsMode', 'n', '', 'h', '<C-w>h')
call submode#map('WindowsMode', 'n', '', 'l', '<C-w>l')
Với những dòng này, sau khi bạn bước vào chế độ mới (với Leader + k) bạn sẽ có thể di chuyển giữa các cửa sổ của bạn với các phím hjkl
như nếu bạn đang sử dụng <c-w>hjlk
trong chế độ bình thường.
" Resize windows with <C-yuio> (interesting on azerty keyboards)
call submode#map('WindowsMode', 'n', '', 'u', '<C-w>-')
call submode#map('WindowsMode', 'n', '', 'i', '<C-w>+')
call submode#map('WindowsMode', 'n', '', 'y', '<C-w><')
call submode#map('WindowsMode', 'n', '', 'o', '<C-w>>')
Một số vài dòng hơn để cho phép thay đổi kích thước của cửa sổ với yuio
(tôi chọn các phím này bởi vì trên một bàn phím AZERTY họ chỉ là trên hàng qua hjkl
và là khá thuận tiện để sử dụng, có lẽ nó sẽ là hữu ích hơn khi thay đổi điều đó trên bàn phím qwerty, Im không chắc chắn).
" Move windows with <C-hjkl>
call submode#map('WindowsMode', 'n', '', '<C-j>', '<C-w>J')
call submode#map('WindowsMode', 'n', '', '<C-k>', '<C-w>K')
call submode#map('WindowsMode', 'n', '', '<C-h>', '<C-w>H')
call submode#map('WindowsMode', 'n', '', '<C-l>', '<C-w>L')
Hãy di chuyển cửa sổ bằng <C-hjkl>
.
" close a window with q
call submode#map('WindowsMode', 'n', '', 'q', '<C-w>c')
" split windows with/and !
call submode#map('WindowsMode', 'n', '', '/', '<C-w>s')
call submode#map('WindowsMode', 'n', '', '!', '<C-w>v')
Và một số ánh xạ khác để đóng cửa sổ và tạo phần mới.
let g:submode_keep_leaving_key = 1
let g:submode_timeout = 0
Cuối cùng, các tùy chọn này cho phép giữ phím và nó sẽ lặp lại hành động của nó.
Lưu ý Tôi biết rằng câu trả lời này mô tả nhiều hơn là chỉ điều hướng giữa các cửa sổ như OP đang yêu cầu.Tôi nghĩ rằng việc tạo một submode là khá thuận tiện nhưng chỉ quan tâm nếu submode cho phép làm nhiều hơn chỉ là một hành động.
Cảm ơn. Tôi biết về giải pháp này nhưng tôi đang tìm kiếm thứ gì đó sẽ cho phép điều hướng đến một cửa sổ cụ thể. Dù sao, đây sẽ là một giải pháp thỏa đáng trong trường hợp không có lựa chọn thay thế. – Adas
@Adas - Không có cách nào tốt hơn, không phải là tôi biết. Vấn đề là, bạn không điều hướng qua các cửa sổ (chúng chỉ là ... các quan điểm). Bạn điều hướng thông qua bộ đệm. Vì vậy, nếu bạn có cấu hình cửa sổ 2x2, phía trên bên trái sẽ không nhất thiết phải là số 1, phía trên bên phải thứ hai và cứ ... – Rook
Tôi có 'nnoremap w', vì tôi không bao giờ sử dụng phím trả lại ở chế độ thông thường. Sau đó, nó là nỗ lực để chu kỳ thông qua các chia tách. –