Erstellen Sie ein Mapping für die Befehlszeile von Vim, die den Inhalt eines Registers entkernt, bevor Sie es einfügen

8

Angenommen, ich habe ein solches Dokument und möchte nach allen Vorkommen der URL suchen:

%Vor%

Ich möchte es nicht vollständig eingeben, also setze ich den Cursor auf die erste URL und führe "uyi[ aus, um es in das "u" -Register zu ziehen. Um nun danach zu suchen, möchte ich einfach den Inhalt dieses Registers in das Suchfeld einfügen, indem ich Folgendes leite:

%Vor%

Dies führt dazu, dass Vim nach der Zeichenkette 'http:' sucht - weil das Zeichen '/' das Suchfeld beendet.

Ich kann das Problem umgehen, indem ich stattdessen Folgendes ausführe:

%Vor%

Aber es ist viel Tippen!

Wie kann ich ein Mapping für die Kommandozeile von Vim erstellen, das diesen Workflow vereinfacht?

Mein idealer Workflow würde etwa so aussehen:

  • Drücken Sie /\V , um die Suchaufforderung aufzurufen, und verwenden Sie einen sehr nomagischen Modus
  • Drücken Sie ctrl-x, um das benutzerdefinierte Mapping (ctrl-x ist verfügbar)
  • auszulösen
  • Vim hört auf den nächsten Tastendruck ... (Drücken von <Esc> würde abbrechen)
  • Wenn Sie 'u' drücken, wird der Inhalt des 'u' Registers verlassen und in die Befehlszeile
  • eingefügt
nelstrom 13.09.2011, 10:57
quelle

4 Antworten

7

Versuchen Sie Folgendes:

%Vor%

Übrigens, etwas, das nützlich sein könnte, um es zu wissen (wenn Sie es nicht schon getan haben) ist, dass Sie ? als Trennzeichen für :s verwenden können. Was bedeutet, dass Sie eine Suche-und-ersetzen für eine URL wie folgt schreiben können:

%Vor%     
Andrew Radev 13.09.2011, 11:45
quelle
7

Ich habe akzeptiert Andrew Radevs Lösung , die die harten Teile löste. Aber hier ist die Version, die ich meiner vimrc-Datei hinzugefügt habe, die ein paar Verbesserungen hinzufügt:

%Vor%

Das sollte funktionieren:

  • ob Sie / oder ? verwenden (um vorwärts oder rückwärts zu suchen)
  • und wenn das eingefügte Register mehrere Zeilen enthält

Ich habe auch die Eingabeaufforderung geändert. Während auf ein Register gewartet wird, wechselt die Eingabeaufforderung zu \ - was wie ein passender Hinweis für 'PasteEscaped' erscheint. Außerdem habe ich ein " angehängt, das das Verhalten von Vim nach dem Drücken von <c-r> in der Befehlszeile nachahmt.

Wenn Sie weitere Verbesserungsvorschläge haben, hinterlassen Sie einen Kommentar.

    
nelstrom 13.09.2011 12:45
quelle
2

Wie wäre es mit einem anderen Workflow? Erstellen Sie beispielsweise einen eigenen Operator zum Suchen von Zieltext wie folgt:

%Vor%     
Kana Natsuno 13.09.2011 13:03
quelle
1

Ich mag die @ nelstrom-Lösung und habe eine kleine Änderung vorgenommen, um zu entkommen [und].

%Vor%     
darcyparker 13.11.2012 02:05
quelle

Tags und Links