Cách ánh xạ các phím trong Vim

Cach Anh Xa Cac Phim Trong Vim



Trong Vim, ánh xạ khóa là quá trình gán một bộ phím hoặc lệnh cho một phím cụ thể để thực hiện một tác vụ cụ thể. Ví dụ: để chọn tất cả các dòng trong tệp bạn sử dụng ggVG lệnh và bạn phải nhấn bốn phím để thực hiện. Còn việc thực hiện chỉ bằng một lần nhấn phím thì sao? Đây là nơi ánh xạ khóa Vim có ích. Ánh xạ khóa là một cách tự động hóa nhiều tác vụ được thực hiện thường xuyên trong Vim. Và bạn hẳn đã nghe nói về nó; nếu bạn đang làm điều gì đó nhiều hơn hai lần, hãy tự động hóa nó!

Trong hướng dẫn toàn diện này, tôi sẽ giải thích cách ánh xạ các khóa trong Vim để tự động hóa các thao tác. Từ việc tạo sơ đồ khóa cơ bản đến ánh xạ khóa nâng cao, cùng với các quy trình biến chúng thành vĩnh viễn và xóa chúng.

Cú pháp

Để ánh xạ khóa trong Vim, cú pháp sau được sử dụng:







bản đồ <đối số>



Trong cú pháp trên:



bản đồ nmap, imap, vmap, xmap, cmap hoặc omap
<đối số>* , ,

*Trong cú pháp trên, phần là tùy chọn.

Đối số đặc biệt của Vim

Đối số đặc biệt của Vim là các thẻ được sử dụng để cung cấp chức năng bổ sung cho sơ đồ bàn phím. Các đối số này xuất hiện sau lệnh :map và trước {rhs} và {lhs}.



Ví dụ: để tạo một bộ đệm bản đồ cụ thể, hãy sử dụng đối số đặc biệt theo cách sau:

:bản đồ < đệm > < C-a > ggVG
Để chặn các tin nhắn lặp lại từ sơ đồ bàn phím
Để làm cho bộ đệm bản đồ cụ thể (duy nhất cho bộ đệm hiện tại)
Để chỉ ra rằng bản đồ là một phần của tập lệnh hoặc plugin
<đặc biệt> *Nó được sử dụng để xác định các phím đặc biệt để ánh xạ bằng ký hiệu <> (Phím chức năng, điều khiển, shift và các phím không phải chữ cái khác)
Nó cho biết phía bên trái của ánh xạ là một biểu thức và cần được đánh giá để có được phía bên phải
<độc nhất> Để làm cho bản đồ trở nên độc đáo giữa các bản đồ địa phương và toàn cầu
<đợi đã> Để bỏ qua việc chờ ký tự lệnh tiếp theo trong bản đồ

Các ký hiệu khóa đặc biệt của Vim được đề cập trong hình ảnh sau đây.

Ví dụ: nếu bạn muốn sử dụng phím cách trong ánh xạ khóa, ký hiệu sẽ được sử dụng.

Tạo sơ đồ bàn phím cơ bản trong Vim

Hãy hiểu ánh xạ khóa Vim bằng một ví dụ cơ bản. Tôi muốn ánh xạ lệnh chọn tất cả các dòng ( ggVG ) ĐẾN ctrl+a phím. Để ánh xạ các phím ctrl+a, tôi sẽ chạy lệnh sau trong Vim.

:bản đồ < C-a > ggVG

Đây, biểu thị Điều khiển Một chìa khóa, trong khi ggVG là lệnh chọn tất cả các dòng trong file. Các :bản đồ từ khóa dành cho ánh xạ chế độ bình thường theo mặc định, tuy nhiên, :nmap cũng có thể được sử dụng một cách rõ ràng cho Bình thường cách thức.

Tương tự, để ánh xạ chức năng chuyển đổi số dòng bằng F1 sử dụng chính:

:bản đồ < F1 > :đánh số !

Bây giờ, khi bạn nhấn phím F1, số dòng sẽ được bật và nhấn lại sẽ tắt nó.

Lưu ý rằng phương pháp này sẽ chỉ ánh xạ các khóa trong bộ đệm hiện tại và sẽ bị xóa khi đóng bộ đệm.

