it-swarm.com.de

Text im Einfügemodus durchlaufen

Gibt es in Einfügemodus in Vim eine Möglichkeit, den Text zu durchlaufen, indem einige Zeichen vorwärts und rückwärts bewegt werden, außer mit den Pfeiltasten?

Wenn ich drücke hjk und l Im Einfügemodus werden die tatsächlichen Zeichen auf dem Bildschirm gedruckt, anstatt sich durch den Text zu bewegen.

So wie ich es im Moment mache, muss ich zurückgreifen Ctrl + [ (Esc) und dann den Text durchlaufen; aber offensichtlich ist das nicht produktiv.

302
Andreas Grech

Sie scheinen vim zu missbrauchen, aber das liegt wahrscheinlich daran, dass Sie damit nicht sehr vertraut sind.

Der richtige Weg ist zu drücken Esc, gehen Sie dorthin, wo Sie eine kleine Korrektur vornehmen möchten, korrigieren Sie sie, gehen Sie zurück und bearbeiten Sie sie weiter. Es ist effektiv, weil Vim viel mehr Bewegungen hat als übliche Charaktere vorwärts/rückwärts/auf/ab. Nachdem Sie mehr von ihnen gelernt haben, wird dies produktiver sein.

Hier sind einige Anwendungsfälle:

  • Sie haben versehentlich "versehentlich" getippt. Kein Problem, die Reihenfolge EscFfrdA korrigiert den Fehler und bringt Sie zurück zu Ihrem Bearbeitungsort. Das Ff Bewegung bewegt den Cursor rückwärts zum ersten gefundenen "f" -Zeichen. Vergleichen Sie das mit Ctrl+DeldEndDies funktioniert in einem normalen Editor praktisch genauso, erfordert jedoch mehr Tastenanschläge und führt dazu, dass Sie Ihre Hand aus dem alphanumerischen Bereich der Tastatur herausbewegen.
  • Sie haben versehentlich "Sie haben versehentlich getippt", möchten es aber zu "Sie haben absichtlich getippt" korrigieren. Dann Esc2bcw löscht das zu reparierende Wort und bringt Sie in den Einfügemodus, sodass Sie es sofort erneut eingeben können. Um zur Bearbeitung zurückzukehren, drücken Sie einfach A anstatt End, so müssen Sie nicht Ihre Hand bewegen, um die zu erreichen End Schlüssel.
  • Sie haben versehentlich "mouse" anstelle von "mice" eingegeben. Kein Problem - der gute alte Ctrl+w löscht das vorherige Wort, ohne den Einfügemodus zu verlassen. Und es ist viel schneller, ein kleines Wort zu löschen, als Fehler darin zu beheben. Ich bin so daran gewöhnt, dass ich die Browserseite geschlossen hatte, als ich diese Nachricht getippt habe ...!
  • Die Anzahl der Wiederholungen wird weitgehend unterschätzt. Bevor Sie eine Bewegung ausführen, können Sie eine Zahl eingeben. und die Bewegung wird so oft wiederholt. Zum Beispiel, 15h Bringt den Cursor 15 Zeichen zurück und 4j Bewegt den Cursor 4 Zeilen nach unten. Beginnen Sie damit und Sie werden sich bald daran gewöhnen. Wenn Sie zehn Zeichen vor dem Cursor einen Fehler gemacht haben, stellen Sie fest, dass Sie die Taste drücken  Zehnmaliges Drücken ist viel langsamer als das iterative Bewegen des Cursors. So können Sie stattdessen schnell die Schlüssel eingeben 12h (grob gesagt, wie viele Zeichen Sie zurücksetzen müssen, um den Cursor zu bewegen), und bewegen Sie sich sofort zweimal mit ll um den Fehler schnell zu beheben.

Wenn Sie jedoch noch kleine Textdurchläufe ausführen möchten, ohne den Einfügemodus zu verlassen, befolgen Sie die rsonHinweise) und verwenden Ctrl+O. Nehmen wir das erste Beispiel, das ich oben erwähnte, Ctrl+OFf Bewegt Sie zu einem vorherigen "f" -Zeichen und lässt Sie im Einfügemodus.

