Ánh xạ ctrl-backspace trong terminator


8

Gần đây tôi đã bắt đầu sử dụng Vim. Từ các biên tập viên trước đây, tôi thường xóa toàn bộ từ bằng cách nhấn Ctrl- Backspace. Sau khi xem tài liệu tôi thấy rằng điều này đã được thực hiện bằng cách nhấn Ctrl- wtrong Vim. Vấn đề là sau khi đã quen với việc nhấn Ctrl- w, tôi đã bắt đầu đóng các tab và trò chuyện mỗi khi tôi viết sai một từ (trong khi viết câu hỏi này, tôi đã đóng tab này 5 lần). Vì vậy, tôi đã kiểm tra cách ánh xạ các phím trong Vim và thử điều này:

:imap <C-BS> <C-w>

Thật không may, nó đã không làm việc. Sau một chút nghiên cứu tôi thấy rằng thiết bị đầu cuối không phân biệt giữa Ctrl- BackspaceBackspace. Tôi đã thấy một số bản hack và bản vá để khắc phục vấn đề này, nhưng tôi không thể khiến chúng hoạt động trên terminator (đây là trình giả lập tôi muốn sử dụng).

Có cách nào để lập bản đồ Ctrl- Backspacetrong Vim khi sử dụng terminator không?


2
Chào mừng bạn đến địa ngục Vim.
romainl

2
Tôi thích thực tế rằng địa ngục này khá năng suất và có thể được cải thiện với các bản vá.
Ingo Karkat

BTW, tôi đang thu thập các loại câu hỏi này để hy vọng có thể đưa ra một trường hợp rằng vấn đề đặc biệt này được giải quyết trong Vim 8.0. Tôi thực sự muốn ngày càng nhiều ứng cử viên lập bản đồ thống nhất, quá.
Ingo Karkat

Vấn đề này thực sự không thể được khắc phục trong vim (AFAIK). Nó phụ thuộc vào thiết bị đầu cuối vim đang chạy. Đối với nhiều người dùng sử dụng vte (Gnone Terminal, Mate Terminal, Guake, v.v.), sự cố này đã gây được sự chú ý gần đây và có thể được khắc phục sớm. Xem lỗi gnome này: bugzilla.gnome.org/show_orms.cgi?id=420039
trusktr

@IngoKarkat Xem bình luận trên. ^
trusktr

Câu trả lời:


8

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 là ngày nay không thể thực hiện được. Một số tổ hợp phím, như Ctrl+ không phải là chữ cái không thể được ánh xạ và Ctrl+ chữ cái so với Ctrl+ Shift+ chữ cái không thể được phân biệt. (Trừ khi thiết bị đầu cuối của bạn gửi một mã termcap riêng biệt cho nó, hầu hết là không.) Trong chế độ chèn hoặc dòng lệnh, hãy thử nhập 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-[>v.v. (Chỉ có ngoại lệ là <BS>/ <C-H>.) Đây là một điểm đau đã biết và là chủ đề của các cuộc thảo luận khác nhau trên vim_dev và kênh #vim IRC.

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.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8

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.


Cảm ơn vì sớm phản hồi. Tôi đoán tôi sẽ phải làm quen với việc sử dụng ctrl-w cho vim và ctrl-backspace cho các trình duyệt.
dùng1026044

Điểm hay của Ctrl-W là nó cũng hoạt động ở Bash, v.v.
Ingo Karkat

Vâng, tôi biết. Nhưng bạn vẫn phải sử dụng ctrl-backspace cho mọi thứ khác và thực tế là ctrl-w dường như là tiêu chuẩn để đóng các tab và cửa sổ ở mọi nơi khác khiến nó khó chịu. Có lẽ tôi sẽ quen với nó sau một thời gian.
dùng1026044

Nhưng điều này có thể được giải quyết hoàn toàn trong cơ sở mã vim? Làm thế nào bất kỳ mã nào trong cơ sở mã vim phân biệt giữa backspace và ctrl + backspace nếu thiết bị đầu cuối mà nó đang chạy gửi vim cùng một đầu vào chính xác cho một tổ hợp phím? Có vẻ như đây là một cái gì đó phải được sửa trong thiết bị đầu cuối mà vim đang chạy, không phải vim. Ví dụ: Guake gửi ^?cho cả backspace và ctrl + backspace, khiến chúng (AFAIK) không thể phân biệt được. xterm, mặt khác, gửi ^Hcho backspace và ^?cho ctrl + backspace, làm cho chúng có thể phân biệt được.
trusktr

Nhưng thật không may, trong xterm, backspace ( ^H) không thể phân biệt được với ctrl + h ( ^H). Có lẽ chúng ta có thể tạo ra một chuỗi thoát mới để có thể phân biệt cả ba? Tôi không biết việc đó dễ đến mức nào, nhưng có vẻ như nó an toàn để thực hiện vì với tình trạng hiện tại (một số thiết bị đầu cuối sử dụng ^?cho backspace, một số khác ^Hvà ngược lại) Tôi không thể tưởng tượng được rất nhiều ứng dụng thiết bị đầu cuối (nếu có) hãy xem xét kịch bản ctrl + backspace (nó hoàn toàn không xác định do sự đa dạng của các thiết bị đầu cuối) ...
trusktr
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.