Liệt kê các sơ đồ bàn phím

Để liệt kê tất cả các ánh xạ chính của các chế độ thông thường, hình ảnh và chế độ chờ vận hành, hãy sử dụng lệnh :map.

:bản đồ

Để liệt kê ánh xạ khóa của chèn dòng lệnh chế độ, hãy sử dụng :map! Yêu cầu.

:bản đồ !

Để liệt kê ánh xạ phím của một chế độ cụ thể, chỉ cần nhập chữ cái đầu tiên của chế độ trước từ khóa bản đồ.

:nmap Để hiển thị bản đồ của chế độ bình thường
:imap Để hiển thị bản đồ của chế độ chèn
:vmap Để hiển thị bản đồ của chế độ trực quan và chọn
:smap Để hiển thị bản đồ của chế độ đã chọn
:xmap Để hiển thị bản đồ của chế độ trực quan
:cmap Để hiển thị bản đồ của chế độ dòng lệnh
:omap Để hiển thị bản đồ của nhà điều hành ở chế độ chờ xử lý

Hơn nữa, để liệt kê tất cả các bản đồ bao gồm bản đồ plugin có đường dẫn, hãy sử dụng :bản đồ dài dòng yêu cầu.

:bản đồ dài dòng

Đối với một khóa cụ thể, chỉ cần đề cập đến khóa đó trong lệnh ( :bản đồ chi tiết ).

Tạo sơ đồ bàn phím vĩnh viễn

Các sơ đồ bàn phím được đề cập ở phần trên sẽ chỉ ánh xạ các khóa trong bộ đệm hiện tại. Để ánh xạ khóa Vim vĩnh viễn, bản đồ phải được đặt trong tệp vimrc.

Lưu ý rằng trong khi đặt sơ đồ bàn phím vào vimrc tập tin, không thêm dấu hai chấm (:) trước bản đồ yêu cầu.

Sau khi đặt sơ đồ bàn phím vào vimrc tập tin, lưu và thoát nó bằng lệnh :wq hoặc sử dụng phím shift+zz. Các sơ đồ bàn phím được đặt trong vimrc tệp sẽ có tính chung và có thể được sử dụng trong tất cả các phiên Vim. Tuy nhiên, một số sơ đồ bàn phím nhất định có thể tạm thời bị vô hiệu hóa nếu chúng ảnh hưởng đến công việc trong phiên hiện tại, hãy xem phần Cách xóa sơ đồ bàn phím trong Vim bên dưới.

Các vimrc là tệp cài đặt của Vim chứa nhiều lệnh và cài đặt khác nhau. Nó có mặt trong /usr/share/vim/ thư mục trên macOS và /etc/vim trên Linux. Điều quan trọng cần lưu ý là vimrc các tệp trong thư mục được đề cập là các tệp dành riêng cho hệ thống. Bạn cũng có thể chỉnh sửa các tệp này để ánh xạ khóa, nhưng tôi khuyên bạn nên tạo một tệp dành riêng cho người dùng. vimrc tập tin trong thư mục chính.

Tránh đệ quy

Trước khi tiếp tục, điều quan trọng là phải tìm hiểu về đệ quy trong ánh xạ khóa Vim. Nhược điểm của nó và cách phòng tránh. Nó có thể được hiểu thông qua việc sử dụng một ví dụ.

:bản đồ đ 3jdd

Trong ví dụ trên, tôi đã ánh xạ đ phím để di chuyển xuống 3 dòng và xóa dòng dưới con trỏ. Bây giờ, khi tôi nhấn nút đ , nó sẽ cố gắng thực thi bản đồ 3jdd . Vim sẽ giải thích đ ra lệnh dưới dạng bản đồ và thực hiện bản đồ nhiều lần, như minh họa trong hình ảnh sau đây.

Ghi chú : Đệ quy có thể đóng băng trình soạn thảo Vim. Để giải phóng nó, nhấn ctrl+c phím.

