Vim не будет принимать новую строку Как enter

у меня есть установка vim по умолчанию в linux, в системе с эмулятором терминала vt52 и возможностью unicode.

все работает нормально до сегодняшнего дня, когда я переместил свой файл vt52 terminfo из временного локального каталога пользователей в постоянный системный каталог ... сначала это казалось прекрасным, но внезапно, когда я пытаюсь выполнить команду двоеточия, нажав enter (либо CTRL-J, или сам ключ = = decimal 10), vim просто мигает на экране, но не выполните команду или оставьте режим ввода команды. Однако, если я нажму CTRL-M чтобы получить символ возврата каретки (десятичный 13), vim принимает команду.

я попытался скопировать файл обратно в ~/.terminfo снова, но это не решило проблему...

я думал, что это может быть проблема tty или поврежденный файл vimrc, поэтому... сначала я попытался удалить .viminfo и .vimrc файлы и делать stty sane перед запуском vim, но ни один из них не помогает. Я только что заметил, что enter также не работает в режиме вставки, но CTRL-M работает.

затем я проверил из оболочки bash, используя CTRL-V, что когда я нажимаю CTRL-M, он показывает ^M и когда я нажимаю CTRL-J, он просто заходит и ничего не показывает. Итак ... чтобы проверить ... я сделал stty raw и cat - | hexdumpx, и, конечно же, нажатие enter возвращает только 0x0a и клавишей CTRL-M возвращает только 0x0d; таким образом, драйвер клавиатуры возвращает правильный символ в режиме raw, и я перепробовал в нормальном режиме, который очевидно, сопоставляет их обоих с 0x0A.

файл termcap я повторно скомпилировал с tic и скопировал в оба ~/.terminfo/v/vt52u где он работал нормально до ... и до /usr/share/terminfo/v/vt52u.

но я не вижу ничего в файле termcap, что могло бы вызвать проблему.

vt52u|vt52 with UTF-8:
    :am:eo:rs=EeEb0Eco:is=EEEe:
    :nl=^j:sr=EI:bl=^g:ta=^i:
    :ho=EH:cr=^m:le=ED:nd=EC:do=EB:up=EA:ta=^i:nw=^j^m:xn:
    :cm=EY%+ %+ :it#8:co#75:li#24:
    :sc=Ej:rc=Ek:
    :vi=Ef:ve=Ee:
    :so=Eb0Ec3:se=Eb0Eco:mh=Eb8Eco:mr=EboEc0:me=Eb0Eco:
    :cl=EHEJ:cb=Eo:cd=EJ:ce=EK:
    :km:kb=^h:

изменить: Я изолировал проблему экспериментом 5, перечисленным ниже, как вызванную чем-то или отсутствующим в вышеуказанном файле termcap, или в преобразовании компилятора tic об этом в terminfo.

Итак...какая запись termcap отсутствует или какая существующая вызывает проблему?

---------------------- дополнительные эксперименты, как я пытаюсь понять это -------------------

1: Делаем :set term в vim показывает term=vt52u .... и это правильно. Таким образом, VIM должен использовать вышеупомянутый файл termcap, но я не знаю, откуда (например: кэшированная версия или нет-или повреждена.) и: версия только показывает + termcap в котором говорится, что vim должен использовать скомпилированный файл termcap tic, который я пытался ему дать.

2: я перекомпилировал ncurses-5.9 и переустановил его, чтобы убедиться, что нет поврежденных файлов. Ничего не изменилось даже с: ./configure --prefix=/usr --without-cxx --without-cxx-binding --without-ada --without-manpages --without-progs --without-tests --with-build-cc=gcc --with-shared --without-debug --without-profile --without-gpm --without-dlsym --without-sysmouse --enable-sigwinch --enable-hashmap --enable-scroll-hints --build=i686-linux --host=arm-linux-gnueabi --without-pthread --enable-widec --with-fallbacks=vt52u --disable-big-core --enable-termcap --enable-getcap-cache

