タグ付けされた質問 「substitute」

ex-modeの `:s`コマンドなど、テキストの正規表現ベースの置換を伴う操作。[replace]タグと混同しないでください。

11
元の単語を入力せずにVimで検索および置換する方法
Vimの「検索と置換」ワークフローを最適化したいと思います。あなたのほとんどもそうだと思うので、それは私が頻繁に行うことです。通常の行に沿って何か- ブロックをコピーし、いくつかの場所で変数の名前を変更します。おそらく、「コードをコピーして貼り付ける理由」の反射を引き起こす可能性がありますが、その道をたどらないでください...多くの有効なユースケースがあります:) 私は、検索コマンドと置換コマンドをよく知っています::sまたは:%s、しかし、私はそれらが好きではありません。検索する完全な変数名と変更する名前の両方を入力する必要があります。たぶん、タイピングの量を修正するより良い方法があります:%sか?私はしばしば長い説明的な変数名を使用するので、それは本当に私にとって大きな問題です。また、変数名を最初から入力するのがタイプミスになりやすく、タイプミスを見つけるのに時間と頭脳を消費することも好きではありません。一度入力してから、可能な場合は完全に回避するために、コピーして貼り付けることをお勧めします。 現在のワークフローでは、movement / yank / select / search / putの組み合わせを使用してファイル内を移動し、1つずつ置き換えます。これは素晴らしいことではありませんが、完全な変数名を入力しなくて済むという利点があります。周囲の状況に応じて最初の数文字を入力する/か、別の移動コマンド(例:)を使用fxしてveから、単語全体を選択する必要があります。また、インスタンスごとに繰り返す必要があることも気にしません。各変更を確認せずに、完全な検索置換を実行することはありません。しかし、1回のキーストロークで置換アクションを繰り返すことができれば非常に望ましいでしょう(この方法ではできません)。各交換は、通常のようなものでn、その後ve、その後p(またはさらに悪いです"0p) もっと速い方法はありますか?

3
視覚的な選択内でのみ置換する方法は?
行のほかの場所ではなく、視覚的な選択範囲内の文字だけをvimに置き換えるにはどうすればよいですか?例: ライン: int arr[] = { 00 01 02 03 04 05 05 /* ... lots more like this*/}; 視覚的選択: { 00 01 02 03 04 05 05 /*... lots more like this*/} コマンド: :'<,'>s/\ /\,0x/g 期待される: int arr[] = {0x00,0x01,0x02,0x03 /* and so on*/}; ただし、これらのアクションを実行すると、実際の結果は次のようになります。 int,0xarr[],0x=,0x{0x00,0x01,0x02,0x03 /* and so …

3
正規表現を使用して検索および置換
多くのユーザーのデフォルトが入ったファイルがあります。テキストの一部を変更したいのですが、マッチャーとリプレースメントの作成に苦労しています。次の例を使用します。 ############################################################################### # Trackpad, mouse, keyboard, Bluetooth accessories, and input # ############################################################################### # Trackpad: enable tap to click for this user and for the login screen defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true 私は交換したい# Trackpad: ...とrunning "Trackpad: ..." 問題を分解して、正規表現テスターを使用して何かを思い付きました: /\n\n#\s(.*)/g Vimでこれを使用しようとすると、うまくいきません。 :/\n\n#\s(.*)/running "\1"/g 私の問題は、具体的には次の2つの質問に要約されると思います。 \n文字の検索を回避し、代わり#に検索グループの最後に表示されないようにするにはどうすればよいですか? キャプチャグループを効果的に使用するにはどうすればよいですか? 以下にいくつかの素晴らしい答えがあります。3つすべてから選択するのは難しいですが、選択した答えが私の元の仕様にとって最も正確であると感じています。実際のファイルで 3つの回答すべてを試して、それらについてどのように感じているかを確認することをお勧めします。

1
非インタラクティブにファイルを編集する方法(パイプラインなど)
パイプライン入力で渡されたファイルを非インタラクティブな方法でvimを使用して編集するか、インプレースでファイルを編集します(と同様sed)。 以下を使用したいくつかの例sed: $ sed -i'.bak' s/foo/test/g file # Edit file in-place. $ cat file | sed s/foo/test/g # Parse file in pipeline. しかし、私はここで読むことができました: sedあるS tream ED itor、ないファイルエディタが。それにもかかわらず、どこでも人々はファイルを編集しようとするためにそれを乱用する傾向があります。ファイルは編集しません。 次に、インプレース編集(-i)などの一部のオプションは移植可能です。 vimで同じ機能をどのように実現できますか?

1
vimで:g /^$/,/./- j(複数の空白行を1つの空白に減らす)はどのように機能しますか?
Vim Regular Expressionsの記事で、Oleg Raiskyは複数の空白行を単一の空白に減らすために次のコマンドを提供しています。 :g/^$/,/./-j 誰かがこれがどのように機能するか説明してもらえますか? :gコマンドと正規表現を知っています。しかし、この部分/,/./-jが何をするのか理解できませんでした。

2
大文字小文字を変えずに文字列を置き換えますか?
原因私が働いているドメイン固有言語で気まぐれに、私は頻繁に交換する(選択的ではなく、グローバル)のタスクに直面しtermたりTERMしwordたりWORD、それぞれ。 つまり、大文字と小文字を区別せずにを検索し、元の大文字/小文字をそのままにして、termそれを置き換えword ますterm。 全体の一貫した大文字/小文字termをチェックするのは難しく、実際には必要ないので、大文字/小文字の/を/ の最初の文字で決定することに決めます。wordWORDterm どうすればこれを達成できますか?
18 substitute 




2
複数選択の代替?
通常、このcオプションの代替品には、2つのオプション(y)esまたは(n)oがあります。いくつかのyesオプションを選択することは可能ですか? 例 ファイル person: Alice dog: Tobby person: Bob パターン1 :%s/person:/woman:/c パターン2 :%s/person:/man:/c パターン1と2の検索パターンは同じですが、置換パターンが異なります。(1)を置換1に、(2)置換2に、または(n)置換なしにオプションを使用して、それらを1つのパターンに統合します。
15 substitute 

2
行のすべてではなく一部のみで:substituteを実行するにはどうすればよいですか?
このような行があります: function my_function(argument, another argument, but there are spaces) (引数の名前の中の)スペース文字をアンダースコアに置き換えたい。したがって、私は使用したい: :s/\ /_/g しかし、行全体に適用せずに、たとえばカーソル位置から開始することを選択するにはどうすればよいですか?(または3番目の単語)?

4
各マッチをインクリメントカウンターに置き換える方法は?
特定のパターンが出現するたびに検索を開始し1、一致ごとに1ずつ増加する10進数に置き換えます。 カウンターをインクリメントするのではなく、固定された量だけ各マッチを変更することであることが判明した、同じような言葉の質問を見つけることができます。他の同様の質問は、インクリメントカウンターではなく、行番号の挿入に関するものです。 例、前: #1 #1.25 #1.5 #2 後: #1 #2 #3 #4 私の実際のデータには、番号を付け直したいものの周りにたくさんのテキストがあります。
14 substitute 

4
sコマンドで\ rと\ nが異なることを意味する理由は何ですか?
私たちは皆、検索時\nは改行であり、\r復帰(^M)であることを知っていますが、置換するとき\rは改行\nで、nullバイト(^@)です。 この非対称性の起源は何ですか?この振る舞いは...控えめに言っても独特です(そして最初に間違えたときはかなり非生産的です)奇妙な歴史的理由があると思います。 (偶然にも、この動作を「修正」してより直感的なものにする方法はありますか?)

6
連続した重複をすべて削除する
このようなファイルがあります。 Move to 230.00 Hold Hold Hold Hold Hold Hold Move to 00.00 Hold Hold Hold Hold Hold FooBar Hold Spam Hold 次のようになりたいです。 Move to 230.00 Hold Move to 00.00 Hold FooBar Hold Spam Hold vimがこれをすばやく実行できる方法が必要であると確信していますが、どのように頭をかき回すことはできません。これはマクロの力を超えており、vimscriptが必要ですか? また、「Holds」の各ブロックに同じマクロを適用する必要がある場合でも問題ありません。ファイル全体を取得する単一のマクロである必要はありませんが、それは素晴らしいことです。

1
代替コマンドでスラッシュ(/)を感嘆符(!)に置き換えるとはどういう意味ですか?
私は最近、著者が次のようなものに/置き換えた代替コマンドを見ました!::s!abc!ABC!g この使用法に関するドキュメントを見つけようとしましたが、関連するものは見つかりませんでした。それで、私は自分で実験してみましたが、2つのサインの本当の違いを理解できませんでした。ここに私が見つけたものがあります: これは、混在させることはできません!し、/コマンドで。たとえば、:s!abc/ABC失敗します。 パターン内の!エスケープを回避するために使用すると便利な場合があります/。たとえば、私は交換したい場合</に%私が使用できる:%s!</!%!gのではなく:%s/<\//%/g。 場合によっては、一部の正規表現が/動作せ!ず、適切に動作するようですが、私は実際には正規表現の専門家ではないので、私はそれを確信していません。 だから私の質問は簡単です:!代替コマンドで使用することの利点は何/ですか?いつ代わりに使用することに決めますか?
13 substitute 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.