1

たとえば、変更します

テキスト12345{\color {red} text 123 \ ref {label} 567

1234} 567

テキスト12345テキスト123\ref {label} 567

1234 567

vimではどのような操作を行う必要がありますか?

私はすべてのパターンを見つけて、その間にテキストを残したまま、パターンとパターン{\color{red} に一致する中括弧を削除することを目指しています。}パターン{\color{red}は行のどこにあってもかまいません(必ずしも行の先頭にある必要はありません)。上記のように、間のテキスト{\color{red} ...}は複数行にすることができます。

どうもありがとうございました。

編集:私はそれを行う方法を見つけるだけですが、十分に効率的ではないかもしれません。

:g/\\color{red}/norm ndiBvaBpd% 

g:グローバル
/\\color{red}:パターンに一致
/norm:通常モードコマンド
n:カーソルをカーソルから次の一致するパターンに転送します。ただし、パターンが行の先頭にある場合は、パターンが見つからない可能性があります。
diB:カーソルから内側のブロックを削除します
vaB:カーソルの周りのブロックを選択します:選択したブロックに
p配置します
d%:削除します\color{red}

4

2 に答える 2

3

あなたが本当に何を意味するのか理解できませんでした。それを行う方法はたくさんあります。

{\color{red}text 123 \ref{label} 567}
^
|cursor

あなたができること: df}$x

サラウンド.vimをインストールしている場合は、周囲の中括弧を削除する方が簡単です。(ds{

編集

質問の更新の場合:

ファイルを開き、次のように入力します。

:g#{\\color{red}#normal 0df}$x

コマンドがあなたが望むことをすることを願っています。

質問の更新に基づいてIIを編集

ターゲットテキストオブジェクトが線を越えている場合は、次のことを試すことができます。

g/{\\color{red}/normal 0f{mz%x`zxdf}

上記の線は、ターゲットパターンが複数の線と交差する場合に機能します(1つまたは2つだけでなく、多数ある可能性があります)。ただし、構文は正しくなければなりません。つまり、{ , } ペアになっている必要があります。

于 2013-03-08T21:02:32.973 に答える
2

これには正規表現での置換を使用します:

%s/\v\{\\color\{\w+\}(.*)} ?$/\1

\v非常に魔法(正気の正規表現)

{\\color\{\w+\}物事の色

(.*)保存するテキストをキャプチャします

} ?$行末のニップルブラケットとオプションのスペースを閉じる

/\1全体を最初のキャプチャに置き換えます。これは、カラータグBSの間のものです。

編集した例では、改行文字が含まれているため、\_.代わりにを使用できます。.

%s/\v\{\\color\{\w+\}(\_.*)}/\1

于 2013-03-11T00:32:02.210 に答える