Giải pháp sẽ phụ thuộc vào thiết bị đầu cuối của bạn và cách thiết lập. Thiết bị đầu cuối Unix thường gửi một meta ký tự hoặc chuỗi khi bạn giữ Alt và nhấn một phím khác. Có hai cách truyền thống để gửi các ký tự meta đến các chương trình đầu cuối:
Lấy giá trị ASCII của phím khác được nhấn (nghĩa là phím không Alt ) và OR
nó với 128 (cài đặt bit 7 cao). Điều này không được khuyến khích trong những ngày này vì mã ký tự 8 bit kết quả không tương thích với mã hóa UTF-8 hoặc thậm chí 8 bit như Latin-1.
Gửi một ký tự thoát, ASCII 27, và sau đó là mã ASCII cho khóa khác. Điều này hoạt động tốt với nhiều loại mã hóa, nhưng nó có thể làm phức tạp việc xử lý các trường hợp mà bạn thực sự muốn gửi một ký tự thoát rõ ràng, ví dụ khi bạn đánh Trốn trong Vim.
Nếu thiết bị đầu cuối của bạn được đặt để sử dụng số 2, bạn có thể muốn làm noremap <Esc><CR> viw
. Tuy nhiên, điều này sẽ khiến Vim tạm dừng bất cứ khi nào nó nhận được một lối thoát. Để tránh điều này, bạn có thể set
một <A-CR>
mã khóa và sử dụng nó trong map
; điều này làm cho Vim có thể coi chuỗi này khác với chuỗi ký tự thoát + (đặc biệt, chuỗi có thời gian chờ ngắn hơn nhiều so với chuỗi được sử dụng bởi các ánh xạ khác; đồng thời, điều này có thể bảo vệ chống lại việc vô tình kích hoạt mã khóa khi bạn không cố gắng).
Các set
lệnh tự diễn giải các chuỗi như <Esc>
theo nghĩa đen (nghĩa là không chuyển đổi nó thành ASCII 27), vì vậy bạn phải bọc nó trong một exec
:
exec "set <A-CR>=\<Esc>\<CR>"
Sau đó, cuối cùng bạn cũng có thể thực hiện ánh xạ:
noremap <A-CR> viw
Bạn có thể cũng muốn thiết lập một rất ngắn ttimeoutlen
vì vậy bạn không vô tình kích hoạt ánh xạ mới này với Trốn Trở về , ví dụ.
:set timeout timeoutlen=3000 ttimeoutlen=100
sẽ làm cho ánh xạ "bình thường" chờ đủ 3 giây giữa các khóa nhưng ánh xạ mã khóa chỉ bằng một phần mười giây.
Tài liệu tham khảo :
:h :set-termcap
:h :map-alt-keys
:h 'ttimeout'