Kann ich vim dazu bringen, sein Cursorverhalten zu ändern?

11

Ich benutze vim seit einigen Jahren als sekundärer Editor, aber aus verschiedenen Gründen benutze ich es immer häufiger, selbst wenn mein primärer Editor verfügbar ist. Ein Problem, das mich immer gestört hat vimund das mich davon abhält, es häufiger zu verwenden, ist die Art und Weise, wie es mit der Cursorplatzierung umgeht. Der Cursor kann sich nur auf einem Zeichen befinden und nicht zwischen Zeichen, wie dies bei jedem seit 1984 erstellten Editor der Fall wäre.

Um nur ein Beispiel dafür zu nennen, warum dies ein Problem ist: Wenn ich das letzte Wort in einer Zeile löschen möchte, drücke ich $, um zum Ende der Zeile zu gelangen und dann dbrückwärts zu löschen. Dadurch bleibt ein Zeichen zum Löschen übrig, da $es nicht wirklich bis zum Ende der Zeile ging, sondern bis zum letzten Zeichen der Zeile und dbnur das, was vor dem aktuellen Zeichen war. Das Problem ist nicht, dass ich einen zusätzlichen Charakter eingeben muss, sondern der zusätzliche Gedanke, der erforderlich ist, um das zu tun, was einfach sein sollte, was meine Aufmerksamkeit von dem ablenkt, was ich tatsächlich erreichen möchte.

Es scheint mir, dass die modernere Platzierung des Ideencursors in jeder Hinsicht überlegen ist, und ich würde gerne zu vimdiesem Ansatz wechseln . Ich bin mir sicher, dass einige Hardcore- vimFans meiner Ansicht nicht zustimmen werden, aber da eines der Standardargumente für vimseine Überlegenheit die unendliche Konfigurierbarkeit ist:

  • kann es in diesem Fall liefern?
  • Kann vimder Cursor zwischen Zeichen gesetzt werden?
Bilderstürmer
quelle
2
Klingt so, als ob Sie nach einem InsertModus suchen oder den Moduspunkt verpassen normal. Ich würde das letzte Wort in einer Zeile im normalen Modus löschen $dawoder $bdwlöschen. Im InsertModus würde ich tun A<Ctrl-w>.
jw013
3
Als jemand, der Angst vor der Idee einer Unterwelt "zwischen Charakteren" hat, ist die richtige Tastenfolge zum Löschen des letzten Wortes in der aktuellen Zeile$bD
Alan Curry
1
Die Verwendung einer Maus ist nicht ideal, aber die erheblichen Ineffizienzen treten auf, wenn Sie anhalten und überlegen müssen, wie Sie das tun sollen, was Sie tun möchten. Die reale Sache, die wertvoll ist, ist nicht eine Sekunde hier und da, sondern Fokus . Wenn Sie den Fokus verlieren, verlieren Sie weit mehr als ein paar Sekunden.
Bilderstürmer
2
Aus den bisherigen Kommentaren geht hervor, dass die Antwort auf die Frage lautet: "Nein, dieses Modell der Cursorbewegung ist unwiderruflich in das Design von vim eingebettet und kann nicht geändert werden." Ist das korrekt?
Bilderstürmer
2
@iconoclast Das ist auch meine Schlussfolgerung. Soweit ich das beurteilen kann, ist es in vi oder vim unmöglich, alle Zeichen in einer Zeile einheitlich zu behandeln. Es gibt immer eine Ausnahme für das erste oder letzte Zeichen.
Gilles 'SO - hör auf böse zu sein'

Antworten:

5

Sie können :set virtualedit+=onemore, wodurch Sie direkt über das letzte Zeichen hinausgehen können. Leider geht für Sie $noch zum letzten Charakter; Sie müssen den Mauszeiger bewegen, um daran vorbei zu kommen. Auf der anderen Seite können Sie verwenden g$, was normalerweise zum letzten Zeichen der Bildschirmzeile in einer Zeile führt, die umbrochen wird. Im onemoreModus geht es auch direkt über das letzte Zeichen einer nicht umbrochenen Zeile (oder die letzte Bildschirmzeile einer umbrochenen Zeile) hinaus.

:h 'virtualedit' sagt, dass diese Option Skripte durcheinander bringen kann, aber ich weiß nicht, wie groß das Risiko in der Realität ist.

Echristopherson
quelle