
Я на Solaris 11
Это мой .vimrc
set nohlsearch
set mouse=""
set paste
set showmode
set ruler
set clipboard=unnamedplus
setlocal cm=blowfish2
set nocompatible
set backspace=indent,eol,start
set term=dtterm
syntax on
imap <esc>OH <esc>0i
cmap <esc>OH <home>
nmap <esc>OH 0
nmap <esc>OF $
imap <esc>OF <esc>$a
cmap <esc>OF <end>
Клавиша END на клавиатуре работает нормально.
в командном режиме, но когда я набираю I или A или a, для редактирования... набираю END и... он набирает F! Почему?
решение1
Описание терминала (для dtterm
) не включает специальную клавишу, которую вы хотите, чтобы vim распознавал. Поскольку ее нет в описании терминала, vim не знает, что делать с символами, кроме как обрабатывать их как команду:побегиз режима вставки, затемоткрытьи вставитьФ).
Вот что говорит Solaris dtterm
:
# Reconstructed via infocmp from file: /usr/share/lib/terminfo/d/dtterm
dtterm|CDE terminal emulator,
am, mir, msgr, xenl, xon,
colors#8, cols#80, it#8, lines#24, lm#0, pairs#8,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
clear=\E[H\E[J, cnorm=\E[?25h, 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, dim=\E[2m, dl=\E[%p1%dM,
dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
flash=\E[?5h$<200>\E[?5l, home=\E[H, ht=\t, hts=\EH,
ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED,
invis=\E[8m, is2=\E\sF\E>\E[?1l\E[?7h\E[?45l, kbs=\b,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~,
kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~,
kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~, kich1=\E[2~,
knp=\E[6~, kpp=\E[5~, kslt=\E[4~, nel=\EE,
op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
rmam=\E[?7l, rmir=\E[4l, rmso=\E[22;27m, rmul=\E[24m,
sc=\E7, setab=\E[%p1%{40}%+%dm,
setaf=\E[%p1%{30}%+%dm,
sgr=\E[0%?%p1%t;2;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;m%?%p9%t^N%e^O%;,
sgr0=\E[0m, smacs=^N, smam=\E[?7h, smir=\E[4h,
smso=\E[2;7m, smul=\E[4m, tbc=\E[3g,
Нет никакихkend
определены, и нет smkx
и rmkx
возможности определены для переключения в/из режима клавиатуры. Отображение, которое вы показываете, предназначено длярежим приложения(которые обычно -- в зависимости отТерминалбудет сделано с помощью smkx/rmkx). Специальный ключ режима приложения будет начинаться с escapeO, и, как вы видите, ни одно из описаний терминала нечто. Учитывая все это, было бы интересно посмотреть, как вы используете привязки, которые зависят от режима приложения.
Теперь... маловероятно, что вы используетеdttermна Solaris 11. Это был эмулятор терминала, поставляемый с CDE, который больше не используется. Скорее всего, вы используете xterm или какую-то его имитацию. В этом случае лучшим решением будет установить и использовать базу данных терминала из ncurses.
При быстрой проверке Solaris 11 я вижу, что у них естьвариантизxterm-256color
, но он был изменен (и, таким образом, стал менее пригодным для использования): значение для kend
неверно. При более внимательном рассмотрении, похоже, что разработчик Solaris сделал xterm-256color
inherit от xtermm
(или, что то же самое, от xtermc
). Последнее указано в xterm FAQКакой $TERM мне следует использовать?:
Некоторые люди рекомендуют использоватьxtermc. Он установлен на Solaris. Однако он не соответствует ни одному xterm, используемому в настоящее время. (Видимо, он был написан для устаревшей версии на Unixware).Цвета работают, это правда, но мышь не работает, как и функциональные клавиши..