copiar e colar guias entre janelas de terminal no X11

11

Quando copio e colo o texto usando a seleção do mouse X11 entre duas janelas do terminal, as guias são frequentemente, mas nem sempre, convertidas em espaços. Isso parece depender dos aplicativos de terminal envolvidos e dos programas executados dentro deles.

Isto é o que eu descobri por experimentação:

  • Depende apenas do que está sendo executado no lado da fonte (cópia). O lado de destino (colar) colará guias, independentemente do que estiver sendo executado, se a origem as preservar.
  • Somente gnome-terminalno lado da fonte preserva as guias. xterme konsolenão.
  • As guias são preservadas apenas se o arquivo tiver sido produzido usando cat. Outras aplicações, tais como less, vim, emacs, ou nanonão preservam guias.

Qual a explicação para isso? Esses bugs estão dentro konsolee xterm, ou podem ser configurados de maneira diferente? Pode lessser configurado para preservar as guias na saída?

Peter Eisentraut
fonte

Respostas:

3

Sim, sua observação está correta. O que acontece quando você copia e cola é que o destino obtém os dados da fonte. Ao exibir suas guias, o xterm(e konsole), aparentemente, as traduz em espaços (se o aplicativo em execução no terminal ainda não o fez). Assim, quando chega uma solicitação para o texto selecionado, tudo o que eles têm a oferecer são os espaços.

Eu até me lembro vagamente de uma resposta de um mantenedor do xterm anos atrás, alegando que seria muito difícil de corrigir ...

Não tenho certeza, como gnome-terminal faz a coisa certa, mas estou feliz que eles façam :) Outra alternativa é usar gvim(versão gráfica do vim) - em vez de executar vimdentro de um aplicativo de terminal - você pode copiar e colar com segurança do gvim , sem perder guias.

Mikhail T.
fonte
0

Às vezes, isso pode ser um problema, especialmente com os Makefilesquais exigem guias. Infelizmente, os problemas com diferentes programas não estão relacionados. Cada um provavelmente terá uma solução muito diferente.

Para o vim, você deve pré-formar um :set noexpandtabou colocar set noexpandtabem seu ~/.vimrcarquivo. Se você deseja que apenas determinados tipos de arquivos sejam noexpandtabdefinidos, você pode executar um comando automático no seu. ~/.vimrcTenho o seguinte no meu:

"indenting defaults: 4 spaces for an indent
set shiftwidth=4
set softtabstop=4
set expandtab

"exceptions to indenting for specific languages and files--------
"for shell scripts: 2 spaces for an indent
autocmd filetype sh setlocal shiftwidth=2
autocmd filetype sh setlocal softtabstop=2

"for Makefiles: use tabs for indents
autocmd filetype make setlocal tabstop=8
autocmd filetype make setlocal noexpandtab

Isso definirá um padrão de 4 espaços para uma guia vime abrirá exceções para scripts de shell e Makefiles.

Para os outros programas como less, tente olhar para lá as páginas de manual. Eles podem ter arquivos de configuração, variáveis ​​ambientais ou opções de linha de comando para o que você precisa. Olhando para a página de manual menos:

-xn,... or --tabs=n,...
       Sets tab stops.  If only one n is specified, tab stops  are  set
       at  multiples  of n.  If multiple values separated by commas are
       specified, tab stops are set at those positions, and  then  con-
       tinue  with  the  same  spacing  as  the last two.  For example,
       -x9,17 will set tabs at positions  9,  17,  25,  33,  etc.   The
       default for n is 8.

O que você está percebendo não é um bug. "É uma característica." O único problema é que você precisa saber como desligá-lo.

Sudo Bash
fonte
2
less -xnconfigura para usar n espaços em vez de um caractere de tabulação. -Utorna a aba de exibição como ^I. Não encontrei uma maneira de fazer com que ele emitisse um caractere de tabulação literal para que a cópia do texto cole um caractere de tabulação, mas eu adoraria saber como.
precisa
Vale a pena notar que em Roff ( troff& nroff), tabulações de tabulação podem ser definidas independentemente uma da outra, como as barras de ferramentas "régua" nos processadores de texto modernos (OpenOffice, Microsoft Word etc.). Manpages raramente usam tab-stops personalizados na prática, no entanto.
mandoc(1)também permite que os usuários substituam a largura de indentação padrão da linha de comando, usando -O indent=N(o padrão é 5 colunas).