607
P Shved

Verwenden Sie im Einfügemodus CtrlO um zu normaler Modus für nur einen Befehl zu gehen:

CTRL-O h  move cursor left 
CTRL-O l  move cursor right
CTRL-O j  move cursor down
CTRL-O k  move cursor up

dies ist wahrscheinlich der einfachste Weg, um das zu tun, was Sie wollen, und ist leicht zu merken.

Andere sehr nützliche Steuertasten im Einfügemodus:

CTRL-W    delete Word to the left of cursor
CTRL-O D  delete everything to the right of cursor
CTRL-U    delete everything to the left of cursor
CTRL-H    backspace/delete
CTRL-J    insert newline (easier than reaching for the return key)
CTRL-T    indent current line
CTRL-D    un-indent current line

dadurch werden viele unnötige Umschaltungen in den normalen Modus vermieden.

125
felix

Einfügemodus

Bewegung

hjkl

Ungeachtet dessen, was Pavel Shved sagte , ist es wahrscheinlich ratsamer, sich daran zu gewöhnen Escaping-Einfügemodus - hier ein Beispielsatz von Zuordnungen für die schnelle Navigation im Einfügemodus:

" provide hjkl movements in Insert mode via the <Alt> modifier key
inoremap <A-h> <C-o>h
inoremap <A-j> <C-o>j
inoremap <A-k> <C-o>k
inoremap <A-l> <C-o>l

Das wird machen Alt+h Im Einfügemodus bleibt ein Zeichen übrig. Alt+j runter und so weiter, analog zu hjkl im normalen Modus.

Sie müssen diesen Code in Ihre vimrc-Datei kopieren, damit er bei jedem Start von vim geladen wird (Sie können ihn öffnen, indem Sie im normalen Modus :new $myvimrc eingeben).


Alle Bewegungen im Normalmodus

Seit der Alt Die Änderungstaste ist standardmäßig nicht (auf etwas Wichtiges) zugeordnet. Sie können auf dieselbe Weise andere (oder alle) Funktionen vom normalen Modus in den Einfügemodus ziehen. Z.B.:
Mit an den Anfang des aktuellen Wortes springen Alt+b:

inoremap <A-b> <C-o>b
inoremap <A-w> <C-o>w


(Andere Verwendungen von Alt im Einfügemodus)

Es ist erwähnenswert, dass es möglicherweise bessere Verwendungen für die Alt Schlüssel als das Replizieren des Normalmodusverhaltens: z.B. Hier sind Zuordnungen zum Kopieren des Abschnitts von der aktuellen Spalte bis zum Ende der Zeile aus einer benachbarten Zeile:

" Insert the rest of the line below the cursor.
" Mnemonic: Elevate characters from below line
inoremap <A-e> 
    \<Esc>
    \jl
        \y$
    \hk
        \p
        \a
" Insert the rest of the line above the cursor.
" Mnemonic:  Y depicts a funnel, through which the above line's characters pour onto the current line.
inoremap <A-y> 
    \<Esc>
    \kl
        \y$
    \hj
        \p
        \a

(Ich habe \Zeilenfortsetzung und Einrückung verwendet, um die Übersichtlichkeit zu erhöhen. Die Befehle werden so interpretiert, als ob sie in einer einzelnen Zeile geschrieben wären.)


Eingebaute Hotkeys zum Bearbeiten

CTRL-H   delete the character  in front of the cursor (same as <Backspace>)
CTRL-W   delete the Word       in front of the cursor
CTRL-U   delete all characters in front of the cursor (influenced by the 'backspace' option)

(Es sind keine bemerkenswerten Hotkeys für das Verschieben im Einfügemodus integriert.)

Referenz: :help insert-index


Befehlszeilenmodus

Dieser Satz von Zuordnungen macht das Obere Alt+hjkl  Bewegungen in der Befehlszeile verfügbar:

