Ihre Shell Escape in :map <leader>m :!make && ./%
ruft das make-Programm auf, das nach einem Makefile zum Verarbeiten sucht. Die Rezepte im Makefile beschreiben, wie Ihr Programm kompiliert wird und wie die endgültige ausführbare Datei benannt wird (oder a.out
, falls nicht angegeben). Während der Name der Datei, die Sie bearbeiten (referenziert von %
), dasselbe Präfix wie der gewünschte ausführbare Dateiname haben kann, ist dies nicht garantiert.
zu kompilieren, ausführen und die Ausgabe des Programms in einem ein Makefile Rezept schreiben geteiltes Fenster bearbeiten, die automatisch nach der Kompilierung ausgeführt wird, und leitet die Ausgabe Ihrer ausführbaren Datei in einer temporären Datei, zB:
.PHONY: all
all: executablename runlog
executablename: executablename.c
cc -o executablename executablename.c
runlog: executablename
./executablename >runlog
Beachten Sie, dass die 8 Einrückungsräume durch eine Registerkarte ersetzt werden müssen, damit das Makefile funktioniert.
Referenz die temporäre Datei in Ihrem Mapping: :map <leader>m :!make^M:sp runlog^M
wo ^M
von der Eingabe stammt Ctrl +Return.
Die Zeit, die mit der Leiterverknüpfung gespart wird, wird damit verbracht, die zusätzlichen Dateien zu löschen. –
Sie müssen dafür keine Datei löschen, da die Shell-Umleitung _> runlog_ im Makefile jedes Mal _runlog_ überschreibt. Wenn Sie sich über die Datei Sorgen machen, leiten Sie sie zu _/tmp/runlog_cleaned_up_by_system_ um oder fügen Sie die Entfernung zu einem sauberen Rezept in Ihrem Makefile hinzu. Außerdem verstehe ich nicht Ihre Absicht, Zeit mit einem Leader-Mapping zu sparen (im Vergleich zu einem regulären Mapping), nach meinem Verständnis ist Leader nur ein praktischer Namensraum für Ihre eigenen Mappings. – 149
Wie würde ich es machen wenn ich verschiedene Programme im selben Makefile kompilieren müsste? Es gibt keine Möglichkeit, den Namen der Datei abzüglich des Dateityps zu verwenden. –