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?

użytkownik881300
źródło
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.)

Volker Siegel
źródło
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.

Michael Homer
źródło
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.

bahamat
źródło
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.

Cuonglm
źródło
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ą.

użytkownik2987828
źródło
A g0polecenie przeniesie kursor do pierwszej widocznej kolumny
elysch