Gehen Sie im Einfügemodus zum Zeilenanfang

83

Ich weiß, dass ich entweder verwenden kann:

  1. Home im Einfügemodus
  2. Esc+ i, um den Einfügemodus zu verlassen und ihn erneut aufzurufen und effektiv zum Zeilenanfang zu gelangen.

Aber keiner befriedigt mich. Im ersten Fall muss ich meinen Kopf neigen, um zu schlagen Home, weil ich ihn nicht blind schlagen kann. Im zweiten Fall muss mein linker Arm die Ausgangsreihe verlassen, um zu treffenEsc , was ebenfalls ärgerlich ist.

Irgendwelche Gedanken?

Valentin Vasilyev
quelle
5
Sie können 0 verwenden, um an den Zeilenanfang zu gelangen, dies ist jedoch nicht im Einfügemodus.
Manku
3
Und wenn Sie feststellen, dass Esc auch zu weit entfernt ist, können Sie stattdessen Strg- [[:) :)
3
Oder besser, Strg-C funktioniert wie Esc. Oder noch besser: Ordnen Sie die Feststelltaste Esc zu.
Eric Wilson
4
@manku du hast seine Frage nicht so sehr beantwortet, als dass du seine Frage nicht beantwortet hast = P
puk
remap esc to jj du musst viel zwischen den Modi
wechseln

Antworten:

147

Ctrl+ OIm Einfügemodus gelangen Sie nur für einen Tastendruck in den Befehlsmodus. Deshalb sollte Ctrl+ Odann Shift+ Idas erreichen, wonach Sie suchen.

Greg Sexton
quelle
Sie können dasselbe erreichen, indem Sie Strg + c, I oder Strg + [, I drücken. Strg + c ähnelt funktional ESC und Strg + [entspricht ESC.
sml
42
Oder Ctrl-ogefolgt von 0(etwas effizienter als Ctrl-ogefolgt von Shift-I), da Sie automatisch wieder in den Einfügemodus zurückkehren. In einigen Fällen ist es möglicherweise besser , Ctrl-ogefolgt von ^(zum ersten Nicht-Leerzeichen der Zeile zu wechseln).
Jeet
2
Sie können Alt-A oder Alt-I im Einfügemodus verwenden, wenn Ihre Alt-Taste Escape sendet (kann in iTerm2 konfiguriert werden)
Rivenfall
2
<C-O>ist nicht dasselbe wie <C-[>oder <Esc>obwohl sie gleich aussehen können. Der Unterschied besteht darin, dass bei einer Bearbeitung mit einem regulären Escapezeichen + <etwas, das Sie wieder in den Einfügemodus versetzt> zwei Änderungen vorgenommen werden, während bei <CO> eine Änderung verbleibt. Auf diese Weise können Sie einen saubereren Rückgängigmachungsverlauf aufrechterhalten und diesen Einsatz zum Einfügen wiederverwenden. Einige Vim'er werden argumentieren, dass Sie auf solche Dinge achten sollten.
Nicolai S
Ich verstehe nicht. Sowohl unter Linux als auch unter Mac OS X funktioniert Strg + O nicht. Wenn ich jedoch die ESCAPE-Taste drücke, wechselt sie in den Befehlsmodus und wechselt dann + I.
Donato
51

Sie können den Einfügemodus mit aufrufen I (Großbuchstaben i) aufrufen.

Der Cursor wird an den Zeilenanfang gesetzt.

Ebenso können Sie verwenden A am Ende der Zeile etwas hinzufügen.

Das Problem des Bewegens im Einfügemodus wird jedoch nicht wirklich gelöst.

Ich habe gerade die Hilfe im Einfügemodus überprüft. Im Einfügemodus gibt es keine Tastenkombination, um sich am Zeilenanfang zu bewegen.

Andere Idee: Ordnen Sie einen neuen Befehl nur im Einfügemodus neu zu

inoremap <C-i> <Home>

Xavier T.
quelle
1
T. <kbd> I </ kbd> funktioniert einwandfrei, aber ich suche nach einer Lösung, um an den Zeilenanfang zu gelangen, während ich mich bereits im Einfügemodus befinde.
Valentin Vasilyev
Dies beantwortet die Frage nicht direkt, bietet jedoch Funktionen, die die Fragen für die meisten Menschen wahrscheinlich vorwegnehmen.
Joe Coder
24

Ich habe Strg + a und Strg + e auf den Anfang bzw. das Ende der Zeile abgebildet. Dies entspricht dem Verhalten der meisten Bash-Befehlszeilen. Funktioniert gut für mich.

inoremap <C-e> <Esc>A
inoremap <C-a> <Esc>I
Jonathan Cutrell
quelle
Wenn ich mich nicht irre, sind dies auch die Tastenkombinationen für die meisten anderen Editoren. Ich werde diese meiner vimrc-Datei hinzufügen.
Aaron
2
Dies sind übliche Emacs-Verhaltensweisen. Die meisten Browser unterstützen diese auch in verschiedenen Arten von Textfeldern. Ich denke nicht, dass dies eine schlechte Idee ist, aber Folgendes verpassen Sie: <C-e>Kopieren / Schreiben des Zeichens unter den Cursor ( <C-y>für Über-Cursor), <C-a>Einfügen von allem, was sich in Ihrem.-Register (Punktregister) befindet. Dieses Register wird mit allem gefüllt, was Sie gerade eingegeben haben, wenn Sie den Einfügemodus verlassen (auch wenn Sie Strg-C verwenden (woran Sie sich aus vielen Gründen nicht gewöhnen sollten).
Nicolai S
@ Jonathan Cutrell Wie kommst du zum Anfang einer neuen Zeile?
Sayth
3

Wenn Sie das MacOS Terminal verwenden, gehen Sie zu Einstellungen ...> Einstellungen> Tastatur und ordnen Sie die Endtaste Strg-O $ zu (sie wird als \ 017 $ angezeigt). Verwenden Sie dann fn + left, um die Endtaste zu simulieren. Machen Sie dasselbe für den Home-Schlüssel. Escape-Sequenz \ 033 [H funktioniert auch für zu Hause.

CommanderHK
quelle
1
fn-Links und fn-Rechts funktionierten standardmäßig für mich in vim auf dem Mac-Terminal
Jeff
0

Eine Abkürzung, die für mich funktioniert hat (sowohl Muskelgedächtnis als auch Intuitivität), ist das Zuordnen __(was ein Doppel ist _) zu "Einfügen am Anfang der aktuellen Zeile".

Begründung:

  • _ geht schon zum Zeilenanfang
  • in vim ist das Verdoppeln von irgendetwas eine sehr übliche Methode, um dies "mit dieser Linie" zu tun.
  • doppelt _ widerspricht keinen Bewegungen (Sie stehen bereits am Anfang der Zeile)
  • Ihre Hand ist bereits an der richtigen Stelle, wenn Sie an den Anfang der Zeile gegangen sind und jetzt einfügen möchten.

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>

Es ist so kompliziert, weil die einfache Alternative dazu führt, nnoremap __ _Idass vim beim Drücken verzögert _, um zwischen _und zu unterscheiden __.

Mahmoud Al-Qudsi
quelle
0
ctrl+o then 0
     |      |
  letter  number
MetalGodwin
quelle
0

Ich benutze diesen Befehl, um zum Zeilenende zu gelangen, ohne den Einfügemodus zu verlassen

inoremap jl <esc><S-a>

Ähnlich geht es zum Zeilenanfang:

inoremap jl <esc><S-i>
Rajat Negi
quelle