Trình chỉnh sửa Vim: chọn từ bằng Alt + Return


0

Tôi đã sử dụng một trình soạn thảo nhất định trong nhiều năm và đã quen với việc chọn từ bằng Alt + Return. Tôi không thể bỏ thói quen đó và vẫn cố gắng làm điều đó trong Vim quá thường xuyên, luôn luôn không thành công.

Vì vậy, tôi thử những điều này:

noremap     <M-Return>  viw
noremap     <C-Return>  viw

Bạn thấy đấy, tôi đang thử cả hai, Alt + Return và Ctrl + Return. Nhưng không hoạt động.

Những công việc này:

noremap     <C-M>   viw

Tôi nhấn Ctrl + m và từ được chọn. Nhưng nó đi kèm với một hiệu ứng phụ kỳ lạ: Trả về / Nhập một mình cũng chọn từ! Và tôi không muốn điều đó.

Vì vậy, đó là một câu hỏi kép:

1) Làm cách nào tôi có thể tạo Alt + Enter chọn từ hiện tại (dưới con trỏ)?

2) Tại sao Return / Enter hoạt động như Ctrl + m?

Câu trả lời:


4

Do cách xử lý đầu vào bàn phím được xử lý bên trong, điều này không may thường không thể thực hiện ngày nay, ngay cả trong GVIM. Một số kết hợp chính, như Ctrl + không phải là chữ cái không thể được ánh xạ và Ctrl + thư so với Ctrl + Ca + thư không thể được phân biệt. (Trừ khi thiết bị đầu cuối của bạn gửi một khác biệt thuật ngữ mã cho nó, mà hầu hết không.) Trong chế độ chèn hoặc dòng lệnh, hãy thử gõ tổ hợp phím. Nếu không có gì xảy ra / được chèn, bạn không thể sử dụng tổ hợp phím đó. Điều này cũng áp dụng cho <Tab> / <C-I>, <CR> / <C-M> / <Esc> / <C-[> vv (Chỉ có ngoại lệ là <BS> / <C-H>)

Một số người (trước hết là Paul LeoNerd Evans) muốn khắc phục điều đó (ngay cả đối với bảng điều khiển Vim trong các thiết bị đầu cuối hỗ trợ này), và đã đưa ra nhiều đề xuất, cp. http://groups phối hợp

Nhưng cho đến ngày hôm nay, vẫn chưa có bản vá hay tình nguyện viên nào được đưa ra, mặc dù nhiều người đã bày tỏ mong muốn có được điều này trong phiên bản chính Vim 8 trong tương lai.


4

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:

  1. 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.

  2. 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 :

  1. :h :set-termcap
  2. :h :map-alt-keys
  3. :h 'ttimeout'

2

Mở một thiết bị đầu cuối hoặc đặt mình vào chế độ chèn trong vim và sau đó nhấn <c-v>Return và bạn sẽ thấy tại sao <C-M> ràng buộc có tác dụng đó.

Điều đó cũng sẽ giải thích cho bạn tại sao bạn không thể ràng buộc <C-Return> hoặc là <M-Return> trong console vim (bạn có thể vào gvim nhưng tôi không chắc).


Ok, Ctrl + m giống như Enter. Đó là một phần của bí ẩn được giải quyết.
movingtype

Điều đó giải quyết cả hai phần nếu bạn nghĩ về nó. Nếu & lt; Nhập & gt; là & lt; C-M & gt; sau đó những gì sẽ & lt; C-Enter & gt; được không Hoặc & lt; M-Enter & gt;? Như tôi đã nói, gvim có thể liên kết những thứ này vì nó có thêm phím nhấn / v.v. khả năng phát hiện (mặc dù khóa này có nằm trong tập hợp mà gvim có thể xử lý hay không nhưng tôi không chắc chắn về vim).
Etan Reisner

Tôi không sử dụng gvim, bao giờ.
movingtype

Vì vậy, bạn đang nói rằng nó không thể?
movingtype

Trong giao diện điều khiển vim? Tôi không tin là có thể. Tôi không tin rằng đó là một chuỗi khóa thường đại diện. Tôi tin rằng các phiên bản hiện tại của xterm nhưng vim không thể sử dụng định dạng đại diện đó.
Etan Reisner
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.