Ich las darüber , wie die vim Statuszeile aktualisieren hier . Und ich kann es erfolgreich aktualisieren.
Ich möchte jedoch das Format der vim-Standardstatuszeile beibehalten und nur weitere Informationen hinzufügen, z. B. Dateigröße, Dateityp usw.
Die Standardstatuszeile von Vim lautet:
<file-name> line_num,col_num %file
Wie könnte ich das Folgende tun?
- Ich möchte Informationen nach dem Dateinamen hinzufügen
- Zeigt das aktuelle Format der Statuszeile an (
:set statusline
zeigt nichts an)
Ich habe es versucht:
set statusline+=%y
Dies überschreibt jedoch die gesamte Statuszeile und zeigt nur den Dateityp ( %y
) an.
Irgendwelche Hinweise?
Antworten:
Wie @muru sagte, scheint es nicht möglich zu sein , die Standardstatuszeile genau zu simulieren, wenn
statusline
als Code zum Rendern Dinge festgelegt sind, die in derstatusline
Einstellung nicht angegeben werden können . Es ist jedoch möglich, ziemlich nahe zu kommen. Hier ist eine sinnvolle Annäherung an die Art und Weise, wie die Standardstatuszeile aussieht, wennruler
aktiviert ist:Der Hauptunterschied ist die Positionierung der Zeilen- und Spaltennummern. Wenn es möglich ist, die Standard-Abstandslogik zu simulieren, konnte ich keine Möglichkeit finden, dies zu tun. Vielleicht ist dies für Ihre Zwecke nah genug.
Ich benutze eine geteilte Version davon
.vimrc
, um Syntastische Statuszeileninformationen in die Mitte einer normalen VIM-Statuszeile mit Lineal zu setzen:quelle
Der Code setzt keinen Wert auf eine leere Statuszeichenfolge, sondern verwendet einfach einige Standardwerte. Siehe
src/screen.c
Funktionwin_redr_status()
. Die Elemente gezeigt basieren auf kompilierten Funktionen in daher die genaue Statuszeile ein auf die Features in kompilierten aussehen müsste zu rekonstruieren Es könnte einfacher sein , die beispielsweise in Statuszeile angegeben zu verwenden.:h statusline
:quelle
%-14.(%l,%c%V%)
?tl; dr
Obwohl sich mein Lösungsvorschlag nicht wesentlich von den anderen Antworten unterscheidet, möchte ich eine detailliertere Erklärung geben.
ursprüngliches Verhalten
Lassen Sie uns zunächst herausfinden, wie
vim
die Statuszeile gezeichnet wird. Die verantwortlichen Funktionen sindwin_redr_status()
undwin_redr_ruler()
.vim
nimmt den Puffernamen , fügt einen Raum , ob es irgendwelche Flags (wie zu folgen[Help]
,[Preview]
,[+]
,[RO]
). Dann es fügt die Fahnen .Normalerweise werden dem Lineal 18 Zeichenzellen zugewiesen . Wenn der Name des Puffers nicht in den Rest des verfügbaren Speicherplatzes passt, wird er von links
vim
abgeschnitten und<
am Anfang hinzugefügt .Wenn Platz für eine Tastaturbelegung vorhanden ist , wird diese am Ende hinzugefügt (rechtsbündig).
Nun der Herrscher. Es besteht aus
<row>,<col>-<virtcol>
Teil und relativer Position (rechtsbündig).Es gibt auch eine Einschränkung, dass der Teil mit dem Puffernamen mindestens die Hälfte der Breite haben muss .
Lösung
Nehmen wir nun den in den Dokumenten vorgeschlagenen Wert :
wo
So
%<
kann zunächst verzichtet werden, da standardmäßig der Puffername am Anfang abgeschnitten wird. Dann fehlt das Vorschau-Flag (%w
). Wenn das Fenster kürzer als die18 * 2
Zeichenbreite ist, nimmt der rechte Teil mehr als die Hälfte der Statuszeile ein.Zumindest können wir also weglassen
%<
und hinzufügen%w
:Wir können noch weiter gehen und sicherstellen, dass der richtige Teil nicht mehr als die Hälfte der Statuszeile einnimmt:
Dann können wir es auf den Merkmalen abhängig machen
vim
wurde zusammengestellt mit .Aber ich würde sagen, dass das nicht praktikabel ist und die vorherige Lösung für die meisten Absichten und Zwecke ausreichen würde. Wenn die letzte Lösung für Sie jedoch nicht funktioniert, sagen Sie mir, was nicht stimmt, und ich werde versuchen, eine bessere Lösung zu finden.
Das Problem bei der von Laurence Gonsalves vorgeschlagenen Lösung ist, dass, wenn keine Flags vorhanden sind, zwischen dem linken und dem rechten Teil zwei Leerzeichen vorhanden sind:
quelle