" provide hjkl movements in Command-line mode via the <Alt> modifier key
cnoremap <A-h> <Left>
cnoremap <A-j> <Down>
cnoremap <A-k> <Up>
cnoremap <A-l> <Right>

Alternativ fügen diese Zuordnungen die Bewegungen gleichzeitig zum Einfügemodus und zum Befehlszeilenmodus hinzu:

" provide hjkl movements in Insert mode and Command-line mode via the <Alt> modifier key
noremap! <A-h> <Left>
noremap! <A-j> <Down>
noremap! <A-k> <Up>
noremap! <A-l> <Right>


Die Zuordnungsbefehle zum Abrufen von Befehlen im normalen Modus in den Befehlszeilenmodus unterscheiden sich ein wenig von den Zuordnungsbefehlen im Einfügemodus (da Befehls- Im Zeilenmodus fehlen die Einfügemodi Ctrl+O):

" Normal mode command(s) go… --v <-- here
cnoremap <expr> <A-h> &cedit. 'h' .'<C-c>'
cnoremap <expr> <A-j> &cedit. 'j' .'<C-c>'
cnoremap <expr> <A-k> &cedit. 'k' .'<C-c>'
cnoremap <expr> <A-l> &cedit. 'l' .'<C-c>'

cnoremap <expr> <A-b> &cedit. 'b' .'<C-c>'
cnoremap <expr> <A-w> &cedit. 'w' .'<C-c>'


Eingebaute Hotkeys zum Verschieben und Bearbeiten

CTRL-B       cursor to beginning of command-line
CTRL-E       cursor to end       of command-line

CTRL-F       opens the command-line window (unless a different key is specified in 'cedit')

CTRL-H       delete the character  in front of the cursor (same as <Backspace>)
CTRL-W       delete the Word       in front of the cursor
CTRL-U       delete all characters in front of the cursor

CTRL-P       recall previous command-line from history (that matches pattern in front of the cursor)
CTRL-N       recall next     command-line from history (that matches pattern in front of the cursor)
<Up>         recall previous command-line from history (that matches pattern in front of the cursor)
<Down>       recall next     command-line from history (that matches pattern in front of the cursor)
<S-Up>       recall previous command-line from history
<S-Down>     recall next     command-line from history
<PageUp>     recall previous command-line from history
<PageDown>   recall next     command-line from history

<S-Left>     cursor one Word left
<C-Left>     cursor one Word left
<S-Right>    cursor one Word right
<C-Right>    cursor one Word right

<LeftMouse>  cursor at mouse click

Referenz: :help ex-edit-index

89
Aaron Thoma

Wenn Sie ein Vim-Purist sind, überspringen Sie diese Antwort. OTOH, wenn Sie neu bei Vim sind und nach ein paar hilfreichen Tipps suchen, die Sie in den vielen hundert VIM-Tutorials und Blogs nicht finden werden, lesen Sie weiter ...: -)

Einige unorthodoxe (vim) Wege

Es ist 2014, und als jemand, der kürzlich zu vim zurückgekehrt ist, kann ich ein paar potenziell konträre Ansichten und Tipps anbieten.

Verwenden Sie Shift + Left oder Shift + Right, um Wörter zu durchlaufen

Während Wiederholung in vim ein mächtiges Konzept ist, finde ich es (persönlich) merkwürdig, dass ich entweder gezwungen bin zu zählen (Linien, Zeichen, Wörter usw.) oder Vermutungen anzustellen. Mein Gehirn arbeitet normalerweise wie "Ich will den Cursor dort" und nicht wie "Ich will den Cursor _5_words_to_the_left_". Ich kann schnell den Cursor bewegen und visuell beobachten, wo die Einfügemarke auf diese Weise liegt. So kann ich mich auf das konzentrieren, was ich bearbeite, anstatt zu zählen, wie viele Sprünge ich machen muss, um dorthin zu gelangen, wo ich editieren muss. 

Aktivieren Sie den Mausmodus, und klicken Sie mit dem Mausrad

... um durch große Textkörper zu navigieren.