Để tránh đệ quy, hãy thay thế bản đồ từ khóa với sơ đồ , Ở đâu ' không làm lại ' có nghĩa không đệ quy . Tôi sẽ thay thế bản đồ từ khóa với sơ đồ để sửa lỗi đệ quy trong sơ đồ bàn phím trên.

:noremap đ 3jdd

Tôi sẽ khuyên bạn nên sử dụng sơ đồ thay vì bản đồ để tránh vô tình tạo ánh xạ đệ quy.

Tạo sơ đồ bàn phím dành riêng cho chế độ

Vim đã làm cho việc ánh xạ phím trở nên linh hoạt đến mức ngay cả sơ đồ bàn phím của một chế độ cụ thể cũng có thể được tạo khá dễ dàng. Ví dụ: nếu bạn đã tạo sơ đồ bàn phím cho chế độ chèn bằng cách sử dụng F1 key, sau đó bạn có thể ánh xạ tương tự F1 ở chế độ khác để thực hiện thao tác hoàn toàn mới.

Trong ví dụ sau, tôi đã ánh xạ F1 phím để xóa 3 dòng trong Bình thường chế độ và kéo 3 dòng trong chèn cách thức.

:nmap < F1 > 3ngày
:imap < F1 > < C-t >

Bản đồ đầu tiên xóa ba dòng ở chế độ bình thường khi nhấn phím F1, trong khi bản đồ thứ hai thêm một vết lõm vào dòng hiện tại khi ở chế độ chèn bằng cùng một phím. Bây giờ, hãy hiểu ánh xạ ở từng chế độ.

Ánh xạ chế độ bình thường

Để áp dụng bản đồ ở chế độ bình thường, chỉ sử dụng nmap từ khóa. Ví dụ: để sao chép tất cả các dòng trong một tệp bằng cách sử dụng ctrl+c phím, tôi sẽ sử dụng lệnh sau.

:nmap < C-c > ggVGy

Như đã thảo luận trước đó, cách tốt nhất là sử dụng phương pháp không đệ quy để ánh xạ khóa, do đó, tôi sẽ thay thế phương thức nmap với nnoremap từ khóa.

:noremap < C-c > ggVGy

Đặt nó không có dấu hai chấm (:) trong vimrc tập tin để biến nó thành một sơ đồ bàn phím vĩnh viễn.

tôi sẽ sử dụng sơ đồ thay cho bản đồ trong ví dụ sau.

Chèn bản đồ chế độ

Để ánh xạ các phím cho chế độ chèn, chỉ cần sử dụng Tôi thay vì N . Ví dụ: ở chế độ chèn, ctrl+p ctrl+n các phím được sử dụng để tự động hoàn thành từ dựa trên kết quả khớp ngược và xuôi tương ứng. Để lập bản đồ ctrl+p phím bằng phím tab, tôi sẽ sử dụng lệnh sau.

:inoremap < Chuyển hướng > < C-p >

Quan trọng hơn, nếu bạn muốn lập bản đồ chế độ chờ xử lý của nhà điều hành các lệnh trong chế độ chèn , sau đó bạn cần chèn ở phía bên phải để thoát chế độ chèn nhằm thực hiện các lệnh đó. Ví dụ: trong sơ đồ bàn phím sau, tôi muốn xóa 3 dòng bằng cách sử dụng ctrl+x phím và vào lại chế độ chèn.

:inoremap < C-x > 3ddi

Bây giờ, khi tôi nhấn nút ctrl+x phím, nó sẽ in 3ddi lệnh thay vì thực hiện nó.

Để khắc phục, tôi sẽ chèn trước 3ddi yêu cầu.

:inoremap < C-x > < Thoát > 3ddi

Bây giờ, lệnh sẽ thực thi việc giữ tôi ở chế độ chèn.

Nhiều máy tính xách tay mini thiếu Thoát phím quan trọng để thoát khỏi chế độ hiện tại. Vì vậy, để lập bản đồ Thoát để thoát chế độ chèn, có thể sử dụng ánh xạ phím. Trong ví dụ sau, tôi đang sử dụng bán tại phím để thoát về chế độ bình thường.

:inoremap cũ < Thoát >

Khi bạn nhấn nhanh nút bán tại các phím, chế độ chèn sẽ được thoát, do đó sẽ chuyển sang chế độ bình thường.

