문제

C 코드의 내 태그 목록:

매크로
|| MIN_LEN
|| MAX_ITERATIONS
||- 형식 정의
|| 세포
|| source_cell
||- 변수
|| len_given

태그 목록 요소(도메인):

A = {MIN_LEN, MAX_ITERATIONS, cell, source_cell, len_given}

코드 조각(공동 도메인):

B = {"code_MIN_LEN", "code_MAX_ITERATIONS", ..., "code_len_given"}

목표: 세트 A와 B 사이에 전단사를 가지게 됩니다.

예: A 또는 B에서 해당 요소를 제거하여 A와 B에서 MIN_LEN과 같은 A의 모든 요소를 ​​제거하고 싶습니다.

질문: A 또는 B의 변경이 다른 세트의 변경으로 이어지도록 A와 B 사이의 전단사를 보장하는 방법이 있습니까?

도움이 되었습니까?

해결책

나는 당신이 그렇게 할 수 있을지 의심스럽습니다.taglist 플러그인은 ctags를 사용하여 코드의 기호를 수집하고 이를 측면 분할로 표시합니다.측면 분할에는 읽기 전용 정보가 포함되어 있습니다(해당 창에서 작업을 시도하면 vim은 해당 버퍼에 대해 수정 가능이 꺼져 있다고 알려줍니다).

달성하고자 하는 것은 수정 중인 소스 코드의 구문 분석이 상당히 복잡하다는 것을 의미합니다.자동 이름 바꾸기(태그 목록 버퍼에서 함수 이름 항목을 수정하고 소스의 모든 인스턴스가 업데이트된다고 가정)와 같은 간단한 작업에도 ctags 기능이나 태그 목록 자체를 넘어서는 매우 복잡한 구문 분석이 필요합니다.전단사적 관계를 통해 모든 것을 삭제하고 동기화하는 것은 훨씬 더 복잡합니다.제거하려는 매크로를 사용하는 printf 행이 있다고 가정하십시오.그 라인은 어떻게 될까요?전체 줄이 사라지거나 매크로만 사라져야 합니다(이 경우 해당 줄은 아마도 구문상 올바르지 않을 것입니다.

taglist는 코드 탐색을 위한 훌륭한 플러그인이지만 자동 리팩토링(귀하가 원하는 것)에는 적합하지 않습니다.

편집하다:계산 복잡성에 관해서는 최악의 시나리오는 키를 누를 때마다 전체 문서를 조사하여 통합할 수 있는 새로운 레이블 발생을 찾아야 한다는 것입니다. 따라서 이러한 의미에서 각 키가 O(n)이라고 말할 수 있습니다. 키스트로크.물론 이것은 과잉이며 이를 구현하는 최악의 방법입니다.나는 vim에서 구문 강조 표시의 계산 복잡성을 알지 못하지만(적절한 토큰화를 통해 태그를 추출하는 데에도 유용할 것임) 매우 낮고 구문 분석된 데이터의 양이 매우 제한되어 있다고 추정합니다. 토큰을 추출하고 해당 컨텍스트를 이해하기 위해 구문 분석할 대규모 구조가 없을 가능성이 높습니다.어쨌든 이것은 태그리스트가 작동하는 방식이 아닙니다.Taglist는 vim 호출마다 ctags를 실행하며, 입력하는 동안 실시간으로 문서를 구문 분석하지 않습니다.그러나 이는 자동 또는 반자동 리팩토링을 위한 도구도 제공하고 결국 vim을 편집기로 통합할 수 있는 Eclipse, XCode 및 KDevelop에 의해 수행됩니다.이러한 기능이 필요하다면 분명히 잘못된 도구를 사용하고 있는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top