Solaris vim end key

Вам придется переустановить почти все, поскольку вы удалили все старые файлы, включая большую часть установленной системы (то есть все, что не обновлялось недавно).

Поздравляю, это часть издевательств над новыми пользователями / администраторами Unix / Linux. Теперь вы полноправный член клуба. Всегда нужно помнить, что Unix вручает вам более чем достаточно веревки, чтобы стрелять ногами.

Вероятно, лучше всего предельно осторожно переустановить систему с нуля. Скажите, что вы не хотите форматировать раздел, содержащий локальные данные (например, / home , возможно, другие). Сделайте резервную копию (с загрузочного / установочного носителя) всего , которое вы можете. Лучше всего было бы получить, например. внешний дисковый ящик и новый диск, установите новый диск и установите на него, а затем восстановите с (теперь внешнего) исходного диска.

0
18.12.2016, 02:58
2 ответа

Решение найдено

# For some reason home and end keys are not mapping properly.
# Home key
imap <esc>OH <esc>0i
cmap <esc>OH <home>
nmap <esc>OH 0
# End key
nmap <esc>OF $
imap <esc>OF <esc>$a
cmap <esc>OF <end>

http://ianrolfe.livejournal.com/39474.html

1
29.04.2021, 00:32

В Solaris 10 вы, вероятно, используете xterm или gnome-terminal. Для xterm есть патч xterm # 196 и X11R6 xterm с небольшими исправлениями.

vim получает информацию о терминале из базы данных терминала. В определении xterm отсутствует определение для домашних / конечных ключей. Вот как это выглядит в формате terminfo:

#       Reconstructed via infocmp from file: /usr/share/lib/terminfo/x/xterm
xterm|vs100|xterm terminal emulator,
        am, km, mir, msgr, xenl,
        cols#80, it#8, lines#65,
        acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J,
        cr=\r, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\b,
        cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
        cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
        dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
        ed=\E[J, el=\E[K, el1=\E[1K$<3>, enacs=\E(B\E)0,
        home=\E[H, ht=\t, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
        il=\E[%p1%dL, il1=\E[L, ind=\n, ka1=\EOq, ka3=\EOs,
        kb2=\EOr, kbs=\b, kc1=\EOp, kc3=\EOn, kcub1=\EOD,
        kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kent=\EOM,
        kf0=\E[21~, kf1=\E[11~, kf10=\EOx, kf2=\E[12~,
        kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~,
        kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, rc=\E8, rev=\E[7m,
        ri=\EM, rmacs=^O, rmkx=\E[?1l\E>, rmso=\E[m,
        rmul=\E[m,
        rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, rs2=@,
        sc=\E7,
        sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t^>
        sgr0=\E[m, smacs=^N, smkx=\E[?1h\E=, smso=\E[7m,
        smul=\E[4m, tbc=\E[3g,

Если бы в описании терминала были ключи home / end, они были бы перечислены как khome и kend соответственно.

Кроме того, строка инициализации rs1 включает режим приложения для клавиш курсора (который может включать 6-клавишную клавиатуру редактирования с Home и Конец клавиш). Это заставляет их отправлять префикс escape O .

vim ничего не знает об этой информации, поскольку он просто использует то, что может получить из базы данных терминала. Когда он видит последовательность символов , а не в базе данных терминала, он пытается интерпретировать этот символ за раз. escape-символ завершает режим вставки, но O «открывается» (начинает вставку), и вы получаете последний символ ключа, например, H или F . Повторное нажатие клавиши дает один F за нажатие (оставляя вас в режиме вставки после нажатия клавиши).

Правильным решением было бы исправить описание терминала, избегая необходимости отображать в вашем .vimrc , например,

infocmp >foo
vi foo
....adding this line (with a leading tab character):
        khome=\EOH, kend=\EOF,
sudo tic foo

Дополнительная литература:

1
29.04.2021, 00:32

Теги

Похожие вопросы