При вводе текста в полях сниппета используется неверный символ - PullRequest
1 голос
/ 11 декабря 2011

Я использую пользовательскую раскладку клавиатуры, используя опцию langmap в vimrc.

Я пытаюсь использовать snipmate, но у меня возникают проблемы.Когда я набираю слово и нажимаю вкладку, это позволяет мне редактировать параметр.Проблема в том, что первый символ является переназначенным, в то время как я хочу, чтобы он был фактическим ключом.

Например, я напишу это:

for

и нажмем клавишу Tabразверните фрагмент:

for (i = 0; i < COUNT; ++i)

i выделен, что означает, что я могу его редактировать.Я набираю «ааа»:

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\\;

Это не имеет большого смысла для других, и у меня нетдоработано, как я хочу, чтобы это выглядело.

Ответы [ 3 ]

2 голосов
/ 12 декабря 2011

Из вашего :set langmap Я понимаю, что вы сопоставили a с c, поэтому, набрав aaa, ожидали ли вы получить ccc?

Из того, что я понимаю (:help langmap), ваши пользовательские замены недоступны в режиме INSERT для фактической вставки материала, и я не вижу упоминания о режиме SELECT , в котором вы находитесь при перезаписи заполнителей SnipMate.

Если я сделаю это

:set langmap+=ac,bs

и наберу aaa в режиме SELECT , я получу caa.

Это потому, что langmap относится к первому a (:help Select-mode) и, следовательно, вставляет c.Но после этого первого символа я нахожусь в режиме INSERT для всех последующих символов.Поскольку langmap не применяется в режиме INSERT , aa вставляется как есть.

Что мне не понятно, так это почему вы получаете baa вместо caa,Ваш langmap кажется достаточно ясным относительно вашего намерения: вы хотите, чтобы a вставил c и b чтобы вставить s.Ввод a не должен вставлять b.

Я чувствую риск ошибочного ввода в ваш .vimrc.Попробуйте это: сбросьте set langmap и начните добавлять свои сопоставления одно за другим.

Могу ли я спросить вас, какова цель такого массового переназначения?

0 голосов
/ 22 января 2016

Это было исправлено в vim 7.4.1150.Подробнее см. https://github.com/vim/vim/issues/572.

0 голосов
/ 12 декабря 2011

C программа, которая выводит сопоставления, аналогичные langmap, но не для выбора:

/* 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 и поэтому может нарушить другие привязки.

...