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

unp*_*680 5 vim

我发现,<C-a>在Vim的正常模式中,不仅应该增加数字,还应该切换布尔值.如果你考虑truefalse作为整数模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>
Run Code Online (Sandbox Code Playgroud)

但实际情况是,nnoremap不能检查内部功能.如果我的光标不在单词true或上,我会得到递归行为false.

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

关于如何使我的<C-a>工作如此的任何建议

  • 当光标在单词true或上方时切换布尔值 false
  • <C-a>否则回归内置行为

帮助赞赏!

kTT*_*kTT 9

更改

execute "normal \<C-a>"
至:

normal! ^A

你可以通过跑步来获得^ A.

<C-v><C-a>
在正常模式下

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


Mat*_*iva 6

:help :normal

:norm[al][!] {commands}     
...
If the [!] is given, mappings will not be used.
....
Run Code Online (Sandbox Code Playgroud)

您也可以直接定义命令

nnoremap <C-a> :call NewCA()
Run Code Online (Sandbox Code Playgroud)