我在vimrc中使用langmap
选项使用自定义键盘映射。
我正在尝试使用snipmate,但我遇到了麻烦。当我输入一个单词并点击标签时,它允许我编辑参数。问题是第一个字符是重新映射的字符,而我希望它是实际的密钥。
例如,我会输入:
for
并点击标签展开代码段:
for (i = 0; i < COUNT; ++i)
i
突出显示,这意味着我可以编辑它。我输入“aaa”:
for (baa = 0; i < COUNT; ++i)
即使我输入baa
,它也会出现aaa
。这是因为我重新映射了a
和b
。
我该如何解决这个问题?
这是我的键盘映射:
set langmap=nj,N},ek,E{,il,IL,{^,}$,lb,LB,uw,UW,ye,YE,jg,JG,\\;z,f\\.,F\\,,zu,ZU,.?,\\,/,/v,? V,ta,TA,si,SI,ro,RO,ac,AC,wr,WR,xx,XX,dd,DD,bs,BS,gf,GF,pt,PT,kn,KN,cy,CY,vp,VP,o\\;
对其他人来说没有多大意义,我还没有最终确定我希望它的样子。
答案 0 :(得分:2)
从:set langmap
我知道您已将a
映射到c
,因此,通过输入aaa
,您是否希望获得ccc
?
根据我的理解(:help langmap
),您的自定义替换在 INSERT 模式下不可用于实际插入内容,我没有看到提及 SELECT < / em>模式,当你覆盖SnipMate的占位符时。
如果我这样做
:set langmap+=ac,bs
我在 SELECT 模式下输入aaa
,我获得了caa
。
这是因为langmap
适用于第一个a
(:help Select-mode
),因此会插入c
。但是,在第一个字符之后,我处于 INSERT 模式中,用于所有后续字符。由于langmap
不适用于 INSERT 模式,因此aa
按原样插入。
我不清楚为什么您获得baa
而不是caa
。您的langmap
似乎非常清楚您的意图:您希望a
插入c
和b
来插入s
。键入a
不应插入b
。
我闻到你.vimrc
中有误输的风险。试试这个:重置set langmap
并开始逐个添加映射。
我可以问你这种大规模重新映射的目的是什么?
答案 1 :(得分:0)
C程序,它输出与langmap相似的行为,但不是select:
/* input:
lhs rhs optional-descripton
lhs rhs ...
*/
#include <stdlib.h>
#include <stdio.h>
int main() {
FILE *fi = fopen("in.txt", "r");
FILE *fo = fopen("out.txt", "w");
char lc[8], rc[8];
while (fscanf(fi, "\n%s %s", lc, rc) != EOF) {
fprintf(fo, "nnoremap %s %s\n", lc, rc);
fprintf(fo, "xnoremap %s %s\n", lc, rc);
fprintf(fo, "onoremap %s %s\n", lc, rc);
while (fgetc(fi) != '\n');
}
fclose(fo);
fclose(fi);
}
它与langmap的工作方式不同,因此可能会破坏其他绑定。
答案 2 :(得分:0)
这已在vim 7.4.1150中修复。看到 https://github.com/vim/vim/issues/572 详情。