정확한 문제 : C++의 소스가있어서 기호 이름을 다른 이름으로 바꿔야합니다. 그러나, 나는 이것이 단지 기호를 대체하는 것이지, 실수로 ""에있는 주석이나 텍스트에서 같은 단어를 찾는 것이 아니라는 것을 알아야합니다.Vim : 구문으로 선택된 텍스트 영역 만 대체하십시오.
소스 정보 특정 언어 섹션이 무엇인지는 구문 강조 표시 규칙에서 충분히 정의되어 있습니다. 나는 그들이 때때로 실패 할 수 있다는 것을 알고 있지만 이것이 문제가 아니라는 것을 말해 봅시다. 찾은 모든 문구를 살펴보고 어떤 부분이 있는지 확인한 다음 텍스트 나 주석이면이 문구를 건너 뛰어야합니다. 그렇지 않으면 즉시 교체하거나 잘 알려진 c
플래그에 따라 먼저 묻는 방식으로 교체해야합니다.
상상이 어떤 것 적어도 이론적으로는 가능 수 :
- 이 대체 일을 할 때 좀 "콜백"갖는 (발견 된 각 구에 대해 호출을하고, 대체할지 여부를 답을 요구하는), 또는 추출물 문구가 발견 된 위치의 목록은 다음
- 가 지정된 위치에있는 텍스트 색상을 사용하는 현재의 "하이 링크"구문 강조 규칙의 이름을 추출 그들 모두를 반복
전혀 문제가되지 않습니다. vim의 현재 기능 내에서 sible?
, 하나 더 질문 : 그, 그것은 의견이나 상수를 제외하고 어디 대체 할 매우 쉽습니다 '상수'. 'cString' 또는'cCppString' 또는 다른 종류의 문자열 일 수도있는 직접 구문 요소 이름을 얻을 수도 있고, ID에'synIDtrans()'를 수행하여 최종 해상도를 얻을 수도 있습니다. 이것은 놀랍게도'Constant' (' 문자열'). 링크 된 항목의 "syn 링크 목록"또는 적어도 "직접 형제"(최종 해결책이 아님)을 얻을 수있는 방법이 있습니까? 그렇지 않다면 이름에 "String"이 포함되어 있어도 상관 없지만 조금 엉망입니다. – Ethouris
불행하게도, 구문 요소의 이름 ('cString')과 마지막으로 유효한 하이라이트 그룹 이름 ('Constant') 만 얻을 수 있습니다. 나는 그 중 하나가'String'을 내부에 가지고 있는지 확인하는 것으로 갈 것입니다. –
그래, 아직 충분히 좋을거야. 문제는 '$ VIMRUNTIME/syntax/syncolor.vim ...'에서 String과 Constant 사이의 명확한 연결이 있다는 것입니다. – Ethouris