2012-01-28 28 views
27

Tôi đang sử dụng CtrlW để điều hướng giữa các cửa sổ chia nhỏ VIM. Có tồn tại bất kỳ cách nào khác nhau để làm điều này?Điều hướng giữa các cửa sổ VIM theo cách khác

Ví dụ, nếu tôi có, nói, 5 chia cửa sổ mở ra và muốn hướng đến cửa sổ góc phía trên bên trái, CtrlW là rất khó chịu vì nó đòi hỏi phải có nhiều tổ hợp phím.

Trả lời

38

Tại sao không thiết lập một cái gì đó như thế này?

nnoremap <C-h> <C-w>h 
nnoremap <C-j> <C-w>j 
nnoremap <C-k> <C-w>k 
nnoremap <C-l> <C-w>l 

Phần lớn nhanh hơn ...

+1

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

+0

@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

+2

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

3

Bạn có thể sử dụng lệnh nnoremap trong vimrc của bạn để sử dụng keybindings tùy chỉnh.

Cú pháp của nnoremap là thế này:

nnoremap new_keybinding keystrokes 

Lệnh nnoremap gán một keybinding mới đó, khi bạn nhấn nó trong chế độ bình thường, trình tự của các tổ hợp phím đã được gán cho lệnh này được lặp lại đến Vim .

EDIT: Cũng có lệnh nmap. Sự khác biệt giữa hai là nmap cho phép ghi đè các móc khóa hiện tại của bạn, trong khi nnoremap thì không. Sự khác biệt giữa chúng được giải thích trong this answer.

Ví dụ, tôi đã đưa những dòng này trong tôi .vimrc:

"Better window navigation 
nnoremap <C-j> <C-w>j 
nnoremap <C-k> <C-w>k 
nnoremap <C-h> <C-w>h 
nnoremap <C-l> <C-w>l 

này cho phép tôi sử dụng Ctrl + j, Ctrl + k, Ctrl + h, Ctrl + l thay vì Ctrl + Wj, Ctrl + Wk , Ctrl + Wh, Ctrl + Wl để điều hướng cửa sổ, trong khi vẫn giữ các móc khóa cũ.

Bạn cũng có thể tra cứu :help key-mappings để biết thêm thông tin.

+1

Về nmap/nnoremap - không, đó không phải là sự khác biệt. Bạn có thể ghi đè lên bản đồ nnoremap của bạn giống như bất kỳ khác, Sự khác biệt là nnoremap không đệ quy. – Rook

18

Bạn có thể sử dụng <number><c-w>w để chuyển sang một cửa sổ cụ thể. Vì vậy, 1<c-w>w đi cửa sổ đầu tiên (góc trên bên trái) 11<c-w>w di chuyển đến cửa sổ cuối cùng (ở đây tôi giả sử bạn có ít hơn 11 phân tách).

Tôi cũng tìm thấy các bản đồ sau đây thuận tiện và có chúng trong của tôi.vimrc

nnoremap <tab> <c-w> 
nnoremap <tab><tab> <c-w><c-w> 

mà tôi sử dụng cho cửa sổ khâu (vì một lý do nếu tôi không xác định việc lập bản đồ thứ hai nếu tôi nhấn tab hai lần tôi nhận được một thông báo "không nhận dạng dưới con trỏ)

Reading trang trợ giúp cho tổ hợp phím CTRL-W, có thậm chí là một cách thuận tiện hơn 1<c-w>w11<c-w>w để đi đến đầu tiên và cuối cùng cửa sổ:. <c-w>t đi đến cửa sổ phía trên và <c-w>b đi đến cửa sổ phía dưới

0

Bạn có thể tạo các chuyển động chéo bằng cách tiếp tục <C-w> lần thứ hai theo một hướng khác.

"move from bottom left to top right diagonally 
    "Mnemonic: keyboard finger movement from j to i 
    nnoremap <C-i> <C-w>l<C-w>k 

    "move from top right to bottom left diagonally 
    "Mnemonic: keyboard finger movement from j to n 
    nnoremap <C-n> <C-w>h<C-w>j 

    "move from top left to bottom right diagonally 
    "Mnemonic: keyboard finger movement from j to m 
    nnoremap <C-m> <C-w>l<C-w>j 

    "move from bottom right to top left diagonally 
    "Mnemonic: keyboard finger movement from j to y 
    nnoremap <C-y> <C-w>h<C-w>k 
+0

(^ M) có ý nghĩa đặc biệt và có thể xảy ra trong một số trường hợp –

1

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ác vấn đề liên quan