6

Emacs には open-rectangle と呼ばれる関数があり、長方形の領域 (つまり、Vim のビジュアル ブロック モード) を選択し、キーの組み合わせを押してその長方形をスペースで埋め、既存のコンテンツを右に押し出すことができます。

前 後

これは、垂直に配置されたテキストの列を操作する場合に非常に便利です。ビジュアルブロック+検索と置換を使用して、Vimでもこれを簡単に実行できるはずだと思います。しかし、試してみると、検索と置換が四角形にバインドされない理由がわかりません。

:'<,'>s/\^/    /

これは、この選択された領域を開く代わりに、実際には行全体をインデントします。私は置き換えてみました:

:'<,'>s/\v(.*)/   \1/

しかし、それは同じ効果があります。選択したブロックの各行をスペース + 選択した領域のみに置き換えたいことをパターンに理解させるにはどうすればよいですか? 文字を変更するなどの単純な置換は機能しますが、^orを使用.*すると、期待どおりに機能しません。

「I」を押してスペースを挿入してドロップを通常モードに戻す機能があることは認識していますが、多くの行にわたって大量にインデントしている場合は判断が難しくなります。

4

3 に答える 3

8

どうですか:

yPgvr<Space>

これにより、ブロックがヤンクされ、貼り付けられて複製され、元のブロックが再選択されてスペースに置き換えられます。

于 2012-10-27T05:54:41.680 に答える
6

別の方法:

  1. Visual-block は 1 つの列のみを選択します。

  2. 必要な空白の列の数でヒットnI<Space><Esc>nます。

于 2012-10-27T08:36:19.360 に答える
2

romainlの答えのバリエーションとして、私はこれを持っています:

vnoremap <C-Space> I<Space><Esc>gv

先頭に追加されたカウントを使用してn 個のスペースを一度に挿入することも、マッピングを繰り返し適用して列を繰り返し追加することもできます。

于 2012-10-27T19:48:12.213 に答える