Vim 使用langmap时,在代码段字段中输入文本使用了错误字符
我正在使用vimrc中的Vim 使用langmap时,在代码段字段中输入文本使用了错误字符,vim,snipmate,Vim,Snipmate,我正在使用vimrc中的langmap选项使用自定义键映射 我试图使用snipmate,但我遇到了麻烦。当我键入一个单词并点击tab时,它允许我编辑参数。问题是第一个字符是重新映射的字符,而我希望它是实际的键 例如,我将键入以下内容: for 然后单击tab展开代码段: for (i = 0; i < COUNT; ++i) 即使我输入了aaa,它还是显示为baa。这是因为我重新映射了a和b 我怎样才能解决这个问题 这是我的密钥映射: set langmap=nj,N},ek,E{,
langmap
选项使用自定义键映射
我试图使用snipmate,但我遇到了麻烦。当我键入一个单词并点击tab时,它允许我编辑参数。问题是第一个字符是重新映射的字符,而我希望它是实际的键
例如,我将键入以下内容:
for
然后单击tab展开代码段:
for (i = 0; i < COUNT; ++i)
即使我输入了aaa
,它还是显示为baa
。这是因为我重新映射了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\\;
它对其他人来说没有多大意义,我还没有最终确定我想要它的外观。从您的
:set langmap
我知道您将a
映射到c
,那么,通过键入aaa
,您是否希望获得ccc
据我所知(:help langmap
),您的自定义替换在插入模式下无法用于实际插入内容,并且我看不到在覆盖SnipMate的占位符时您所处的选择模式
如果我这样做
:set langmap+=ac,bs
我在选择模式下键入aaa
,我获得caa
这是因为langmap
应用于第一个a
(:help Select mode
),因此插入c
。但是,在第一个字符之后,所有后续字符都处于插入模式。由于langmap
在插入模式下不适用,aa
按原样插入
我不清楚的是,为什么您获得baa
而不是caa
。您的langmap
似乎非常清楚您的意图:您希望a
插入c
,而b
插入s
。键入a
不应插入b
我感觉到您的.vimrc
中存在输入错误的风险。尝试以下操作:重置设置langmap
,然后开始逐个添加映射
我可以问你这样大规模的重新映射的目的是什么吗?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);
}
/*输入:
lhs rhs可选描述符
lhs rhs。。。
*/
#包括
#包括
int main(){
FILE*fi=fopen(“in.txt”、“r”);
文件*fo=fopen(“out.txt”,“w”);
char-lc[8],rc[8];
而(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的工作方式不同,因此可能会破坏其他绑定。这已在vim 7.4.1150中修复。看见
详细信息。您期望得到什么?aaa?bbb?为什么要重新映射a和b?请提供您的自定义密钥映射,以便我们知道您重新映射了什么a和b。您可以粘贴您的精确映射吗?
baa
更多用于说明目的。你是对的,它实际上是caa
。我使用的是自定义映射,因为我使用的是不同的键盘布局。我试着在vimrc中使用snoremap
,它确实可以工作,尽管对每个键都这样做很麻烦。你使用什么键盘布局?Colemak。langmap与普通vim布局完全不同。我想我会写一个程序来重新映射,而不是手工。我看过,但我不是一个超级粉丝。它使用wasd风格的动作和其他愚蠢的动作。谢谢你让我知道
/* 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);
}