Ánh xạ chế độ trực quan

Chế độ trực quan là một chế độ rất quan trọng để chọn văn bản trong trình soạn thảo Vim. Ngoài lựa chọn cơ bản, chế độ trực quan còn có các chế độ khác nhau như đường trực quan và chế độ khối trực quan.

Ở chế độ trực quan, dấu ngã (~) được sử dụng để chuyển đổi trường hợp. Để sử dụng dấu ngã (~), bạn phải nhấn hai phím (shift+~) . Trong ví dụ sau, tôi đang ánh xạ phím c vào chế độ trực quan để chọn một từ dưới con trỏ và thay đổi kiểu chữ của nó.

:vnoremap c iw~

Bây giờ, nhấn v để vào chế độ trực quan và nhấn phím c để chuyển từ bên dưới con trỏ như minh họa trong ảnh GIF sau.

Ánh xạ chế độ dòng lệnh

Nhiều lệnh thiết yếu của Vim chỉ hoạt động ở chế độ dòng lệnh. Chẳng hạn như, để lưu tập tin :TRONG lệnh được sử dụng tương tự để lưu và thoát :wq lệnh được sử dụng. Tất cả các tab và thao tác phân chia cũng được thực hiện ở chế độ dòng lệnh. Ví dụ: để tạo một tab mới, : cấp dưới lệnh được sử dụng. Vâng, để nhanh chóng tạo một tab, ctrl+t phím là đủ.

:cnoremap < C-t > chủ thể < CR >

Bây giờ, nhấn dấu hai chấm (:) để vào chế độ dòng lệnh và sau đó ctrl+t để mở một tab mới; nó nhanh hơn nhiều so với việc gõ toàn bộ chủ thể lệnh và Trở lại chìa khóa.

Tạo lệnh tùy chỉnh Vim
Việc vào chế độ lệnh để thực thi bản đồ có vẻ ít hữu ích hơn. Nhưng bạn có thể tạo các lệnh tùy chỉnh của riêng mình trong Vim bằng cách sử dụng :yêu cầu lựa chọn. Tính năng này khá giống với ánh xạ phím Vim. Ví dụ: để tạo lệnh nhanh nhằm đặt số dòng và độ rộng văn bản thành 80, hãy sử dụng lệnh sau.

:lệnh Mycmd :đặt số chiều rộng văn bản = 80

Bây giờ, hãy vào chế độ lệnh và thực hiện lệnh :Mycmd yêu cầu.

Ánh xạ chế độ chờ xử lý của toán tử

Chế độ chờ vận hành là chế độ trong đó Vim đợi lệnh chuyển động sau khi nhấn phím vận hành. Các toán tử phổ biến là y, d và c. Ví dụ: để xóa dòng hiện tại và 3 dòng tiếp theo, bạn sẽ sử dụng toán tử d với 3j chuyển động (d3j). Bạn không thể nhấn đồng thời các phím này để đạt được thao tác mong muốn.

Chế độ này thường được sử dụng để lập bản đồ chuyển động. Hãy lập bản đồ một chuyển động sẽ chọn dòng hiện tại và 3 dòng theo sau nó.

:onoremap < F2 > 3j

Bây giờ, để kéo dòng hiện tại và 3 dòng tiếp theo, hãy sử dụng lệnh theF2 các phím, theo cách tương tự, d toán tử cũng có thể được áp dụng.

Một điều quan trọng khác cần ghi nhớ là nếu bạn thêm số đếm vào chuyển động được ánh xạ nêu trên, giả sử 2 , bản đồ sẽ lấy nó là 23j chứ không phải 6j. Để khắc phục điều này, có thể sử dụng thanh ghi biểu thức “=. Bản đồ trên có thể được sửa đổi thành @=’3j’ .

:onoremap < F2 > @ =’3j’ < CR >

Cách lập bản đồ sự kiện chuột

