As in the title.

I run vim in xterm and ctrl-left and ctrl-right does work (skips over one word in the text by default -- this is likely the intended behavior, also because it works the same way in gvim), while in alacritty it does not work (glitchy behavior, as described below in a linked question).

I'm using Vim 9.0 with patches 1-910 included.

Some investigations:

  • If I understood correctly, when the user presses some key on the keyboard, first the terminal process it, send some key codes to vim, then vim read it.
  • :help termcap → my vim version has +terminfo, so the data of the key codes of the keys will be read from terminfo database.
  • pressing ctrl-right sends ^[[1;5C in both terminals.
  • looking at the source code of ncurses, ctrl-right should be kRIT5.
  • oddly enough man terminfo does not have kRIT5 cap-name, but does have kRIT which corresponds to "shifted right-arrow key" or %i termcap code. Maybe kRIT5 is some extension?
  • identifying infocmp unfortunately does not print out kRIT5, but tput kRIT5|xxd correctly prints ^[[1;5C for both xterm and alacritty. -- thus the information in the terminfo database is correct.
  • :set termcap will print out all the key codes according to :help terminal-options -- oddly enough there's no entry correspond to kRIT5, yet it works in xterm anyway.

Any idea what's going on?

Some related questions:

Additional info:

$ infocmp alacritty
#       Reconstructed via infocmp from file: /usr/share/terminfo/a/alacritty
alacritty|alacritty terminal emulator,
        am, bce, ccc, hs, mc5i, mir, msgr, npc, xenl,
        colors#0x100, cols#80, it#8, lines#24, pairs#0x10000,
        bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
        clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=\r,
        csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
        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,
        cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
        dl=\E[%p1%dM, dl1=\E[M, dsl=\E]2;\007, ech=\E[%p1%dX,
        ed=\E[J, el=\E[K, el1=\E[1K, flash=\E[?5h$<100/>\E[?5l,
        fsl=^G, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH,
        ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\n,
        invis=\E[8m, is2=\E[!p\E[?3;4l\E[4l\E>, kDC=\E[3;2~,
        kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D,
        kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C, kb2=\EOE, kbs=^?,
        kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
        kdch1=\E[3~, kend=\EOF, kent=\EOM, kf1=\EOP, kf10=\E[21~,
        kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q,
        kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~, kf18=\E[17;2~,
        kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~,
        kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~,
        kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S,
        kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~,
        kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~,
        kf35=\E[23;5~, kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q,
        kf39=\E[1;6R, kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~,
        kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~,
        kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~,
        kf48=\E[24;6~, kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q,
        kf51=\E[1;3R, kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
        kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
        kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
        kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
        kf8=\E[19~, kf9=\E[20~, khome=\EOH, kich1=\E[2~,
        kind=\E[1;2B, kmous=\E[<, knp=\E[6~, kpp=\E[5~,
        kri=\E[1;2A, mc0=\E[i, mc4=\E[4i, mc5=\E[5i, meml=\El,
        memu=\Em, oc=\E]104\007, op=\E[39;49m, rc=\E8,
        rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM,
        rin=\E[%p1%dT, ritm=\E[23m, rmacs=\E(B, rmam=\E[?7l,
        rmcup=\E[?1049l\E[23;0;0t, rmir=\E[4l, rmkx=\E[?1l\E>,
        rmm=\E[?1034l, rmso=\E[27m, rmul=\E[24m,
        rs1=\Ec\E]104\007, rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7,
        sgr0=\E(B\E[m, sitm=\E[3m, smacs=\E(0, smam=\E[?7h,
        smcup=\E[?1049h\E[22;0;0t, smir=\E[4h, smkx=\E[?1h\E=,
        smm=\E[?1034h, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
        tsl=\E]2;, u6=\E[%i%d;%dR, u7=\E[6n,
        u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,

As evidenced by tput kRIT5 command output above this should be correct, although kRIT5 itself isn't included in infocmp even though the terminfo file seemingly does contain it.

Alacritty version:

alacritty 0.11.0 (8dbaa0bb)

I'm not using tmux, only vim inside alacritty.

  • Alacritty again. Is it installed correctly?
    – romainl
    Commented Feb 16, 2023 at 6:05
  • @romainl I install the Arch Linux package. Yes, that does work. (as also evidenced by the tput command working, I believe)
    – user202729
    Commented Feb 16, 2023 at 6:08
  • What does $ infocmp alacrittysay?
    – romainl
    Commented Feb 16, 2023 at 6:30
  • @romainl Like that, although I don't think that's the issue.
    – user202729
    Commented Feb 16, 2023 at 6:40
  • 1
    Are you running tmux? Inside of tmux Ctrl+arrow deletes some characters. Outside of tmux I see: on WSL on windows it works as expected running Alacritty 0.11.0; on linux running Alacritty 0.9.0 has similar behavior to running in tmux. So it might also be the Alacritty version.
    – Rob Mosher
    Commented Feb 16, 2023 at 16:22


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.