重新映射文​​本对象的前缀键

时间:2014-03-16 03:03:40

标签: vim

我想更改每个文本对象命令的前缀键。 例如:

aw -> qw
as -> qs
ap -> qp

等等。

我尝试创建一个很长的xnoremaponoremap列表,每个重映射更改一个文本对象命令,但这是一个非常糟糕的解决方案。

我有办法轻松地做到这一点吗?

此外,我希望所有旧命令都不被映射,以便它们不会干扰。

3 个答案:

答案 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

但我不确定它会有多好用。