Die meisten (alle) modernen Computer haben ein Touchpad, das eng in die Tastatur (z. B. MacBooks) integriert ist. Industriedesigner haben viele Jahre damit verbracht, diese Designs so zu optimieren, dass das alte Problem, die Hand von der Tastatur weg bewegen zu müssen, kein echtes Problem mehr ist. Okay, es ist, wenn Sie an eine Maus gewöhnt sind und nicht gerne wechseln, aber für alle, die neu bei vim sind (wie diejenigen, die diesen Beitrag über eine Suche finden könnten), sollte dies kein großes Problem sein.

Als Bonus wird durch Klicken + Ziehen der visuelle Modus aktiviert

Wenn die Maus aktiviert ist, wird durch Klicken und Ziehen in den visuellen Modus gewechselt und ein Bereich für das Ziehen markiert.

Und benutzen Sie das Scrollrad

Wenn Sie mit der Maus (Rad) blättern und klicken, um den Cursor (duh) zu positionieren, funktioniert dies einfach. Siehe http://usevim.com/2012/05/16/mouse/ für mehr darüber.

Und so...

Dies sind, was ich als modernere (mit der Maus, dem Scrollrad usw.) bezeichnete Navigationsweise in vim bezeichnen würde, die ebenfalls effektiv ist, je nach den von Ihnen bevorzugten Eingaben.

HTH

22

Viele Leute in der Vim-Community argumentieren, dass Sie nicht im Einfügemodus navigieren sollten, dass dies nicht der Vim-Weg ist. Ich denke, dass dies ein falsches Gefühl ist, wenn man von einem Standardeditor zu Vim wechselt.

Vim ist am leistungsfähigsten, wenn Sie mit seinen Werkzeugen atomare, wiederholbare Aktionen oder Suchvorgänge erstellen.

Es ist in Ordnung, im Einfügemodus zu navigieren, wenn Sie einen Fehler korrigieren, den Sie in derselben Einfügesitzung gemacht haben. Sie sollten nicht außerhalb des von Ihnen geänderten Textbereichs navigieren.

Wenn Sie bei der Texteingabe einen Fehler machen und den Insert-Modus verlassen, um den Fehler zu beheben, können Sie die beabsichtigte Aktion nicht wiederholen. . wird die Korrektur wiederholen.

Vim unterstützt viele Navigationstasten im Einfügemodus. Offensichtlich gibt es die Pfeiltasten, Home und Ende, aber es gibt auch viele andere Tastenkombinationen. Siehe :h ins-special-keys.

14
everett1992

Um eine bessere Navigation im Einfügemodus zu erzielen, sollten Sie einige Tasten zuordnen.

imap <C-b> <Left>
imap <C-f> <Right>
imap <C-e> <End>
imap <C-a> <Home>
" <C-a> is used to repeat last entered text. Override it, if its not needed

Wenn Sie die Meta-Taste in Ihrem Terminal zum Laufen bringen können, können Sie den Emacs-Modus noch besser simulieren. Die Navigation im Normal-Modus ist viel besser, aber für kürzere Bewegungen hilft es, im Einfügemodus zu bleiben. 

Für längere Sprünge bevorzuge ich die folgende Standardübersetzung:

<Meta-b>    maps to     <Esc><C-left>

Dies wechselt zum Normal-Modus und führt ein Word zurück

4
Alex

In GVim können Sie die Maus verwenden. Aber was ist los mit den Pfeiltasten? Es gibt einen Grund, warum sie auf einer Tastatur sind.

4

Ich glaube Home und End (und PageUp/PageDn) funktionieren auch im Einfügemodus normal, aber abgesehen davon glaube ich nicht, dass andere Standardtasten für die Textdurchquerung definiert sind.

2
Amber

Sie können Zuordnungen erstellen, die im Einfügemodus funktionieren. Der Weg dazu ist über eine Inoremap. Beachten Sie das 'i' am Anfang des Befehls (noremap ist hilfreich, um Kollisionen mit Schlüsselkarten zu vermeiden). Die Folge ist "n" für den "normalen" Modus. Sie können ahnen, was Vim für "normal" hält;)

