2013-04-24 1 views
4

빔 하이라이트는 한 줄 내 문제는 내가 일하고 프로젝트에라는 방법으로 클래스가 있습니다 즉내가 STL 알고리즘을 강조 CPP에 대한 구문 강조를 정규식

syn keywork cppSTL find 

입니다 find이 강조 표시되며 STL 통화에만 강조 표시하고 싶습니다.

그래서 나는에 이전 줄을 변경하기로 결정

syn match cppSTL /[^.>:]\<find\>/ms=s+1 
syn match cppSTL /\<std::find\>/ contains=cppScope 
syn match cppScope /::/ 
hi clear cppScope 

그리고 그것은 대부분의 시간을 작동합니다.

vector<string>::iterator i = find(find(x.begin(), x.end(), val), x.end(), term); 
            ^^^^ 

첫 번째 find가 올바르게 강조하지만, 두 번째는 실패하지만 경우는이 라인에 실패합니다. vim 정규 표현식에 대한 나의 제한된 지식은 일치해야한다고 말하지만, 왜 그것이 맞는지는 알 수 없다.

+0

, 시도 : 전 = (...) 발견; 나는 = 발견 (...); 둘 다 같은 줄에있어. 각 라인에서 처음으로 일치하는 것을 찾는 경우라면 궁금합니다. –

+0

@Brian : 같은 라인에 두 건의 호출이 작동합니다. 내 생각에 문제는 안쪽에 두 번째'찾기 '가 있기 때문이라고 생각합니다. - (find (...)와 같이)'()'와 같은 호출을 둘러싸면 강조 표시가 실패합니다. – Akobold

답변

0

알았습니다.

문제는 내 정규식에서 char 뒤에 find가 필요하고 괄호 안의 여는 괄호가 이미 일치하여 정규식을 무효화했습니다.

그것은 작동 내가 가진 첫 번째 라인을 교체하는 경우 : 그냥 재미로에 대한

syn match cppSTL "[^.>:]\@<=\<find\>" 
2

귀하가 찾고있는 것일 수 있습니다. 앞에 ::이 포함 된 행에있는 모든 단어 find을 강조 표시합니다.

syn match cppSTL /\(::.*\)\@<=\<find\>/ 

만약 당신이 요구하는 것이 아니라면.

+0

이것은 나를 위해 작동하지 않습니다. 이것은'util :: s-> find()'에서 잘못 표시 될 것이고'i'의 타입이 다른 라인에서 선언된다면 질문의 이중 찾기 예제에서 실패 할 것입니다. 그러나 그것은 내가 원하는 것에 더 가까워지고있다. – Akobold

+0

find를 강조해야하는 경우와 find를 강조 표시하지 않는 경우의 예제를 추가 할 수 있습니까? – FDinoff