Vim映射中的密钥重复和范围

dal*_*onb 1 mapping vim map macvim

我想在我的.gvimrc中定义一个映射,这样如果按下最后一个键,则重复触发的操作.具体来说,我想做点什么

map <SPACE>t :set transparency-=1
map <SPACE>T :set transparency+=1
Run Code Online (Sandbox Code Playgroud)

对于MacVim,但是我希望在保持t/T时继续降低/增加透明度(不想继续按空格键).

如果你有一个更好的方法来调整透明度的建议,我也会很感激.

另外,如果能够打字20 SPACE t并且透明度降低20 ,那将是很好的; 然而,当我尝试我得到一个

E481: No range allowed.
Run Code Online (Sandbox Code Playgroud)

如何启用范围指定?

非常感谢.

Max*_*Kim 6

我不确定你问题的第一部分,但是为了20 <Space> t能够完成它的工作:

:map <space>t :<C-U>exe "set transparency-=".v:count1<CR>
Run Code Online (Sandbox Code Playgroud)
  • 随着<C-U>您删除,当你键入添加到您的Ex命令行的范围20在正常模式下.
  • 随着exe你执行'动态'vimscript.
  • v:count1是最后一次正常模式命令的计数(本例中为20).如果没有计数,则默认为1.

有关其他信息,请参阅

:h v:count
:h v:count1
Run Code Online (Sandbox Code Playgroud)

更新:

您可以省略exe使用let表单而不是set一个:

:map <space>t :<C-U>let &transparency-=v:count1<CR>
Run Code Online (Sandbox Code Playgroud)

:h :let-&.