358 Stimmen

Durchlaufen von Text im Einfügemodus

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

Wenn ich drücke h , j , k y l im Einfügemodus werden die tatsächlichen Zeichen auf dem Bildschirm gedruckt, anstatt sich durch den Text zu bewegen.

Im Moment muss ich auf folgende Methoden zurückgreifen Ctrl + [ ( Esc ) und dann den Text zu durchlaufen; aber das ist natürlich nicht produktiv.

713voto

P Shved Punkte 90784

Es mag zwar sinnvoll sein, dass Sie die Möglichkeit haben sollten, die h j k l Tasten, um den Editor im Einfügemodus zu durchlaufen, aber das ist eigentlich nicht die Art, wie Vim benutzt werden soll! Es gibt viele Befehle, die Vim zur Verfügung stellt, um das Editieren schneller zu machen und einfacher.

Der richtige Weg es zu drücken Esc gehen Sie dorthin, wo Sie eine kleine Korrektur vornehmen wollen, korrigieren Sie sie, gehen Sie zurück und bearbeiten Sie weiter. Es ist effektiv, weil Vim viel mehr Bewegungen als die üblichen Zeichen vorwärts/rückwärts/oben/unten hat. Wenn Sie mehr davon gelernt haben, wird dies produktiver sein.

Hier sind ein paar Anwendungsfälle:

  • Sie haben versehentlich "accifentally" geschrieben. Kein Problem, die Reihenfolge EscFfrdA korrigiert den Fehler und bringt Sie an die Stelle zurück, an der Sie den Text bearbeitet haben. Die Website Ff bewegen Sie den Cursor rückwärts bis zum ersten "f"-Zeichen. Vergleichen Sie das mit Ctrl + DeldEnd die in einem einfachen Editor praktisch dasselbe tut, aber mehr Tastenanschläge erfordert und Sie dazu zwingt, die Hand aus dem alphanumerischen Bereich der Tastatur zu nehmen.
  • Sie haben versehentlich "Sie haben versehentlich getippt" getippt, wollen es aber in "Sie haben absichtlich getippt" korrigieren. Dann Esc2bcw löscht das zu korrigierende Wort und bringt Sie in den Einfügemodus, so dass Sie es sofort neu schreiben können. Um zur Bearbeitung zurückzukehren, drücken Sie einfach A 代わりに End so dass Sie Ihre Hand nicht bewegen müssen, um die Taste zu erreichen. End Schlüssel.
  • Sie haben versehentlich "Maus" statt "Mäuse" getippt. Kein Problem - die 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 korrigieren. Ich habe mich so daran gewöhnt, dass ich die Browserseite geschlossen hatte, als ich diese Nachricht tippte...!
  • Die Anzahl der Wiederholungen wird weitgehend nicht genutzt. Bevor Sie eine Bewegung ausführen, können Sie eine Zahl eingeben; die Bewegung wird dann so oft wiederholt. Zum Beispiel, 15h bringt den Cursor 15 Zeichen zurück und 4j bewegt den Cursor 4 Zeilen nach unten. Fangen Sie an, sie zu benutzen, und Sie werden sich bald daran gewöhnen. Wenn Sie zehn Zeichen hinter dem Cursor einen Fehler gemacht haben, werden Sie feststellen, dass Sie mit der Taste Taste 10 Mal zu drücken, ist viel langsamer als der iterative Ansatz zum Bewegen des Cursors. Daher können Sie stattdessen schnell die folgenden Tasten eingeben 12h (als grobe Schätzung, wie viele Zeichen zurück Sie den Cursor bewegen müssen), und bewegen Sie sich sofort zweimal vorwärts mit ll um den Fehler schnell zu korrigieren.

Aber, wenn Sie immer noch kleine Textdurchläufe durchführen möchten, ohne den Einfügemodus zu verlassen, folgen Sie rson 's Beratung und verwenden Ctrl + O . Nehmen wir das erste Beispiel, das ich oben erwähnt habe, Ctrl + OFf springt zu einem vorherigen "f"-Zeichen und lässt Sie im Einfügemodus.

188voto

Chris Sattinger Punkte 4017

Während in Einfügemodus verwenden CtrlO zu gehen, um Normalmodus für nur einen Befehl:

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

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

Weitere 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.

95voto

Aaron Thoma Punkte 3462

Einfügemodus

Bewegung

hjkl

Ungeachtet dessen, was Pavel Shved sagte - dass es wahrscheinlich ratsamer ist, sich an die Esc Einfügemodus - hier ist 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

Dadurch wird Alt + h im Einfügemodus ein Zeichen nach links gehen, Alt + j nach unten und so weiter, analog zu hjkl im Normalmodus.

Sie müssen diesen Code in Ihre vimrc-Datei kopieren, damit er jedes Mal geladen wird, wenn Sie vim starten (Sie können die Datei öffnen, indem Sie :new $myvimrc beginnend im Normalmodus).

Alle Bewegungen im Normalmodus

Da die Alt Modifikatortaste nicht standardmäßig (auf etwas Wichtiges) zugewiesen ist, können Sie auf die gleiche Weise andere (oder alle) Funktionen vom Normalmodus in den Einfügemodus ziehen. Z.B.:
Verschieben an den Anfang des aktuellen Wortes mit Alt + b :

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

(Andere Verwendungen von Alt im Modus Einfügen)

Es ist erwähnenswert, dass es möglicherweise bessere Verwendungsmöglichkeiten für die Alt als das Verhalten im Normalmodus zu replizieren: z.B. gibt es hier Zuordnungen für das Kopieren des Teils 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, um die Übersichtlichkeit zu erhöhen. Die Befehle werden so interpretiert, als wären sie in einer einzigen Zeile geschrieben).

