Przeczytałem o tym, jak zaktualizować linię statusu vima tutaj . Jestem w stanie zaktualizować go z powodzeniem.
Ale chciałbym zachować format domyślnej linii statusu vima i po prostu dodać do niego więcej informacji, np. Rozmiar pliku, typ pliku itp.
Domyślna linia statusu Vima to:
<file-name> line_num,col_num %file
Jak mogę wykonać następujące czynności?
- Chciałbym dodać informacje po nazwie pliku
- Wyświetl bieżący format linii stanu (
:set statusline
nic nie wyświetla)
Próbowałem:
set statusline+=%y
Ale to zastępuje całą linię statusu i wyświetla tylko typ pliku ( %y
).
Jakieś wskazówki?
Odpowiedzi:
Jak powiedział @muru, wydaje się, że nie można dokładnie symulować domyślnej linii statusu, gdy
statusline
jest ustawiony jako kod do renderowania, robi rzeczy, których nie można określić wstatusline
ustawieniu. Można jednak podejść bardzo blisko. Oto rozsądne przybliżenie wyglądu domyślnej linii statusu, gdyruler
jest włączona:Główną różnicą jest pozycjonowanie numerów linii i kolumn. Jeśli można zasymulować domyślną logikę odstępów, nie udało mi się znaleźć sposobu, aby to zrobić. Być może będzie to wystarczająco blisko do twoich celów.
Używam podzielonej wersji tego,
.vimrc
aby umieścić informacje o linii statusu Syntastic pośrodku czegoś, co wygląda jak normalna linia statusu vim z linijką:źródło
Kod nie ustawia żadnej wartości na pusty ciąg statusu, ale po prostu działa przy użyciu niektórych wartości domyślnych. Zobacz
src/screen.c
, funkcjawin_redr_status()
. Pokazane elementy są oparte na kompilowanych funkcjach, dlatego w celu odtworzenia dokładnej linii statusu należy przyjrzeć się kompilowanym funkcjom. Może być łatwiej użyć przykładowej linii statusu podanej w:h statusline
:źródło
%-14.(%l,%c%V%)
?tl; dr
Chociaż moje sugerowane rozwiązanie nie różni się zbytnio od innych odpowiedzi, chciałbym podzielić się bardziej szczegółowym wyjaśnieniem.
oryginalne zachowanie
Najpierw dowiedzmy się, jak
vim
rysuje linię statusu. Odpowiedzialnymi funkcjami sąwin_redr_status()
iwin_redr_ruler()
.vim
bierze bufora nazwy , dodaje przestrzeni , czy są jakieś flagi do naśladowania (jak[Help]
,[Preview]
,[+]
,[RO]
). Wtedy to dodaje się flagi .Zwykle przydziela linijce 18 komórek znakowych . Jeśli część nazwy bufora nie pasuje do reszty dostępnego miejsca,
vim
obcina ją od lewej i dodaje<
na początku.Jeśli jest miejsce na mapę klawiszy , dodaje ją na końcu (wyrównane do prawej).
Teraz władca. Składa się z
<row>,<col>-<virtcol>
części i pozycji względnej (wyrównane do prawej).Jest też ograniczenie, że część z nazwą bufora musi trwać co najmniej połowę tego szerokości .
rozwiązanie
Teraz weźmy wartość sugerowaną przez dokumenty :
gdzie
Pierwszego
%<
można więc pominąć, ponieważ domyślnie nazwa bufora jest obcięta na początku. Następnie brakuje flagi podglądu (%w
). Ponadto, gdy okno ma mniej niż18 * 2
szerokość znaków, prawa część zajmuje ponad połowę linii statusu.Więc przynajmniej możemy pominąć
%<
i dodać%w
:Możemy pójść dalej i upewnić się, że odpowiednia część nie zajmie więcej niż połowy linii statusu:
Następnie możemy uzależnić to od funkcji, z którymi
vim
został skompilowany .Ale powiedziałbym, że to nie jest praktyczne, a poprzednie rozwiązanie wystarczyłoby do większości celów i celów. Jeśli jednak ostatnie rozwiązanie nie zadziała, powiedz mi, co jest nie tak, a ja postaram się znaleźć coś lepszego.
Problem z rozwiązaniem sugerowanym przez Laurence Gonsalves polega na tym, że jeśli nie ma flag, pomiędzy lewą i prawą częścią są dwie spacje:
źródło