Làm cách nào tôi có thể làm việc với các phần tách trong Vim mà không cần Ctrl-W?


24

Thiết bị đầu cuối của tôi không cho phép tôi nhập Ctrl+ W, vì đó là lối tắt để đóng tab thiết bị đầu cuối.

Tôi thích làm việc với các phần tách, nhưng tôi không thể tìm ra cách nào để làm như vậy mà không sử dụng C-W. Điều này buộc tôi phải sử dụng các tab, vì tôi có thể chuyển đổi giữa chúng với gt, gThoặc #gtnơi # là một con số, nhưng tôi tìm thấy điều này kém thuận lợi hơn chia rẽ như tôi chỉ có thể xem nội dung của một tập tin tại một thời điểm.

Tôi không thể sử dụng mouse=avì thiết bị đầu cuối của tôi không hỗ trợ điều đó.

Làm cách nào tôi có thể làm việc với các phần tách trong Vim mà không có kết hợp Ctrl+ Wcó sẵn?


1
Sử dụng ánh xạ tới wincmd Ví dụ bạn có thể ánh xạ: :nmap wj :wincmd j<cr>nó hoạt động giống như CTRL-W j(di chuyển đến cửa sổ bên dưới). :help wincmd
Alex Kroll

@AlexKroll Tại sao bạn không đăng nó dưới dạng câu trả lời? :-)
Martin Tournoij

1
@Carpetsmoker Tôi nghĩ nó không đầy đủ cho vấn đề này. CTRL-W jhoạt động với các bộ đếm (đi đến cửa sổ thứ n bên dưới từ hiện tại) giải pháp của tôi thì không.
Alex Kroll

2
Tôi thường không đánh giá cao lời khuyên như thế này, nhưng tôi sẽ tìm một thiết bị đầu cuối khác. <C-W>quá hữu ích một lối tắt (không chỉ ở nhiều nơi trong Vim, mà cả bash) để bị mất. Tôi tò mò không biết các ràng buộc quan trọng khác được sử dụng bởi thiết bị đầu cuối - <C-T>? Ít nhất, tôi sẽ xem xét liệu những thứ này có thể cấu hình được trong thiết bị đầu cuối hay không.
tommcdo

Câu trả lời:


23

Bạn chỉ có thể ánh xạ lại <C-w>cho sự kết hợp khác, ví dụ:

:nnoremap <C-e> <C-w>

Bây giờ bạn có thể sử dụng <C-e>và nó sẽ hoạt động như thể bạn đã nhấn <C-w>.

Điều này sẽ ghi đè lên <C-e>ánh xạ mặc định (cuộn xuống). Vim đã sử dụng mọi phím trên bàn phím và cách duy nhất để ngăn chặn điều này là sử dụng phím trưởng, hoạt động như một "tiền tố":

:nnoremap <Leader>w <C-w>

Trừ khi bạn đã ánh xạ lại <Leader>, bây giờ bạn có thể sử dụng \w(sau nhau). Tôi thực sự thích điều này vì tôi không thích các tổ hợp phím CTRL +.

Xem <Lãnh đạo> là gì? Làm cách nào tôi có thể tìm ra <Nhà lãnh đạo> được đặt thành gì? Và có thể sắp xếp lại <Nhà lãnh đạo> không? .


Giải quyết vấn đề của tôi. Đã thêm ánh xạ vào vimrc của tôi và thử nghiệm một chút mà không gặp vấn đề gì.
Mateon1

13

Tôi thực sự sử dụng :wincmdthường xuyên hơn Ctrl+ Wvì tôi thấy việc viết tắt dễ dàng hơn :winc.

Ví dụ, tương đương với Ctrl+ W L:winc l.


7

Tôi đã thiết lập các bản sửa lỗi sau trong .vimrc:

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

Bây giờ tôi có thể sử dụng Ctrl+hđể di chuyển sang cửa sổ bên trái, Ctrl+lđể di chuyển sang cửa sổ bên phải, v.v ... Nó dường như phù hợp về mặt logic với điều hướng thông thường của Vim.


