2011-01-29 32 views
5

Tôi đã đưa ra ý tưởng rằng <C-a> trong chế độ bình thường của Vim không chỉ tăng số mà còn chuyển booleans. Nó có ý nghĩa nếu bạn xem xét truefalse như số nguyên modulo 2.Đồng nghĩa với chế độ bình thường của Vim CTRL-A?

Vì vậy, tôi downloaded an excellent script để làm công việc lông và viết một định nghĩa mới cho <C-a>:

fun! NewCA() 
    let cw = tolower(expand("<cword>")) 
    if cw == "true" || cw == "false" 
     ToggleWord 
    else 
     " run the built-in <C-a> 
     execute "normal \<C-a>" 
    endif 
endfun 
command! NewCA :call NewCA() 
nnoremap <C-a> :NewCA<cr> 

Nhưng khi nó xảy ra, nnoremap doesn' t đi xa như để kiểm tra chức năng bên trong. Tôi nhận được hành vi đệ quy nếu con trỏ của tôi không nằm trên các từ true hoặc false.

Tại thời điểm này tôi thề rất nhiều, tại sao Bram không chọn một ý tưởng tuyệt vời từ Emacs, rằng mọi thứ nên có chức năng và các ràng buộc khóa tự do có thể thiết lập. Sau đó, tôi chỉ có thể kiểm tra chức năng cho <C-a> và gọi nó trong chức năng đó. Nhưng không, tôi không thể tìm thấy một chức năng như vậy, và các cụm từ execute "normal foo" dường như là thành ngữ Vim.

Bất kỳ đề xuất về làm thế nào tôi có thể làm cho <C-a> công việc như vậy mà

  • Chuyển đổi các phép toán luận khi con trỏ là trên một từ true hoặc false
  • Mùa thu trở lại built-in <C-a> hành vi khác

Giúp đánh giá cao!

Trả lời

8

thay đổi

execute "normal \<C-a>"
để: "!"

normal! ^A

bạn có thể nhận^Một bằng cách chạy

<C-v><C-a>
trong chế độ bình thường

sự ở phần cuối của bình thường nói "sử dụng ánh xạ mặc định"

+0

Cả hai câu trả lời đã như vậy, giải pháp đúng. Tôi đã xem đây là câu trả lời được chấp nhận chỉ để chào đón bạn đến với cộng đồng. :) – progo

6

Từ :help :normal

:norm[al][!] {commands}  
... 
If the [!] is given, mappings will not be used. 
.... 

Ngoài việc xác định một lệnh là không cần thiết, bạn có thể trực tiếp

nnoremap <C-a> :call NewCA() 
+0

Ôi trời, tôi cảm thấy thật noob! Tôi nên biết rõ hơn .. để đọc các tài liệu cẩn thận hơn. Cảm ơn rất nhiều. Trong thực tế, tôi đã có câu lệnh 'command! 'Không liên quan cho các mục đích gỡ lỗi, và bạn đã đúng. :) – progo

+0

lưu ý rằng bản đồ cần một '' cuối cùng giống như: 'nnoremap : gọi NewCA() ' – radke

Các vấn đề liên quan