Vim正常模式CTRL-A的同义词?

时间:2011-01-29 14:18:50

标签: vim

我认为在Vim正常模式中<C-a>不仅应该增加数字而且应该切换布尔值。如果您将truefalse视为模2的整数,则有意义。

所以,我downloaded an excellent script做了毛茸茸的工作并为<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并没有检查内部函数。如果我的光标不在单词truefalse上,我会得到递归行为

在这一点上,我发誓很多,为什么Bram没有从Emacs中选择一个好主意,一切都应该是功能和键绑定可以自由选择。然后我就可以检查<C-a>的函数并在该函数中调用它。但不,我找不到这样的功能,execute "normal foo"短语似乎是Vim成语。

有关如何使<C-a>工作的任何建议

  • 当光标位于单词truefalse
  • 上时切换布尔值
  • 回归内置<C-a>行为,否则

帮助表示赞赏!

2 个答案:

答案 0 :(得分:9)

变化

execute "normal \<C-a>"

normal! ^A

您可以在正常模式

中运行

<C-v><C-a>
来获取^ A.

“!”在正常结束时说“使用默认映射”

答案 1 :(得分:6)

来自:help :normal

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

也不需要定义命令,你可以直接

nnoremap <C-a> :call NewCA()