Làm thế nào để ánh xạ phím Alt?


37

Tôi đang cố gắng ánh xạ Altkhóa theo cách sau:

:map <A-j> j
:map <A-k> k

nhưng nó không hoạt động (chuông được bật Alt + j/ Alt + k).

Tôi đang thiếu gì?

Tôi đang sử dụng Terminal trên OSX, điều tương tự cũng xảy ra với Linux từ xa.


Vào Ctrl + v, Alt + jtôi đã có: ?~H~F( khi encoding=utf-8).

Vào Ctrl + v, Alt + ktôi đã có: ?~Z( ˚khi encoding=utf-8).

Chạy vim không có plugin ( -u NONE) không tạo ra sự khác biệt.


1
Alt(nhấn, không giữ) và sau đó jlàm việc? Với xtermít nhất tôi cần phải thiết lập metaSendsEscapeđể true để có được những trình tự này để làm việc ... Tôi không biết nếu bạn có cùng một vấn đề, và tôi không sử dụng OSX vì vậy tôi không thể kiểm tra ...
Martin Tournoij

@Carpetsmoker Nhấn Alt, nhả, jhoặc bất kỳ phím nào khác hoạt động như bình thường. Tôi đã kiểm tra và tìm thấy tùy chọn 'Sử dụng tùy chọn làm khóa meta' , bật nó và nó hoạt động ngay bây giờ. Vì vậy, thiết lập metaSendsEscapeđã lừa, cảm ơn.
kenorb

3
Câu hỏi này đã được trả lời trước đây (với câu trả lời tốt hơn) tại đây: stackoverflow.com/questions/6778961/
mẹo

Câu trả lời:


35

Đó là cách tôi làm trên Linux hoặc Cygwin:

Trước tiên hãy kiểm tra ký tự nào được gửi bởi thiết bị đầu cuối của bạn khi bạn nhấn ALT+ J:

Để làm điều này, tôi vào giao diện điều khiển và chạy sed -n l(bạn cũng có thể sử dụng catnó). Sau đó, tôi nhấn ALT+ Jvà thấy rằng các ký tự trên màn hình là ^[j.

Tôi thay thế ^[bằng \e(vì đó là những gì được gửi bởi thiết bị đầu cuối của tôi khi tôi nhấn esc) và chuỗi cuối cùng cho tôi là \ej.

Sau đó tôi viết nó cho tôi .vimrc:

execute "set <M-j>=\ej"
nnoremap <M-j> j

Và bản đồ hoạt động.


4
Tôi không thể tìm thấy tài liệu cho :set <M-j>=\ejphần này. Tôi nên tìm kiếm cái gì?
Evgeni Sergeev

1
Cảm ơn câu trả lời, đây là giải pháp duy nhất có hiệu quả với tôi w / Iterm + vim
newUserNameHere

Không, cái này không hoạt động. Đôi khi ESC-J sẽ hoạt động như ALT-J
user3751385

1
@EvgeniSergeev Xem:help :set-termcap
Giàu

9

Với sự giúp đỡ của Carpetsmoker , có vẻ như Terminal không được cấu hình để 'Sử dụng Alt / tùy chọn làm khóa meta' (điều này đặc biệt phổ biến đối với Thiết bị đầu cuối GUI).

Đối với Terminal trên OSX, nó nằm trong Tùy chọn -> Cài đặt -> Tab Bàn phím -> 'Sử dụng tùy chọn làm khóa meta' . Kiểm tra: Làm cách nào tôi có thể thay đổi Terminal để sử dụng tùy chọn làm khóa meta? ( Mavericks ).

Đối với XTerm, hãy kiểm tra: Định cấu hình XTerm thành Mặc định cho Meta Sends Escape có nội dung:

Thêm dòng này vào bất cứ đâu trong tệp .Xdefaults cá nhân của bạn ( ~/.Xdefaults):

xterm*metaSendsEscape: true

Sau đó tải lại cấu hình với xrdb. Nếu không có bước này, các thay đổi .Xdefaultssẽ không có hiệu lực cho đến khi X tiếp theo khởi động lại:

xrdb -l ~/.Xdefaults

Sau đó, ánh xạ tiêu chuẩn với Altkhóa như:

:map <A-j> j
:map <A-k> k

hoạt động tốt

Để được giúp đỡ, xem : :h :map-alt-keys.


4
Cũng có thể muốn xem xét :h :map-alt-keysnhư một nguồn thông tin khác
Peter Rincker

4

Tương tự như câu trả lời của Kossak nhưng đơn giản hơn một chút, bằng cách ánh xạ các phím bấm theo nghĩa đen.

Ở chế độ bình thường sau khi nhấn :hoặc chèn vào .vimrc, ánh xạ đầu vào trực tiếp bằng cách bắt đầu ánh xạ:

nnoremap 

sau đó nhấn Ctrl+ Vrồi nhấn phím để ghi, ví dụ Alt+ . Điều này sẽ hiển thị như một cái gì đó như thế này:

nnoremap ^[[1;3D

nhưng mỗi cái ^[là một ký tự thoát đơn, nghĩa đen và tô sáng cú pháp sẽ cho thấy điều này. Thay thế (các) lối thoát bằng chữ bằng văn bản <Esc>và nối thêm lệnh bạn muốn sử dụng:

nnoremap <Esc>[1;3D <C-w>h

Tôi biết OP đã ánh xạ Alt+ chữ cái, nhưng tôi đã sử dụng các mũi tên để chỉ ra cách làm điều đó cho một thứ có thể không được ánh xạ theo mặc định.


Làm việc như một cơ duyên, cảm ơn rất nhiều!
aryndin

2

Điều này hoạt động với tôi trên thiết bị đầu cuối Ubuntu 16.04 xfce (và thiết bị đầu cuối rỉ sét)

Đặt trình kích hoạt đoạn mã cực đại thành Meta-/(giống như đoạn mã emacs)

let g:UltiSnipsExpandTrigger="^[/"

Bây giờ tôi gõ ^[/vào vim

Ở chế độ chèn Ctrl-V Alt-/

( MetaAltphím trên bàn phím PC của tôi)


1

Nếu Control+Vtheo sau là ALT-xchương trình ^[x(nhập vào thiết bị đầu cuối), bạn có thể sửa nó bằng tập lệnh nhỏ này từ vim.wikia.com :

for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

Thêm vào .vimrc cho tất cả ánh xạ phím alt.

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.