通过键映射动态设置 vim 选项,但有些错误

dynamic set the vim option by key map,but some thing wrong

我想通过某个键重新设置字体大小。 但它不能 运行 好。 你能修复我的代码来实现功能吗? 或者给我其他方法来实现相同的功能。 非常感谢!


这是我设计的脚本。

noremap <C-KPlus> :set guifont=substitute(&guifont,'w\(\d+\)','\="w" . (submatch(1)+1)','g')<CR>

最好使用 :echo:

以交互方式进行尝试
:echo substitute('foobar-w20','w\(\d+\)','\="w" . (submatch(1)+1)','g')
foobar-w20

不,那不匹配。啊,\d 的乘数必须是 \+ 而不是 +:

:echo substitute('foobar-w20','w\(\d\+\)','\="w" . (submatch(1)+1)','g')
foobar-w21

我们可以删除 w 前缀的重新插入,方法是仅在 \zs 之后开始匹配。

:echo substitute('foobar-w20','w\zs\(\d\+\)','\=submatch(1)+1','g')
foobar-w21

:set 命令采用文字字符串,而不是要计算的 表达式 。我们要么使用 :execute,要么使用方便的事实,即 :let 可以用来修改 &options:

:noremap <C-KPlus> :let &guifont=substitute(&guifont,'w\zs\(\d\+\)','\=submatch(1)+1','g')<CR>

:set:let 都不允许在可视模式下插入范围。我认为这个映射应该只适用于普通模式,所以使用:nnoremap。而且我们不需要显示那么长的表达式,所以 <silent>:

:nnoremap <silent> <C-KPlus> :let &guifont=substitute(&guifont,'w\zs\(\d\+\)','\=submatch(1)+1','g')<CR>

顺便说一句,在 Windows 上,尺寸似乎是用 h42 后缀编码的,所以让我们也处理一下。我们之前的重构现在真的很有帮助:

:nnoremap <silent> <C-KPlus> :let &guifont=substitute(&guifont,'[hw]\zs\(\d\+\)','\=submatch(1)+1','g')<CR>