Mặc dù Vim là trình soạn thảo văn bản tập trung vào bàn phím có thể tùy chỉnh hoàn toàn, nhưng tính khả dụng của chức năng chuột khiến nó thậm chí còn tốt hơn. Ngoài các phím bàn phím thông thường, tất cả các sự kiện chuột cũng có thể được ánh xạ trong Vim. Ví dụ: nếu bạn muốn ánh xạ nhấp đúp chuột phải và nhấp đúp chuột trái để chuyển các điểm tương ứng về phía trước và phía sau, hãy sử dụng ánh xạ sau.

:noremap < 2 -Chuột phải > ] `
:noremap < 2 -Chuột trái > [ `

Các sự kiện chuột khác có thể được ánh xạ được đưa ra trong bảng sau.

<2-Chuột trái>
<2-Chuột Phải>
<3-Chuột trái>
<3-Chuột Phải>
<4-Chuột trái>
<4-Chuột Phải>

Cách lập bản đồ bằng Chìa khóa lãnh đạo trong Vim

Ánh xạ Vim không đầy đủ nếu không có phím dẫn đầu. Khóa dẫn đầu là khóa mặc định có thể được sử dụng để ánh xạ các khóa, ngay cả khi chúng được ánh xạ để thực hiện một số tác vụ khác. Ví dụ: nếu bạn đã lập bản đồ d phím để xóa tất cả các dòng, sau đó chúng ta có thể ánh xạ cùng một phím để chỉ xóa 5 dòng bằng phím trưởng.

Dành cho những người chưa quen với phím lãnh đạo Vim. Đó là một khóa có tiền tố là một khóa hoặc bộ khóa khác để ánh xạ các lệnh hoặc thao tác. Khóa dẫn đầu mặc định của Vim là dấu gạch chéo ngược (\), nhưng có thể tùy chỉnh.

Ví dụ, đ lệnh dùng để xóa dòng dưới con trỏ. Nếu bạn muốn lập bản đồ đ lệnh xóa tất cả các dòng trong tệp, sau đó bạn có thể sử dụng phím lãnh đạo.

:noremap < Lãnh đạo > đ ggVGd

Bây giờ, bất cứ khi nào bạn nhấn nút \dd key, tất cả các dòng trong tập tin sẽ bị xóa. Bạn có thể gán phím lãnh đạo Vim làm phím điều khiển trên Windows hoặc phím lệnh trong macOS.

Cách ánh xạ hàm Vimscript

Trình soạn thảo Vim không bị giới hạn trong các lệnh hoặc thao tác. Có toàn bộ ngôn ngữ lập trình xung quanh Vim để tạo chức năng tùy chỉnh được gọi là Vimscript. Bạn có thể dễ dàng tạo tập lệnh hoặc hàm và ánh xạ nó tới một khóa. Ví dụ: hãy tạo một hàm cho phép các cài đặt như số dòng, chức năng chuột và độ rộng văn bản.

chức năng Cài đặt của tôi ( )
bộ con số
bộ chuột = một
bộ chiều rộng văn bản = 80
chức năng cuối cùng

Đặt chức năng này vào tệp vimrc.

Hãy ánh xạ hàm này với phím đầu và phím s. tôi sẽ sử dụng

:noremap < Lãnh đạo > s :gọi Cài đặt của tôi ( ) < CR >

Bây giờ, bất cứ khi nào bạn nhấn nút \S các phím, hàm sẽ được gọi và mọi chức năng bên trong hàm sẽ thực thi.

Ghi chú : Chữ cái đầu tiên của tên hàm phải luôn được viết hoa trong khi tạo hàm tùy chỉnh trong Vim.

Cách ánh xạ các lệnh bên ngoài trong Vim

Các lệnh bên ngoài cũng có thể được ánh xạ trong Vim. Các lệnh bên ngoài đề cập đến các lệnh Linux hoặc Unix. Ví dụ: nếu bạn muốn ánh xạ bên ngoài loại lệnh sắp xếp tất cả các dòng trong bộ đệm hiện tại vào F1 chìa khóa, sử dụng lệnh sau.

:noremap < F1 > : %! loại < CR >

Theo cách tương tự, nếu bạn đang viết một tệp tập lệnh và làm cho nó có thể thực thi được mà không cần rời khỏi phiên Vim, bạn có thể sử dụng lệnh chmod ra lệnh nội bộ. Ví dụ: để làm cho tệp hiện tại có thể thực thi được, bạn có thể thực thi lệnh :!chmod +x % ở Vim. Nếu bạn thường xuyên thực hiện tác vụ này thì chỉ cần ánh xạ một phím tới nó.