Integrierte Hotkeys für die Bearbeitung

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 gibt keine nennenswerten integrierten Hotkeys für die Bewegung im Einfügemodus).

Referenz: :help insert-index


Befehlszeilenmodus

Dieser Satz von Zuordnungen macht die 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 dazu fügen diese Zuordnungen die Bewegungen sowohl im Einfügemodus als auch im Befehlszeilenmodus auf einen Schlag:

" 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 Mapping-Befehle für Ziehen von Befehlen aus dem Normalmodus in den Befehlszeilenmodus sehen etwas anders aus als die Mapping-Befehle im Einfügemodus (weil im Befehlszeilenmodus die Funktionen des Einfügemodus fehlen). 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>'

Integrierte Hotkeys für Bewegung und Bearbeitung

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

31voto

Shyam Habarakada Punkte 14267

Wenn Sie ein Vim-Purist sind, lesen Sie diese Antwort nicht. OTOH, wenn Sie neu in 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... :-)

Ein paar unorthodoxe (vim) Wege

Wir schreiben das Jahr 2014, und als jemand, der seit Kurzem wieder zu vim Ich kann Ihnen einige, möglicherweise konträre, Standpunkte und Tipps geben.

Verwenden Sie Umschalt+Links oder Umschalt+Rechts, um durch Wörter zu gehen.

Obwohl die Wiederholung ein mächtiges Konzept in vim ist, finde ich (persönlich) es seltsam, dass ihre Verwendung mich entweder zum Zählen (Zeilen, Zeichen, Wörter usw.) oder zum Raten zwingt. Mein Gehirn arbeitet normalerweise nach dem Motto "Ich will den Cursor dort " und nicht wie "Ich möchte den Cursor _5_Wörter_nach_links_". Dadurch, dass ich den Cursor schnell bewegen und visuell beobachten kann, wo die Einfügemarke liegt, kann ich mich auf das konzentrieren, was ich gerade bearbeite, anstatt zu zählen, wie viele Sprünge ich machen muss, um an die Stelle zu kommen, die ich bearbeiten muss.

Schalten Sie den Mausmodus ein, und verwenden Sie das Mausrad und das Klicken

...um in großen Textmengen zu navigieren.

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

Als Bonus können Sie durch Klicken und Ziehen in den visuellen Modus wechseln.

Wenn die Maus aktiviert ist, wird durch Klicken und Ziehen in den visuellen Modus umgeschaltet und ein Bereich zum Ziehen markiert.

Und benutzen Sie das Scrollrad

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

Und so...

Dies sind, wie ich es nennen würde, modernere (mit Maus, Scrollrad, etc.) Wege der Navigation in vim, die je nach bevorzugter Eingabe gleich effektiv sind.

HTH

14voto

everett1992 Punkte 2118

Viele Leute in der Vim-Gemeinschaft argumentieren, dass Sie nicht im Einfügemodus navigieren sollten, dass dies nicht der Weg von Vim ist. Ich denke, das ist eine falsche Einstellung, die man beim Übergang von Standard-Editoren zu Vim gelernt hat.

Vim ist am mächtigsten, wenn Sie seine Werkzeuge benutzen, um atomare, wiederholbare Aktionen oder Funde zu erzeugen.

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

Wenn Sie bei der Texteingabe einen Fehler machen und den Einfügemodus verlassen, um ihn zu korrigieren, können Sie die beabsichtigte Aktion nicht wiederholen, . wird die Korrektur wiederholt.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X