Nehmen wir an, ich möchte den folgenden Text in meinem Dokument erstellen:
%
% Not Important
% O ------------------------->
% |
% S |
% o |
% m |
% e |
% |
% M |
% s |
% g |
% |
% V
Gibt es eine einfache Möglichkeit, das "Some Msg" vertikal wie oben zu schreiben, ohne jedes Zeichen manuell in jede Zeile einfügen zu müssen?
insert-mode
formatting
Allan Hasegawa
quelle
quelle
:s/./% \0\r/
die%
Zeilen und Zeilenumbrüche hinzufügen ... Keine großartige Lösung ...Antworten:
Eine wirklich gute Lösung würde wahrscheinlich mehr Arbeit erfordern, aber "nicht schlecht" ist nicht sehr schwer zu erreichen.
Idee
Alles, was wir brauchen, ist, nach jedem Zeichen eine Zeile nach unten zu rücken, also machen wir das einfach per
InsertCharPre
Auto-Befehl!Code
Legen Sie es in
.vimrc
oder besser noch in eine Datei unterplugin/
Verzeichnis.Verwendung
:Vert
Befehl eingeben , um vertikal zu schreiben. Wenn Sie den Einfügemodus verlassen, wird dieser "Modus" automatisch deaktiviert. Natürlich können Sie es einer Verknüpfung zuordnen, wenn Sie diesen Befehl häufig verwenden müssen.Bekannte Probleme
InsertLeave
Ereignis, das nicht ausgelöst wird; daher erfordert die Verwendung der Taste eine sorgfältige Vorgehensweise ).quelle
<C-C>
.InsertLeave
für diese Taste keine Auslösung erfolgt.<C-C>
, um den Einfügemodus zu beenden. Die Art und Weise, wie Sie es erwähnt haben, könnte bedeuten, dass es manchmal eine gute Methode ist. Es ist so, als würde man sagen: "Warnung: Ihr Dokument wird nicht gespeichert, wenn Sie Microsoft Word schließen, indem Sie den Computer vom Computer trennen."<C-C>
dass dies der Grund für das Problem ist. Mir ist keine andere Methode bekannt, um den Einfügemodus zu verlassen und die Abkürzungserweiterung zu unterdrücken.<C-C>
Wenn dies nicht der Fall ist, ist dies zumindest im Rahmen einer Zuordnung wie zinoremap <silent> <c-c> <c-c>:doautocmd InsertLeave<cr>
.<C-C>
wie man den Einfügemodus verlässt, ohne die Abkürzungen zu erweitern, und es wird nicht erwähnt, wie dadurch keineInsertLeave
Ereignisse ausgelöst werden. Ich bin jetzt neugierig, ob es eine integrierte Möglichkeit gibt, dies zu tun, aber im Moment ist Ihr Mapping eine großartige Idee.Sie können wie gewohnt tippen und dann den aktuellen horizontalen Text in vertikalen Text konvertieren, indem Sie die Ersetzung in Vim wie folgt verwenden (gilt für die aktuelle Zeile):
Oder viel einfacher zu merkende Methode ist, einen der folgenden Befehle (für alle Zeilen) auszuführen:
VWenn Sie nur für die aktuelle Zeile oder mehrere Zeilen gelten möchten, gehen Sie mit vor , erweitern Sie den Bereich für weitere Zeilen, falls erforderlich, und führen Sie die obigen Schritte aus (jedoch ohne
%
).Überprüfen Sie für PowerShell unter Windows die Ersetzung für Falz .
F2Versuchen Sie Folgendes, um eine einfache Tastenzuordnung zu definieren :
Geben Sie dann etwas ein und drücken Sie F2, um den Text so einfach wie möglich vertikal zu gestalten.
Eine andere Alternative ist das Einstellen des automatischen Zeilenumbruchs, z
Dadurch wird der Text automatisch so umbrochen, wie es der Leerraum zulässt. Der Nachteil ist, dass jedem Buchstaben ein Leerzeichen folgen muss (es ist also fast so, als würden Sie drücken)Enter
quelle
:s/\(.\)/\1\r/g
nur das zu verwenden,:s/./\0\r/g
was funktional identisch ist.Ich finde, dass Makros eine großartige Möglichkeit sind, ungewöhnliche Dinge zu tun, wenn Sie daran interessiert sind, dies nur einmal in einem blauen Mond zu tun. Angenommen, Sie haben die folgende Tabelle:
Und lassen Sie uns sagen , Sie ersetzen möchten
Some Msg
mitOther Message
. Lassen Sie uns zunächst die Tabelle für das zusätzliche Zeichen erweitern (Zeile vor dem letztenyy5p
:Das Makro, das ich entwickeln werde, wird sich darum kümmern, den Text von horizontal in vertikal zu konvertieren, während der alte Text ersetzt wird. Beginnen Sie, indem Sie den Text an der ersten Stelle eingeben (der Cursor befindet sich am Ende von
Other Message
):Zeichnen Sie das folgende Makro auf:
qq
: Startet die Aufnahme eines Makros mit dem Namenq
^
: zum Zeilenanfang gehen3l
: Gehen Sie zu der Spalte, in der der Text platziert werden sollx
: löscht das alte Zeichenl
: bewege dich nach rechts und lasse ein Zeichen aus der Nachricht anstelle des alten Zeichens:v
: In den visuellen Modus wechselnf|
: springen zu|
2h
: Zwei Zeichen zurückd
: Auswahl abschneidenj
: sich abwärts bewegenP
: Einfügen vor dem Cursorq
: Beenden Sie die Aufzeichnung des MakrosZu diesem Zeitpunkt haben Sie:
Wiederholen Sie das Makro so oft, wie Sie es geschätzt haben (dh wie viele Zeichen Sie haben, aber Sie müssen es nicht im Voraus wissen. Unterschätzen Sie es einfach und fahren Sie fort, sobald Sie sehen, wie nah Ihre Schätzung war). Also lass uns mitgehen
10@q
. Du erhältst:Ok, noch eine (
@q
):Ihr Cursor befindet sich jetzt auf dem letzten
e
. Das Makro funktioniert mit dem letzten Buchstaben nicht gut (Sie können versuchen, mit@q
und dannu
(rückgängig) unbefriedigende Ergebnisse zu erzielen). Einfach selbst einstellen (X
für Rücktaste).quelle
qq03lxldt|i ^[jPxq@q