我想更改每个文本对象命令的前缀键。 例如:
aw -> qw
as -> qs
ap -> qp
等等。
我尝试创建一个很长的xnoremap
和onoremap
列表,每个重映射更改一个文本对象命令,但这是一个非常糟糕的解决方案。
我有办法轻松地做到这一点吗?
此外,我希望所有旧命令都不被映射,以便它们不会干扰。
答案 0 :(得分:2)
我使用for
循环来避免重复:
for textObject in ['w', 's', 'p']
execute printf('xnoremap q%s a%s', textObject, textObject)
execute printf('onoremap q%s a%s', textObject, textObject)
" Remove the original commands.
execute printf('xnoremap a%s <Nop>', textObject)
execute printf('onoremap a%s <Nop>', textObject)
endfor
答案 1 :(得分:0)
为什么要更改文本对象命令?默认有问题吗?如果必须这样做,我认为你可以这样做:
nnoremap dqw daw
nnoremap dqs das
nnoremap dqp dap
...
答案 2 :(得分:0)
其他编辑器可能有函数和键绑定模型,但vim没有。 Vim具有内置命令和用户定义的映射。您可以清除后者,但无法“取消映射”内置命令。
您可以使用'langmap'
选项交换 a 和 q 的含义。这与:help 'langmap'
:
:set langmap=aq,qa
阅读帮助以确切了解这有何影响。当然,这意味着您必须使用a来开始或结束录制宏,并使用q来追加。您可以尝试使用
撤消该操作:nnoremap a a
:nnoremap q q
但我不确定它会有多好用。