2

次のテキスト ファイルを想定します。これは、実際には資金と価格統計のデータ ダンプです。

PBCPDF
05/01/2006
 0.0000
 0.0000
PBCPDF
 0.0000
06/01/2006
 0.0000
 0.0000
PBCPDF
 0.0082
[… lines repeat …]

私が達成したかったPBCPDFのは、置換コマンドを:.+1,$s/PBCPDF\n//g.

ただし、複数のファンド名を処理するマクロをプログラムしたかったので、手動で実行せずに現在の行を検索パターンとして取得する何らかのパターンを使用する手段が必要です。

それを行う方法はありますか?

4

3 に答える 3

4
ggyy:+1,$s/<Ctrl-R>"<BS>//g

それが何をするのかを正確に見てみましょう。

最初の行に移動します

gg

liine全体をヤンクする

yy

置換を開始します

:+1,$s/

ヤンクしたレジスタから現在の行を取得します。

<Ctrl-R>"

注:「」は入力しないでください。実際にControlキーを押しながら、Rキーを押してから、二重引用符を押す必要があります。

行末文字を削除します。

<BS>

注:Backspaceキーを押します。

何も置き換えないでください。

//g

これは、qq/qなどでラップすることでマクロに記録できます。

于 2009-11-07T03:00:04.793 に答える
0

これをマクロで(qコマンドを使用して)実行している場合、より難解なキーストロークコマンドのいくつかを実行するときにキャッチするのに十分賢いです-私が特に考えているのはCTRL-R、CTRL-Wです。カーソルの下の単語をコマンドラインに挿入します。だから、例えば、あなたがした場合

ESC
qw
/ [CTRL-R、CTRL-W](カーソルの下の単語がコマンドラインに入るのが見えるはずです)
[入力]
q

次に、これと同じバッファ内の次の単語を検索するマクロを作成しました。マクロの一部として、カーソルの下の単語をコマンドに動的にヤンクします。上記のコマンドには、行全体に対してこれを行うCTRL-Wのようなものがあるかもしれませんが、私はそれをすぐに知りません。

于 2009-11-07T02:54:52.497 に答える
0

sykora と Matt の回答を調べた結果、単語単位ではなく行単位で機能する、わずかに優れた改善を思いつきました ( Matt の解決策に従って)。

このコマンドは、カーソルが削除対象の行に置かれた後に実行されます。

:.+1,$s/<CTRL-R>=getline(".")<CR>\n//g

VIM 初心者向けの説明:

:.+1,$s/

現在行の次の行 ( .+1) とファイルの終わり( $)から置換を開始します。

<CTRL-R>=getline(".")<CR>\n

<CTRL-R>CTRL キーと R キーを実際に押すことを指し、特殊な式を入力できるようにします。この場合、=getline(".")現在の行のテキストを取得します。

<CR>式を完成させるエンターキーを押すことを指し<CTRL-R>ます。改行文字 ( \n) を削除する必要があるため、検索パターンの末尾にも指定します。

//g

そして、何も置き換えません。

于 2009-11-08T01:31:13.567 に答える