Tôi có thể ánh xạ Ctrl + chữ in hoa riêng biệt với Ctrl + chữ thường không?


16

Tôi đang cố gắng tìm ra cách điều hướng các cửa sổ nhanh hơn một chút, vì vậy tôi muốn lập bản đồ như sau:

:nmap <silent> <C-F> :wincmd f<CR>

Vấn đề là điều này ánh xạ lại ánh xạ ^f(chữ thường f), là trang xuống. Có cách nào để ánh xạ lại chỉ ^F(chữ hoa F) và để nguyên ^fnhư vậy không?

Câu trả lời:


22

Ánh xạ <C-F>( Ctrl+letter) luôn giống như ánh xạ <C-f>( Ctrl+Shift+letter). Bạn không thể ánh xạ cái này mà không có cái kia.

Nguyên nhân của vấn đề là Vim đọc các ký tự từ thiết bị đầu cuối, nó sẽ gửi ^F(mã ASCII 0x06) cho cả hai Ctrl+fCtrl+Shift+f; Vim không có cách nào để biết liệu bạn có nhấn phím Shift hay không. Bài đăng này cung cấp thêm một số thông tin về thiết bị đầu cuối và nhân vật điều khiển .

Về lý thuyết, điều này có thể được thực hiện với gVim, vì hầu hết (hoặc tất cả?) Môi trường đồ họa gửi các sự kiện quan trọng chi tiết hơn nhiều. Nhưng thật không may, gVim hoạt động giống như một trình giả lập thiết bị đầu cuối và không thể phân biệt giữa <C-f><C-F>(đây có lẽ là một quyết định thiết kế cho khả năng tương thích Vim-gVim).


Phương pháp khả thi:

  • Bạn có thể định cấu hình trình giả lập thiết bị đầu cuối của mình để gửi một mã khác đến Vim khi bạn nhấn Ctrl+Shift+f. Ví dụ: đối với xterm bạn có thể làm:

    XTerm*VT100.translations: #override \n\
        Ctrl ~Meta Shift <Key>f: string(0x1b) string("[24;6~")\n\
        Ctrl ~Meta Shift <Key>r: string(0x1b) string("[23;6~")
    

    Điều này sẽ gửi mã cho <C-S-F12><C-S-F11>đến Vim, mà bạn có thể nhận:

    nnoremap <C-S-F12> :echo 'ctrl+F pressed!'<CR>
    nnoremap <C-S-F11> :echo 'ctrl+R pressed!'<CR>
    
  • Lưu ý rằng bạn có thể ánh xạ Alt+Shift+letter, vì thiết bị đầu cuối gửi một mã khác cho những người đó: <Esc>f( 0x1b0x66) hoặc <Esc>F( 0x1b0x46).

  • NeoVim đã, như xa như tôi có thể tìm thấy, chứ không phải cố định vấn đề này ngoại trừ một vài trường hợp như Ctrl+Shift+EnterCtrl+Shift+Tab, nhưng nó có thể rằng tính năng này sẽ được bổ sung trong thời gian tới.

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.