Wie kann ich den Rest einer Zeile mit dem angegebenen Zeichen bis zu einer bestimmten Spalte mit Vim füllen? Angenommen, der Cursor befindet sich in Spalte vier und ich möchte den Rest der aktuellen Zeile mit Bindestrichen bis Spalte 80 füllen. Wie würde ich das tun?Wie fülle ich eine Zeile mit Zeichen x bis Spalte y mit Vim
Antwort
Hier ist eine Funktion zu implementieren, was Sie fragen, und etwas mehr.
- Es füllt die Linie von seinen aktuellen Zeilenende, anstatt die Cursor-Position
- sie einen einzigen Raum zwingt zwischen dem, was auf der Linie zur Zeit ist und die wiederholten Zeichen
- Es Ihnen eine beliebige Zeichenfolge angeben kann, den Rest der Zeile mit
- Es verwendet Vims
textwidth
Einstellung zu füllen, um zu entscheiden, wie lange die Linie sein (und nicht nur 80 Zeichen vorausgesetzt)
Die Funktion wird wie folgt definiert:
" fill rest of line with characters
function! FillLine(str)
" set tw to the desired total length
let tw = &textwidth
if tw==0 | let tw = 80 | endif
" strip trailing spaces first
.s/[[:space:]]*$//
" calculate total number of 'str's to insert
let reps = (tw - col("$"))/len(a:str)
" insert them, if there's room, removing trailing spaces (though forcing
" there to be one)
if reps > 0
.s/$/\=(' '.repeat(a:str, reps))/
endif
endfunction
Legen Sie die in Ihrem .vimrc
und machen eine Zuordnung zu ihm, z.B.
map <F12> :call FillLine('-')
Dann können Sie F12
drücken die Bindestriche auf die aktuelle Zeile
Hinweis anzuwenden: könnte dies wahrscheinlich leicht in VISUAL-Modus auf eine Auswahl handeln erweitert werden, funktioniert aber derzeit nur einzelne Linien . *
Super, danke! –
Wenn diese Funktion das tut, was sie vorgibt, macht sie so viel, wie Sie jemals verlangen können. Dies ist die Art von Post, die auf So stark belohnt werden sollte. Warum zeigt das "0" upvotes? +1! –
Eine Möglichkeit, die Prägnanz für diejenigen zu erhöhen, denen der ternäre Operator egal ist, besteht darin, die beiden Zeilen der Zuweisung von tw zu kombinieren, also: let tw = & textwidth? & Textbreite: 80'. –
This answer beantwortet Ihre Frage. Ersetzen Sie einfach len Berechnung mit Ihrer gewünschten Spalte Nummer (+/- 1 kann sein, ich erinnere mich nie), und entfernen Sie die umschließenden Doppel-Anführungszeichen durch die Substitution hinzugefügt.
Wenn ich die Frage richtig verstehe, kann dies folgendermaßen erreicht werden: Im normalen Modus die aktuelle Spaltenposition des Cursors von der gewünschten Endspalte subtrahieren, dann das Ergebnis gefolgt von 'i' eingeben, dann das Zeichen eingeben Sie möchten den Raum mit füllen. Beenden Sie, indem Sie in den normalen Modus zurückkehren. Wenn Sie beispielsweise mit dem Cursor in Spalte 4 im Normalmodus den Rest der Zeile bis Spalte 80 mit Bindestrichen füllen möchten, tippen Sie 76-, dann Esc oder Strg- [, um zum normalen Modus zurückzukehren. Dies sollte dazu führen, dass 76 Bindestriche in Spalte 4 beginnen und in Spalte 79 enden.
Sie können zunächst Ihre Striche einfügen und dann auf das erste Zeichen gehen und Ihren Text in Ersetzungsmodus eingeben: 80i- Esc 0R
wenn Sie nicht wollen, um den Text zu schreiben, zuerst die Zeile mit 0D löschen, verwenden 80i- Esc, um die Striche und 0R CTRL +r "legen Sie die Inhalte der unamed einfügen im Register ersetzen Modus.
Sie können 80Ax<Esc>d80|
für eine einfachere Lösung tun.
Dies sollte die beste Antwort sein! '80A-
': help |' - es ist eine Bewegung zu einer bestimmten Spalte - in diesem Fall, Spalte 80. So verwendet 100Ax
Ich bekomme 'Kein Editor-Befehl.' Was mache ich falsch? –
Wenn Sie die virtualedit
Option auf block
oder all
haben, können Sie eine visuelle Auswahl (auch über Leerraum) auf die gewünschte Spalte erstellen:
v80|
(wenn virtualedit=all
) oder
<c-v>80|
(wenn virtualedit=block
)
Dann den ausgewählten Bereich mit Bindestrichen ersetzen: r-
Es ist wahrscheinlich hilfreich visuellen Modus nach dem letzten Zeichen in der Zeile zu beginnen, indem l
schlagen zu vermeiden Überschreiben des letzten Zeichens in der Zeile. Wenn Sie nicht virtualedit=all
verwenden, müssen Sie virtualedit+=onemore
einstellen, damit Sie im normalen Modus ein Zeichen über das Ende der Zeile hinaus verschieben können.
- 1. Zeile X bis Zeile Y aus Datei in C++ lesen
- 2. Wie mache ich eine unendliche Schleife mit "x <= y && x > = y && x! = Y"?
- 3. VIM, wie Spalte n von Zeile x zu y auswählen/kopieren
- 4. Wie fülle ich eine Spalte mit einem Wert in Pandas?
- 5. Vim - Löschen bis zum letzten Auftreten von Zeichen in Zeile
- 6. Vim: Ausfüllen von Zeilen mit einem Zeichen
- 7. Wie fülle ich eine Bitmap mit einer Volltonfarbe?
- 8. MySQL - Wählen Sie Zeile mit Spalte + X> Spalte
- 9. Wie fülle ich eine Matrix mit Null (0)
- 10. vim eine neue Zeile mit tabspaces eingeben
- 11. Rückwärts löschen bis Zeichen in Vim
- 12. Wie änderst du eine Zeile in vim?
- 13. Wie mache ich Vim Syntax eine ganze Zeile markieren?
- 14. Wie mehrere Zeilen in SQL where id = (x bis y)
- 15. Wie fülle ich eine ToolStripComboBox?
- 16. vim Wiederholung findet nächste Zeichen ‚x‘
- 17. Ruby Seltsamkeit: x == y && [x, y] .uniq == [x, y]
- 18. Wie fülle ich eine Auflistungseigenschaft von SqlDataReader?
- 19. So fülle ich automatisch Daten mit arrayforumla
- 20. Wie fülle ich FXCollections.observableArrayList mit loop? [Javafx]
- 21. Wie tausche ich Zahlen zwischen X und Y mit regexp?
- 22. Ruby Sequel Juwel: Update eine Zeile Spalte mit einem Wert aus einer anderen Zeile Spalte, die ich kenne die ID
- 23. Wie fülle ich ein Array mit Zufallszahlen?
- 24. vim regex mit Meta-Zeichen
- 25. Wie bekomme ich x, y Koordinaten mit Python?
- 26. Wie überschreibe ich X Bytes auf Offset Y mit fwrite()?
- 27. Wie eine Spalte mit Nicht-Akzent-Zeichen mit Select-Abfrage
- 28. Wie fülle ich eine Dropdown-Liste für Mausereignisse mit jQuery?
- 29. Wie fülle ich eine Spalte mit einer konstanten Zeichenkette gefolgt von einer Variablennummer
- 30. Verwenden Sie iText7, wie fülle ich eine ansonsten leere Spalte mit einem Rechteck?
'76A-' vielleicht? Es scheint so, als würde die Mathematik in deinem Kopf ziemlich schnell sein, relativ zu anderen Lösungen. –
naught101