4

さまざまな大学名の長いリストがあります。特定の一意のキーワードを含む行を照合して、類義語テーブルを作成しようとしています。つまり、このファイルでは、Harvard がキーワードであることがわかります。

Harvard Business School|
Harvard College|
Harvard School of Divinity|

それらを別のファイルに貼り付けます

Harvard Business School|Harvard College|Harvard School of Divinity|

カーソルの下の単語を検索し、その単語を含む行をレジスタにヤンクし、レジスタを他のファイルに貼り付け、結合コマンド「J」を使用して行を結合することでこれを行ってきました。

[ clear register 'a' ]    
0"ay0
[ move cursor to 'Harvard" and yank lines with keyword into register a ]
:g/\<<CTRL-R><CTRL-W>\>/y A
[ move to other screen and paste ]
"ap
[ join lines ]
JJJJJ

これは問題なく機能しますが、合理化してほしいと思います。具体的には、最後のステップで JJJJ を使用して手動で行を結合する必要がないように、レジスタから改行を削除する方法を知りたいです。カーソルの下の単語を含むすべての行を検索し、それらを「a」レジスタにコピーし、「a」レジスタから改行を削除してから、「a」レジスタの内容を貼り付けたいと思います。

何か案は?

編集:私は知っています:

  • %s/\n//g など、グローバルに検索して置換する方法
  • バッファ内の 'foo' を単語からレジスタの内容に検索して置換する方法 (例:%s/foo/a/g)
  • レジスタの内容を検索してバッファ内の 'foo' に置き換える方法、例:%s/a/bar/g

知っておくべきこと:

  • レジスタ「a」からレジスタ「b」までを検索して「foo」を「bar」に置き換える方法
  • レジスタ「a」からレジスタ「a」まで「foo」を「bar」に検索して置換する方法
4

4 に答える 4

5

レジスタ内のテキストで直接行うには、次のaコマンドを使用できます。

:let @a=substitute(strtrans(@a),'\^@',' ','g')

次に、登録を貼り付けたときに、必要な結果が得られるはずですa

于 2011-06-03T14:34:17.090 に答える
2

レジスタから改行を削除したり、複数回押す必要はありませんJ。次のマッピングを使用すると、次のようになります"apgVJ

nnoremap <expr> gV    "`[".getregtype(v:register)[0]."`]"

このマッピングにより、貼り付けた直後に貼り付けたテキストを選択できます。Jon selected regionは、region内のすべての行を結合します(regionに1行しかない場合:ここでは、選択なしのJように動作Jし、現在の行をnextと結合します)。gVtipは、置換を行うためにも使用できます。スマートマッピングを定義しない限り"apgV:s/{pattern}/{replacement}<CR>、使用するよりも便利です。"ap:let @a=substitute(@a, '{pattern}', '{replacement}', '{flags}')

もう1つのヒントは、通常モードシーケンスaを使用してレジスタをクリアできることです。新しいマクロの記録を開始し、すぐに停止して、マクロが記録されるレジスタに空の文字列を残します。qaqqaqa

于 2011-06-04T08:41:48.080 に答える
1

ゲームには遅れましたが、他の誰もが間違った問題を解決したようで、Google が私が抱えていた問題の解決策を提供してくれたので、私は自分の解決策を提供する義務があると感じています.

パターン マッチを 1 行として累積します。"a

    :g/pattern/ norm "apkJ"addu

または名前のないレジスタを使用する

    :g/pattern/ norm pkJddu

必要がないので、レジスターの改行を削除しません。

ノルムコードの最後にあるを削除するuと、ファイル内の既に使用されている行が消費されます。これにより、すでに処理されたものを読み取る必要がないため、おそらくファイルの手動処理が容易になります。の。

引用:

   [ join lines ]
   JJJJJ

質問5Jです。 、ビジュアル モード、または:%j(ファイル内のすべての行を結合) を使用しないのはなぜですか?

オフトピック:

    "How do you mark text between "" in code blocks,
    not to be colour coded?"
于 2011-07-10T22:22:24.860 に答える
0

テキストファイルが次のようになっていると仮定できる場合:

ハーバード ビジネス スクール|
ハーバード大学|
神学のハーバード大学|

私は使うだろう

:%s/\n//g

すべての \n 新しい行をグローバルに検索して置換します。\n の代わりに ^M (control+v と ENTER を押す) を使用する必要がある場合があります。

あなたのリストはこれよりも複雑かもしれませんが、その場合、私の解決策はあまりにも「単純」になります

于 2011-06-03T14:17:49.613 に答える