2016-03-31 13 views
0

Ich möchte einen Befehl haben, um die C-Datei zu kompilieren und auszuführen, die ich in vim bearbeite. Wie kann ich es tun? Folgendes funktioniert nicht, da im Dateinamen der Name ".c" angegeben ist.Wie mappt man kompilieren und in vim ausführen?

:map <leader>m :!make && ./% 

Wenn ich :!make && ./filename verwende ich weiß nicht, wie durch den Ausgang bewegen, so würde Ich mag eine Lösung mit einem vertikal geteilten Fenster zu sehen.

Antwort

0

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.

+0

Die Zeit, die mit der Leiterverknüpfung gespart wird, wird damit verbracht, die zusätzlichen Dateien zu löschen. –

+0

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

+0

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. –