Wie wähle ich den gesamten Text in Vi / Vim aus?

193

Verwendung des VI-Tools zum Bearbeiten von Konfigurationsdateien.

Wie kann ich den gesamten Text in einer Datei (ca. 1000 Zeilen) auswählen, kopieren und dann in Google Text & Tabellen einfügen?

Tarun Gupta
quelle

Antworten:

159

Der einfachste und schnellste Weg ist, Folgendes zu verwenden: : % y +und dann zu Google Text & Tabellen (oder wo auch immer) zu wechseln und einzufügen. Erläuterung:

  • % um den nächsten Befehl zum Bearbeiten aller Zeilen zu verwenden
  • y  diese Zeilen zu ziehen
  • +  in die Zwischenablage kopieren

Ein anderer Weg ist, g g " + y Gaber Sie werden wahrscheinlich zugeben, dass die oben genannten schneller und einfacher ist.

Tuxmentat
quelle
10
@Tuxmentat können Sie bitte erklären, was jeder Schlüssel tut:%y+
Jas
10
Diese Antwort wäre besser, wenn erklärt würde, was die einzelnen Tasten für beide Sequenzen tun.
AsksAnyway
6
Mein bester Tipp: Das ':' bedeutet, dass wir einen "Ex-Modus" -Befehl verwenden (glaube ich). Jedenfalls ist es ein Befehl. '%' ist ein spezieller Befehlszeilenbereich, der die gesamte Datei angibt. 'y' reißt alles ab und '+' gibt das Zwischenablage-Register an . : help <Befehl> hat mir dabei geholfen, das herauszufinden.
Hawkeye Parker
11
Ich muss etwas falsch machen. Ich :%y+E488: Trailing characters
tippe
25
Ich erhalte die Meldung "E850: Ungültiger Registername". Die zweite Methode funktionierte gut zum Kopieren, gelangt aber unter Ubuntu 16.04 nicht in die System-Zwischenablage (zumindest für mich --- Ich habe eine .vimrc-Datei, die sich möglicherweise auf Dinge auswirkt).
EntangledLoops
95

Viele der gegebenen Antworten zerren auch an der Auswahl, nach der ich nicht gesucht habe.

Ich benutze ggVGfür diesen Zweck (muss im normalen Modus ausgeführt werden). Dieser Befehl wählt nur den gesamten Text im Dokument aus.

Ich habe sogar Ctrl+Azu diesem Zweck neu zugeordnet, da ich nicht wirklich eine ganze Zahl mit der Verknüpfung erhöhen muss (Standard- Ctrl+AMap).

Fügen Sie dies einfach hinzu in .vimrc:

map <C-a> <esc>ggVG<CR>

Es muss <esc>zunächst sichergestellt werden, dass sich der Benutzer im normalen Modus befindet.

Arda
quelle
2
Genau das, wonach ich gesucht habe, und es ist schön zu sehen, dass Strg + A standardmäßig nicht in vim belegt ist. Hoffe, es gibt keine Nebenwirkungen.
Nikos Alexandris
2
Ich persönlich benutze ggVG, gg0vG$könnte aber passender sein, da es die 'normale' Strg + A-Operation genauer nachbildet.
Sheharyar
39

Sie können die cat fileAusgabe verwenden und dann auswählen und kopieren und einfügen, wenn Sie sie in Ihren Browser einfügen müssen.

Für vi können Sie so den gesamten Text auswählen und in eine neue Datei schreiben:

shift v  -- visual mode
shift g -- jump to eof
"*y -- yank select text
:e my_new_file -- create a new file
"*p -- paste into a new file

Theoretisch sollte dies sowohl unter Linux als auch unter Windows funktionieren - ich habe es auf einem Mac versucht, aber es funktioniert nicht.

silviud
quelle
1
Das Einfügen in den Webbrowser cat fileist der richtige Weg. Die shift vMethode kopiert nur in den internen Puffer von Vi.
Aleksandr Levchuk
nicht, wenn Sie die System-Zwischenablage verwenden, die die * -Registrierung verwendet - dies funktioniert jedoch nur unter X und ich habe es unter Windows gehört. Wenn Sie also ssh benötigen, müssen Sie mit -X prüfen, ob vim dies in vim unterstützt: set clipboard + = unbenannt
Gibt es eine Alternative dazu, ohne eine neue Datei zu erstellen? Wenn wir live auf dem Server bearbeiten, müssen wir den Sicherungscode auf dem lokalen Computer behalten, damit wir zurückkehren können.
NJInamdar
+1 für Katze und in Kitt auswählen. Natürlich funktioniert nicht für große Dateien und ist nicht die benutzerfreundlichste Methode. Aber zum Kopieren kleiner Skriptdateien, die außerhalb des Bildschirm-Ansichtsfensters liegen, ist es gut genug.
Arnis Juraga
16

BENUTZEN Sie ggVG. Geben Sie "gg" ein, um den Test zu beginnen. Geben Sie dann VG ein.

user402791
quelle
8

Ich verwende Vim 7.4 in der CentOS-7-Umgebung. Was mir bei der Auswahl des gesamten Textes geholfen hat ist

:%y

Dann einfach pin die nächste Datei wo ich eine Vollkopie will.

Oder

Sie können den Befehl cat verwenden.

cat copyfile > pastefile

Dieses Git Repo hat auch einige andere nützliche Befehle.

Sachith
quelle
7

gg"+yG

oder

gg"*yG

abhängig davon, ob + oder * die Systemzwischenablage ist. (Bei vielen Unixen ist + der Mausauswahlpuffer für das Klicken mit der mittleren Maustaste und * die Systemzwischenablage).

schäbig
quelle
1
Ich denke, es ist umgekehrt: "* ist Auswahl und" + ist Zwischenablage. vimdoc.sourceforge.net/htmldoc/gui_x11.html#x11-selection
Mikel
Du hast recht. Das wusste ich auch, habe aber falsch getippt. ☹
Frabjous
3

Verwenden Sie für einen Mac pbcopy (Pasteboard-Kopie):

cat file.txt | pbcopy

Der Inhalt von file.txt befindet sich nun in der Zwischenablage, um ihn in eine andere Anwendung (z. B. einen Browser) einzufügen.

Sie können den Inhalt der Zwischenablage auch mit pbpaste in eine Datei einfügen:

pbpaste > file.txt

Dies bezieht sich zwar nicht speziell auf vi, erreicht aber auf einem Mac dasselbe Ziel.

Chris
quelle
1

Wenn Sie einen Linux-Desktop verwenden, können Sie ihn mit xclip oder xsel in die Zwischenablage laden. Für etwas in dieser Größe möchten Sie möglicherweise nur die Upload-Funktion in Google Docs verwenden.

Cakemox
quelle
1

Ein anderer Weg wäre:

Sie drücken die vTaste auf Ihrer Tastatur und schalten VIM auf VISUAL

Wählen Sie dann den gesamten Text aus, indem Sie nach unten scrollen

^+ INSERTzum kopieren

SHIFT+, INSERTum den gewünschten Text in Google Text & Tabellen einzufügen.

user237678
quelle
0

Verwenden Sie den folgenden Befehl.

cat <your file name>

Der Inhalt der Datei wird wiedergegeben. Nun auswählen, scrollen, kopieren, einfügen.
Spiel ist aus

Ex.:

cat bobis.txt
user359247
quelle