vim : 파일에서 모든 줄의 처음 n자를 숨 깁니다


12

vim을 사용하여 로그 파일을 분석하고 형식은 다음과 같습니다.

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

대부분의 경우 나는 날짜와 시간을 신경 쓰지 않습니다. 그것들을 숨기고 이름과 LogText 열에 집중하고 싶습니다 (화면 영역을 저장하기 위해). 처음 세 개의 열은 항상 한 줄에서 처음 35 개의 문자를 차지하기 때문입니다. vim이 각 줄의 처음 35자를 표시하지 않는 방법이 있습니까?


vim에서 어떻게하는지 모르겠지만 임시 파일을 만드는 것이 마음에 들지 않으면을 실행 cut -c36- logfile > logfile_with_first_35_chars_missing한 다음 검토 할 수 있습니다 .
Warwick

답변:


7

첫 글자를 숨기거나 제거하지 않고 보이지 않게 스크롤하는 방법에 대해 물었습니다. 실제로 숨기는 방법은 다음과 같습니다.

은닉을 사용하여 vim에서 텍스트 숨기기

구문 강조숨기기 기능 과 함께 matching 을 사용 하면 실제로 일치하는 문자를 줄 안에 표시 할 수 없습니다.

각 줄의 처음 25자를 숨기려면

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

대신 구두점이있는 줄만 숨기려면 :

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

숨기기를 해제하려면

:syn clear Concealed
:set conceallevel=0

정상적으로 보이는 모습 :

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

처음 두 명령을 실행 한 후 다음과 같이 나타납니다.

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


내부 참조 vim:
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(그런 식으로 행동하지 않으면 알려주세요-알지 못하는 설정이 더있을 수 있습니다-작동하도록하십시오.)


1
잘 작동합니다. vim이 +conceal(mine is) 옵션 으로 컴파일되어 있어야한다고 생각 합니다. set concealcursor=nc커서 라인이 확장되지 않도록하는 것도 좋습니다 .
user881300

예, +conceal기능 옵션은 몇 년과 같이 표준입니다. 지금까지 더 잘 알려지지 않은 것이 슬프다. 정말 훌륭하고 유연합니다. 많은 새로운 옵션을 제공합니다 .
Volker Siegel

8

vim의 필터 기능을 사용하십시오 . 운영:

:%!cut -b36-

cut바이트 36 만 유지하면서 명령을 통해 버퍼의 내용을 실행합니다 . %전체 버퍼를 실행하고 그 내용을 출력으로 바꾸는 것을 의미합니다. 그런 다음 !필터 명령은 나머지 줄을 실행할 프로그램입니다. 버퍼를 맨 위에 저장하지 않으면 기본 파일을 수정하지 않습니다.

트리밍되지 않은 원본 버퍼를 다시 가져 오려면을 사용할 수 있습니다 ( :e실제 파일로 백업 된 경우).


그런 다음 다시 사용 %!cat %하려면? 이것은 훌륭하게 작동 map
하며이

예, 버퍼를 백업하는 실제 파일이 있으면 작동합니다.
마이클 호머

3
@Michael Homer : 이제 유니 코드 문자로 작동합니다.
cuonglm

6

나는 당신이 찾고있는 것과 더 일치한다고 생각 합니다. 수평 스크롤 입니다.

Z 가로 스크롤 명령 키 다음에 왼쪽 또는 오른쪽 화살표 키로 이동할 방향이 있습니다.

먼저 :set nowrap줄 바꿈을 비활성화합니다. 이어서 누르면 z, 35, (35 개) 공간을 이동한다.


이것은 로그를 읽을 때 매우 유용합니다. 감사합니다!
Fabio F.

좋아, 한 페이지에 좋지만 ... 커서가 줄의 시작 부분으로 다시 점프하지 않고 페이지 아래로 또는 위로 페이지를 만드는 방법은 무엇입니까?
elysch

@ user2987828 답변에서 사용 방법을 찾았습니다. using:set nosol
elysch

숨길 마지막 문자에 커서를 놓습니다. 다음을 입력하십시오.[Esc] z s
roblogic

2

명령 모드에서 다음을 시도하십시오.

:%s/^.\{35}//
  • %s/pat/sub/: 각각의 선두로부터 대체 특허서브
  • ^.\{35}: 줄의 처음 35 자와 일치

이 명령은 각 줄의 처음 35자를 제거합니다. :h regular-expression에서 정규 표현식에 대한 자세한 내용을 읽을 수 있습니다 vim.


1

버퍼 나 파일을 수정하지 않고 기억하기 쉬운 솔루션이 있습니다. L보고자하는 파일 부분 의 첫 번째 문자 ( 예에서)에 커서를 놓고 입력

:set nowrap
zs

zs명령 의지 설정 VI 그래서 화면의 첫 번째 열에서 커서가 나타납니다와 문자가. :set nosol구성 파일을 입력하지 않았는지 확인하십시오 .

g$명령은 커서를 마지막으로 보이는 열로 이동합니다.

g0명령은 커서를 L을 포함하는 첫 번째 보이는 열로 다시 이동합니다.

어떤 키라도 커서를 보이는 열에서 왼쪽이나 오른쪽으로 움직이면 보이는 창이 이동합니다.


그리고 g0명령은 커서를 첫 번째 보이는 열로 이동시킵니다
elysch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.