Existe uma versão do script que funciona bem com o vim?

2

man script diz:

Certain interactive commands, such as vi(1), create garbage in the type‐ script file. Script works best with commands that do not manipulate the screen, the results are meant to emulate a hardcopy terminal.

Eu tentei fazer isso, iniciando uma sessão de script e, em seguida, iniciando o vim, e parece haver caracteres de controle na saída. Repetir o typescript também deixou alguns caracteres de controle na minha linha de comando depois que scriptreplay terminou.

No entanto, funcionou principalmente , mesmo capturando corretamente uma sessão vim com uma janela dividida. Os personagens de controle desonestos parecem ser um ligeiro aborrecimento, e não um problema fundamental. Então, existe um programa semelhante ao script que funciona sem esse aborrecimento?

    
por jl6 22.09.2014 / 23:19

1 resposta

0

curto: provavelmente não

longo:

Primeiro, o comentário na página manual script está falando sobre o problema de pegar esse texto e fazer uma versão em texto puro (sem caracteres de controle) que mostra o que você viu originalmente na tela. A ferramenta scriptreplay é uma solução que não tenta criar um arquivo de texto simples, mas sim reproduzir o texto como um filme.

O typescript salvo por script é difícil de converter em um arquivo de texto simples, porque um editor de texto em tela cheia como o vim usa cursor-addressing . Em vez de repintar toda a tela toda vez que você fizer uma alteração (que, em princípio, permitiria ver uma série de telas), o vim moverá o cursor pela tela para fazer alterações.

Se você não fizer alterações (incluindo a rolagem), certamente poderá obter uma tela simples com poucos controles. Mas a questão não é perguntar sobre esse caso especial.

Se você fosse capaz de fazer o vim usar uma descrição do terminal que não tivesse o endereçamento do cursor, ele "poderia" ser forçado a repintar (em vez de mover o cursor). No entanto, o vim, por padrão, usa suas descrições de terminal built-in , muitas vezes ignorando o banco de dados do terminal ( veja código ). Por exemplo, no banco de dados do terminal, dumb não possui endereçamento de cursor. A versão do vim tem o endereçamento do cursor:

/* 
 * The most minimal terminal: only clear screen and cursor positioning 
 * Always included. 
 */
    {(int)KS_NAME,      "dumb"},
    {(int)KS_CL,        "4"},
#ifdef TERMINFO
    {(int)KS_CM,        IF_EB("3[%i%p1%d;%p2%dH",
                                                  ESC_STR "[%i%p1%d;%p2%dH")},
#else
    {(int)KS_CM,        IF_EB("3[%i%d;%dH", ESC_STR "[%i%d;%dH")},
#endif

Então você terá o movimento do cursor (e atualiza a tela).

Os caracteres de controle que você viu ecoaram no terminal são um recurso diferente. vim envia uma seqüência de escape para o terminal se for um xterm perguntar qual versão é (para ativar alguns recursos opcionais do vim). Essa é uma sequência de escape padrão do VT100 ( Atributos do dispositivo DA ), então muitos terminais (exceto o xterm) responderão, enviando os caracteres para o computador, o que os deixará na linha de comando.

    
por 26.10.2016 / 01:57