Cách lặp lại ánh xạ khi nhấn phím


11

Tôi có trong .vimrcmột số ánh xạ đơn giản để thay đổi kích thước các cửa sổ chia một cách dễ dàng:

noremap <Leader><UP>    <C-w>+
noremap <Leader><DOWN>  <C-w>-

Điều đó hoạt động khá tốt nhưng ví dụ, khi tôi muốn thay đổi kích thước cửa sổ 10 dòng tôi phải nhấn và phát hành Leader+ UP10 lần.

Làm thế nào tôi có thể lặp lại ánh xạ này trong khi các phím được nhấn? Điều tôi muốn là khi tôi nhấn Leader+ UPánh xạ sẽ được áp dụng một lần sau đó sau một khoảng thời gian ngắn, nó sẽ được áp dụng một lần nữa và cứ thế trong khi tôi giữ các phím.

Lưu ý: Tôi biết có thể có tiền tố <C-w>+với số đếm và tôi có thể mã hóa nó trong ánh xạ hoặc chỉ cần nhập số trước khi sử dụng ánh xạ nhưng đó không phải là cách tôi muốn làm.

Lưu ý 2: Tôi cũng biết rằng một ánh xạ phổ biến để thay đổi kích thước cửa sổ là sử dụng +-các phím dễ bấm hơn nhiều lần nhưng tôi không muốn sử dụng các phím đó để làm điều đó.

Câu trả lời:


14

Bạn có thể thử bước vào một ... Vim submode ! Đối với trường hợp của bạn, một cái gì đó như thế này:

call submode#enter_with('grow/shrink', 'n', '', '<leader><up>', '<C-w>+')
call submode#enter_with('grow/shrink', 'n', '', '<leader><down>', '<C-w>-')
call submode#map('grow/shrink', 'n', '', '<down>', '<C-w>-')
call submode#map('grow/shrink', 'n', '', '<up>', '<C-w>+')

Điều này có nghĩa là, bạn nhập mã phụ bằng Leader-Uphoặc Leader-Down(cũng sẽ tăng / thu nhỏ cửa sổ một lần) và sau đó - bạn sẽ chỉ phải nhấn Uphoặc Downđể tăng / thu nhỏ cửa sổ, cho đến khi bạn thoát khỏi chế độ phụ.

Xem thêm trợ giúp, về các vấn đề thời gian chờ, nhưng, để vô hiệu hóa nó:

"disable submode timeouts:
let g:submode_timeout = 0

... có nghĩa là bạn sẽ ở trong mã đó vô thời hạn, cho đến khi bạn nhấn một phím khác Uphoặc Downhoặc cho đến khi bạn nhấn Esc.

Aaand, mẹo hữu ích tiếp theo tôi muốn giới thiệu:

" don't consume submode-leaving key
let g:submode_keep_leaving_key = 1

... Cho phép bạn di chuyển trực tiếp đến các lệnh tiếp theo của mình, khi nhấn một phím khác. Chẳng hạn, nhấn :cả hai sẽ rời khỏi chế độ con mở dòng lệnh.


Tôi đã thử giải pháp cho bạn nhưng dường như không hoạt động: Khi tôi nhấn <kbd> Nhà lãnh đạo </ kbd> + <kbd> UP </ kbd> Tôi có thông báo --submode: grow/shrink --và cửa sổ được thay đổi kích thước bởi một dòng nhưng lệnh không được ' t lặp lại. Tôi đã thử nó với 4 combo g:submode_keep_leaving_keyg:submode_timeout0 hoặc 1. Tôi không chắc mình có làm gì sai hay không. Tôi thường sử dụng vim trong một thiết bị đầu cuối nhưng hiện tại tôi chỉ có thể thử nghiệm với gVim trên windows nhưng tôi không chắc nó có thay đổi gì không.
statox

2
Lệnh không được lặp lại tự động, bạn vẫn phải tự đánh Uphoặc Downtự mình nhiều lần nếu cần (nhưng không phải nhấn Leadertrước)
VanLaser

Oh tôi hiểu mã tốt hơn bây giờ! Nó hoạt động hoàn hảo nhờ!
statox

2
Câu trả lời hoàn hảo và plugin tuyệt vời! (Lưu ý: bạn phải cài đặt plugin vim-subode trước khi thêm các lệnh trên vào ~/.vimrc.)
weibeld

1

Với winresizer , nhấn Ctrl- evà thay đổi kích thước!

Bạn sẽ sử dụng các phím hjkl thông thường (và có thể là các phím mũi tên).

Bạn có thể "chấp nhận" thay đổi kích thước hoặc "hủy bỏ" nó.

Ngoài ra còn có chế độ di chuyển nơi bạn trao đổi các cửa sổ xung quanh và chế độ lấy nét nơi bạn chuyển cửa sổ bạn đang hoạt động.

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.