Kopieren und Einfügen von Registerkarten zwischen Terminalfenstern in X11

11

Wenn ich Text mit der X11-Mausauswahl zwischen zwei Terminalfenstern kopiere und einfüge, werden Registerkarten häufig, aber nicht immer, in Leerzeichen konvertiert. Dies scheint von den beteiligten Terminalanwendungen und den darin ausgeführten Programmen abzuhängen.

Folgendes habe ich durch Experimente herausgefunden:

  • Dies hängt ausschließlich davon ab, was auf der Quellenseite (Kopie) ausgeführt wird. Die Zielseite (Einfügen) fügt Registerkarten ein, unabhängig davon, was gerade ausgeführt wird, sofern die Quelle sie beibehalten hat.
  • Nur gnome-terminalauf der Quellseite bleiben Registerkarten erhalten. xtermund konsolenicht.
  • Tabulatoren bleiben nur erhalten, wenn die Datei mit ausgegeben wurde cat. Andere Anwendungen wie less, vim, emacsoder nanonicht Tabs erhalten.

Was ist die Erklärung dafür? Sind diese Fehler in konsoleund xtermoder können sie anders konfiguriert werden? Kann lessund so konfiguriert werden, um Registerkarten in der Ausgabe beizubehalten?

Peter Eisentraut
quelle

Antworten:

3

Ja, Ihre Beobachtung ist richtig. Beim Kopieren und Einfügen erhält das Ziel die Daten von der Quelle. Wenn Sie Ihre Registerkarten anzeigen, übersetzen die xterm(und konsole) sie anscheinend selbst in Leerzeichen (falls die im Terminal ausgeführte Anwendung dies noch nicht getan hat). Wenn also eine Anfrage für den ausgewählten Text eingeht, müssen sie nur die Leerzeichen anbieten.

Ich erinnere mich sogar vage an eine Antwort eines xterm-Betreuers vor Jahren, in der behauptet wurde, es sei sehr schwierig, sie zu beheben ...

Ich bin mir nicht sicher, wie gnome-terminal das Richtige funktioniert, aber ich bin froh, dass sie es tun :) Eine andere Alternative ist die Verwendung gvim(grafische Version von vim) - anstatt vimin einer Terminalanwendung ausgeführt zu werden - können Sie sicher von gvim kopieren und einfügen , ohne Tabs zu verlieren.

Mikhail T.
quelle
0

Dies kann manchmal ein Problem sein, insbesondere Makefileswenn Registerkarten erforderlich sind. Leider hängen die Probleme mit verschiedenen Programmen nicht zusammen. Jeder wird wahrscheinlich eine ganz andere Lösung haben.

Für vim müssen Sie ein :set noexpandtaboder set noexpandtabin Ihre ~/.vimrcDatei einfügen. Wenn Sie möchten, dass nur bestimmte Dateitypen noexpandtabfestgelegt wurden, können Sie einen automatischen Befehl in Ihrem ~/.vimrcI ausführen. Ich habe Folgendes in meinem:

"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

Dadurch wird ein Standardwert von 4 Leerzeichen für eine Registerkarte in festgelegt vimund Ausnahmen für Shell-Skripte und Makefiles gemacht.

lessSchauen Sie sich für die anderen Programme wie die Manpages an. Sie verfügen möglicherweise über Konfigurationsdateien, Umgebungsvariablen oder Befehlszeilenoptionen für Ihre Anforderungen. Betrachten Sie die weniger Manpage:

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

Was Sie bemerken, ist kein Fehler. "Es ist eine Funktion." Das einzige Problem ist, dass Sie wissen müssen, wie Sie es ausschalten.

Sudo Bash
quelle
2
less -xnKonfiguriert es so, dass n Leerzeichen anstelle eines Tabulators verwendet werden. -Umacht es Registerkarte als anzeigen ^I. Ich habe keine Möglichkeit gefunden, ein wörtliches Tabulatorzeichen auszugeben, sodass beim Kopieren des Textes ein Tabulatorzeichen eingefügt wird, aber ich würde gerne wissen, wie.
Matt McClure
Es ist erwähnenswert, dass in Roff ( troff& nroff) Tabstops unabhängig voneinander festgelegt werden können, ähnlich wie die Symbolleisten "Lineal" in modernen Textverarbeitungsprogrammen (OpenOffice, Microsoft Word, et al.). Manpages verwenden in der Praxis jedoch selten benutzerdefinierte Tabulatoren.
mandoc(1)Außerdem können Benutzer die Standard-Einrückungsbreite über die Befehlszeile mithilfe von -O indent=N(standardmäßig 5 Spalten) überschreiben .