O que é t_TE e t_TI adicionado pelo vim 8?

Sep 21 2020

Primeiro, deixe-me mostrar uma imagem abaixo.

Na modeline, uma sequência estranha de caracteres ( >4;m<ESC>[>4;m<ESC) é mostrada. E não apenas no modeline, eu vi frases semelhantes na linha de comando quando :wqe no buffer quando tentei atualizar plug-ins usando :PlugInstalltambém.

Não é um problema com bugs, mas parece irritante. No começo, pensei que fossem algumas sequências de escape ANSI misteriosas. Mas quando busquei mais informações sobre isso, descobri que parece o código para t_TE(^[[>4;m)e t_TI(^[[>4;2m). Experimente :set termcape você os encontrará. No entanto, apenas o vim 8.2 (é a versão que eu uso) suporta esses códigos, o que não é verdade para o vim 7.4 (o vim padrão instalado pelo ubuntu 16.04).

Existem poucas informações sobre t_TEe t_TI. Mas, para ser honesto, não estou curioso para saber o que são e como funcionam. Eu só quero suspender a exibição sobre eles. Eu acho, uma vez que esses códigos são adicionados pelo novo vim, é provável que os mesmos códigos não sejam compatíveis com o gnome-terminal para que isso aconteça. Mas eu não sei e tenho um conhecimento muito limitado sobre termcap ou terminfo de qualquer maneira.

Na verdade, sou novo no vim. Realmente desvia minha atenção quando vislumbro esses códigos estranhos. Eu aprecio sua ajuda.

Atualizar

Obrigado por todos os comentários e respostas. Para completar, atualizo mais informações sobre onde o vim funciona e minhas informações relacionadas ao terminal.

  • Meu sistema operacional é Ubuntu 16.04.7LTS
  • Estou usando o terminador 1.91, mas também tentei no Terminal GNOME 3.20.2 e o mesmo problema acontece
  • Meu $TERMéxterm-256color

Talvez eu também deva postar o que $termcapé meu, mas seria como um spam. Mas, de qualquer forma, não me lembro de definir manualmente todas as variáveis ​​de ambiente relacionadas aos termos, então acredito que sejam o que são com valores padrão inalterados.

Respostas

4 user938271 Sep 21 2020 at 12:20

t_TIe t_TEsão opções de terminal. Você pode configurá-los com sequências que serão enviadas pelo Vim ao terminal quando este for resp. colocado no modo "bruto" ou quando for feito para sair do modo "bruto".

Desde o patch 8.1.2134 , o Vim suporta um recurso chamado modifyOtherKeys, fornecido por alguns terminais como o xterm. Permite ao Vim distinguir várias teclas, como <C-i>de <Tab>ou <M-h>de è, o que antes era impossível. Isso é especialmente útil quando você deseja instalar um mapeamento em alguma chave, sem sobrepujar outra.

O recurso foi habilitado por padrão em 8.1.2194 . A partir desse patch, quando o Vim pensa que está executando no xterm , ele envia automaticamente esta sequência para o terminal sempre que este é colocado em modo bruto:

^[[>4;2m

A sintaxe da sequência é documentada aqui :

CSI > Pp ; Pv m

Sua finalidade é definir ou redefinir as opções do modificador de tecla, que o terminal inspeciona para decidir se deve construir sequências de escape contendo informações sobre possíveis modificadores pressionados com uma determinada tecla.

CSIé ESC [(também conhecido como introdutor de sequência de controle). O primeiro parâmetro Ppé um código que identifica o recurso do terminal a ser definido ou redefinido. O segundo parâmetro Pvé o valor que você deseja atribuir ao recurso.

Em sua sequência, Ppfoi fornecido o valor 4, que identifica o recurso modifyOtherKeys (há outros recursos identificados por outros códigos, como modifyCursorKeys identificado por 1).

Da mesma forma, Pvfoi dado o valor 2, que informa ao terminal que o recurso deve ser habilitado para todas as teclas, incluindo aquelas com comportamento conhecido (como Tab).

Para obter mais informações, consulte:

  • :h modifyOtherKeys
  • man xterm(1) (procure o recurso modifyOtherKeys)
  • Histórico sobre como o modifyOtherKeys surgiu
  • Como meu programa pode distinguir control-I de tab?
  • Como mapear separado de ?
  • Conflito entre a chave de composição do sistema e os mapeamentos de meta-teclas do modo de inserção

Isso deve cobrir a maior parte do que você não quer saber.

Agora:

Eu só quero suspender a exibição sobre eles.

Se as sequências são simplesmente impressas no terminal, significa que este último não as compreende. Se não os entende, significa que não é xterm (ou pelo menos não é totalmente compatível com o xterm). Existem 2 maneiras de corrigir o problema:

  1. diga ao Vim para desativar o recurso modifyOtherKeys para que ele pare de enviar essas sequências
  2. conserte seu TERMque é provavelmente xtermou algum derivado comoxterm-256color

Eu continuaria 2.e pararia de dizer a todos os programas em execução no terminal que o último é xterm, quando na verdade não é, mas se preferir 1., basta adicionar isso ao seu vimrc:

set t_TI= t_TE=

Se você quiser continuar 2., configure seu terminal gnome assim:

  • abre o Editmenu na barra no topo da janela

  • clique no Profile Preferencesbotão no menu

  • clique na Commandguia na janela recém-aberta

  • escreva isso no Custom commandcampo:

    /usr/bin/env TERM=gnome-256color /bin/bash
    

Testado no Ubuntu 16.04. Não tenho ideia se essa sequência específica de cliques ainda funciona em uma versão recente do sistema operacional. Você também pode escolher outro shell diferente de bash ou outro caminho diferente de /bin/bash.

Como alternativa, escreva em um arquivo init do shell:

export TERM=gnome-256color

Se você precisar de uma descrição de terminfo atualizada para seu terminal, tente o seguinte:

$ curl -LO http://invisible-island.net/datafiles/current/terminfo.src.gz $ gunzip terminfo.src.gz
$ tic -sx -e gnome-256color terminfo.src