我有一个想法,认为Vim正常模式下的
<C-a>
不仅应该增加数字,还应该切换布尔值。如果你将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
上,我会得到递归行为。
在这一点上,我发誓很多,为什么Bram没有从Emacs中挑选一个绝妙的想法,即一切都应该是函数和可自由设置的键绑定。然后,我只需要检查<C-a>
函数并在该函数中调用它。但是没有,我找不到这样的函数,而execute "normal foo"
短语似乎是Vim的习惯用法。
有什么建议可以使<C-a>
按以下方式工作:
- 当光标位于单词
true
或false
上时,切换布尔值 - 否则回退到内置的
<C-a>
行为
感谢您的帮助!