2013-05-07 2 views
0

로그 형식 (기본적으로 열 기반, 비슷한 예로 syslog를 사용)과 일치하는 구문 파일을 작성하고 있으며 열에 대한 상속 유형을 설정하려고합니다.VIM의 구문 강조 표시에 일치하는 항목이 여러 개 있음

두 가지 주요 목표가 있습니다.

먼저 3 열은 "구성 요소"필드입니다 (헤더로 표시되어 있고 고정 된 위치에있을 수도 있음). 회색으로 배경을 설정합니다. 그런 다음 컴포넌트 "foo"가 Red의 전경색을 가져오고 구성 요소 "bar"가 Green의 전경색을 얻지 만 "구성 요소"열의 배경색을 상속해야한다고 말하고 싶습니다. 이 경우 필드에는 실제로 두 개의 구문 일치가 있어야합니다. 또한 전체 열을 쉽게 숨길 수 있습니다. (Toggling the concealed attribute for a syntax highlight in VIM)

둘째, 레벨에 대한 필드가 있습니다. 나는 중요한 레벨 메시지에 대한 전체 라인의 배경을 Red로 설정하고 싶지만 포어 그라운드는 일반적인 강조 표시 (구성 요소, 소스 등)를 통해 계속 설정되어야하며 대부분의 다른 요구 사항은 생략했습니다.

vim 문서에서 볼 수 있듯이 이것은 가능하지 않습니다. 내가 놓친 게 있니? 또는 좋은 해결 방법을 제시 할 수있는 사람이 있습니까?

감사합니다.

답변

0

(아직) 수 없습니다. 각 문자에 대해 Vim은 마지막 "가장 안쪽의"불투명 구문 그룹 일치로 결정되는 하나의 특정 강조 그룹만을 사용합니다.

이 문제를 해결하려면 조합 된 강조 그룹과 해당하는 :syntax 명령을 정의해야합니다. 일부 구문 (예 : $VIMRUNTIME/syntax/html.vim 및 다양한 Wiki 형식)은 굵게, 기울임 꼴 및 밑줄을 결합하는 데 사용하지만, 그 후에는 지루하고 반복적입니다.

:syntax 명령에 대해 combine 수정자가 추가되는 patch proposed이 있습니다. Bram의 Todo 목록에 있습니다.

+0

나는 그것을 두려워했다. 모든 조합의 생성을 스크립트로 작성하는 대신 직접 작성하는 것이 좋습니다 ... 어떻게 내가 은폐 효과를 얻을 수 있는지에 대한 제안은 무엇입니까? 나는 항상 모든 가능한 유형을 반복하는 특수 값을 가질 수 있지만, 사용자가 synID를보고 무엇을 감추고 있는지를 알 수 있기를 바랬습니다. – Mikeage

+0

그 연결된 은폐 솔루션은 외부 구문에 사용될 때 좋은 해킹처럼 보이지만, 독자적인 구문 내에서 (특히 어쨌든 정의를 스크립트해야하는 경우 특히) 어떤 구문 그룹을 결정하는 구성 변수를 사용합니다. 'conceal' 속성을 얻습니다. 변경하려면 변수를 변경하고': syntax on'을 다시해야합니다. –

+0

지금 당장은 일반적인 열을 감추기위한지도가 있으므로 어떤 방식 으로든 작동 할 수 있습니다. 그러나 사용자가 ConcealCurrentGroup()을 호출하게하고 커서가있는 열을 자동으로 숨길 수있게하는 아이디어가있었습니다. 오 잘. – Mikeage

관련 문제