copiar y pegar pestañas entre ventanas de terminal en X11

11

Cuando copio y pego texto usando la selección del mouse X11 entre dos ventanas de terminal, las pestañas a menudo, pero no siempre, se convierten en espacios. Esto parece depender de las aplicaciones terminales involucradas y los programas que se ejecutan dentro de ellas.

Esto es lo que descubrí por experimentación:

  • Depende únicamente de lo que se esté ejecutando en el lado de la fuente (copia). El lado de destino (pegar) pegará pestañas sin importar lo que se esté ejecutando, si la fuente las preservó.
  • Solo gnome-terminalen el lado de origen conserva las pestañas. xtermy konsoleno lo hagas.
  • Las pestañas solo se conservan si el archivo se ha generado utilizando cat. Otras aplicaciones, tales como less, vim, emacs, o nanono conservan pestañas.

¿Cuál es la explicación para esto? ¿Están estos errores en konsoley xterm, o se pueden configurar de manera diferente? ¿Se lesspuede configurar esto para preservar las pestañas en la salida?

Peter Eisentraut
fuente

Respuestas:

3

Sí, tu observación es correcta. Lo que sucede cuando copia y pega es que el objetivo obtiene los datos de la fuente. Al mostrar sus pestañas, xterm(y konsole), aparentemente, las traducen en espacios ellos mismos (si la aplicación que se ejecuta dentro del terminal aún no lo ha hecho). Por lo tanto, cuando llega una solicitud para el texto seleccionado, todo lo que tienen que ofrecer son los espacios.

Incluso recuerdo vagamente una respuesta de un mantenedor de xterm años atrás, afirmando que sería muy difícil de solucionar ...

No estoy seguro, cómo gnome-terminal hace lo correcto, pero me alegro de que lo hacen :) Otra alternativa es el uso gvim(versión gráfica vim) - en lugar de correr vimdentro de una aplicación de terminal - que puedo con seguridad copiar y pegar desde gvim , sin perder pestañas.

Mikhail T.
fuente
0

Esto a veces puede ser un problema, especialmente con lo Makefilesque requieren pestañas. Desafortunadamente, los problemas con diferentes programas no están relacionados. Cada uno probablemente tendrá una solución muy diferente.

Para vim debe preformar un :set noexpandtabo lugar set noexpandtaben su ~/.vimrcarchivo. Si desea que solo se hayan noexpandtabconfigurado ciertos tipos de archivos , puede hacer un autocomando en su archivo. ~/.vimrcTengo lo siguiente en el mío:

"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

Esto establecerá un valor predeterminado de 4 espacios para una pestaña vimy hará excepciones para los scripts de shell y Makefiles.

Para los otros programas como less, intente mirar las páginas man. Pueden tener archivos de configuración, variables ambientales u opciones de línea de comando para lo que necesita. Mirando la página de menos man:

-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.

Lo que estás notando no es un error. "Es una característica". El único problema es que necesita saber cómo apagarlo.

Sudo Bash
fuente
2
less -xnlo configura para usar n espacios en lugar de un carácter de tabulación. -Uhace que se muestre la pestaña como ^I. No he encontrado una manera de hacer que emita un carácter de tabulación literal para que al copiar el texto pegue un carácter de tabulación, pero me encantaría saber cómo.
Matt McClure
Vale la pena señalar que en Roff ( troff& nroff), los tabuladores se pueden configurar de forma independiente, al igual que las barras de herramientas de "regla" en los procesadores de texto modernos (OpenOffice, Microsoft Word, et al). Sin embargo, las páginas de manual rara vez usan tabulaciones personalizadas en la práctica.
mandoc(1)también permite a los usuarios anular el ancho de sangría predeterminado de la línea de comandos, usando -O indent=N(el valor predeterminado es 5 columnas).