GNU/Linux >> Linux の 問題 >  >> Linux

Vi と Vim エディター:12 の強力な検索と置換の例


写真提供:B Zedan

この記事は、進行中の Vi / Vim Tips and Tricks シリーズの一部です。 Vim は、テキスト クリエーターではなく、テキスト エディターとして一般的に言及されています。なんで ?新しいテキストを作成するよりも、既存のテキストを編集することに多くの時間を費やしているからです。テキスト編集では、テキスト/パターンの置換が重要な部分になります.

この記事では、Vi および Vim エディター でテキストとパターンの置換機能の基本と高度な両方を実行する方法を確認します。 .これらの機能は、12 の非常に実用的で強力なテキスト置換の例を使用して説明されています .

vim エディター内のテキスト置換の構文:

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]


次の 3 つのフラグが考えられます。

<オール>
  • [c] 各置換を確認してください。
  • [g] 行内のすべての出現箇所を置き換えます。
  • [i] パターンでは大文字と小文字を区別しません。
  • 例 1. ファイル全体で、出現するすべてのテキストを別のテキストに置き換える

    これは、Vi エディタ内でのテキスト置換の基本的な基本的な使い方です。ファイル全体で特定のテキストを別のテキストに置き換えたい場合は、次のシーケンスを使用できます。

    :%s/old-text/new-text/g

    • %s – すべての行を指定します。範囲を「%」として指定すると、ファイル全体で置換を行うことを意味します。
    • g – 行内のすべてのオカレンスを指定します。 「g」フラグを使用すると、行全体を置換することができます。この「g」フラグが使用されていない場合は、行の最初の出現のみが置換されます。

    例 2. 1 行内でテキストを別のテキストに置き換える

    大文字と小文字を区別しない方法で、特定のテキストを 1 行内の別のテキストに置き換えたい場合。範囲を指定しないと、現在の行のみで置換が行われます。 「i」フラグを使用すると、代替検索テキストで大文字と小文字を区別しないようにすることができます。

    :s/I/We/gi

    例 3. 行の範囲内でテキストを別のテキストに置き換える

    範囲を使用すると、置換で影響を受ける行の範囲のみを作成できます。範囲として 1, 10 を指定すると、1 行目から 10 行目のみで置換が行われます。

    :1,10s/helo/hello/g

    例 4. 行の視覚的な選択によるテキストの別のテキストへの置換

    特定の行を視覚的に選択することで、特定の行を選択することもできます。コマンド モードで CTRL + V を押し、ナビゲーション キーを使用して、置換するファイルの部分を選択します。 ':' を押すと、自動的に :'<,'> のように形成されます。その後、通常の代替を次のように使用できます

    :'<,'>s/helo/hello/g

    例 5. 最初の X 行だけの別のテキストによるテキストの置換

    置換でカウントを使用すると、置換でカウント N を指定すると、現在のカーソル位置から N 行で置換を行うことを意味します。現在の行から 4 行で置換を行います。

    :s/helo/hello/g 4

    例 6. 部分一致ではなく単語全体のみを置換する

    以下に示す元のテキストで、「彼」という単語全体だけを「彼女」に変更したいとします。標準の置換を行うと、his を her に変更するだけでなく、以下に示すように This を Ther に変更します。

    標準置換

    Original Text: This is his idea
    
    :s/his/her/g
    
    Translated Text: Ther is her idea

    単語全体の置換

    Original Text: This is his idea
    
    :s/\<his\>/her/
    
    Translated Text: This is her idea

    注: :単語を <と> で囲む必要があります。これにより、置換で完全な単語のみが検索され、部分一致は検索されません。

    例 7. 正規表現を使用して、word1 または word2 のいずれかを新しい単語に置き換えます

    次の例では、good または nice の出現箇所がすべて awesome に置き換えられます。

    Original Text: Linux is good. Life is nice.
    
    :%s/\(good\|nice\)/awesome/g
    
    Translated Text: Linux is awesome. Life is awesome.


    正規表現を指定して置換することもできます。次の例は、hey または hi を hai に置換します。これは、「they」、「this」という単語の代わりにはならないことに注意してください。

    :%s/\<\(hey\|hi\)\>/hai/g

    • \<– 単語の境界。
    • \| – 「論理和」 (この場合は hey または hi)

    例 8. Vim エディターでのインタラクティブな検索と置換

    代替で「c」フラグを使用して対話型の検索と置換を実行できます。これにより、以下で説明するように、置換を行うかスキップするかの確認が求められます。この例では、Vim エディターは「awesome」という単語をグローバル検索し、「wonderful」に置き換えます。ただし、以下で説明するように、入力に基づいてのみ置換を行います。

    :%s/awesome/wonderful/gc
    
    replace with wonderful (y/n/a/q/l/^E/^Y)?
    • y – 現在強調表示されている単語を置き換えます。置換後、検索パターンに一致した次の単語が自動的に強調表示されます
    • n – 現在強調表示されている単語を置き換えません。ただし、検索パターンに一致した次の単語が自動的に強調表示されます
    • a – 検索条件に一致する強調表示されたすべての単語を自動的に置き換えます。
    • l – これにより、現在強調表示されている単語のみが置換され、検索と置換の作業が終了します。

    例 9. すべての行をその行番号に置き換える

    文字列が「\=」で始まる場合、式として評価する必要があります。 「line」関数を使用して、現在の行番号を取得できます。両方の機能を組み合わせることで、置換はすべての行の行番号付けを行います。

    :%s/^/\=line(".") . ". "/g


    注: これは、行番号をファイルに書き込まない「:set number」とは異なります。しかし、この置換を使用すると、これらの行番号をファイル内で永続的に使用できるようになります。

    例 10. 特殊文字を同等の値に置き換える

    ~ を $HOME 変数値に置き換えます。

    Original Text: Current file path is ~/test/
    
    :%s!\~!\= expand($HOME)!g
    
    Translated Text: Current file path is /home/ramesh/test/

    拡張機能を使用して、利用可能なすべての定義済み変数とユーザー定義変数を使用できます。

    例 11. 新しいアイテムを挿入する際に、番号付きリストのシーケンス番号を変更する

    テキスト ファイル内に次のような番号付きリストがあるとします。この例では、記事 2 の後に新しい行を追加すると仮定します。このためには、それに応じて他のすべての記事の数を変更する必要があります。

    vi / vim tips & tricks series
    Article 1: Vi and Vim Editor: 3 Steps To Enable Thesaurus Option
    Article 2: Vim Autocommand: 3 Steps to Add Custom Header To Your File
    Article 3: 5 Awesome Examples For Automatic Word Completion Using Ctrl-X
    Article 4: Vi and Vim Macro Tutorial: How To Record and Play
    Article 5: Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
    Article 6: How To Add Bookmarks Inside Vim Editor
    Article 7: Make Vim as Your Bash-IDE Using bash-support Plugin
    Article 8: 3 Powerful Musketeers Of Vim Editor ? Macro, Mark and Map
    Article 9: 8 Essential Vim Editor Navigation Fundamentals
    Article 10: Vim Editor: How to Correct Spelling Mistakes Automatically
    Article 11: Transfer the Power of Vim Editor to Thunderbird for Email
    Article 12: Convert Vim Editor to Beautiful Source Code Browser


    3 番目の記事「perl-support.vim プラグインを使用して Vim を Perl IDE として作成する」を見逃していました。
    追加する場合は、「第3条」を「第4条」に、「第4条」を「第5条」に、「第12条」を「第13条」に変更します。
    />
    これは、次の vim 置換コマンドで実現できます。

    :4,$s/\d\+/\=submatch(0) + 1/

    • 範囲:4,$ – 4行目から最終行まで.
    • 検索するパターン – \d\+ – 数字の並び
    • 置換するパターン – \=submatch(0) + 1 – 一致したパターンを取得し、それに 1 を追加します。
    • フラグ – フラグがないため、デフォルトでは最初に出現したもののみが置換されます。


    代替ステートメントを実行すると、ファイルはこのようになり、
    3 つ目の記事を追加できます。

    vi / vim tips & tricks series
    Article 1: Vi and Vim Editor: 3 Steps To Enable Thesaurus Option
    Article 2: Vim Autocommand: 3 Steps to Add Custom Header To Your File
    Article 4: 5 Awesome Examples For Automatic Word Completion Using Ctrl-X
    Article 5: Vi and Vim Macro Tutorial: How To Record and Play
    Article 6: Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
    Article 7: How To Add Bookmarks Inside Vim Editor
    Article 8: Make Vim as Your Bash-IDE Using bash-support Plugin
    Article 9: 3 Powerful Musketeers Of Vim Editor ? Macro, Mark and Map
    Article 10: 8 Essential Vim Editor Navigation Fundamentals
    Article 11: Vim Editor: How to Correct Spelling Mistakes Automatically
    Article 12: Transfer the Power of Vim Editor to Thunderbird for Email
    Article 13: Convert Vim Editor to Beautiful Source Code Browser

    注:置換が 3 から 4、4 から 5 などに変更されたことを確認します。これで、Article 3 として言及する新しい行を追加できるので、手動で変更する必要はありません。

    例 12. 文頭を大文字に置き換える。 (つまり、文書全体のタイトルケース)。

    ドキュメントをフォーマットするときは、タイトルを大文字にすることも重要です。置換で簡単にできます。

    :%s/\.\s*\w/\=toupper(submatch(0))/g

    • \.\s*\w – 検索パターン – リテラル . ( ドット ) の後に 0 個以上のスペースと単語文字が続きます。
    • toupper – 指定されたテキストを大文字に変換します。
    • submatch(0) – 一致したパターンを返します。

    置換前のテキスト:

    Lot of vi/vim tips and tricks are available at thegeekstuff.com. reading
    these articles will make you very productive. following activities can be
    done very easily using vim editor.
            a. source code walk through,
            b. record and play command executions,
            c. making the vim editor as ide for several languages,
            d. and several other @ vi/vim tips & tricks.

    置換後のテキスト (変更箇所は太字)

    Lot of vi/vim tips and tricks are available at thegeekstuff.com. Reading
    these articles will make you very productive. Following activities can be
    done very easily using vim editor.
            a. Source code walk through,
            b. Record and play command executions,
            c. Making the vim editor as ide for several languages,
            d. And several other @ vi/vim tips & tricks.

    推奨読書

    Vim 101 ハック、Ramesh Natarajan 著 .私はコマンドライン中毒です。だから当然、私は Vi と Vim エディターの大ファンです。数年前、Linux で多くの C コードを書いていたとき、利用可能な Vim エディターのヒントとコツをすべて読んでいました。私の Vim エディターの経験に基づいて、Vim エディターで高速かつ生産的になるさまざまな高度な Vim 機能に関する 101 の実用的な例を含む Vim 101 Hacks eBook を作成しました。数年間 Vi および Vim エディタを使用しており、この本をまだ読んでいない場合でも、ぜひこの本を読んでください。 Vim エディターの機能に驚かれることでしょう。

    素晴らしい Vim エディターの記事

    以下は、すばらしい Vi / Vim エディタの チュートリアル です。

    • Vi と Vim マクロのチュートリアル:記録と再生の方法
    • Vimperator アドオンを使用した Vim エディター機能を備えたターボチャージ Firefox ブラウザー
    • チュートリアル:c.vim プラグインを使用して Vim を C/C++ IDE として作成
    • Vim エディタをあらゆるプログラミング言語用の美しいソース コード ブラウザに変換

    注: The Geek Stuff を購読して、今後の Vi および Vim エディタのヒントとコツをお見逃しなく .


    Linux
    1. ViとVimのテキストエディタの違いの説明

    2. Linuxでsedを使用してテキストファイルを検索および置換する

    3. LinuxでSed、ex、perlコマンドを使用してテキストを検索および置換する

    1. コマンド例を含むvimチュートリアル

    2. Xed Text Editor –GeditとPlumaの代替

    3. Bash 文字列操作の例 – 長さ、部分文字列、検索と置換

    1. ViMテキストエディタ101ガイド

    2. 「sed」を使用して検索して置換しますか?

    3. 一致するテキストを見つけて次の行を置き換える