풍부한 ctag에서 Markdown Setext 제목을 일치시키는 방법

풍부한 ctag에서 Markdown Setext 제목을 일치시키는 방법

저는 ctags에서 pandoc markdown에 대한 언어 정의를 작업 중입니다. 그러나 헤더 텍스트 아래에 여러 줄 =또는 새 줄로 -정의 된 정규식에서 Setext 헤더를 일치시키는 데 문제가 있습니다 . Setext 헤더는 다음과 같습니다.

My Firts Level Setext Header
============================

My Second Level Setext Header
-----------------------------

### My Third Level Setext Header

활기 넘치는 ctags의 매뉴얼 페이지에는 확장된 POSIX 정규식을 사용하고 \n줄바꿈을 지원한다고 언급되어 있습니다.

따라서 /^(.*)$\n={3,}마크다운 Setext 헤더가 일치해야 합니다.\1

my의 해당 언어 정의 .ctags는 다음과 같습니다.

--langdef=pandoc
--langmap=pandoc:.pandoc
--regex-pandoc=/^(.*)$\n={3,}/\1/h,Heading_L1/
--regex-pandoc=/^(.*)\n-{3,}/\1/i,Heading_L2/
--regex-pandoc=/^###[ \t]+(.*)/\1/k,Heading_L3/

그러나 태그는 개행 일치가 필요하지 않은 수준 3 헤더에 대해서만 생성됩니다. 레벨 1 및 레벨 2 헤더의 경우 출력 파일에 태그/일치 항목이 없습니다 tags.

예를 들어:

Introduction    dissertation.pandoc /^### Introduction$/;"  k

왜 이런 일이 발생하며 풍부한 ctags에서 Setext 헤더를 일치시키는 방법은 무엇입니까?

답변1

나는 같은 문제를 해결합니다. 나는 설득력이 있다활기 넘치는 c 태그여러 줄 정규식은 지원되지 않습니다. 그러나 후속 프로젝트가 있습니다.일반 C 태그, 이를 지원합니다.

공통 Ctags 구성은 여러 파일로 나눌 수 있습니다. 자세한 내용은 ctags/doc/optlib.rst프로젝트 웹사이트를 방문하세요.

다음 구성 파일을 만들었습니다. ~/.ctags.d/optlib/markdown.ctags --langdef=markdown --langmap=markdown:.md --regex-markdown=/^(.+)[[:cntrl:]]{1,3}^(===+)/\1/h,Heading_L1/{_multiline=1} --regex-markdown=/^(.+)[[:cntrl:]]{1,3}^(---+)/\1/i,Heading_L2/{_multiline=1} --regex-markdown=/^###[ \t]+(.*)/\1/k,Heading_L3/ --excmd=number

tags파일은 다음 명령을 사용하여 생성할 수 있습니다. ctags --options=markdown -R test.md

새로운 것은 {_multiline=N}깃발입니다. 숫자는 N패턴의 그룹 수입니다. 이 그룹이 나타내는 텍스트의 파일 위치는 파일에 저장됩니다 tags. 앞으로는 밑줄 대신 제목 이름으로 이동하고 싶습니다. 그래서 우리는 그룹을 가지고 (.+)있으며 를 통해 이에 연결합니다 {_multiline=1}.

정규식에서 새 줄을 확인하는 데 문제가 있습니다. 사용하기 간단 \n하거나 \r작동하지 않습니다. 새 줄을 확인하려면 group [[:space:]]또는 이라는 그룹을 사용할 수 있습니다 . 이는 공통 공간을 포함하지 않기 때문에 더 좋다고 [[:cntrl:]]생각합니다 .[[:cntrl:]]

다음 문제는 DOS와 Unix 파일의 줄 끝이 다르다는 것입니다. {1,3}파일이 Unix 줄 끝을 사용하는 경우 패턴의 양자화를 생략할 수 있습니다. 분명히 양자화를 사용하는 것이 더 일반적이지만 때로는 Unix 줄 끝 파일에 문제를 일으킬 수 있습니다.

완벽하지는 않지만 더 나은 해결책을 찾지 못했습니다.

관련 정보