Kompilieren von Code aus vim


18

Neu bei vimund und ich möchte in der Lage sein, Code von innen zu kompilieren, vimohne ein neues Terminal auszuführen und den Compiler aufzurufen.

Wie mache ich das? Beachten Sie, dass diese Anforderung nicht gccnur beschränkt ist. Manchmal muss ich pythonauch das aktuelle Skript aufrufen, an dem ich arbeite, damit Sie auf die Idee kommen ...

Antworten:


25

Schreiben Sie ein Makefile, dann können Sie einfach:

:make

von innen vim. Und wenn die Kompilierung fehlschlägt:

:copen

wird Ihnen Warnungen und Fehler anzeigen. Wenn Sie sie auswählen, gelangen Sie zur entsprechenden Datei und Zeile.


12

In vim kann die aktuelle Datei %so bezeichnet werden

:!python %

Siehe :he cmdline-special(oder hier )


6

Wenn Sie Makefiles aus irgendeinem Grund nicht mögen, können Sie jeden Befehl aufrufen mit:!

Sie können beispielsweise ":! Javac * .java && java Foo" verwenden, um ein einfaches Java-Programm zu kompilieren und auszuführen. Auf diese Weise können Sie auch andere Buildsysteme (scons, cmake, ...) aufrufen.


3

Probieren Sie das Quickrun- Plugin für Vim aus. Die Seite enthält einen Link zu github, der die neueste Version ist und den ich verwende.

Der Vorteil bei der Verwendung dieses Plugins gegenüber dem Ausführen von :!wird die Ausgabe des Befehls gesammelt und in einem geteilten Fenster angezeigt.

Außerdem hängt dieses Plugin standardmäßig Ihre vim-Instanz, wenn Sie sie auffordern, einen Befehl auszuführen. Es kann jedoch so konfiguriert werden, dass der Befehl asynchron ausgeführt wird. Lesen Sie die Dokumentation für weitere Details.


3

Ich verwende ein vim, in dem der Python-Interpreter kompiliert ist.

Ich gebe eine Python-Datei mit folgender Funktion aus:

def pyterm(filename="", interactive=1):
    cmd = "%s %s %s " % (PYTHON, "-i" if interactive else "", filename)
    if "DISPLAY" in os.environ:
        return run_config(os.environ.get("XTERM"), cmd)
    else:
        return os.system(cmd)

Und ordnen Sie es einer Tastenkombination zu:

nmap ;ru :update<CR>:python pyterm(vim.current.buffer.name, 0)<CR>
nmap ;ri :update<CR>:python pyterm(vim.current.buffer.name, 1)<CR>

Ich hatte zuvor einige Umgebungsvariablen festgelegt, um das genaue Terminal zu bestimmen, in dem gvim ausgeführt werden soll, oder im selben Terminal, wenn kein X vorhanden ist.

Dann tippe ich normalerweise einfach '; ri' in einen Python-Puffer, um ihn auszuführen (normalerweise, um ihn zu testen).


2

Vim kann zum Kompilieren mit gnu make für die aktuelle Datei verwendet werden - auch wenn für die Datei kein Makefile vorhanden ist (weitere Informationen finden Sie hier ):

:make %:r

Auf diese Weise erhalten Sie mit vim Zugriff auf das Quickfix- Fehlerfeedback aus der compiler ( :help quickfix) -Liste - :cnNächster Fehler, :cpVorheriger Fehler,:cw Neues Fenster, in dem Fehler .

Wenn du nicht gnu make hast, kannst du die Variable makeprg setzen (wechsle zu g ++, wenn du C ++ kompilierst):

:se makeprg=gcc\ -o\ %<\ %

Verwenden Sie anschließend den Befehl vim make, um die aktuelle Datei zu kompilieren und eine Quickfix- Liste mit Fehlern in vim abzurufen :

:make

BEARBEITEN: Wenn Sie die kompilierte ausführbare Datei auch in vim ausführen möchten, können Sie dies tun ('!' Wird ausgeführt, '%: r' ist der Dateiname ohne Suffix):

:!./%:r

1

Im Falle von gcc, Python usw. kann man es mit einem Doppelpunkt-Knall (:!) Aufrufen.

Z.B. :!python something.py


0
!gcc file.c && ./a.out

Dadurch wird Ihre C-Datei kompiliert und die ausführbare Datei ausgeführt, die alle Eingaben in Ihrem vim-Fenster anfordert.


1
Eine vollständigere Antwort würde das ":" enthalten, und um es vielseitiger zu machen, könnten Sie "file.c" für den aktuellen Dateioperator "%" ändern::!gcc % && ./a.out
Pierz,

Ich mache etwas Ähnliches in meiner .vimrcMap Command + Shift + R:map <D-R> :exe '!gcc %:p' <bar> exe '!'.getcwd().'/a.out'<cr>
f1lt3r

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.