Tôi không thể hủy ánh xạ tổ hợp phím `y <CG>`


8

Khi tôi kiểm tra bản đồ của mình với

:verb nmap y 

tôi có:

n  y<C-G>      *@:call setreg(v:register, <SNR>104_recall())<CR>
        Last set from ~/.vim/bundle/vim-fugitive-2.2/plugin/fugitive.vim

Tôi cố gắng hủy bỏ nó với :unmap y<C-G>và với :unmap y<C-g>, nhưng nó không có hiệu lực và tôi nhận được lỗi E31: No such mapping.

Làm thế nào tôi có thể loại bỏ ánh xạ này? Tại sao không :unmap y<C-G>làm việc ở đây?


Hóa ra có một liên quan cho fugitiveplugin.
Alexey

Câu trả lời:


7

Có vẻ như ánh xạ là cục bộ của một bộ đệm vì nó được định nghĩa với đối số <buffer>.
Khi bạn gõ :unmap y<C-G>, bạn yêu cầu Vim để unmap một ánh xạ toàn cầu mà {lhs}y<C-G>, nhưng có bản đồ toàn cầu có lẽ không như vậy trên hệ thống của bạn do đó lỗi.

Nếu bạn muốn hủy ánh xạ ánh xạ cục bộ, bạn phải sử dụng cùng một đối số <buffer>đã được sử dụng để xác định nó::unmap <buffer> y<C-G>

Biên tập:

Để tự động quá trình này bạn có thể cài đặt một autocmd xem các sự kiện VimEnter, BufNewFileBufReadPost. Nó sẽ kiểm tra nếu ánh xạ tồn tại if !empty(maparg('y<C-G>', 'n')), trước khi cố gắng xóa nó. Nó có thể cung cấp một cái gì đó như:

augroup custom_fugitive
    autocmd!
    autocmd VimEnter,BufNewFile,BufReadPost * if !empty(maparg('y<C-G>', 'n')) | unmap <buffer> y<C-G>| endif
augroup END

Bạn không thể viết cái này trong cái của bạn vimrcbởi vì cái sau có nguồn gốc trước các plugin của bạn sẽ ghi đè lên bất cứ điều gì bạn làm. Thay vào đó bạn sẽ phải viết nó bên trong ~/.vim/after/plugin/mappings.vim. Tên tệp ( mappings.vim) không quan trọng, chỉ thư mục là quan trọng ( ~/.vim/after/plugin/).

Chỉnh sửa 2:

Như bình luận cuối cùng của bạn nói, có vẻ như có một cách khác để vô hiệu hóa ánh xạ. fugitivecài đặt ánh xạ <C-R><C-G>y<C-G>chỉ khi g:fugitive_no_mapskhác 0. Vì vậy, nếu bạn bao gồm let g:fugitive_no_maps=1bên trong của bạn vimrc, y<C-G>không nên được xác định.


Các autocmdgiải pháp ít nhiều công trình (trừ các tập tin đầu tiên xuất hiện sau lvim). Từ ~/.vimrc. Tôi không thấy lý do tại sao gắn liền với VimEntersự kiện. Ngoài ra, BufReadPostdường như không có gì tốt hơn nhiều BufRead. Và nó có ý nghĩa để nhấn mạnh rằng không có dấu cách sau khi unmapđược phép. Dù sao, giải pháp tốt hơn là đưa unmaps vào ~/.vim/after/ftplugin/FILETYPE.vim( ft ).
x-yuri
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.