次の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