:noremap < F1 > : ! chmod +x %

Trong Vim, bất kỳ lệnh bên ngoài nào cũng có thể được sử dụng cùng với dấu chấm than (!).

Cách xóa sơ đồ bàn phím trong Vim

Để xóa sơ đồ bàn phím trong Vim, trước tiên hãy xác định vị trí nó được xác định. Như đã thảo luận trước đó, sơ đồ bàn phím có thể ở dạng đệm cục bộ và cố định. Nếu sơ đồ bàn phím là cố định và được đặt trong tệp vimrc thì chỉ cần xóa chúng khỏi tệp sẽ hủy ánh xạ các khóa.

Nếu việc ánh xạ được thực hiện trong bộ đệm hiện tại thì chúng có thể được loại bỏ bằng cách sử dụng :unmap hoặc :unmap! lệnh.

  • :unmap để xóa sơ đồ bàn phím của các chế độ thông thường, trực quan, chọn hoặc chờ vận hành
  • :unmap! để xóa sơ đồ bàn phím của chế độ chèn và dòng lệnh

Ví dụ, để loại bỏ phím, hãy sử dụng :unmap . Hơn nữa, việc loại bỏ các phím có thể tùy theo chế độ cụ thể. Nếu bạn muốn xóa bản đồ chế độ bình thường, hãy sử dụng :nunmap . Các lệnh dành riêng cho chế độ khác để xóa sơ đồ bàn phím được đề cập bên dưới:

:numap Để loại bỏ bản đồ của Bình thường cách thức
:iunmap Để loại bỏ bản đồ của chèn cách thức
:vunmap Để loại bỏ bản đồ của thị giác lựa chọn cách thức
:bản đồ mặt trời Để loại bỏ bản đồ của lựa chọn cách thức
:xunmap Để loại bỏ bản đồ của thị giác cách thức
:cunmap Để loại bỏ bản đồ của dòng lệnh cách thức
:ounmap Để loại bỏ bản đồ của nhà điều hành đang chờ xử lý cách thức

Để xóa tất cả bản đồ trong bộ đệm hiện tại, hãy sử dụng :mapclear yêu cầu.

:mapclear

Lệnh trên sẽ xóa tất cả các sơ đồ bàn phím ở chế độ bình thường, trực quan, chọn hoặc vận hành.

Để xóa tất cả các sơ đồ bàn phím của chế độ chèn và dòng lệnh, hãy sử dụng:

:mapclear !

Lưu ý rằng các lệnh Vim mặc định không thể rõ ràng, tuy nhiên, có thể tắt lệnh này bằng cách sử dụng lệnh :unmap lệnh với . Ví dụ: nếu bạn muốn tắt chức năng dd xóa dòng dưới con trỏ, thì hãy sử dụng :unmap dd .

:unmap đ < không >

dd sẽ không còn hoạt động trong bộ đệm hiện tại nữa. Sử dụng phương pháp này, mọi sơ đồ bàn phím đều có thể bị tắt đối với phiên hiện tại.

Bảng cheat ánh xạ khóa Vim

Hình ảnh sau đây cung cấp danh sách tất cả các lệnh và chế độ cụ thể của chúng để tham khảo.

Phần kết luận

Ánh xạ khóa Vim là một cách thuận tiện để tự động hóa các tác vụ của bạn, liên kết phím, lệnh và các hoạt động khác được sử dụng thường xuyên. Đây là một chủ đề đa dạng và trong hướng dẫn này, tôi đã đề cập đến tất cả các khía cạnh chính liên quan đến ánh xạ khóa trong Vim. Từ cú pháp chung đến tạo sơ đồ bàn phím cơ bản và tất cả các cách để ánh xạ các hàm Vimscript nâng cao và các lệnh bên ngoài. Để tìm hiểu thêm về ánh xạ khóa Vim, hãy sử dụng :trợ giúp ánh xạ khóa lệnh trong Vim.