Tạo loại chế độ dòng lệnh <Esc> và các lệnh Ctrl


11

Hãy tưởng tượng bạn muốn trích dẫn từ dưới đây. Nếu |là vị trí con trỏ, bạn có thể dễ dàng trích dẫn từ với cw""<Esc>Pchế độ Bình thường.

|below

Tôi muốn đạt được hành vi tương tự trong chế độ Dòng lệnh. Câu hỏi của tôi là làm thế nào tôi có thể nói với chế độ Dòng lệnh mà tôi muốn nhập <Esc>. Tôi đã thử :norm cw""<Esc>Pvà một số biến thể khác nhưng tôi chỉ nhận được ""<Esc>Pthay vì "below".

Vẫn liên quan đến điều này tôi muốn biết làm thế nào tôi có thể thực hiện các lệnh Ctrl loại chế độ dòng lệnh. Ví dụ, tôi có thể trích dẫn từ đã nói ở trên cw"<C-r>""<Esc>. Nhưng sau đó tôi sẽ cần Command-line để gõ <C-r>cho tôi. Tôi có thể làm cái này như thế nào?


1
Giống như có sẵn <C-x><C-e>trong dòng để chỉnh sửa dòng lệnh $EDITOR, bạn có <C-f>trong Vim để mở cửa sổ dòng lệnh. Xem :help cmdline-window.
romainl 22/03/2015

Câu trả lời:


11

<C-v>là những gì bạn đang tìm kiếm. Nó cho phép bạn nhập các ký tự bằng chữ (ví dụ: một chữ Escthay vì chuỗi "Esc") mà không yêu cầu bạn thoát bất cứ thứ gì.

:norm cw""<C-v><Esc>P

hiển thị dưới dạng:

:norm cw""^[P

và sẽ làm những gì bạn muốn (nghĩa là trích dẫn từ). Bạn cũng có thể sử dụng điều này với các <C-?>ánh xạ khác . Ví dụ: yêu cầu thứ hai của bạn:

:norm cw"<C-v><C-r>""

hiển thị dưới dạng:

:norm cw"^R""

Và sẽ cho kết quả giống như trên. Không cần bao gồm thêm Escvào cuối.


10

Điều này là do các khóa đặc biệt như <Esc>không được dịch trong normalcác lệnh và được xử lý như bạn đã nhấn <Esc>. Để khắc phục điều này, bạn có thể sử dụng một execlệnh. Thích như vậy:

:exec "norm cw\"\"\<Esc>P"

Lưu ý rằng bạn phải đặt dấu gạch chéo ngược trước dấu ngoặc kép và dấu <Esc>và sử dụng dấu ngoặc đơn thay vì dấu ngoặc kép sẽ không hoạt động.


Điều này cũng làm việc cho các lệnh Ctrl? Làm thế nào tôi nên viết chúng trong lệnh?
Gonçalo Ribeiro

Vâng, nó nên hoạt động. Bạn có thể viết chúng như vậy:"\<C-{insert key}>"
EvergreenTree

2

Chế độ dòng lệnh là khác nhau; bạn không thể sử dụng các lệnh chỉnh sửa (chế độ bình thường) tương tự ở đó. Bạn có thể tìm thấy một danh sách các lệnh tại :help c_CTRL-V.

Bây giờ, có cửa sổ dòng lệnh ( :help command-line-window), có thể được nhập thông qua q:từ <C-F>chế độ thông thường và từ chế độ dòng lệnh. Trong cửa sổ đó , bạn có thể sử dụng tất cả các lệnh và ánh xạ thông thường, vì vậy đó sẽ là tùy chọn 1.

Tùy chọn 2 là ánh xạ đặc biệt cho chế độ dòng lệnh. Như tôi đã nói, bạn không thể sử dụng cách tiếp cận thông qua :normalet al. Chìa khóa để xác định đó là :help c_CTRL-\_eánh xạ, "đánh giá [s] {expr} và thay thế [s] toàn bộ dòng lệnh bằng kết quả." Đây là một ví dụ đơn giản chỉ hoạt động chính xác ở cuối dòng lệnh:

:cnoremap <F1> <C-\>esubstitute(getcmdline(), '\w\+$', '"&"', '')<CR>

1
Tôi không nghĩ OP có nghĩa là tạo ánh xạ cho dòng lệnh, nhưng để thực hiện ánh xạ từ dòng lệnh.
EvergreenTree
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.