정규식을 사용하여 vim에서 특정 LaTeX 인코딩을 찾고 변경하시겠습니까?

정규식을 사용하여 vim에서 특정 LaTeX 인코딩을 찾고 변경하시겠습니까?

다음 LaTeX 인코딩을 변경하는 방법:

\cite{1,3-7,9} 

도착하다

\cite{1,3,4,5,6,7,9}  

윔에서? 나는 정규식을 사용하는 것을 선호합니다.

답변1

vim의 명령을 사용하여 substitute이 작업을 수행 할 수 있습니다.

:%s/\\cite{1,3-7,9}/\\cite{1,3,4,5,6,7,9}/g  

\cite{1,3-7,9}이는 AND 의 모든 항목을 대체합니다 \cite{1,3,4,5,6,7,9}.

현재 줄에 존재하는 일치 항목만 바꾸려면 다음을 사용할 수 있습니다.

:s/\\cite{1,3-7,9}/\\cite{1,3,4,5,6,7,9}/g 

c줄을 변경하기 전에 vim이 확인을 요청하도록 하려면 추가하세요. 예를 들어:

:%s/\\cite{1,3-7,9}/\\cite{1,3,4,5,6,7,9}/gc  

답변2

m-n표현식에서 양식 범위의 단일 인스턴스를 확장하려면 \cite{...}다음을 수행할 수 있습니다.

 perl -pe 's/\\cite{(?:\d+,)*\K(\d+)-(\d+)(?=(?:,\d+)*})/sprintf "%s", join(",", ($1..$2))/e' file.tex

답변3

그리고 내PatternsOnText 플러그인, 패턴 일치( 귀하의 경우) :substitute로 명령을 제한 할 수 있습니다 .\cite{...}

:%SubstituteInSearch/\\cite{[^}]\+}/\(\d\+\)-\(\d\+\)/\=join(range(submatch(1),submatch(2)), ',')/g

정규식은 시작 및 끝 숫자를 구문 분석하고 및 join()를 사용하여 숫자 범위로 변환합니다.range():help sub-replace-expr

답변4

Vim은 일반적으로 Perl과 연결됩니다.

Vim에서 Perl(또는 유사한 것)을 사용할 가능성이 관련될 수 있습니다.

그렇게 하면 + @steeldriver의 솔루션을 +perl사용할 수 있습니다 (실제로는 약간 다릅니다).:perldo

:perldo s/\\cite{(?:\d+,)*\K(\d+)-(\d+)(?=(,.*?)?})/sprintf "%s",join(",", $1..$2)/e

관련 정보