複数選択の代替?


15

通常、この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つのパターンに統合します。

回答:


19

の実装:s//cは修正されています。探しているのは、Vimscript式(:help sub-replace-expr)で置き換えることです。を使用して1桁のクエリを実行するgetchar()か、次の方法で長い数字の入力を求めることができますinput()

:%s/person:/\=get(['woman', 'man'], getchar() - char2nr(1), submatch(0)) . ':'/
:%s/person:/\=get(['woman', 'man'], input('Your choice: ') - 1, submatch(0)) . ':'/

3例では)より大きな数値を入力して、置換を実行することはできません。


これが頻繁に必要な場合は、そのためのカスタムQuery()関数を定義するのが理にかなっています。そこにを追加して:redraw、既に発生した置換を確認することもできます。


コマンドには問題があるようです。私はチェックコマンドを追加した後にのみ、それは動作します::%s/person:/\=get(['woman', 'man'], input('Your choice: ') - 1, submatch(0)) . ':'/c
ラーナー張

しかし、cコマンドを追加すると、文字列を置き換えるために2つの手順が必要になりますが、これは不要だと思います。
ラーナーチャン

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