it-swarm.com.de

Warum Pfeiltasten in Vim nicht empfohlen werden

"Benutze niemals Pfeiltasten in Vim!"

Ich hörte das von einem zufälligen Sprecher, hatte aber nicht die Gelegenheit, ihn zu fragen, warum. Wie können Sie den Cursor im Modus Einfügen bewegen, wenn Sie die Pfeiltasten nicht verwenden?

119
Michael Lee

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. Sie können hjkl verwenden, um sich jeweils um eine Stelle zu 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 anstelle von hjkl zu verwenden, da sie weiter entfernt sind.

Es gibt die Einstellung, dass, wenn Sie die Pfeiltasten verwenden, Sie vim "falsch" verwenden. Die Wahrheit ist, dass Vim eine sehr, 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 lernte.

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". Dies wird changein". Es löscht alles zwischen den Anführungszeichen und versetzt Sie in den Einfügemodus, damit ich den neuen Text eingeben kann.

171
Dean

Schlüsselplatzierung

Kurz gesagt, Vim verwendet die Tasten hjkl als Navigationsschnittstelle, da es sich um ein Überbleibsel des alten "ADM-3A" -Terminals handelt, dessen Tasten mit Pfeilen markiert waren.

Keyboard

Da vim von vi abgeleitet ist, werden die gleichen hjkl-Schlüssel verwendet.

Neue Gewohnheiten

Der buchstabenbasierte Ersatz für die Pfeiltasten ermöglicht es Ihnen, durch den Text zu navigieren, ohne Ihre Hände von der Standard-Schreibkonfiguration zu lassen . Dies ist wahrscheinlich effizienter und schneller als das Drücken der Pfeiltasten mit der Hand. Wie in Referenz 2 beschrieben (siehe Ressourcen), 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.

Ressourcen und Einfügemodus

Es gibt ein paar sehr detaillierte und genaue Antworten auf die 2 Teile Ihrer Frage: In Bezug auf das Ersetzen von Pfeiltasten habe ich schnell und zusammenfassend geantwortet, aber für Ihre Frage einfügen , lesen Sie bitte die Ressourcen nachfolgend aufgeführten.

91

Dieses blöde Mantra wird oft von Berührungsschreibern wiederholt, für die die Ausgangsreihe wie ein zweiter Rücken 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.

Meistens bestehen sie darauf, hjkl zu verwenden.

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, sind hjkl ohnehin nur unwesentlich besser als die Pfeile. Ja, der einzige Vorteil von hjkl gegenü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 die Verwendung von only den Pfeilen ineffizient ist. 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 das besser, den l-Schlüssel 13 Mal zu hämmern? Nein, es ist genauso dumm.

Wenn Sie den rechten Pfeil gedrückt halten, bis Sie Ihr Ziel erreichen, ist dies weniger langweilig, aber fehleranfällig und fast so ineffizient wie 13 Treffer, da am Ende eine notwendige und nicht deterministische Verlangsamung eintritt. Ist es das besser, die Taste l gedrückt zu halten? Nein natürlich nicht.

Zum Glück bieten die meisten GUI-Toolkits Combos wie Ctrl+Right, mit denen wir Word für Word verschieben 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 dasselbe 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 relativenumber zu machen ist großartig, aber was ist mit horizontalen Bewegungen? Für große Bewegungen sind hjkl tatsächlich schlechter als Modifikatoren + Pfeile. Und rate was? Große Bewegungen sind das, was wir am meisten brauchen.

Aber wir sind glückliche Bastarde, unser Lieblingseditor hat Dutzende von Bewegungen, die Kreise um die Pfeile und hjkl laufen: bBeEwW/?*#{}() und so weiter. Diese Befehle sind unermesslich mächtiger als hjkl und zum größten Teil logischer und intuitiver, wenn Sie an Ctrl+Right und Freunde gewöhnt sind.

Der Wechsel von <Right><Right><Right><Right><Right><Right><Right><Right><Right> zu lllllllll oder sogar 9l ist lächerlich sinnlos.

Der Wechsel von <Right><Right><Right><Right><Right><Right><Right><Right><Right> zu <C-Right> ist wesentlich besser. Von dort aus ist der Wechsel zu w einfach und schnell. Sie müssen Ihre Pfeile nicht <nop>en!

Wenn diese Befehle nützlicher, leistungsfähiger und intuitiver als hjkl sind, warum bestehen dann so viele Blogger und Kommentatoren darauf, die Pfeile durch hjkl zu ersetzen?

Ich habe. Keine Ahnung.

Zusammenfassend ist festzuhalten, dass hjkl ihren Platz in unserem Toolbelt haben, da wir uns immer um 2 Zeichen oder Linien bewegen müssen, aber meistens handelt es sich um den Baum, der den Wald verbirgt. Seien Sie vorsichtig mit Leuten, die gegen die Pfeile predigen: Was sie für Sie auf Lager haben, ist vielleicht überhaupt nicht besser.

54
romainl

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 ungefähr so