Sie möchten jedoch wirklich im Text im 'normalen' Modus navigieren. Vim ist bei dieser Art von Sachen super und all diese Kraft steht im Normalmodus zur Verfügung. Vim bietet bereits einfache Wege, um vom Normalmodus in den Einfügemodus zu gelangen (z. B. i, I, a, A, o, O). Der Trick besteht darin, es leicht zu machen, in den Normalmodus zu gelangen. Die Möglichkeit, dies zu tun, besteht darin, die Flucht auf einen bequemeren Schlüssel umzuwandeln. Aber Sie brauchen einen, der nicht mit Ihrem regulären Tippen in Konflikt steht. Ich benutze:

inoremap jj <Esc>

Da jj (das ist 2 j schnell hintereinander eingetippt) scheint in meinem Wortschatz nicht zu erscheinen. Andere werden wieder dort spielen, wo es bequem ist.

Die andere wesentliche Änderung, die ich vornehme, ist das Umschalten der Tasten CAPSLOCK und CONTROL auf meiner Tastatur (mithilfe der Tastaturkonfiguration des Host-Computers), da ich fast nie CAPSLOCK verwende und diese große, schöne Taste genau dort ist, wo ich sie haben möchte. (Dies ist für Emacs-Benutzer üblich. Der Nachteil ist, wenn Sie sich auf einer "nicht befestigten" Tastatur befinden! Aaarggh!)

Nachdem Sie CAPSLOCK neu zugeordnet haben, können Sie die folgenden Neuzuordnungen des Einfügemodus bequem verwenden:

Denken Sie daran, dass einige Schlüssel bereits im Einfügemodus zugeordnet sind (Rückwärts-Kill-Wort ist standardmäßig Cw (Control-w)). Möglicherweise verfügen Sie bereits über die gewünschten Bindungen. Das heißt, ich bevorzuge Ch in meiner .vimrc-Datei :

inoremap <C-h> <C-w>

ABER, Sie möchten wahrscheinlich den gleichen Muskelgedächtnis-Krampf im Normalmodus haben, so dass ich C-h auch als:

nnoremap <C-h> db

(d) elete (b) ackwards bewirkt dasselbe mit demselben Tastenakkord. Diese Art der schnellen Bearbeitung finde ich in der Praxis für Tippfehler hilfreich. Bleiben Sie jedoch im normalen Modus, um sich im Text zu bewegen und mehr als nur das vorherige Word zu töten. Sobald Sie sich daran gewöhnen, den Modus zu wechseln (natürlich mit einer Neuzuordnung), ist dies wesentlich effizienter als der Einfügungsmodus.

1
pfries

Für einige häufig verwendete Bewegungen und Aktionen habe ich die folgenden Zuordnungen definiert. Dies erspart einen Tastendruck im Vergleich zu der Kombination aus STRG + O. Da ich sie häufig benötige, macht sich der lange Lauf

inoremap <A-$> <C-o>$
inoremap <A-^> <C-o>^
inoremap <A-h> <Left>
inoremap <A-l> <Right>
inoremap <A-O> <C-O>O
inoremap <A-o> <C-o>o

Tut mir leid, aber vim funktionieren nicht so.

Sie sollten in den "normalen" Modus wechseln, navigieren und dann zum Einfügen zurückkehren.

0
Johan

Sie können imap verwenden, um eine beliebige Taste im Einfügemodus einer der Cursortasten zuzuordnen. Wie so:

imap h <Left>

Jetzt arbeitet h wie im normalen Modus und bewegt den Cursor. (H auf diese Weise abzubilden ist offensichtlich eine schlechte Wahl)

Allerdings denke ich nicht, dass die Standardmethode für das Bewegen im Text mit VIM "nicht produktiv" ist. Es gibt viele sehr leistungsfähige Möglichkeiten, den Text im normalen Modus zu durchlaufen (z. B. mit w und b oder/und? Oder f und F usw.).