挿入モードで<CR>を元に戻す


21

挿入モードでは<CR>、誤ってヒットすることがあり、バックスペースを複数回押す必要があります(インデントによって異なります)。

例えば

<div>
  <p> This is some text []</p>
</div>

カーソルが[]あり、ヒット<CR>

<div>
  <p> This is some text 
  []</p>
</div>

ここで、前の行に戻るためにバックスペースを2回押す必要があります(このケースはそれほど悪くはありませんが、インデントがあまりありません)。

もっと良い方法を知っていますか?


1
ctrl+w2回は動作し、非常に簡単なようです
-reergymerej

回答:


10

どうですか:

inoremap <C-\> <C-o>:left 0<Cr><BS>

<C-o>:left 0すべてのインデントを削除する通常モードのコマンド()を実行します。これにより、カーソルが行の先頭に置かれます。<BS>最後の行に戻ります。

これは「後方J」に少し似ています。

残念ながら、Shift + EnterまたはCtrl + Enterのマッピングは不可能なようです。そのため<C-\>、「enterの近く」としてを選択します。


「入力の近く」はキーボードによって異なります。英国のキーボードでは「左シフトの隣に ``
TripeHound

2
<C-u>代わりに使用しないのはなぜ<C-o>:left 0<CR>ですか?
ジェームスサン

@jamessanこれは「後方J」として機能しfoo<CR>bar<C-\>ますfoobar。私見、それはより便利ですが、YMMV。
マーティントゥルノイ

正しいですが、私が言っているのは<C-u>(つまりi_CTRL-Uはと同じであるべきだということ<C-o>:left 0<CR>です。
ジェームスサン

1
@jamessanまあ、それはカーソルの位置に依存します。入力foo<CR>bar<C-u>すると、foo<CR>(Vimが追加した自動インデントが追加されます)<C-o>:left 0<CR>カーソル位置に関係なく、常に同じ動作をします。
マーティントゥルノイ

21

私はこれを持っていますvimrc、2番目の部分は関連しています:

inoremap <expr> <silent> <cr> pumvisible() ? "<c-y>" : "<c-g>u<cr>"

これが行うこと:Enter挿入モードでヒットするたびに、「元に戻すシーケンスを中断し、新しい変更を開始する」こともできます(を参照h: i_CTRL-G_u)。つまり、Enter誤ってヒットした場合、以前に挿入された行を削除せずに、Statoxが提案したように、変更を元に戻すことができます。基本的に、各行は個別に元に戻すことができます。ESC u aCtrl-o u

ソース

編集/更新:Emacs(別名evil-mode)でVimエミュレーションを使用する場合、このパッケージを使用して同様の効果を得ることができます。


今、私は最初の部分と<c-y>、ポップアップメニューとの関係について興味があります。
8bittree

2
この回答を参照してください:vi.stackexchange.com/a/3844/1800をCtrl-y挿入モードでは、現在のポップアップ選択が完了し、上記のマッピングでEnterも完了することができます。
ヴァンレーザー

ナイストリック。しかし、私はおそらく最後の部分を交換したい"<c-g>u<cr>"ことで&paste ? "<cr>" : "<c-g>u<cr>"そうしないと、誤ってHTMLの200行を貼り付け、次の時間は、あなたがそれを元に戻すに多くの楽しみを持っています、。:)
lcd047

2
...および説明:pasteオンの場合、挿入モードのマッピングは無効になります(Vimのヘルプによる)
-VanLaser

1
Backspace、Ctrl-W、およびCtrl-Uに依存する他のソリューションbackspaceは、オプションの設定方法によっては機能しない可能性があるため、このソリューションの方が気に入っています。
ダブルダウン

4

私のやり方はそうですCtrl-wBackspace

Ctrl-w最後の単語を削除するには(これが標準のvimであるかどうか忘れていました)、スペースだけなので、行頭に戻ります。その後Backspace、私がいた前の行に戻ります。


いいですねCtrl-w、挿入モードでの使用については知りませんでした。しかし、Carpetsmoker♦はさらに高速です。したがって、 `Ctrl- \`のデフォルトのバインディングはそれほど有用ではないようです。
-nobe4

1
Ctrl + wは「標準Vim」です;-)を参照してください:help i_CTRL-W。そして、それを2回押すと、同様にトリックを行うようです?
マーティントゥルノイ

1
ヘルプページで<C-u>、新しい行のすべての文字が削除されるため、より便利な場合があります
-nobe4

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