Kann ich mit der Maus Text in weniger richtig auswählen?

9

Ich habe gerade festgestellt, dass ich die folgenden Zeilen hinzufügen kann ~/.vimrc.

set mouse=a
:vmap <C-C> "+y

Dies hat den Effekt, dass Sie Text mit der Maus auswählen können (dh im visuellen Modus) und dann den eigentlichen Text mit Ctrl+ in die X-Zwischenablage kopieren können c. Dies unterscheidet sich von der Standardkopie vom Terminal, da es sich um den tatsächlichen Text handelt, den ich kopiere, und nicht um das, was das Terminal sieht. Wenn der Text beispielsweise Registerkarten enthält, habe ich sie zuvor als Leerzeichen kopiert.

Gibt es eine Möglichkeit, weniger dazu zu bringen, sich genauso zu verhalten? dh kann ich wörtlich kopieren, was in der Textdatei ist, die ich in weniger ansehe?

Sparhawk
quelle
Hast du es mit gpm versucht?
YoMismo
@YoMismo Nein. Ich bin mir nicht sicher, wie das helfen würde, da der Terminalemulator im obigen Beispiel immer noch Literalzeichen anstelle von Tabulatoren enthält.
Sparhawk
Entschuldigung, ich dachte, Sie arbeiten in der Konsole, nicht in einem X-Terminal: - /
YoMismo

Antworten:

5

Keine Aufgabe für weniger

Nein,
ich glaube nicht, dass Sie das direkt tun können, weil weniger zunächst keinen Cursor hat.
Man müsste navigieren, um den Text zu beginnen und zu beenden.
lessist einfach nicht das richtige Werkzeug für die Navigation auf Zeichenebene.

Tabs bereits erweitert

Sie können die Taste shiftund die Maus verwenden, um eine Auswahl zu treffen. Dies wird vom Terminal erledigt, nicht von weniger. Das Terminal weiß jedoch nicht, wie Leerzeichen und Tabulatoren angeordnet sind - weniger die interne Interpretation von Tabulatoren und schreibt nur normale " " Zeichen auf den Bildschirm.

Es gibt Werkzeuge , wie screen, tmux und byobu, die viele beeindruckende Dinge in diesem Bereich tun. Ich habe es nicht überprüft, aber ich gehe davon aus, dass diese Terminal-Multiplexer keinen Weg daran vorbei haben - letztendlich Terminals - und sich gleich verhalten werden.

Verwenden Sie vim

Wenn Sie eine Datei in zeigen less, gibt es eine schöne Lösung:
Drücken Sie die Taste vin lessder aktuellen Datei in öffnen vim- asuming Ihre $EDITORusw. eingerichtet ist für vim.

Dies funktioniert nicht, wenn stdin aus einer Pipeline oder so angezeigt wird, obwohl es Problemumgehungen gibt .

Zumindest Maus-Scrollen

Sie können aber zumindest mit dem Mausrad scrollen:

Das scheint sogar standardmäßig aktiviert zu sein, aber die Mausradereignisse werden durch eine andere Option unterdrückt.

Versuchen Sie für einen schnellen Test:

LESS=-r man less

Die Option -X( --no-init) blockiert das Scrollen - überprüfen Sie, was Ihre Umgebungsvariable LESSenthält:

$ echo $LESS

Die Option -q( --quiet, --silent) verursacht laut SU auch Probleme : Wie lässt man das Mausrad mit Bash und Gnome-Terminal weniger Pager scrollen?

Volker Siegel
quelle
Gute Antwort. Der vSchlüssel ist fantastisch! (Ich habe mir die Freiheit einer coolen Problemumgehung genommen, um sie auch in Pipelines zum Laufen zu bringen.) FWIW in meinem Terminalemulator (Terminator) Ich muss die Umschalttaste nicht gedrückt halten, wenn ich Text auswähle.
Sparhawk
@ Sparhawk Hey, die Problemumgehung ist mindestens genauso fantastisch!
Volker Siegel
2
Darüber hinaus gibt es einen Pager namens, mit vimpagerdem Sie den lessgesamten Verkauf ersetzen können . Es wird eigentlich nur vimin einem kleinen Skript verpackt verwendet .
HalosGhost
1
@ HalosGhost Danke dafür. vimpagersieht ziemlich cool aus, aber ich hatte Probleme mit dem Ruckeln , weshalb ich es vorziehe, weniger und zu verwenden v.
Sparhawk
@Sparhawk Technisch gesehen können Sie das verwendete vimrc vergleichen oder Teile Ihres normalen vimrc verwenden, vimpagerbis es funktioniert. (Ich bemühe mich, nicht alle meine vimPlugins beim Starten zu aktivieren vimpager...)
Volker Siegel
3

