"Benutze niemals Pfeiltasten in Vim!"
Ich hörte das von einem zufälligen Sprecher, hatte aber keine Gelegenheit, ihn zu fragen, warum. Wie können Sie den Cursor im Einfügemodus bewegen, wenn Sie die Pfeiltasten nicht verwenden ?
"Benutze niemals Pfeiltasten in Vim!"
Ich hörte das von einem zufälligen Sprecher, hatte aber keine Gelegenheit, ihn zu fragen, warum. Wie können Sie den Cursor im Einfügemodus bewegen, wenn Sie die Pfeiltasten nicht verwenden ?
Antworten:
Das Verwenden der Pfeiltasten wird als schlechte Angewohnheit angesehen, da Sie bei Verwendung der Pfeiltasten wahrscheinlich viele der schönen Funktionen von vim verpassen.
Wenn Benutzer vim zum ersten Mal verwenden, bleiben sie in der Regel im Einfügemodus, da dies eher der herkömmlichen Textbearbeitung ähnelt. Um in vim effektiv zu sein, sollten Sie sich jedoch nur dann im Einfügemodus befinden, wenn Sie tatsächlich Text eingeben. Wenn Sie den Cursor bewegen möchten, sollten Sie sich im normalen Modus befinden. Sie sollten sich standardmäßig so ziemlich im normalen Modus befinden.
Im normalen Modus gibt es eine Million Shortcuts zum Bewegen. Mit können Sie hjkl
sich jeweils um eine Stelle bewegen, oder Sie können sich nach Wörtern, Absätzen usw. bewegen. Wenn Sie sich im normalen Modus befinden, ist es sinnlos, die Pfeiltasten zu verwenden, anstatt dass hjkl
sie weiter entfernt sind.
Es gibt die Einstellung, dass, wenn Sie die Pfeiltasten verwenden, Sie vim "falsch" verwenden. Die Wahrheit ist, dass vim eine wirklich sehr steile Lernkurve hat, also tue, während du lernst, was auch immer dich gesund hält. Als ich anfing, vim zu benutzen, habe ich alles "falsch" gemacht und ich hatte keine Probleme damit, die Gewohnheiten zu brechen, als ich mehr von vims Befehlen gelernt hatte.
Als Beispiel, als ich anfing, sagte ich, ich wollte den Text in Anführungszeichen ändern:
String mystring = "I want to change this";
Ich würde in den Einfügemodus wechseln, mit den Pfeiltasten ans Ende der Zeichenfolge gehen, die Rücktaste drücken, bis die Zeichenfolge verschwunden ist, und den neuen Text eingeben.
Ein viel besserer Weg ist, den Cursor irgendwo in die Zeichenkette zu setzen (normaler Modus) und dann zu drücken ci". Das wird change
in
"
. Es löscht alles zwischen den Anführungszeichen und versetzt Sie in den Einfügemodus, damit ich den neuen Text eingeben kann.
ci<
und ci)
arbeiten auch, und Sie müssen Ihre Hand nicht von der Tastatur zur Maus bewegen. Wenn Sie zum Anfang der Klammern navigieren und dann den Inhalt ändern möchten, f(ci(
funktioniert das.
/want
Eingabetaste drücken, um auf dem Wort "wollen" zu landen, und dann tun ci"
.
hjkl
): Mapping up
und down
2 Tasten, die vertikal nicht voneinander zu unterscheiden sind, geschweige denn von den linken und rechten Tasten ..... es ist eine tragische Demonstration der ideologisch verblendeten Arroganz.
Kurz gesagt, Vim
verwendet die hjkl
Tasten als Navigationsoberfläche, da es ein Überbleibsel des alten "ADM-3A" -Terminals ist, das diese Tasten mit Pfeilen markiert hatte.
Da
vim
es von abgeleitet istvi
, werden die gleichen hjkl-Schlüssel verwendet.
Der buchstabenbasierte Ersatz für die Pfeiltasten ermöglicht es Ihnen, durch den Text zu navigieren, ohne die Standard-Schreibkonfiguration zu verlassen . Dies ist wahrscheinlich effizienter und schneller als das Drücken der Pfeiltasten mit der Hand. Wie in Referenz 2 (siehe Ressourcen) dargelegt, ist dies nicht das Ende der Vorteile: VIM verfügt über viele andere Verknüpfungen, auf die Sie zugreifen können, ohne die Hände zu bewegen.
Es gibt ein paar sehr detaillierte und genaue Antworten auf die beiden Teile Ihrer Frage: In Bezug auf den Austausch von Pfeiltasten habe ich schnell und zusammenfassend geantwortet. Für Ihre Einfügefrage lesen Sie bitte die unten aufgeführten Ressourcen.
hjkl
Funktioniert nicht im Einfügemodus. Wie ist die Antwort auf die Frage?
hjkl
in vim verwenden können, sagt nicht aus, warum jemand niemals Pfeiltasten verwenden sollte, ebenso wie die Tatsache, dass ich mit dem Fahrrad zur Arbeit fahren kann, nicht erklärt, warum jemand mir sagen würde, niemals zu joggen.
Dieses blöde Mantra wird oft von Berührungsschreibern wiederholt, für die die Ausgangsreihe wie eine zweite Wirbelsäule ist, oder von Nichtberührungsschreibern, die cool aussehen möchten. Für Nichtberührungsschreiber ist die Startreihe einfach nicht so besonders und ein leichtes Bewegen der rechten Hand zum Erreichen der Pfeile ist überhaupt kein Problem.
Was zu berücksichtigen ist, ist, was die Leute, die dieses Mantra wiederholen, vorschlagen, stattdessen zu verwenden.
Die meiste Zeit bestehen sie auf die Verwendung hjkl
.
Wenn wir die Tatsache auslassen, dass diese Tasten nur verwendet werden, weil die vom Autor von vi verwendete Tastatur keine physischen Pfeiltasten hatte und daher jedes Argument gegen die Pfeiltasten nur eine Rationalisierung ist, hjkl
sind sie ohnehin nur unwesentlich besser als die Pfeile. Ja, der einzige Vorteil der Verwendung hjkl
über den Pfeilen besteht darin, dass Sie diese kleine Bewegung der rechten Hand von und zu den Pfeilen überspringen. Ob dieser Vorteil die Mühe wert ist, ist Ihr Anruf.
Diese Bewegung der rechten Hand ist jedoch nicht der Grund, warum es ineffizient ist, nur die Pfeile zu verwenden. Dies ist ineffizient, da Sie sich nicht zeichenweise und zeilenweise bewegen können, während die meisten Bewegungen, die zum Bearbeiten von Text erforderlich sind, einen viel größeren Bereich haben.
Dreizehnmaliges Hämmern des rechten Pfeils ist ineffizient und langweilig. Ist es so besser, den l
Schlüssel 13 Mal zu hämmern ? Nein, es ist genauso dumm.
Halten Sie den rechten Pfeil gedrückt, bis Sie Ihr Ziel erreichen. Dies ist weniger langweilig, aber fehleranfällig und fast so ineffizient wie 13 Treffer, da am Ende eine notwendige und nicht deterministische Verlangsamung eintritt. Ist es , dass besser zu halten l
Taste gedrückt? Nein natürlich nicht.
Zum Glück bieten die meisten GUI-Toolkits Kombinationen wie diese Ctrl+Right
, mit denen wir Wort für Wort wechseln oder zu EOL, zum nächsten Absatz oder was auch immer springen können. Mithilfe dieser Verknüpfungen können wir viel schneller und intelligenter navigieren als mit einzelnen Pfeilen. Haben wir das gleiche mit hjkl
? Nein, das machen wir nicht. Wir können eine Zählung verwenden, wenn wir wollen, aber wer möchte die Zeichen für jede Bewegung zählen? 14k
Mit Hilfe von zu tun relativenumber
ist toll, aber was ist mit horizontalen Bewegungen? Bei großen Bewegungen hjkl
sind sie eigentlich schlechter als Modifikatoren + Pfeile. Und rate was? Große Bewegungen sind das, was wir am meisten brauchen.
Aber wir Glück Bastarde sind, hat unsere bevorzugten Editor Dutzende von Bewegungen , die Kreise um sowohl die Pfeile laufen und hjkl
: bBeEwW/?*#{}()
und so weiter. Diese Befehle sind unermesslich mächtiger als hjkl
und zum größten Teil viel logischer und intuitiver, wenn Sie es gewohnt sind Ctrl+Right
und Freunde sind.
Das Umschalten von <Right><Right><Right><Right><Right><Right><Right><Right><Right>
auf lllllllll
oder sogar 9l
ist lächerlich sinnlos.
Das Umschalten von <Right><Right><Right><Right><Right><Right><Right><Right><Right>
auf <C-Right>
ist um ein Vielfaches besser. Von dort aus ist der Wechsel zu w
einfach und schnell. Keine Notwendigkeit für <nop>
Ihre Pfeile!
Wenn diese Befehle nützlicher, leistungsfähiger und intuitiver sind als hjkl
, warum bestehen dann so viele Blogger und Kommentatoren darauf, die Pfeile durch zu ersetzen hjkl
?
Ich habe. Keine Ahnung.
Fazit: hjkl
Platzieren Sie sich in unserem Werkzeuggürtel, denn wir müssen uns immer um 2 Zeichen oder Zeilen bewegen, aber es handelt sich meistens um den Baum, der den Wald verbirgt. Seien Sie vorsichtig mit Menschen, die gegen die Pfeile predigen: Was sie für Sie auf Lager haben, ist vielleicht überhaupt nicht besser.
hjkl
ist nutzlos, aber hjkl
nützlich.
Andere haben beschrieben, warum andere Wege zum Bewegen des Cursors bevorzugt werden, aber es wurde wenig gesagt, um die Frage zu beantworten, warum es als eine schlechte Idee angesehen wird, Pfeiltasten zu verwenden.
Ich denke, der Hauptgrund (und @Squeezy spielt etwas darauf an) ist, dass in den Tagen von Terminals wie dem VT100 Pfeiltasten eine Escape-Sequenz erzeugt haben , die vom laufenden Programm interpretiert wurde. (Da die Pfeiltasten in ASCII nicht dargestellt werden, muss die Eingabe der Pfeiltasten auf eine "spezielle" Art und Weise erfolgen.) Die Escape-Sequenz war in der Regel so ähnlich
ESC [ A
Dies hängt von den Eigenschaften Ihres Terminals, Ihrer Verbindung und Ihrem Cursormodus ab . Wenn Ihre Shell oder Ihr Programm nicht richtig für das Terminal konfiguriert wurden, würden sie die Escape-Sequenz nicht als Pfeiltaste verstehen.
Wenn ich mich an einem College über VT100-Terminals bei Ultrix anmeldete und im Einfügemodus einen Pfeil drückte, wurde ESC
dies als "Verlassen des Einfügemodus" [ A
interpretiert , und die folgenden Befehle wurden als Normalmodus-Befehle interpretiert . Offensichtlich nicht das, was der Benutzer will oder erwartet!
Heutzutage scheint die Handhabung von Terminals und Pfeiltasten robuster zu sein, insbesondere in GUI-Umgebungen. Bei der Verwendung von vim über SSH oder Telnet treten jedoch dieselben Probleme auf.
Das Verwenden der Pfeiltasten ist verpönt, da Sie bei Verwendung des QWERTZ-Layouts Ihre Finger aus der Startzeile und bei Verwendung von Dvorak oder einem anderen Layout aus dem Zeichenblock (?) Bewegen müssen.
Die Pfeiltasten weisen ein Problem auf - es war bereits bei langsamen Verbindungen bekannt, wie bei einem 1200-Baud-Modem. Der Pfeil entspricht einer ESC-Sequenz ESC a
. Wenn die Zeit zwischen ESC und a zu lang wird, hören Sie am Ende ein BEL (oder einen Blitz), gefolgt vom Anfügemodus. Dies wird bei den hjkl
Tasten nicht angezeigt.
ESC [ A
worauf beziehen Sie sich?
ESC [ A
ist ein DEC VT-100-Anschluss (der ANSI-Anschluss war stark vom DEC VT-100 abgeleitet). IIRC ESC A
war der ADM-3A-Pfeil oder möglicherweise der DEC VT-52-Pfeil. Der Punkt bleibt derselbe, jedoch wurde das ESC
als Teil der Pfeiltaste gesendete Zeichen leicht mit dem ESC
manuell eingegebenen verwechselt .
Zur zweiten Frage:
[I] Wenn Sie die Pfeiltasten nicht verwenden, wie können Sie den Cursor im Einfügemodus bewegen?
Für jemanden, der Meister ist und deshalb die Pfeiltasten verachtet, gibt es den Begriff "Modus" ebenfalls nicht.
Der Master ergänzt den Text nicht mit einem Insert - Modus, sondern vollständige Insert oder Ersatz Befehle , die mit einem Opcode beginnen wie i
, o
oder cw
dass durch Nutzlast Text gefolgt, und beendet durch ESC
. Befehle haben eine Syntax, so dass die Maschine durchläuft durch die Zustände in die Syntax von Befehlen zu akzeptieren, aber in dem Modell der Master des Editors, diese nicht auf einen Modus verursachen. Was die Auszubildenden naiv nennen „Modus“, ist mit dem Master ein unfertiges Befehlszustand, eine höchst abscheulich Situation , die der Meister vermeidet.
Immer wenn der Master feststellt, dass während eines Einfüge- oder Ersetzungsbefehls dieser Text eingefügt oder gelöscht werden muss, abgesehen von der nächsten vom Cursor angegebenen Zeichenposition, bricht der Master den Einfügebefehl ab und setzt eines der Dutzenden von effizienten Zeichen frei Bewegungsbefehle (auf das Niedrigste zurückgreifen, hjkl
wenn ein leistungsfähigerer Weg offensichtlich nicht anwendbar ist).
Da der Master selten so abgelenkt wird, dass ein Befehl nicht ausgeführt wird, gibt der Master selten, wenn überhaupt, einen Signalton aus, wenn ein überflüssiger ESC
"Nur für den Fall" eingegeben wird.
(Wenn jedoch das Netz zurückgeblieben ist oder die Maschine verzetteln, die Master - Pfund auf die ESC
Taste wütend und immer wieder, wie jeder andere auch.)
vi
der Befehlseingang zum Einfügen ein Modus ist, müssen wir, um fair zu sein, alle derartigen Modi in anderen Editoren identifizieren und sie als modal bezeichnen. Wenn wir zum Beispiel in Emacs Strg-X drücken, befinden wir uns in einem "Modus", in dem es zum Beispiel möglich ist, Strg-S zu drücken, um das Dokument zu speichern, was außerhalb dieses "Modus" nicht funktioniert.
Ja, aus vielen der oben genannten Gründe vi
wurde ursprünglich geschrieben, um zu verwenden hjkl
, aber " nie " ist eine ziemlich große Aussage.
Ich neige dazu, Änderungen vim
(und andere von mir verwendete Tools) vorzunehmen, um mich wie gewünscht zu verhalten. Das funktioniert auf meinem Computer sehr gut, aber als Embedded-Entwickler kann ich nicht immer herausfinden, was sich auf den von mir unterstützten Computern befindet. Ich stoße auf ältere Maschinen, auf denen nur gelegentlich hjkl
navigiert wird vi
. Am Ende werden die Kontrollcodes für ein oder zwei Sekunden in meine Datei eingefügt, bis ich meine Gewohnheit wieder aufgreife und zu wechsle hjkl
.
Der einzig gültige Grund, warum ich sagen kann: "Benutze niemals Pfeiltasten in Vim!" Auf diese Weise können Sie Maschinen verwenden, die die Pfeiltasten nicht bedienen können. Das fühlt sich wie ein ziemlich dünner Grund an, " nie " zu sagen .
Wie können Sie den Cursor im Einfügemodus bewegen, wenn Sie die Pfeiltasten nicht verwenden?
Der Hauptgrund , warum ich die Menschen von der Nutzung der Pfeiltasten zu entmutigen ist ausdrücklich , weil es Ihnen , während im Einfügemodus bewegen kann.
Eines der seltsamsten Probleme beim Erlernen von vim für Neueinsteiger besteht darin, dass der Befehl zum Rückgängigmachen von vim durch Rückgängigmachen der letzten Aktion und nicht des letzten Tastenanschlags ausgeführt wird . Viele meiner Freunde bleiben die ganze Zeit im Einfügemodus, weil es keinen Grund gibt, ihn zu verlassen. Wenn sie mich fragen "Wie mache ich das rückgängig?" Ich antworte mit "Drücke den Buchstaben u aus dem Befehlsmodus", sie werden frustriert, wenn vim die gesamte Datei löscht.
"Vim ist ein ziemlich wertloser Texteditor, wenn er Dinge nicht richtig rückgängig machen kann."
Es ist schwierig, ein Tool zu verwenden, bevor Sie gelernt haben, wie.
Vim wird erst dann nützlich, wenn Sie den Umgang damit gelernt haben. Die Stärke von vim liegt darin, wie man sagen kann, "mach das Ding noch einmal" oder "mach das Ding rückgängig" oder "mach das Ding nur, wenn ich diesen Makro-Hotkey drücke" durch unbewusstes Muskelgedächtnis. Wenn "das Ding" "die gesamte Datei von Anfang bis Ende eintippen" wird, bin ich einverstanden, dass vim überhaupt nicht so nützlich ist.
Aus diesem Grund sollten Sie nur Text eingeben, wenn Sie sich in befinden insert mode
. Das Vermeiden von Pfeiltasten ist nur eine Möglichkeit, wie wir Ihnen helfen können, schneller ein besserer VIM-Benutzer zu werden.
Das Ausführen von vim auf meinem Android-Gerät, auf dem ein ssh-Daemon in kbox ausgeführt wird, führte dazu, dass ich aus meiner Komfortzone ausbrach. Da der Anroid Terminal Emulator auf dem Gerät Lautstärketasten verwendet, um die speziellen Tastenkombinationen (Strg + was auch immer) zu ersetzen, funktionieren einige Tasten, die ich normalerweise auf der Tastatur verwenden würde, in dieser Situation nicht.
Beispielsweise funktioniert die Einfügetaste in dieser Umgebung nicht, sodass ich I
zum Umschalten in den Einfügemodus verwende. Die Esc-Taste, die ich normalerweise verwende, um den Einfügemodus zu verlassen, funktioniert auch nicht. Deshalb verwende ich ctrl + [
stattdessen die Esc-Taste, um den Einfügemodus zu verlassen. Die Home- und End-Tasten funktionieren nicht so, wie ich es gewohnt bin. Stattdessen verlasse ich mich auf die 0
und $
Verknüpfungen, mit denen ich mich noch nie beschäftigt habe, um den Anfang oder das Ende einer Zeile zu erreichen.
Wie auch immer, die Pfeiltasten funktionieren in meiner Situation immer noch wie gewohnt, aber es ist schön zu wissen, dass die minimalistischen Tastaturkürzel vorhanden sind.
Hier ist meine 2 ¢.
Tun Sie, womit Sie sich wohl fühlen. Wenn Sie verschiedene Editoren verwenden, ist es möglicherweise aus Gründen der Konsistenz einfacher, die Pfeiltasten zu verwenden.
Auf der anderen Seite ist es absolut genial, dass vi (und vim) keine speziellen Schlüssel benötigen, außer vielleicht. Sie könnten wahrscheinlich einen alten IBM-Selectric hacken, um als Terminal zu fungieren.
Die andere Sache, auf die Sie achten müssen, ist, dass die Pfeiltasten möglicherweise nicht wie erwartet funktionieren. Ich habe Terminals benutzt, an denen sie nicht funktionierten. Ich weiß nicht genau, wie sie in Vim implementiert sind, aber ich bin mir ziemlich sicher, dass sie nicht einheitlich sind. Mein fleckiger Speicher scheint sich sogar an eine Implementierung zu erinnern, bei der sie als vim-Makros implementiert wurden.
Der Name des Spiels mit verbesserten Texteditoren scheint, sich "in Eile zu bewegen" und unnötige / sich wiederholende Bewegungen zu reduzieren. Es geht etwas Zeit verloren, wenn Sie von den Buchstabentasten zu den Pfeiltasten (abhängig von den Tastaturabmessungen) und dann zurück zur Startzeile wechseln . Wenn Sie jedoch mit der linken Hand zur ESC-Taste gelangen, wird das Wechseln der Modi mit dem kleinen Finger oder dem Ringfinger zu einer fließenden Bewegung, und im Verlauf einer Editiersitzung wird die Geschwindigkeit erhöht.
Und dies ist der Schlüssel zum zweiten Teil Ihrer Frage. Verlassen Sie den Einfügemodus, indem Sie mit der linken Maustaste auf ESC drücken und mit der rechten Maustaste auf hjkl klicken. Schließlich können Sie dies tun, ohne einen Schlag auszulassen.
Trotzdem bin ich mit Vim nicht weitergekommen, bis ich einige der hier genannten Dinge ausprobiert habe . Das Wichtigste ist der Abschnitt " Effiziente Verknüpfungen erstellen "