166

gvim を使い始めましたが、gvim での複数行編集の仕組みがよくわかりません。

例えば:

原文:

asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;

ctrl+q、jjjjjj、$ すべてが選択されたら、I を押して複数行の挿入を行います。

私の意図は、最初の行のように引用符を挿入してから、Esc を押すことです。

asd "asd asd" asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;

どうしたの?sublimetext のものと同様の動作を期待していました。

ここに画像の説明を入力

それがどのように機能するかわからない場合は、すべての行に対してアクションを繰り返すだけです。どうすればそれを達成できますか?そして、vim はここで何をしているのでしょうか?

4

8 に答える 8

266

Windows 互換性レイヤーを削除して、自分に有利に働きましょう。

Visual-Block モードに入る通常のショートカットは です<C-v>

他の人はマクロの記録を扱っています。ここにいくつかの他のアイデアがあります:

ビジュアル ブロックモードのみを使用します。

  1. 2 番目の単語にカーソルを置きます。

    asd |a|sd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    
  2. ヒットして視覚ブロック<C-v>モードに入り、選択範囲を下に向かって展開します。

    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    
  3. ヒットI"<Esc>して入手:

    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    
  4. 3 番目の単語の最後の文字にカーソルを置きます。

    asd "asd as|d| asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    asd "asd asd asd asd;
    
  5. ヒットして視覚ブロック<C-v>モードに入り、選択範囲を下に向かって展開します。

    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    
  6. ヒットA"<Esc>して入手:

    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    

visual-blockモードとSurround.vimを使用。

  1. 2 番目の単語にカーソルを置きます。

    asd |a|sd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    asd asd asd asd asd;
    
  2. ヒットしてビジュアルブロック<C-v>モードに入り、選択範囲を下と右に向かって拡張します。

    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    asd [asd asd] asd asd;
    
  3. ヒットS"して選択範囲を ":

    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    

視線モードと:normal.

  1. ヒットVして行全体を選択し、下に向かって展開します。

    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    [asd asd asd asd asd;]
    
  2. 次のコマンドを実行:'<,'>norm ^wi"<C-v><Esc>eea"<CR>して取得します。

    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    asd "asd asd" asd asd;
    
    • :norm[al]行の範囲で通常モードのコマンドを実行できます(この'<,'>部分は Vim によって自動的に追加され、「選択された領域に作用する」ことを意味します)

    • ^行の最初の文字にカーソルを置きます

    • w次の単語に移動します

    • i""カーソルの前にa を挿入します

    • <C-v><Esc>は、このコンテキストで制御文字を入力する Vim の方法です。ここでは、挿入モード<Esc>を終了するために使用されます。

    • ee次の単語の末尾に移動します

    • a""カーソルの後にa を追加します

    • <CR>コマンドを実行します

    Surround.vim を使用すると、上記のコマンドは次のようになります。

    :'<,'>norm ^wvees"<CR>
    
于 2012-08-03T06:32:41.940 に答える
33

Vimでそれを達成する方法はいくつかあります。しかし、どれがSublimeTextに最も似ているかはわかりません。


1つ目は、複数行挿入モードを使用する場合です。最初の行の2番目の「a」にカーソルを置き、を押しCtrl-V、すべての行を選択してから、を押しIて、二重引用符で囲みます。を押す<esc>と、すべての行で操作が繰り返されます。


2つ目はマクロ経由です。最初の文字にカーソルを置き、。を使用してマクロの記録を開始しqaます。で右に移動し、llllで挿入モードに入り 、二重引用符を置き、挿入モードを終了して、 (または同等の)a行の先頭に戻ります。<home>を押しjて1行下に移動します。で録音を停止しqます。次に、マクロを。で再生し@aます。数回。


上記のアプローチのいずれかがあなたのために働きますか?

于 2012-08-02T20:12:21.413 に答える
18

「グローバル」コマンドを使用すると、1つのオンラインで実行できることを任意の数の行で繰り返すことができます。

:g/<search>/.<your ex command>

例:

:g/foo/.s/bar/baz/g

上記のコマンドは、fooを持つすべての行を検索し、その行で出現するすべてのbarをbazに置き換えます。

:g/.*/

すべての行で行います

于 2012-08-02T19:33:48.050 に答える
7

vimをしているのかわかりませんが、興味深い効果です。必要なものを説明する方法は、マクロがどのように機能するかのように聞こえます ( :help macro)。このようなものは、マクロで必要なことを行います(通常モードで開始):

  1. qa:登録するマクロを記録しaます。
  2. 0w:0行頭に移動し、w1 単語ジャンプします。
  3. i"<Esc>: 挿入モードに入り、a を挿入"して通常モードに戻ります。
  4. 2e: 2 番目の単語の末尾にジャンプします。
  5. a"<Esc>: を追加し"ます。
  6. jq次の行に移動して、マクロの記録を終了します。

まとめると: qa0wi"<Esc>2ea"<Esc>

これで、 でマクロを実行できます。@a最後のマクロを で繰り返し@@ます。ファイルの残りの部分に適用するには、99@a99 行を超えないことを前提として次のようなことを行います。マクロの実行は、ファイルの終わりに達すると終了します。

必要なものを実現する方法はvisual-block-mode次のとおりです(通常モードで開始):

  1. 最初の見積もりを表示する場所に移動します。
  2. と入力しvisual-block-mode、影響を与える行を選択してG、ファイルの最後に移動します。
  3. ヒットI"<Esc>
  4. を挿入する次の場所に移動します"
  5. 今行ったことを繰り返したいので、単純なもので.十分です。
于 2012-08-02T20:29:21.723 に答える