4
Lưu ý rằng ánh xạ Ctrl + h trong thiết bị đầu cuối không phải lúc nào cũng hoạt động, vì đây thường là phím xóa lùi. Xem câu trả lời nàycâu hỏi này .
Martin Tournoij

Ngoài ra, bạn có thể sử dụng nnoremap <cr> <c-w>w, vì phím quay lại không được sử dụng nhiều trong chế độ bình thường. Sau đó, thật dễ dàng để xoay vòng qua các phần tách.
Hy vọng

5

Để xử lý các phân tách, tôi sử dụng plugin phụ , điều này thực sự khá tiện lợi: Nó cho phép bạn tạo một chế độ mới ("chế độ" như ở chế độ bình thường, chế độ trực quan, chế độ chèn, v.v.) trong đó bạn xác định các ràng buộc khóa mới .

Với điều đó, bạn không phải sử dụng Ctrl+wnữa và khi bạn ở chế độ mới, tất cả các phím đều được tự do ràng buộc: không còn vấn đề nào như "Chết tiệt, tôi không thể tìm thấy một tổ hợp phím nào như là một biểu thị và chưa được ánh xạ "

Bạn có thể cài đặt plugin với bất kỳ trình quản lý plugin thông thường nào và đây là một số cấu hình của tôi để cung cấp cho bạn một nguồn cảm hứng:


Tôi đã tạo một chế độ mới mà tôi đã gọi WindowsModetrong đó tôi thao tác chia tách:

call submode#enter_with('WindowsMode', 'n', '', '<Leader>k', ':echo "windows mode"<CR>')
call submode#leave_with('WindowsMode', 'n', '', '<Leader>')

Những dòng này có nghĩa là tôi nhập trong chế độ với Leaderkvà tôi thoát khỏi chế độ với Leader: Sau khi tôi nhấn Leaderktất cả các phím tôi nhấn sẽ:

  • Không làm gì nếu tôi không xác định ánh xạ cho chúng trong chế độ này
  • Làm những gì tôi quyết định ánh xạ chúng trong chế độ này (xem phần còn lại của câu trả lời)
  • Quay trở lại chế độ bình thường nếu tôi nhấn Leader

Khi tôi ở trong WindowsModecác dòng này, hãy hjklđiều hướng qua các phần tách nhưCtrl+whjkl

" 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')

Tôi đã sử dụng những dòng này để phân chia các cửa sổ với /!:

" split windows with / and !
call submode#map('WindowsMode', 'n', '', '/', '<C-w>s')
call submode#map('WindowsMode', 'n', '', '!', '<C-w>v')

qđóng một phân chia:

call submode#map('WindowsMode', 'n', '', 'q', '<C-w>c')

Di chuyển các phần tách với Ctrlhjkl:

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')

Vim-Subode cho phép thực hiện nhiều thứ mạnh mẽ, xem tài liệu để biết thêm chi tiết.


EDIT Một cách tiếp cận khác của mã con Window được mô tả ở đây . Tôi nghĩ rằng phương pháp được tác giả sử dụng thậm chí còn gần hơn để trả lời câu hỏi: Ở đây được sử dụng để tạo chế độ mới nhưng tất cả các <c-w>somethingánh xạ đều có sẵn với cùng các phím trong chế độ con:

" Go through every letter
for key in ['a','b','c','d','e','f','g','h','i','j','k','l','m',
\           'n','o','p','q','r','s','t','u','v','w','x','y','z']
  " maps lowercase, uppercase and <C-key>
  call submode#map('window', 'n', '', key, '<C-w>' . key)
  call submode#map('window', 'n', '', toupper(key), '<C-w>' . toupper(key))
  call submode#map('window', 'n', '', '<C-' . key . '>', '<C-w>' . '<C-'.key . '>')
endfor

" Go through symbols. Sadly, '|', not supported in submode plugin.
for key in ['=','_','+','-','<','>']
  call submode#map('window', 'n', '', key, '<C-w>' . key)
endfor

Bằng cách này, tất cả các ánh xạ <c-w>lowerCaseKey, <c-w>upperCaseKey, <c-w><c-Key>và ánh xạ <c-w>=_+-<>là tất cả các truy cập trong chế độ cửa sổ không có tiền tố<c-w>

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.