Vim 7.4+ 在 macOS 上以黑色突出显示斜体

Vim 7.4+ highlighting italics in black on macOS

在 macOS Sierra 上,Terminal.app 中的 Vi(m) 7.4+ 和 iTerm2 以黑色突出显示强调和斜体标记。这包括 Markdown 文件中的 *example* 和 TeX 文件中的 \emph{example}

GUI MacVim 正确地将此文本设为斜体。

即使 运行 准系统 command vi -u NONE test.md +"syntax on"(其中 test.md 包含 *example*)来自 Terminal.app,这个错误仍然存​​在。

充其量,我想让 iTerm2 识别并斜体显示这段文字。在最坏的情况下,我想至少停止突出显示黑色文本。

阅读 vim 的源代码表明它可以使用斜体。

解决方法是正确的终端描述。斜体在 4-5 年前才流行起来,而 MacOS 的 ncurses 终端数据库副本比这要古老得多。

在 ncurses 邮件列表上有一些 recent discussion of iTerm2,并且更新了终端描述:

#   Reconstructed via infocmp from file: /usr/local/ncurses/share/terminfo/i/iterm2
iTerm2.app|iterm2|terminal emulator for Mac OS X,
    am, bce, hs, mir, msgr, npc, xenl, xon,
    colors#0x100, cols#80, it#8, lines#24, pairs#0x7fff, wsl#50,
    acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
    bel=^G, blink@, 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=^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, dch=\E[%p1%dP, dch1=\E[P,
    dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, dsl=\E]2;[=10=]7, ed=\E[J,
    el=\E[K, el1=\E[1K, enacs=\E(B\E)0,
    flash=\E[?5h$<200/>\E[?5l, fsl=^G, home=\E[H,
    hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
    il=\E[%p1%dL, il1=\E[L, ind=\n, kEND=\E[1;2F, kHOM=\E[1;2H,
    kLFT=\E[1;2D, kRIT=\E[1;2C, ka1@, ka3@, kb2@, kbs=^?, kc1@, kc3@,
    kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
    kdch1=\E[3~, kend=\EOF, kent@, 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~, kf3=\EOR,
    kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
    kf9=\E[20~, khome=\EOH, kind=\E[1;2B, knp=\E[6~, kpp=\E[5~,
    kri=\E[1;2A, op=\E[0m, rc=\E8, rev=\E[7m, ri=\EM,
    ritm=\E[23m, rmacs=^O, rmam=\E[?7l,
    rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>,
    rmso=\E[m, rmul=\E[m,
    rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
    setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
    setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
    sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t6%e7%;,
    sgr0=\E[m7, sitm=\E[3m, smacs=^N, smam=\E[?7h,
    smcup=\E7\E[?47h, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m,
    smul=\E[4m, tbc=\E[3g, tsl=\E]2;, u6=\E[%i%d;%dR, u7=\E[6n,
    u8=\E[?1;2c, u9=\E[c, vpa=\E[%i%p1%dd,

要使用它,您可以将它保存到一个文件中,然后 运行 tic 编译它(并将 TERM 设置为iterm2,当然)。默认情况下,iTerm2 将 TERM 错误设置为 "xterm",但这是不正确的。