3: Делаем :set termcap показывает больше определенных ключей, чем файл termcap, что плохо... предусмотренные определен только один ключ ... и это должно быть ^H не ^?, поэтому значение VIM не совпадает, но другие значения termcap все совпадение, так как ^[ совпадает с escape E в файле termcap. Итак, у меня есть доказательство того, что vim определенно загружает правильный файл termcap, потому что значение t_so уникально для vt52u. Так что ... это не коррумпированный термкап.... :( сверхъестественный.

t_kb <BS>    ^?        <DecMouse>  ^[[ 
t_kd <Down>  ^@        <NetMouse>  ^[}

t_sr=^[I       t_bc=^[D        t_le=^[D        t_cd=^[J        t_ce=^[K        t_cl=^[H^[J
t_me=^[b0^[co  t_mr=^[b0^[co   t_ve=^[e        t_vi=^[f        t_nd=^[C        t_se=^[b0^[c0
t_ZH=^[bo^[c0  t_ZR=^[b0^[co   t_so=^b0^[c3    t_cm=^[Y%p1%' '%+%c%p2%' '%+%c

4: Перекомпилированный vim 7.4, чтобы удалить все встроенные терминалы и обеспечить отсутствие поврежденных файлов. Не имел никакого эффекта; не исправил значение по умолчанию ключа backspace неправильно.

echo "Please Edit feature.h so that NO_BUILTIN_TERMCAPS is always #defined."
sleep 5
vim /src/feature.h

./configure --prefix=/usr/ --build=i686-linux --host=arm-linux-gnueabi --with-features=big --disable-darwin --disable-selinux --disable-xsmp --disable-xsmp-interact --disable-mzschemeinterp --disable-tclinterp --disable-netbeans --disable-sniff --disable-gui --disable-cscope --disable-workshop --enable-multibyte --disable-gtktest --disable-gpm --disable-sysmouse --disable-xim --enable-pythoninterp=dynamic --without-x --with-tlib=ncursesw vim_cv_toupper_broken="yes" vim_cv_terminfo="yes"  vim_cv_tty_group="world" vim_cv_tty_mode="0620" vim_cv_getcwd_broken="yes" vim_cv_stat_ignores_slash="yes" vim_cv_memmove_handles_overlap="yes"

echo "Please Edit src/Makefile such that STRIP=arm-linux-gnueabi-strip"
sleep 5
vim src/Makefile
make
make install

5: в bash, я изменил тип терминала общий "Export TERM=VT52", а не версия unicode, с поддержкой цвета, которую я скомпилировал с tic. ** * ПРОБЛЕМА НОВОЙ ЛИНИИ УШЛА С ЖЕРТВОЙ КОМАНД ЦВЕТА, И ДРУГИЕ ОСОБЕННОСТИ VT52U ** мне нужны функции, но, по-видимому, что-то о файле termcap, который я перечислил выше, неисправно.

1 ответов


Это была уродливая ошибка для отслеживания методом проб и ошибок...

Vim, по-видимому, требует определения keydown, и если он не определен, он принимает значение по умолчанию ^@ ; по неизвестной причине он затем обрабатывает ключ ввода, как если бы это был ключ вниз, а не новая строка. ^@ логически является значением для символьного кода 0, null; который является единственным символом, который будет найден в пустой строке в "C" , в которой Vim записан и, похоже, запускает проблема / функция / ошибка.

но в любом случае в termcap, показанном в открывающем сообщении, символ kd не определен; и это то, что вызывает проблему.

в vim проблема может быть решена путем установки переменной keydown termcap в качестве той же escape-последовательности, которая обычно выходит из режима вставки, а затем делает букву j (вниз): : установить t_kd=\Ej

то же самое значение по умолчанию всегда можно добавить в записи termcap, тоже; Так как это вход escape-последовательность, а не выходная escape-последовательность терминала, она не конфликтует с escape-последовательностью "сохранить курсор" VT52, определенной в termcap; например: VT52 никогда не увидит ее, так как Linux tty, когда в режиме ввода строки не Эхо escape-последовательности, которые поступают с клавиатуры обратно на выход терминала.

Если терминал не имеет истинных клавиш со стрелками -- определение клавиш со стрелками как экранированных версий клавиш h,j,k и l vim может быть разумно совместимым решением, если он не конфликтует с другими программами, которые могут захотеть использовать эти входные escape-последовательности для других вещей. Я не использую emacs и другие популярные программы, которые могут хотеть эти escape-последовательности для чего-то, поэтому, если кто-то еще знает, какие (если есть) программы будут иметь проблемы с этим решением, комментарий будет уместен.

в ncurses 5.9 появляется ошибка в компиляторе terminfo, так что на многих установках (например: slackware 14) "tic" не сможет компилировать исходные файлы terminfo -- но только исходные файлы termcap. Если вам нужен исходный код termcap для произвольного терминала, вы можете запустить "infocmp-c fooTerminalName > fooTerminalName.tcap", чтобы система генерировала исходный файл termcap для вас, который можно редактировать и перекомпилировать с помощью Tic успешно.