In vim lösche (oder kopiere) ich oft große Textblöcke. Man kann die Textzeilen zählen und sagen (zum Beispiel) 50dd
, um 50 Zeilen zu löschen.
Aber wie würde man diesen großen Textblock löschen, ohne wissen zu müssen, wie viele Zeilen gelöscht werden sollen?
51dd
. Alternativ können Sie einen Bewegungsbefehl verwenden -50d<down arrow>
:set rnu
und Vim wird dies sofort tun! Die Zeile, in der Sie sich befinden, wird weiterhin absolut nummeriert, aber Zeilen über und unter dem Cursor werden symmetrisch mit 1, 2, ... nummeriert (und mit Cursorbewegung, Ereignissen auf Dateiebene usw. aktualisiert)Antworten:
Ich bin kein Vim-Guru, aber was ich unter diesen Umständen benutze, ist "visueller Modus". Geben Sie im Befehlsmodus
V
(Großbuchstaben) ein. Bewegen Sie sich dann nach oben / unten, um den Block zu markieren, den Sie löschen möchten (alle üblichen Bewegungsbefehle funktionieren). Dann entfernen Sie es mitx
oderd
.quelle
.vimrc
dafür, dass es funktioniert?Shift
-v
... in den visuellen Linienmodus wechseln können. Ich habe versucht, auch dieCTRL
Taste zu verwenden . Das funktioniert also und ist wahrscheinlich der bequemste Weg.CTRL
-v
) und Visual Block (Shift
-v
).Gehen Sie zur Startzeile und geben Sie ein ma(markieren Sie "a"). Gehen Sie dann zur letzten Zeile und geben Sie ein d'a(löschen, um "a" zu markieren).
Dadurch werden alle Zeilen von der aktuellen zur markierten (einschließlich) gelöscht. Es ist auch kompatibel mit
vi
sowievim
, für den unwahrscheinlichen Fall, dass die Umgebung nicht mit dieser gesegnet ist.quelle
/var/mail/username
in großen Mengen zu löschen und die letzten Mails intakt zu lassen. Ich mache eine Markierung, dann gebe ich zum Beispiel ein,50000
gefolgt vongg
Zeile 50.000, und lösche dann alle Zeilen dazwischen. klappt wunderbar!vim
als Werkzeug zum Bearbeiten von Gigabyte-Dateien verwenden - ich würde mich eher für Textverarbeitungswerkzeuge wieawk
und seine Brüder entscheiden :-)Sie können den visuellen Modus verwenden auch (einige Befehle sind verwendbar mit dem Löschoption auch) vip vapAbsatz auszuwählen, v2apzwei Absätze auszuwählen dapWerke, d2apauch. Sie können innerhalb von Blöcken von
[
]
like löschenda[Als Referenz: die Arten von Objekten. Aus der vim-Dokumentation: Abschnitt 4. http://vimdoc.sourceforge.net/htmldoc/visual.html
quelle
dap
ist sehr leicht zu merken als "Absatz löschen"Hier gibt es viele bessere Antworten, aber der Vollständigkeit halber werde ich die Methode erwähnen, die ich verwendet habe, bevor ich einige der oben genannten großartigen Antworten gelesen habe.
Angenommen, Sie möchten aus den Zeilen 24-39 löschen. Sie können den Befehl ex verwenden
Sie können Linien auch mit ziehen
Und finden und ersetzen Sie knapp über den Zeilen 24-39 mit
quelle
Wenn Sie die Zeilennummern über
set number
aktivieren, können Sie einfachdNNG
die Zeile NN von der aktuellen Position löschen. Sie können also zum Anfang der Zeile navigieren, die Sie löschen möchten, und einfachd50G
davon ausgehen, dass dies die letzte Zeile ist, die Sie löschen möchten.quelle
Es hängt irgendwie davon ab, was dieser große Block ist. Vielleicht dipmöchten Sie nur einen Absatz löschen. In diesem Fall würde a dies tun.
quelle
Es gibt verschiedene Möglichkeiten. Was am besten ist, hängt vom Text ab, an dem Sie arbeiten.
Zwei Möglichkeiten kommen in den Sinn:
V
,S-V
, ...), wählen Sie den Text mit der Cursorbewegung und drückend
dap
quelle
Wenn der gesamte Block auf dem Bildschirm sichtbar ist, können Sie die Einstellung für die relative Nummer verwenden. Siehe: Hilfe zur relativen Nummerierung. Verfügbar in 7.3
quelle
Sie können den Cursor am Anfang oder Ende des Blocks platzieren und in den visuellen Modus (Umschalt-V) wechseln. Bewegen Sie sich dann einfach nach oben oder unten, bis der gewünschte Block markiert ist. Kopieren Sie zum Schluss den Text durch Drücken von y oder schneiden Sie den Text durch Drücken von d aus.
quelle
Neben anderen Bewegungen, die hier bereits erwähnt wurden, gibt es auch
/{pattern}<CR>
Bewegungen. Wenn Sie also wissen, dass Sie eine Zeile löschen möchten, die foo enthält, können Sie dies tundV/foo<CR>
.V
ist hier, um die Bewegung zeilenweise zu erzwingen, da sie standardmäßig zeichenweise/
ist.quelle
Das Zählen von Zeilen ist mir zu langweilig, aber das Zählen von Absätzen ist nicht so schlecht. '{' und '}' bewegen den Cursor in die erste leere Zeile vor bzw. nach dem Cursor. Cursorbewegungsvorgänge können mit Löschen kombiniert werden, und mehrere andere Antworten verwenden einen ähnlichen Ansatz (dd für eine Zeile, dG für das Ende des Dokuments usw.).
Zum Beispiel:
Wenn Ihr Cursor über dem Kommentarblock beginnt, löscht 'd}' den Kommentarblock und 'd2}' löscht sowohl den Kommentarblock als auch den Codeblock. Wenn Ihr Cursor unterhalb des Codeblocks startet, löscht 'd {' den Code und 'd2 {' löscht beide. Natürlich können Sie einen Block überspringen, indem Sie zuerst den Cursor bewegen: '{d {' oder '} d}'.
Wenn Sie mit Ihrem Leerzeichen übereinstimmen oder die Absätze auf einen Blick zählen können, sollte dies funktionieren. Die Vim-Hilfedatei enthält bei Interesse weitere Cursor-Tricks.
quelle
Sie können auch eine sehr große Zahl eingeben und dann drücken,
dd
wenn Sie alle Zeilen unter dem Cursor löschen möchten.quelle
dG
, die bis zum Ende des DokumentsG
gelöscht wird, ist möglicherweise noch einfacher , da standardmäßig die letzte Zeile angezeigt wird.Löschen eines Textblocks
Angenommen, Ihr Cursor befindet sich am Anfang des Blocks:
Erläuterung
V
/^$<CR>
d
Schlüsselbindung
Eine robustere Lösung:
Erläuterung
:set nowrapscan
D
Schlüssel neu zu (den folgenden Befehlen)::nnoremap D
V
/^\s*$\\|\%$<CR>
d
quelle