viで引用符の間のテキストを置き換える方法


106

次のコード行があるとします。

$query = "SELECT * FROM table";

vi / vimに、引用符の間のすべてを即座に削除し、それらの間にカーソルを置いて入力を開始できるコマンドはありますか?

回答:


182

を使用ci"します。つまり、二重引用符内の内容を変更します。

同様に他のテキストオブジェクトを操作することもできます。例:

  • ci' -単一引用符内を変更します
  • ciw -単語の中で変化する
  • ci( -括弧内を変更
  • dit -HTMLタグ内などを削除

さまざまなvimテキストオブジェクトの詳細については、こちらをご覧ください


2
でのみ機能しているようですがvim、では機能していませんvi。(不明)
Ivan Chau 2014年

私にとってこれは現在の行でのみ機能し、ドキュメントのどこでも機能しません。
そして最後に、

次に、どのコマンドがこれを逆方向に実行しますか?これは、カーソルの後ろにある引用符の内側のテキストを置き換えたい場合です。
dtburgess

1
@dtburgess:1つの方法はF"ci"です。
Eugene Yarmash

ci 'とci "は正常に機能しますが、ci(は私には機能しません。誰にでも何か理由があるのですか?
Vram Vardanian

24

引用符から選択して、削除(d)、変更(c)などを使用して、

vi"

同様に、中括弧、角括弧、XML要素などを次のように置き換えることができます。

vi(
vi{
vit

単に変化が/削除する、または、対応行うdi"ci"等置換のaためのi(あなたがマークやブラケット変更ように、周囲の要素を包含する意志、例えば、コンテンツ)


5

プラグインを作成しましたvim-textobj-quoteshttps : //github.com/beloglazov/vim-textobj-quotes

任意のタイプの最も近い引用符のペアにテキストオブジェクトを提供し、複数行にわたる引用符をサポートします。only iqまたはaqitを使用すると、現在カーソルを囲んでいる単一引用符( ')、二重引用符( ")、または後方引用符(`)の引用符の内容を操作できます。言い換えれば、それは引用符に到達する必要があるときに前方または後方にジャンプします。

例を見れば理解しやすくなります(カーソルはで表示されます|)。

  1. 以前:foo '1, |2, 3' bar; を押した後diqfoo '|' bar
  2. 以前:foo| '1, 2, 3' bar; を押した後diqfoo '|' bar
  3. 以前:foo '1, 2, 3' |bar; を押した後diqfoo '|' bar
  4. 以前:foo '1, |2, 3' bar; を押した後daqfoo | bar
  5. 以前:foo| '1, 2, 3' bar; を押した後daqfoo | bar
  6. 以前:foo '1, 2, 3' |bar; を押した後daqfoo | bar

上記の例は一重引用符で示されていますが、プラグインは二重引用符( ")と逆引用符(`)でもまったく同じように機能します。

あなたはまた、他の演算子を使用することができます:ciqdiqyiqviq、など

詳細については、上記のgithubページをご覧ください。


3

すでに引用符の内側から行うことができます

di"

中の削除としてそれを読んでください "


6
コマンドはデフォルトで行の最初のそのような文字列を変更するため、カーソルは二重引用符で囲まれた文字列内にある必要はありません
Eugene Yarmash

1
知っていただきありがとうございます。私は物事をもう少し注意深く読むべきであることを示しに行きます。:)
Sam Peacey

3

ブライアンの答えに加えて、新しい値をp(貼り付け)およびy(ヤンク)することもできるため、引用符内の値を別の値で置き換えるyi"場合は、コピーvi"する選択範囲で、領域を選択することができます。置換したいp値を適切に置換します。


0

選択した回答はViMにのみ適していますが、viには適していません。著者はカーソルの初期位置が何であるかについて言及しなかったため、質問も不正確です。カーソルが二重引用符の内側にあると想定すると、viの答えは次のようになります。

T"ct"

どこ:

T "-"文字の直後に戻る

c-コマンドの変更

t "-文字の消去を停止するcコマンドの終了位置、つまり変更する範囲を指定します

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