如何根据按下的频率来映射vim中的键?

时间:2015-12-06 18:55:41

标签: vim

我已经映射了键0,以便光标跳转到第一个非空白字符,符合以下行:

map 0 ^

现在我希望光标通过按两次0跳到行的开头。

我该怎么做?

1 个答案:

答案 0 :(得分:5)

刚刚放map 00 ^ 在这种情况下,Vim会稍等一下,看看是否还有其他东西被按下了。

从以下评论中,我获得了更多有关解决此问题的不同方法的见解。可以找到一个解决方案here (Smart home).

该维基的相关部分:

以下几行(在您的vimrc中)为正常,可视,操作员挂起和插入模式实现智能家居。

noremap <expr> <silent> <Home> col('.') == match(getline('.'),'\S')+1 ? '0' : '^'imap <silent> <Home> <C-O><Home>

第一行是正常,可视和操作员暂挂模式的表达式映射。映射的右侧是每次按下Home时计算的表达式。表达式给出一个字符串,结果就像是按下了字符串中的字符一样。表达式比较col('.')(游标列位置,其中1是第一列)和match(getline('.'),'\S')+1(当前行中第一个非空白字符的索引;添加1是因为索引从0)。如果==的两边相等,则结果为0(移至行首);否则它是^(转移到第一个非空白字符)。

在插入模式下,第二行应用,如果按下Home,则结果为Ctrl-O,后跟Home。在插入模式下,按下Ctrl-O将执行以下内容作为普通模式命令,因此后面的Home将调用正常模式映射。