挿入モードで行頭に移動する


83

私は次のいずれかを使用できることを知っています:

  1. Home 挿入モード
  2. Esc+i挿入モードを終了して再度入力し、事実上行頭に移動します。

しかし、どちらも私を満足させません。最初のケースでは、Homeやみくもに打つことができないので、打つために頭を傾ける必要があります。2番目のケースでは、左腕がホームローを離れてヒットEscする必要がありますが、これも面倒です。

何かご意見は?


5
0を使用して行の先頭に移動できますが、挿入モードではありません。
manku 2011

3
また、Escも遠い場合は、代わりにCtrl- [を使用できます:)

3
または、Ctrl-CはEscのように機能します。またはさらに良いことに、CapsLockをEscにマップします。
エリックウィルソン

4
@mankuあなたは彼の質問に答えなかったので、彼の質問にはあまり答えませんでした= P
puk 2011

escをjjに再マップすると、vimでモードを大幅に切り替える必要があります
kapil 2017

回答:


149

Ctrl+O挿入モードでは、キーを1回押すだけでコマンドモードになります。したがって、Ctrl+O次にShift+Iはあなたが探していることを達成するはずです。


Ctrl + c、IまたはCtrl + [、Iを押すことで同じことを達成できます。Ctrl+ cは機能的にESCに似ており、Ctrl + [はESCと同等です。
sml 2011

42
またはCtrl-o続く0(少し、より効率的よりCtrl-o続くShift-I)、あなたが挿入モードに戻ってくるように自動的に。場合によっては、Ctrl-oその後に^続ける方がよい場合 があります(行の最初の非空白文字に移動するため)。
Jeet 2011

2
Altキーがエスケープを送信する場合は、挿入モードでAlt-AまたはAlt-Iを使用できます(iTerm2で構成できます)
Rivenfall 2015

2
<C-O>と同じではない<C-[><Esc>、似ているかもしれませんが。違いは、通常のエスケープを使用した編集+ <挿入モードに戻すための何か>では2つの編集が残り、<CO>では1つの編集が残ります。これにより、元に戻す履歴をよりクリーンに維持し、その挿入を再利用して貼り付けることができます。一部のvim'ersは、そのようなものに注意を払うべきだと主張するでしょう。
ニコライS

わかりません。LinuxとMacOSXの両方で、ctrl + Oは機能しません。しかし、ESCAPEキーを押すと、コマンドモードになり、Shift + Iが機能します。
Donato

51

I(大文字のi)を使用して挿入モードに入ることができます。

行の先頭にカーソルを置きます。

同様にあなたは使用することができます Aに、行の最後に何かを追加。

ただし、すでに挿入モードになっているときに移動する問題は実際には解決されません。

挿入モードのヘルプを確認しましたが、挿入モードで行の先頭に移動するためのキーの組み合わせがありません。

その他のアイデア:挿入モードでのみ新しいコマンドを再マップする

inoremap <C-i> <Home>


1
T. <kbd> I </ kbd>は正常に機能しますが、すでに挿入モードになっているときに行の先頭に移動するための解決策を探しています。
Valentin Vasilyev 2011

これは質問に直接答えることはありませんが、おそらくほとんどの人にとって質問を先取りする機能を提供します。
Joe Coder 2017年

24

Ctrl + aとCtrl + eをそれぞれ行頭と行末にマップしました。これは、ほとんどのbashコマンドラインの動作と一致します。私にとってはうまくいきます。

inoremap <C-e> <Esc>A
inoremap <C-a> <Esc>I

私が間違っていなければ、これらは他のほとんどのエディターにとってもキーバインディングです。これらをvimrcファイルに追加します。
アーロン

2
これらは通常のEmacsの動作です。ほとんどのブラウザは、さまざまなタイプのテキストフィールドでもこれらをサポートしています。これは悪い考えではないと思いますが、見逃しているのは次のとおりです。<C-e>カーソルの下の文字をコピー/書き込み(<C-y>カーソルの上)、<C-a>.- register(dot-register)にあるものは何でも挿入します。そのレジスタは、挿入モードを終了すると(Ctrl-cを使用している場合でも(多くの理由で慣れてはいけません))、入力した内容でいっぱいになります。
ニコライS

@JonathanCutrellどのようにして改行の先頭に移動しますか。
2016

3

MacOSターミナルを使用している場合は、[設定...]> [設定]> [キーボード]に移動し、終了キーをCtrl-O $(\ 017 $として表示)にマップしてから、fn + leftを使用して終了キーをシミュレートします。ホームキーについても同じようにします。エスケープシーケンス\ 033 [Hは自宅でも機能します。


1
fn-Leftとfn-Rightは、Macターミナルのvimでデフォルトで機能しました
Jeff



0

私のために働いたショートカット(筋肉の記憶と直感性の両方)は、マップすることです__(これは二重です_、「現在の行の先頭に挿入」)。

理論的根拠:

  • _ すでに行頭に行く
  • vimでは、何かを2倍にすることは、「この行に対して」それを行う非常に一般的な方法です。
  • ダブル _はどのモーションとも競合しません(すでに行の先頭にいます)
  • 行の先頭に移動して挿入したい場合は、手はすでに正しい場所にあります。

vimscript:

"insert at start of current line by typing in __ (two underscores)
function DoubleUnderscore()
    if v:count == 0 && getcurpos()[2] == 1
        :silent call feedkeys('I', 'n')
    else
        :silent call feedkeys('^', v:count + 'n')
    endif
endfunction
nnoremap <silent> _ :call DoubleUnderscore()<CR>

簡単な代替ので、それはこの複雑だnnoremap __ _I原因は押しに遅らせるためにVIM_を区別する___



0

このコマンドを使用して、挿入モードを終了せずに行末に移動します

inoremap jl <esc><S-a>

同様に、行頭に移動すると次のようになります。

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