copia e incolla le schede tra le finestre dei terminali in X11


11

Quando copio e incollo il testo usando la selezione del mouse X11 tra due finestre del terminale, le schede vengono spesso, ma non sempre, convertite in spazi. Ciò sembra dipendere dalle applicazioni terminali interessate e dai programmi in esecuzione al loro interno.

Questo è quello che ho scoperto dalla sperimentazione:

  • Dipende esclusivamente da ciò che è in esecuzione sul lato sorgente (copia). Il lato target (incolla) incollerà le schede indipendentemente da ciò che è in esecuzione, se l'origine le ha conservate.
  • Solo gnome-terminalsul lato sorgente conserva le schede. xterme konsolenon farlo.
  • Le schede vengono conservate solo se il file è stato emesso utilizzando cat. Altre applicazioni come less, vim, emacs, o nanonon conservano schede.

Qual è la spiegazione per questo? Sono questi bug in konsolee xterm, o possono essere configurati in modo diverso? Può lesse tale essere configurato per preservare le schede nell'output?

Risposte:


3

Sì, la tua osservazione è corretta. Ciò che accade quando si copia e incolla è che la destinazione ottiene i dati dall'origine. Quando si visualizzano le schede, apparentemente xterm(e konsole) le traducono in spazi stessi (se l'applicazione in esecuzione all'interno del terminale non lo ha già fatto). Pertanto, quando arriva una richiesta per il testo selezionato, tutto ciò che hanno da offrire sono gli spazi.

Ricordo anche vagamente una risposta di un manutentore di xterm anni fa, sostenendo che sarebbe stato molto difficile risolvere ...

Non sono sicuro, come gnome-terminal fa la cosa giusta, ma sono contento che lo facciano :) Un'altra alternativa è usare gvim(versione grafica di vim) - invece di correre vimall'interno di un'applicazione terminale - puoi tranquillamente copiare e incollare da gvim , senza perdere schede.


0

Questo a volte può essere un problema, in particolare con Makefilesquali schede richiedono. Sfortunatamente, i problemi con programmi diversi non sono correlati. Ognuno avrà probabilmente una soluzione molto diversa.

Per vim devi preformare :set noexpandtabo inserire set noexpandtabnel tuo ~/.vimrcfile. Se si desidera impostare solo determinati tipi di file, noexpandtabè possibile eseguire un autocommand nel ~/.vimrcmio Ho il seguente nei miei:

"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

Ciò imposterà un valore predefinito di 4 spazi per una scheda vime farà eccezioni per script di shell e Makefile.

Per gli altri programmi come less, prova a guardare le pagine man lì. Possono avere file di configurazione, variabili ambientali o opzioni della riga di comando per ciò di cui hai bisogno. Guardando la pagina man meno:

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

Quello che stai notando non è un bug. "È una caratteristica." L'unico problema è che devi sapere come disattivarlo.


2
less -xnlo configura per utilizzare n spazi anziché un carattere di tabulazione. -Urende la scheda come ^I. Non ho trovato il modo di emettere un carattere di tabulazione letterale in modo che la copia del testo incolli un carattere di tabulazione, ma mi piacerebbe sapere come.
Matt McClure,

Vale la pena notare che in Roff ( troff& nroff), i tabstops possono essere impostati indipendentemente l'uno dall'altro, proprio come le barre degli strumenti "righello" nei moderni elaboratori di testi (OpenOffice, Microsoft Word, et al). Tuttavia, le pagine man usano raramente tabulazioni personalizzate.

mandoc(1)consente inoltre agli utenti di sovrascrivere la larghezza di rientro predefinita dalla riga di comando, utilizzando -O indent=N(per impostazione predefinita su 5 colonne).
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.