vi / vim editor, kopiere einen block (nicht übliche aktion)


75

Im vi / vim-Editor muss ich einen Block kopieren. Es gibt viele Wege, aber einer ist sehr schnell.

  1. beschriften Sie die erste Zeile auf irgendeine Weise,

  2. Beschriften Sie dann die Endzeile auf irgendeine Weise.

  3. Geben Sie dann einen Befehl ein, um die beschrifteten Zeilen zu kopieren.

  4. dann kopieren, möglicherweise mit 'p', aber nicht sicher.

Kennt jemand die Befehle (nicht JJ oder 10JJ)? Danke im Voraus.

Antworten:


40

Eine andere Option, die möglicherweise leichter zu merken ist, besteht darin, die beiden Zeilen mit maund zu markieren und mbdann auszuführen :'a,'byank.

Viele verschiedene Möglichkeiten, um diese Aufgabe zu erfüllen, indem Sie einfach eine andere anbieten.


1
Ja. Sie können auch in ein bestimmtes Register ziehen, z. :'a,'by a.
glitzert

1
Ich hatte noch nie eine zufriedenstellende und wiederaufrufbare Methode zum Kopieren und Einfügen in vi gefunden, aber diese Lösung ist wirklich erstklassig. Außerdem habe ich dies zu .vimrc "Befehl! P: 'a,' byank" hinzugefügt, damit die Taste "P" als Verknüpfung
fungieren kann

126

Verwenden Sie einfach V, um Zeilen oder vZeichen auszuwählen oder Ctrlvum einen Block auszuwählen.

Wenn sich die Auswahl über den Bereich erstreckt, den Sie kopieren möchten, drücken Sie einfach yund pfügen Sie sie ein, um sie an einer beliebigen Stelle einzufügen ...


3
Auf einem Windows-PC, auf dem Ctrl+vPastig aus der Zwischenablage angezeigt wird, sollten Ctrl+qSie einen Block auswählen
Wouter J

1
In macOS (zumindest) müssen Sie den VISUAL-Modus durch voder Vp
aufrufen

96

Ihre Dokumentation sagt:

Ausschneiden und Einfügen:

  1. Positionieren Sie den Cursor an der Stelle, an der Sie mit dem Schneiden beginnen möchten.
  2. Drücken Sie v, um Zeichen auszuwählen (oder in Großbuchstaben V, um ganze Zeilen auszuwählen).
  3. Bewegen Sie den Cursor an das Ende dessen, was Sie schneiden möchten.
  4. Drücken Sie d, um zu schneiden (oder yzu kopieren).
  5. Gehen Sie zu der Stelle, an der Sie einfügen möchten.
  6. Drücken Sie Pzum Einfügen vor dem Cursor, oder pnach einzufügen.

Das Kopieren und Einfügen erfolgt mit denselben Schritten, mit Ausnahme von Schritt 4, in dem Sie y anstelle von d drücken würden:

d= delete=cut

y= yank=copy


OP fragt nach VI, Ihre Antwort bezieht sich auf VIM, es hilft nicht in VI.
Volkit

@volkit es funktioniert in meinen Macos, wenn vi eine Datei
Kamil

@Kamil afaik der Befehl vi auf dem Mac OS startet vim und nicht vi. Aber wie auch immer, die Frage wurde geändert und jetzt enthält sie vim. Daher denke ich, dass Kaleems Antwort in Ordnung ist. Mein erster Kommentar hilft vielleicht jemandem, der vi verwendet (was sich ein bisschen von vim unterscheidet) und fragt sich, warum diese Antwort für ihn nicht funktioniert.
Volkit

18

Es hört sich so an, als ob Sie Markierungen in die Datei einfügen möchten .

mxPlatziert eine Markierung mit dem Namen x unter dem Cursor

y'xzieht alles zwischen der aktuellen Position des Cursors und der Zeile mit der Markierung x .

Sie können 'xden Cursor einfach auf die Linie mit Ihrer Markierung bewegen.

Sie können `x(ein Back-Tick) verwenden, um zur genauen Position der Marke zu gelangen.


Eine Sache, die ich die ganze Zeit mache, ist, alles zwischen den Cursor zu ziehen und x in die Zwischenablage zu markieren .

Sie können das so machen:

"+y'x

HINWEIS: In einigen Umgebungen wird der Zwischenablagepuffer durch a *anstelle von a dargestellt +.


Ähnliche Fragen mit einigen guten Antworten:


Ja, Noten sind auch eine großartige Möglichkeit, dies zu tun, besonders wenn Sie reines vi verwenden, nicht vim ...
André Keller

Ich denke, ich bin längst überfällig, Vin meinen Workflow einzuführen . Ich bin mir nicht sicher, warum ich es nicht benutze ...
Jahroy


8

Tastaturkürzel dazu sind:

  1. Zum Kopieren: Setzen Sie den Cursor auf den Blockanfang und drücken Sie md . Gehen Sie dann zum Ende des Blocks und drücken Sie y'd . Dadurch wird der Block zum Einfügen ausgewählt. Drücken Sie p

  2. Zum Schneiden: Setzen Sie den Cursor auf den Blockanfang und drücken Sie ma. Gehen Sie dann zum Ende des Blocks und drücken Sie d'a . Dadurch wird der Block zum Einfügen ausgewählt. Drücken Sie p


1

Sie können dies wie in vi tun, um beispielsweise Zeilen von 3020 bis zum Ende zu ziehen. Führen Sie diesen Befehl aus (schreiben Sie den Block in eine Datei):

: 3020, $ w / tmp / yank

Und um diesen Block in eine andere Zeile / Datei zu schreiben, gehen Sie zur gewünschten Position und führen Sie den nächsten Befehl aus (fügen Sie die zuvor geschriebene Datei ein):

: r / tmp / yank

(Erinnerung: Vergessen Sie nicht, die Datei zu entfernen: / tmp / yank)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.