ESC [ A

abhängig von den Eigenschaften Ihres Terminals, Ihrer Verbindung und Ihrem Cursormodus . Wenn Ihre Shell oder Ihr Programm nicht richtig für das Terminal konfiguriert wurden, würden sie die Escape-Sequenz nicht als Pfeiltaste verstehen.

Als ich am College war und mich über VT100-Terminals bei Ultrix anmeldete, wurde die Variable ESC als "Verlassen des Einfügemodus" interpretiert, und der folgende [ A wurde als normal interpretiert. mode befehle. 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.

17
LarsH

Die Verwendung der Pfeiltasten ist verpönt, da Sie bei Verwendung des Layouts QWERTY und des Zeichenblocks (?) Bei Verwendung von Dvorak oder eines beliebigen anderen Layouts gezwungen sind, die Finger von der Startreihe zu bewegen.

14
pdoherty926

Die Pfeiltasten weisen ein Problem auf - es war bereits bei langsamen Verbindungen bekannt, wie bei einem 1200-Baud-Modem. Der Pfeil übersetzt sich in eine ESC-Sequenz wie ESC a. Wenn die Zeit zwischen ESC und a zu lang wird, hören Sie am Ende ein BEL (oder einen Blitz), gefolgt vom Anhänge-Modus. Dies wird bei den Tasten hjkl nicht angezeigt.

10
ott--
  • in bestimmten Umgebungen funktionieren die Pfeiltasten möglicherweise nicht richtig. hjkl sind normale Zeichen und werden von allen Terminals gut verstanden.
  • Bewegen Sie den Cursor nicht in Einfügemodus (außer Rücktaste und Korrigieren eines kurzen Tippfehlers), besteht die Idee von vi darin, Einfügen einzugeben mode nur um etwas einzugeben. Die Bewegung erfolgt im Normalmodus
  • Wenn Sie können, sollten Sie vermeiden, hjkl zum Verschieben zu verwenden, und diese stattdessen nur für Anweisungen verwenden. Es gibt zahlreiche Möglichkeiten, sich in vi zu bewegen, siehe: http://vim.wikia.com/wiki/Moving_around
5
Squeezy

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 fügt neuen Text nicht im Einfügemodus, sondern im vollständigen Einfüge- oder Ersetzungsmodus hinzu Befehle , die mit einem Opcode wie i, o oder cw beginnen, dem Nutztext folgt, und mit ESC abgeschlossen werden. Befehle haben eine Syntax, und so durchläuft die Maschine Zustände, in denen sie die Syntax von Befehlen akzeptiert, aber im Master-Modell des Editors führen diese nicht zu einem Modus. Was die Lehrlinge naiv "Modus" nennen, ist für den Meister ein unvollendeter Befehlszustand, eine scheußlichste 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, beendet der Master den Einfügebefehl und setzt eines der Dutzenden von effizienten Zeichen frei Bewegungsbefehle (Rückgriff auf die niedrige 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 eine überflüssige ESC eingegeben wird, die "nur für den Fall" ausgegeben wird.

(Wenn jedoch das Netzwerk verzögert ist oder die Maschine festgefahren ist, drückt der Master wie jeder andere auch immer wieder heftig auf den ESC-Schlüssel.)

5
Kaz

wie können Sie den Cursor im Einfügemodus bewegen, wenn Sie die Pfeiltasten nicht verwenden?

Der Hauptgrund, warum ich Leute von der Verwendung der Pfeiltasten abhalte, ist ausdrücklich weil es Ihnen erlaubt, sich im Einfügemodus zu bewegen.

Eines der seltsamsten Probleme beim Erlernen von vim für Neulinge 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 aus "diesem Ding" "die gesamte Datei von Anfang bis Ende eingeben" wird, ist vim meiner Meinung nach überhaupt nicht so nützlich.

Aus diesem Grund sollten Sie nur Text eingeben, wenn Sie sich in insert mode befinden. Das Vermeiden von Pfeiltasten ist nur eine Möglichkeit, wie wir Ihnen helfen können, schneller ein besserer VIM-Benutzer zu werden.

3
Conrad.Dean

Ja, aus vielen der oben genannten Gründe wurde vi ursprünglich für die Verwendung von hjkl geschrieben, aber " never " ist eine ziemlich große Aussage.

Ich tendiere dazu, vim (und andere von mir verwendete Tools) so zu ändern, dass sie sich so verhalten, wie ich es möchte. 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, die nur gelegentlich hjkl Navigation in vi haben. Am Ende werden die Kontrollcodes ein oder zwei Sekunden lang in meine Datei eingefügt, bis ich meine Gewohnheit wieder aufbringe und zu hjkl wechsle.

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.

3
kmort

schreiben Sie einfach den folgenden Befehl, bevor Sie in vim schreiben: -

  1. esc
  2. : set nocp

ein Problem dabei ist, dass Sie es möglicherweise jedes Mal schreiben müssen.

0
0decimal0

Hier ist meine 2 ¢.

Mach, was immer du willst. 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.

0
David E.

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 auf die ESC-Taste zugreifen können, wird das Wechseln der Modi 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 auf hjkl klicken. Schließlich können Sie dies tun, ohne einen Schlag auszulassen.

Davon abgesehen bin ich mit Vim nie weitergekommen, bis ich einige der genannten Dinge ausprobiert habe hier , am wichtigsten der Abschnitt " Effizienter werden: Verknüpfungen "

0
Vijay Edwin

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.

Zum Beispiel funktioniert die Einfügetaste in dieser Umgebung nicht, sodass ich I verwende, um in den Einfügemodus zu wechseln. Die Esc-Taste, die ich normalerweise verwende, um den Einfügemodus zu verlassen, funktioniert auch nicht. Daher verwende ich stattdessen ctrl + [, 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.

0
iyrin