vim: ukryj pierwsze n liter wszystkich linii w pliku


12

Analizuję plik dziennika za pomocą vima i format wygląda następująco

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText

Ponieważ przez większość czasu nie dbam o datę i godzinę. Chcę je ukryć i po prostu skupić się na kolumnach Nazwa i LogText (Aby zapisać część ekranu). Ponieważ pierwsze trzy kolumny zawsze zajmują pierwsze 35 liter w wierszu. Czy istnieje sposób, aby vim nie wyświetlał pierwszych 35 liter każdego wiersza?


Nie wiem, jak to robisz w vimie, ale jeśli nie masz nic przeciwko utworzeniu pliku tymczasowego, możesz uruchomić cut -c36- logfile > logfile_with_first_35_chars_missing, a następnie przejrzeć go.
Warwick,

Odpowiedzi:


7

Pytałeś o to, jak ukryć pierwsze litery, nie usuwać ich ani nie przewijać poza zasięgiem wzroku - oto jak je ukryć:

Ukryj tekst w vimie za pomocą ukrywania

Możesz użyć dopasowania , w połączeniu z podświetlaniem składni i funkcją ukrywania, aby faktycznie nie wyświetlać dopasowanych znaków w liniach.

Aby ukryć pierwsze 25 znaków każdej linii:

:syn match Concealed '^.\{25\}' conceal
:set conceallevel=2

Aby zamiast tego ukryć tylko wiersze z interpunkcją daty:

:syn match Concealed '^....-..-.. ..:..:..\..... ' conceal

Aby odkryć:

:syn clear Concealed
:set conceallevel=0

Co zwykle wygląda tak:

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText

będzie wyglądać tak po wykonaniu pierwszych dwóch poleceń:

PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText


Zobacz także - wewnątrz vim:
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(Daj mi znać, jeśli tak się nie zachowuje - może istnieć jakieś inne ustawienie, którego nie jestem świadomy - włączę go.)


1
Działa dobrze, myślę, że vim musi zostać skompilowany z +concealopcją (moja jest), aby to działało. Dobrze też zrobić, set concealcursor=ncaby zapobiec rozszerzaniu się linii kursora.
user881300,

Tak, +concealopcja ta jest standardowa jak kilka lat. Smutne, że do tej pory nie jest bardziej znany. To naprawdę świetne i elastyczne. Daje wiele nowych opcji ...
Volker Siegel

8

Użyj funkcji filtrowania vima . Biegać:

:%!cut -b36-

aby uruchomić zawartość bufora za pomocą cutpolecenia, zachowując tylko bajty 36 i kolejne. %oznacza przepuszczenie całego bufora i zastąpienie jego treści wyjściem, następnie !jest poleceniem filter, a resztą wiersza jest program do uruchomienia. To nie modyfikuje pliku bazowego, chyba że następnie zapiszesz bufor na górze.

Aby odzyskać oryginalny nieobciążony bufor, możesz go użyć :e, pod warunkiem, że jest on poparty prawdziwym plikiem.


A następnie użyj, %!cat %aby go odzyskać? Działa to świetnie i mogę użyć mapprzełącznika między tymi dwoma
user881300

Tak, to zadziała, o ile masz plik kopii zapasowej bufora.
Michael Homer

3
@Michael Homer: To będzie teraz działać ze znakami Unicode.
cuonglm

6

Myślę, że bardziej zgodne z tym, czego szukasz, jest przewijanie w poziomie .

Z to poziomy klawisz przewijania, po którym następuje kierunek poruszania się za pomocą lewego lub prawego klawisza strzałki.

Najpierw :set nowrapwyłącz zawijanie linii. A następnie naciśnij przycisk z, 35, aby przewinąć 35 miejsc.


Jest to bardzo przydatne podczas czytania dzienników, dziękuję!
Fabio F.,

ok, świetne na pojedynczą stronę, ale ... Jak zrobić stronę w dół lub stronę w górę bez przeskakiwania kursora na początek linii?
elysch

właśnie dowiedziałem się, jak to zrobić w odpowiedzi na @ user2987828: using:set nosol
elysch

Umieść kursor na ostatnim znaku, który chcesz ukryć. Następnie wpisz ...[Esc] z s
roblogic

2

W trybie poleceń spróbuj:

:%s/^.\{35}//
  • %s/pat/sub/Zamienić każde wystąpienie pat z sub
  • ^.\{35}: dopasuj pierwsze 35 znaków linii

To polecenie usuwa pierwsze 35 znaków z każdej linii. Możesz przeczytać :h regular-expressionwięcej szczegółów na temat wyrażeń regularnych vim.


1

Istnieje łatwe do zapamiętania rozwiązanie, bez modyfikowania buforów lub plików. Umieść kursor na pierwszym znaku ( Lna twoim przykładzie) fragmentu pliku, który chcesz zobaczyć, a następnie wpisz

:set nowrap
zs

zsSetup vi komenda tak, że postać z pojawienia się symbolu kursor w pierwszej kolumnie ekranu. Upewnij się, że nie :set nosolwpisałeś plików konfiguracyjnych.

g$Polecenie przesunąć kursor do ostatniej widocznej kolumnie.

g0Polecenie cofnie kursor pierwszego widocznego z kolumn, z których jedna zawiera L.

Jeśli dowolny klawisz przesunie kursor w lewo lub w prawo poza widoczne kolumny, widoczne okna się przesuną.


A g0polecenie przeniesie kursor do pierwszej widocznej kolumny
elysch
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.