Синоним нормального режима Vim CTRL-A? - PullRequest
5 голосов
/ 29 января 2011

Я пришел к мысли, что <C-a> в обычном режиме Vim должен не только увеличивать числа, но и переключать логические значения. Это имеет смысл, если вы считаете true и false целыми числами по модулю 2.

Итак, я скачал отличный скрипт , чтобы сделать волосатую работу и написал новое определение для <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>

Но как это происходит, nnoremap не идет так далеко, чтобы проверять внутренние функции. Я получаю рекурсивное поведение , если мой курсор не на словах true или false.

В этом пункте я клянусь, почему Брэм не выбрал отличную идею от Emacs, что все должно быть функциями и привязками клавиш, которые можно свободно настраивать. Тогда я мог бы просто проверить функцию на <C-a> и вызвать ее в этой функции. Но нет, я не могу найти такую ​​функцию, и фразы execute "normal foo", похоже, идиома Vim.

Любые предложения о том, как можно заставить <C-a> работать так, чтобы

  • Переключить логическое значение, когда курсор находится над словом true или false
  • Возврат к встроенному <C-a> поведению в противном случае

Помощь оценена!

Ответы [ 2 ]

9 голосов
/ 29 января 2011

изменение

execute "normal \<C-a>"
до:
normal! ^A

вы можете получить ^ A, запустив

<C-v><C-a>
в обычном режиме

"!" в конце нормального произнесите «использовать сопоставление по умолчанию»

6 голосов
/ 29 января 2011

С :help :normal

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

Также определение команды не требуется, вы можете напрямую

nnoremap <C-a> :call NewCA()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...