Ich habe angefangen, gvim zu verwenden, und ich kann nicht ganz verstehen, wie die mehrzeilige Bearbeitung in gvim funktioniert.
Beispielsweise:
Original Text:
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
Strg + q, jjjjjj, $ alles ist ausgewählt, dann drücke ich I, um eine mehrzeilige Einfügung durchzuführen.
Meine Absicht ist es, Anführungszeichen wie in der ersten Zeile einzufügen und dann Esc zu drücken:
asd "asd asd" asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
Was ist passiert? Ich habe ein ähnliches Verhalten wie das von Sublimetext erwartet:
Wenn Sie nicht wissen, wie das funktioniert, werden die Aktionen für jede Zeile wiederholt. Wie kann das erreicht werden? Und was macht vim hier?
vim
sublimetext
text-editor
AlfredoVR
quelle
quelle
Antworten:
Tun Sie sich selbst einen Gefallen, indem Sie die Windows-Kompatibilitätsebene löschen.
Die normale Verknüpfung zum Aufrufen des Visual-Block-Modus lautet
<C-v>
.Andere haben sich mit Aufnahmemakros befasst, hier einige andere Ideen:
Verwenden Sie nur den Visual-Block- Modus.
Setzen Sie den Cursor auf das zweite Wort:
Drücken Sie,
<C-v>
um in den Visual-Block- Modus zu wechseln und Ihre Auswahl nach unten zu erweitern:Hit um
I"<Esc>
zu erhalten:Setzen Sie den Cursor auf das letzte Zeichen des dritten Wortes:
Drücken Sie,
<C-v>
um in den Visual-Block- Modus zu wechseln und Ihre Auswahl nach unten zu erweitern:Hit um
A"<Esc>
zu erhalten:Mit Visual-Block- Modus und Surround.vim .
Setzen Sie den Cursor auf das zweite Wort:
Drücken Sie,
<C-v>
um in den Visual-Block- Modus zu wechseln und Ihre Auswahl nach unten und rechts zu erweitern:Drücken Sie
S"
, um Ihre Auswahl mit "zu umgeben:Mit Visual-Line- Modus und
:normal
.Drücken Sie
V
, um die gesamte Zeile auszuwählen und nach unten zu erweitern:Führen Sie diesen Befehl aus: um
:'<,'>norm ^wi"<C-v><Esc>eea"<CR>
zu erhalten::norm[al]
Ermöglicht die Ausführung von Normalmodusbefehlen in einer Reihe von Zeilen (der'<,'>
Teil wird automatisch von Vim hinzugefügt und bedeutet "auf den ausgewählten Bereich einwirken").^
setzt den Cursor auf das erste Zeichen der Zeilew
bewegt sich zum nächsten Worti"
fügt ein"
vor dem Cursor ein<C-v><Esc>
ist der Weg der Vim ein Steuerzeichen in diesem Zusammenhang an dem Eingang, hier ist es<Esc>
zum Ausgang verwendet Insert - Modusee
bewegt sich zum Ende des nächsten Wortesa"
Hängt ein"
nach dem Cursor an<CR>
führt den Befehl ausMit Surround.vim wird der obige Befehl
quelle
gv
zu drücken , um Ihre vorherige visuelle Auswahl wiederherzustellen, und sich dann horizontal zu bewegen, vielleicht mit2e
. (Je mehr Zeilen, desto wertvollergv
ist!)s
im normalen Modus, aber einen großenS
im visuellen Modus, daher sollten in Schritt 3 der Surround.vim-Methode die Tastenanschläge seinS"
S"
, nichts"
.
.Dies sind einige gute Out-of-the-Box-Lösungen, die oben angegeben wurden. Wir können jedoch auch einige Plugins ausprobieren, die mehrere Cursor wie Sublime bereitstellen.
Ich denke, dieser sieht vielversprechend aus:
Es schien für eine Weile aufgegeben zu sein, hat aber 2014 einige Beiträge geleistet.
Es ist ziemlich mächtig, obwohl ich eine Weile gebraucht habe, um mich an den Fluss zu gewöhnen (der ziemlich erhaben ist, aber immer noch modal wie Vim).
Wenn Sie nach meiner Erfahrung viele andere Plugins installiert haben, können Konflikte auftreten!
Es gibt einige andere Versuche mit dieser Funktion:
Bitte zögern Sie nicht zu bearbeiten, wenn Sie feststellen, dass eine dieser Verbesserungen vorgenommen wird.
quelle
Es gibt verschiedene Möglichkeiten, dies in Vim zu erreichen. Ich weiß allerdings nicht, welche Sublime Text am ähnlichsten sind.
Der erste wäre über den mehrzeiligen Einfügemodus . Setzen Sie Ihren Cursor auf das zweite "a" in der ersten Zeile, drücken Sie
Ctrl-V
, wählen Sie alle Zeilen aus, drücken SieI
und geben Sie ein doppeltes Anführungszeichen ein. Durch Drücken von<esc>
wird der Vorgang in jeder Zeile wiederholt.Der zweite ist über Makros. Setzen Sie den Cursor auf das erste Zeichen und beginnen Sie mit der Aufnahme eines Makros mit
qa
. Gehen Sie mit nach rechtsllll
,a
rufen Sie den Einfügemodus mit auf , setzen Sie ein doppeltes Anführungszeichen, beenden Sie den Einfügemodus und kehren Sie mit<home>
(oder einem gleichwertigen) zum Anfang Ihrer Zeile zurück . Drücken Siej
, um eine Zeile nach unten zu gehen. Beenden Sie die Aufnahme mitq
. Und dann das Makro mit abspielen@a
. Mehrmals.Funktioniert einer der oben genannten Ansätze für Sie?
quelle
Wenn Sie den Befehl "global" verwenden, können Sie wiederholen, was Sie online in einer beliebigen Anzahl von Zeilen tun können.
Beispiel:
Der obige Befehl findet alle Zeilen mit foo und ersetzt alle Vorkommen von Balken in dieser Zeile durch baz.
wird in jeder Zeile tun
quelle
:g
hier beschriebenen Befehl ausführt. Ich möchte verwenden/gc
, um nach "Bestätigungen" zu fragen, damit ich sie treffeny
odern
für jeden Ersatz odera
alle ändern kann.quelle
I
kann nicht in den Einfügemodus wechseln, wissen Sie, warum dies passiert?vim -u NONE
und versuchen Sie erneut, die gewünschte Aktion auszuführen. Möglicherweise handelt es sich um eine Map oder ein Plugin, die das Verhalten Ihres vim ändern.Ich bin nicht sicher, was
vim
tut, aber es ist ein interessanter Effekt. Die Art und Weise, wie Sie beschreiben, was Sie möchten, klingt eher nach der Funktionsweise von Makros (:help macro
). So etwas würde mit Makros machen (was im normalen Modus beginnt):qa
: Makro aufzeichnena
Registrierung .0w
:0
gehe zum Zeilenanfang,w
springe ein Wort.i"<Esc>
: In den Einfügemodus wechseln, einfügen"
und kehren Sie zum normalen Modus zurück.2e
: Zum Ende des zweiten Wortes springen.a"<Esc>
: Fügen Sie a hinzu"
.jq
Gehen Sie zur nächsten Zeile und beenden Sie die Makroaufnahme.Zusammen genommen:
qa0wi"<Esc>2ea"<Esc>
Jetzt können Sie das Makro mit ausführen
@a
letzte Makro mit wiederholen@@
. Um auf den Rest der Datei anzuwenden, gehen Sie wie folgt vor99@a
folgt vor, vorausgesetzt, Sie haben nicht mehr als 99 Zeilen. Die Makroausführung wird beendet, wenn das Dateiende erreicht ist.So erreichen Sie, was Sie wollen
visual-block-mode
(beginnend im normalen Modus):visual-block-mode
, wählen Sie die Linien aus, die Sie beeinflussen möchten.G
um zum Ende der Datei zu gelangen.I"<Esc>
."
..
Wille ausreicht.quelle
9999@a
mag hässlich sein, ist aber viel einfacher zu tippen als:%norm! @a
und wird in der gerade bearbeiteten Zeile nicht erneut ausgeführt. Trotzdem gut zu wissen. :)Meine Lösung besteht darin, diese 2 Zuordnungen zu verwenden:
Wie man sie benutzt:
V12j
<leader>n
<leader>m
Um eine weitere Bearbeitung vorzunehmen, müssen Sie die Auswahl nicht erneut treffen. Drücken
<leader>n
Sie einfach , nehmen Sie Ihre Bearbeitung vor und drücken Sie<leader>m
, um sich zu bewerben.So funktioniert das:
<Esc><Esc>0qq
Verlassen Sie die visuelle Auswahl, gehen Sie zum Zeilenanfang und beginnen Sie mit der Aufnahme eines Makros.q
Beenden Sie die Aufnahme des Makros.:'<,'>-1normal!@q<CR>
Spielen Sie vom Beginn der visuellen Auswahl bis zur Zeile vor dem Ende das Makro in jeder Zeile.<Down>
Gehe zurück zur letzten Zeile.Sie können dieselbe Taste auch nur für verschiedene Modi zuordnen:
Dies beeinträchtigt jedoch Ihre Fähigkeit, eine weitere Bearbeitung vorzunehmen. Sie müssen Ihre Zeilen erneut auswählen.
quelle