95

挿入モードに入ることなく、カーソルが Vim にある場所に改行を挿入することは可能ですか? 以下に例を示します ([x]カーソルがオンであることを意味しますx)。

if (some_condition) {[ ]return; }

場合によっては、さらにコードを入力したくなることがあります。を押しiて挿入モードにし、 を押しEnterて改行を挿入してから、余分なスペースを削除します。次に、通常モードに入り、カーソルを右中かっこの前に置き、同じことを行って独自の行に配置します。

ずいぶん前からやっているのですが、何か良い方法はないでしょうか?

4

15 に答える 15

114

あなたが与えた例ではrEnter、単一の文字 (スペース) を Enter に置き換えるために使用できます。次に、fspace.次のスペースに進み、最後のコマンドを繰り返します。

自動インデントの設定に応じて、上記は return ステートメントを適切にインデントする場合とインデントしない場合があります。そうでない場合は、sEnterTabEsc代わりに を使用してスペースを改行に置き換え、行をインデントして、挿入モードを終了します。'.' を使用できないように、2 番目のスペースを別のコマンドに置き換える必要があります。この場合。

于 2008-10-26T02:11:57.330 に答える
12

挿入モードでないときに「g」を押すたびにカーソル位置に改行を挿入するマクロを作成する方法は次のとおりです。

vim 内から、次のように入力します。

:map g i[Ctrl+V][Enter][Ctrl+V][Esc][Enter]

どこ:

  • [Ctrl+V] は、Ctrl キーを押しながら「v」を押すことを意味します。
  • [Enter] はEnter キーを押すことを意味します
  • [Esc] はEsc キーを押すことを意味します

最後の Enter キーを押すまで、vim ウィンドウの下部に次のように表示されます。

:map g i^M^[

説明:

[Ctrl+V] は「次の文字を引用する」という意味です。コマンドに改行文字とエスケープ文字を埋め込むことができます。

したがって、「g」キーをシーケンスにマッピングしています。

i [Enter] [Escape]

これは、カーソルの前に改行を挿入し、挿入モードを終了するための vimです。

微調整:

  • 「g」は、使用するコマンドにまだ関連付けられていない任意の文字に置き換えることができます。
  • コマンドにさらに追加します。たとえば、 -- これにより、} f}i^M^[O 検出され別の改行が挿入されます。その後、挿入モードから抜け出し、さらにコードを入力するために空の行を開きます。
  • コマンドを .vimrc または .exrc ファイルに追加して、永続的にすることができます。最初のコロンを省略して、コマンドが「map」で始まるようにします。

楽しみ!

于 2008-10-26T02:53:16.683 に答える
12

Ctrl+Enter を押してカーソル位置で改行する単純なマッピング:

:nmap <c-cr> i<cr><Esc>

基本的に「挿入」モードに入り、改行を挿入して通常モードに戻ります。

後で使用できるように、.vimrc ファイルに入れます。

于 2009-06-02T21:24:30.040 に答える
5

通常、1 行のブロックを 3 行に拡張する場合は、置換を試してください。開始ブラケットをブラケット/リターンに変更し、終了ブラケットをリターン/ブラケットに変更します。

ブラケットをブラケット/リターンに置き換えるコマンドは次のようになります。

:s/{/{\r/

これを頻繁に使用したい場合は、次のように完全なシーケンスを未使用のキーストロークにマップできます。

:map <F7> :s/{/{\r/ ^M :s/}/\r}/ ^M

シーケンスで^Mが表示されている場所で、 [Ctrl-V]と入力してからEnterを押します。

サンプル行の任意の場所にカーソルを置き、マップされたキーを押すと、キャリッジ リターンが追加されます。

:help map-which-keys未使用のキーストロークを選択してマップするためのアドバイスを確認してください。

于 2008-10-26T04:00:14.130 に答える
3

別のものにマッピングKしても問題ないと仮定し (好みの別のキーを選択)、マーカー'を一時的なマーカーとして使用しても問題ないとします。

:nmap K m'a<CR><Esc>`'

通常モードで、改行したい文字の上で K を押すと、行が分割され、カーソルが元の位置に残ります。

于 2016-11-14T21:28:15.930 に答える
1

autoindent(またはその他のインデント補助) が有効になっているときに行を 2 つに分割すると、Vim はカーソルの右側にある空白を自動的に削除します。

これらの設定を使用したくない場合は、単に挿入するではなく、空白を新しいテキストに置き換えるためにs代わりに使用します。(空白が複数ある場合は、一番左にカーソルを合わせて使用​​してください。)icw

于 2008-10-26T03:23:25.640 に答える
0

このキー マッピングを vimrc に設定します。

:map <C-m> i<CR><Esc>h

次に、vim で使用する場合は Ctrl+m を押します。

于 2011-07-30T04:53:54.797 に答える
0

Vrapperでは、挿入モードに入ることなく行を分割する gql を使用できますが、常にインデントを維持するとは限りません。

于 2015-08-20T19:54:30.100 に答える
-1

このマッピングにより、使用している 1 行の関数が分割されます。通常モードでは、行にカーソルを置いて「g」を押すだけです。

:map g ^f{malr<CR>`a%hr<CR>`a

これは、左中括弧の後にスペースがあり、右中括弧の前にスペースがあることを前提としています。それがあなたのために働くかどうか見てください。

于 2008-10-26T03:54:07.310 に答える