Dank Horsts Vorschlag konnte ich analysieren, wie man Vim dazu bringt, dies mit jeder Sprache zu tun, die eine Befehlszeilenoption "auswerten" hat. Für JavaScript lautet der Befehl wie folgt:
imap <F5> ^[_"ay$o//^[kJo^[!!node -e "^Ra"^MkJi nmap <F5> _"ay$o//^[kJo^[!!node -e "^Ra"^MkJ
Für eine Panne:
- Beim
INSERT
Modus-Mapping ^[
kehrt Escape ( ) zum normalen Modus zurück. _"ay$
setzt die gesamte Zeile in das Register ein a
. o//^[kJ
fügt das "//" für einen Kommentar hinzu. o^[
beginnt eine neue Zeile. !!node -e "^Ra"^M
führt das Register (die Zeile) durch Node.js und gibt das Ergebnis in der aktuellen Zeile zurück. - Zum Schluss wird
kJ
diese neue Zeile wieder in die erste Zeile gezogen, um zum Kommentar zu werden. - (Für
INSERT
Modus i
gibt den Modus aus, NORMAL
um INSERT
wieder.)
Das gleiche kann für Python mit ein paar kleinen Änderungen durchgeführt werden:
imap <F5> ^[_"ay$o#^[kJo^[!!python -c "import math; ^Ra"^MkJi nmap <F5> _"ay$o#^[kJo^[!!python -c "import math; ^Ra"^MkJ
Dafür wird der //
Kommentar durch Python's ersetzt #
. Außerdem importiere ich das math
Modul automatisch, da es für schnelle Berechnungen auf diese Weise sehr nützlich sein kann.
Meine Empfehlung ist, jede dieser Zuordnungen in ihre eigenen ~/.vim/ftplugin/<language>.vim
Dateien zu platzieren und set ftplugin on
in Ihre .vimrc
. Dadurch kann sich das Mapping ändern, je nachdem, mit welcher Sprache Sie arbeiten.
Ich hoffe, dass jeder, der interaktiv Code in Vim ausführen möchte, dies finden und möglicherweise sogar verbessern kann. Ein riesiges Dankeschön! geht an Horst für die Beantwortung dieser Frage und den Anstoß für dieses kleine Projekt!