12 votes

copier et coller les onglets entre les fenêtres du terminal en X11

Lorsque je copie et colle du texte en utilisant la sélection de la souris X11 entre deux fenêtres de terminal, les tabulations sont souvent, mais pas toujours, converties en espaces. Cela semble dépendre des applications terminales concernées et des programmes qui y sont exécutés.

C'est ce que j'ai découvert en expérimentant :

  • Cela dépend uniquement de ce qui est exécuté du côté de la source (copie). Le côté cible (coller) collera les onglets, peu importe ce qui est en cours d'exécution, si la source les a préservés.
  • Seulement gnome-terminal du côté source préserve les onglets. xterm y konsole ne le font pas.
  • Les onglets ne sont préservés que si le fichier a été édité à l'aide de la fonction cat . D'autres applications telles que less , vim , emacs o nano ne préservent pas les onglets.

Quelle est l'explication de ce phénomène ? Ces bogues sont-ils dans konsole y xterm ou peuvent-ils être configurés différemment ? Est-ce que less et autres doivent être configurés pour préserver les tabulations en sortie ?

3voto

Mikhail T. Points 565

Oui, votre observation est correcte. Ce qui se passe lorsque vous faites un copier-coller, c'est que la cible obtient les données de la source. Lors de l'affichage de vos onglets, le xterm (et konsole ), apparemment, les traduisent eux-mêmes en espaces (si l'application exécutée dans le terminal ne l'a pas déjà fait). Ainsi, lorsqu'une demande est faite pour le texte sélectionné, ils n'ont que les espaces à offrir.

Je me souviens même vaguement d'une réponse d'un mainteneur de xterm il y a quelques années, affirmant que ce serait très difficile à réparer...

Je ne suis pas sûr, comment gnome-terminal fait ce qu'il faut, mais je suis content qu'ils le fassent :) Une autre alternative est d'utiliser gvim (version graphique de vim ) -- au lieu d'exécuter vim à l'intérieur d'une application de terminal -- vous pouvez en toute sécurité copier-coller de gvim, sans perdre les onglets.

0voto

DTrejo Points 928

Cela peut parfois être un problème, notamment avec Makefiles qui nécessitent des onglets. Malheureusement, les problèmes des différents programmes ne sont pas liés. Chacun d'eux aura probablement une solution très différente.

Pour vim, vous devez effectuer un :set noexpandtab ou place set noexpandtab dans votre ~/.vimrc fichier. Si vous voulez que seulement certains types de fichiers aient noexpandtab alors vous pouvez faire une autocommande dans votre ~/.vimrc J'ai les éléments suivants dans le mien :

"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

Ceci définira une valeur par défaut de 4 espaces pour une tabulation en vim et faire des exceptions pour Shell Shell et Makefiles.

Pour les autres programmes comme less essayez de regarder leurs pages de manuel. Ils peuvent avoir des fichiers de configuration, des variables d'environnement ou des options de ligne de commande pour ce dont vous avez besoin. Je regarde la page de manuel de less :

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

Ce que vous remarquez n'est pas un bug. "C'est une fonctionnalité." Le seul problème est que vous devez savoir comment la désactiver.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X