Letztes Update meiner Erfahrung
Der Teil 0"+y$ddin der folgenden Zuordnung ist wirklich etwas, über das Sie sorgfältig nachdenken und ihn an Ihren Geschmack / Workflow / Ihre Erfahrung anpassen sollten.
Zum Beispiel habe ich sehr häufig mehrere Zeilen im Puffer gefunden, in denen ich nur die ausführen möchte, auf der sich der Cursor befindet. in diesem Fall kann ich 0"+y$dd:%d<CR>anstelle von verwenden 0"+y$dd.
Und dies ist nur eines der möglichen Szenarien.
Endgültige Antwort für diejenigen, die mögen vim
- Legen Sie
vimals EDITOR/ fest VISUAL, damit Sie eine Befehlszeile beim Bearbeiten vimbearbeiten können.
- Fügen Sie
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>Ihre ~/.vimrcDatei zur Zuordnung Leaderd(die Sie beim Bearbeiten eines Befehls selten verwenden) der Aktion "Löschen Sie die aktuelle Zeile +ohne die nachfolgende EOL im Register" ein.
- Wenn Sie mit dem Bearbeiten eines Befehls im
vimEditor fertig sind , drücken Sie EscapeLeaderd.
- Fügen Sie die Zwischenablage in das Terminal ein (dies ist terminalabhängig).
Ursprüngliche Antwort
Ich muss oft das Gleiche tun, und ich mache es wie folgt. (Normalerweise verwende ich das set -o viIn bash, daher unterscheiden sich die Punkte 1 und 2 im Folgenden, wenn Sie set -o emacsdie Standardeinstellung verwenden. Basierend auf Ihrer Frage sieht es so aus, als ob die Punkte 1 und 2 in Ctrl+ vereint sind, xgefolgt von Ctrl+ e, was imho schwieriger zu tippen ist .)
- drücken Escape, um im normalen Modus zu sein,
- Drücken Sie v, um den Editor zum Bearbeiten des Befehls aufzurufen.
- Bearbeiten Sie den Befehl nach Belieben.
(Hier stellen Sie die Frage.)
- getroffen Escape0"+y$dd:wq,
- Hinweis: 0"+y$Nicht einfach "+yy, da letztere auch die neue Zeile kopieren würde und dies dazu führen würde, dass der Befehl ausgeführt wird, wenn er in die Befehlszeile eingefügt wird.
- Fügen Sie die Zwischenablage in die Befehlszeile ein
- Wie das geht, hängt wohl von dem Terminal ab, das Sie verwenden. Ich drücke Ctrl+ Alt+ vin
URxvt.
- Fahren Sie mit der Genehmigung / manuellen Bearbeitung fort.
Dies ist eindeutig nur eine Problemumgehung, die darin besteht, den bearbeiteten Befehl in die Zwischenablage zu kopieren, bevor der gesamte Befehl gelöscht wird, sodass beim Beenden des Editors nichts ausgeführt wird. Es ist jedoch das Beste, was ich für mich selbst bekommen kann.
Aktualisieren
Da mein EDITOR(und VISUAL) gleich ist vim, bearbeite ich den Befehl beim Bearbeiten in vim.
In dieser Hinsicht habe ich festgestellt, dass der Puffer benannt ist /tmp/bash-fc.random, wobei randomes sich um eine 6-stellige alphanumerische Zufallszeichenfolge handelt.
Dies bietet Platz für viele Möglichkeiten, wenn Sie vimals Editor verwenden, da Sie in Ihrem System eine Zuordnung definieren können .vimrc, um die gesamte Sequenz auszuführen Escape0"+y$dd:wq. Ein Befehl, den Sie beim Bearbeiten einer Befehlszeile selten verwenden würden, ist beispielsweise Leaderd: Daher können Sie den folgenden mapPing in Ihre .vimrcDatei einfügen
au BufEnter /tmp/bash-fc.* nn <Leader>d 0"+y$dd:wq<CR>
so dass Schritt 4 im obigen Rezept wird
- schlagen EscapeLeaderd
edit-and-execute-command.