通常モードを終了せずに改行を挿入する方法


23

通常モードを終了せずに新しい行を挿入できるかどうか疑問に思います。たとえば、次の2行があります。

this is line one
this is line two

そして、カーソルは1行目にあります。次のように、1行目と2行目の間に新しい行が必要です。

this is line one

this is line two

通常モードのときに、を押すことができることを知っていますo。しかし、これは挿入モードに入ります。

どのように新しい行を挿入して通常モードのままにすることができますか?


回答:


10

そのためにマッピングを使用します。

" Quickly insert an empty new line without entering insert mode
    nnoremap <Leader>o o<Esc>
    nnoremap <Leader>O O<Esc>

このようにする<Leader>oと、カーソルの下に1行を挿入し、前の行に1 行を挿入できます<Leader>O

注:o<Esc>この種のマッピングを簡単にするためにリーダーを選択したのと同じくらい多くのキーストロークが必要であると主張することができます。また、これを行うための組み込みの方法があるかどうかは本当にわかりません。


8

挿入モードを使用せず、カーソルを移動せず、カウンターを使用して一度に複数の行を追加できるソリューション(3\oなど):

nnoremap <silent> <leader>o :<C-u>call append(line("."),   repeat([""], v:count1))<CR>
nnoremap <silent> <leader>O :<C-u>call append(line(".")-1, repeat([""], v:count1))<CR>

5

私は個人的にTim PopeのUnimpairedプラグインを使用することをお勧めします。それは多くのマッピングを提供しますが、あなたが探してますものがある[<space>]<space>され、それぞれ現在の行の上や下に空白行を作成します。Unimpairedは、クイックフィックスリスト、バッファリスト、オプションの切り替えなど、多くの項目を移動するための優れたマッピングも提供します。詳細:h unimpairedをご覧ください。

障害のないプラグインを使用したくないが、以下のマッピングのように、~/.vimrcファイルに入れるいくつかのクイックマッピングがあります。

nnoremap <silent> [<space>  :<c-u>put!=repeat([''],v:count)<bar>']+1<cr>
nnoremap <silent> ]<space>  :<c-u>put =repeat([''],v:count)<bar>'[-1<cr>

5

マッピングを追加したくない場合はyy、空の行をヤンクして、pカーソルの下とカーソルのP上に貼り付けることができます。


これはおそらくマッピングなしのベストアンサーです。
ウィレムヴァンケチッチ

またはでoレジスタに保存し、で"oyy必要なときにいつでもそこから貼り付け"opます。
mike23

4

私のマッピングはを使用していShift-Enterます。カーソルがマークoを使用して同じ行と列に返されるという点で、他と異なります。

" Insert new line above without going into insert mode
" (uses mark o to return to the previous cursor column)
nnoremap <S-Enter> moO<Esc>`o

5
マッピング<S-Enter>はターミナルエミュレーターでは機能しません(gVimでのみ機能します)。したがって、マッピングするために
異なる

2

マキシム・キムによるこの答えは人生を変えるものでした:

noremap <silent> <space> :exe "normal i".nr2char(getchar())<CR>

そしてそれについての私のリフ:

noremap <silent> <s-space> :exe "normal a".nr2char(getchar())<CR>

これらの行をに置きますvimrc。次に、あなたのファイルとヒットの2行目の先頭に移動SpaceEnterまたは最初の行の末尾とヒットに行きShift+SpaceEnter。どちらも、最初の行と2番目の行の間に空の行を追加し、通常モードのままにします。

また、これらを他の単一のキーに使用することもできます-ヒットするSpaceShift+Space、必要なキーを続けると、それぞれ挿入または追加されます。


2

これらのマッピングは、探しているものを正確に実行します。

nnoremap <c-n> @="m`o\eg``"<cr>
nnoremap <c-p> @="m`O\eg``"<cr>   

これらはカーソルの前後にn個の改行を挿入します。ジャンプリストを変更せずに、カーソルを正確に保持します。

別の解決策は、名前のないレジスタを改行で埋めるショートカットを作成することです。次に、putコマンドpまたはPを使用して、改行を挿入します。例えば:

nnoremap "<cr> :let @@="\n"<cr>

1

これのための私のマッピング

 " Create Blank Newlines and stay in Normal mode
nnoremap <silent> zj o<Esc>k
nnoremap <silent> zk O<Esc>j

statoxとは異なり、カーソルを同じ場所に保持します。


どういう<silent>意味ですか?
アレックス

ステータス行に何かがエコーするのを防ぎます。この特定のケースでは何もしないと確信しています。ずっと前にコピー元からどこにでもありました。をご覧ください:h map-silent
ケビン

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