Sie können die angezeigte oberste Zeile in lessdie X11 CLIPBOARD-Auswahl kopieren, indem Sie Folgendes eingeben less:

|.head -n1|xclip -sel c<Enter><Enter>

Dadurch wird der weniger Puffer von der obersten Zeile zur .Markierung (also head -n1|xclip -sel cpraktisch der gesamte Bildschirminhalt) zum Befehl geleitet (um die erste Zeile davon in der CLIPBOARD-Auswahl zu speichern).

Sie können Ihren Terminalemulator so konfigurieren, dass diese Zeichenfolge bei einem bestimmten Tastendruck eingefügt oder in lessTastenkombinationen an eine Taste oder Tastenkombination gebunden wird. Zum Beispiel, um es zu binden Alt+C:

printf '%s\n' '#commands' '\ec pipe .head -n1|xclip -sel c\n' | lesskey -

Beachten Sie jedoch, dass Sie danach drücken müssen Enter, um die Eingabeaufforderung "| done (drücken Sie RETURN)" zu bestätigen.

Mit xtermkönnen Sie hier auch einen neuen Auswahlmodus definieren, Ctrl+Altwenn Sie die Auswahl erweitern, um anzugeben, lesswelche Zeilen vom aktuellen Bildschirm kopiert werden sollen:

Schreiben Sie ein lesspasteSkript wie:

#! /bin/sh -
start=${1%%";"*}
end=${1#*" "}
end=${end%";"*}
head -n "$((end))" | tail -n "$((end - start + 1))" | xclip -sel c

Und definieren Sie xterm-Übersetzungstabellen (hier in der Befehlszeile zum Testen, aber Sie möchten dies einer X-Ressourcendatei hinzufügen):

xterm -xrm 'XTerm.VT100.translations: #override \
  Meta Ctrl<Btn1Down>: select-start()\n\
  Meta Ctrl<Btn1Motion>: select-extend()\n\
  Meta Ctrl<Btn1Up>: select-end(SECONDARY) \
    insert-formatted("|.lesspaste '\''%P %p'\''\n\n", SECONDARY)'

Sie markieren dann die einzufügenden Linien, indem Sie die Maus mit gedrückter Maustaste ziehen. Ctrl+AltWenn Sie die Taste 1 loslassen, sagt xterm weniger, dass der aktuelle Bildschirm lesspastemit den als ein Argument übergebenen Start- und Endkoordinaten an unser Skript weitergeleitet werden soll ( y1;x1 y2;x2).

(Beachten Sie, dass es möglicherweise nicht richtig funktioniert, wenn lesses aufgerufen wird -s, um Leerzeilen zu quetschen (wie es typisch ist, wenn es von aufgerufen wird man), da bei der Eingabe, der zugeführt lesspastewird , die Leerzeilen nicht gequetscht werden (daher können die Versätze der Zeilennummern falsch sein).) .

Stéphane Chazelas
quelle
@Sparhawk, siehe bearbeiten.
Stéphane Chazelas
Es scheint bei mir nicht zu funktionieren. In der Zwischenablage befindet sich nichts Neues. Soll lessich irgendeine Art von Feedback geben? jscheint nichts für mich zu tun.
Sparhawk
@Sparhawk, haben Sie benutzerdefinierte Tastenkombinationen für less, jscrollt forw-linein der Standard-Tastenkombination um eine Zeile ( ) nach unten (eigentlich J( forw-line-force) wäre hier besser, ich werde sie bearbeiten). |sollte Ihnen ein Feedback geben. (Eingabeaufforderung für die Markierung und dann Eingabe des Befehls).
Stéphane Chazelas
Nein, habe ich nicht, aber ich habe mit Text getestet, der weniger als eine Seite lang war. Vielleicht hat das deshalb jnichts getan. Die erste Option funktioniert jetzt (+1). Die zweite Option scheint mit ein paar Einschränkungen ziemlich kompliziert zu sein, deshalb habe ich sie nicht ausprobiert. Ich denke vist gut genug für mich.
Sparhawk