2016-07-23 19 views
1

Anstatt vim die Ausgabe des Befehls: make zu drucken, möchte ich die Ausgabe in einer Datei lesen (die automatisch in vim aktualisiert wird); damit meine kompilierte Datei sofort ausgeführt werden kann, ohne die Ausgabe des Befehls: make sehen zu müssen.vim umleiten: Ausgabe in Datei machen

Ich bin mit dem folgende Makefile

all: compile run 

compile: file.cc 
     g++ -o file file.cc 

run: file 
     ./file 

Wie man den Ausgang des nicht umleiten: Befehl in einer Art und Weise machen, dass es nicht auch auf den Bildschirm durch vim gedruckt wird?

Antwort

1

Zuerst haben wir https://vi.stackexchange.com/, Sie können bessere Antworten über Vim dort bekommen.


Zweitens werde ich argumentieren, dass ein Makefile kein Platz ist ein Programm, die Idee hinter make ist zu fangen Kompilierungsfehlern auszuführen. Aber vorausgesetzt, Sie haben Ihre Gründe (zB ./file öffnet eine grafische Anzeige) gibt es ein paar Möglichkeiten, dies in Vim auszuführen:

Für einen Start Sie makeprg festlegen können die Umleitung auszuführen:

:set makeprg=make\ >/dev/null\ 2>&1 

(Sie können /dev/null zu einer tatsächlichen Datei ändern)

Aber das lässt noch die Zeile:

Press ENTER or type command to continue 

Und bittet um Bestätigung, was ärgerlich sein kann, wenn Sie wissen, dass es keine Ausgabe gibt.

set makeprg=make\ >/dev/null\ 2>&1 
function! MyMake() 
    silent make 
    redraw! 
endfunction 
command Mm call MyMake() 

Und jetzt können Sie tun:

:Mm 

Um das Make ausführen und gehen Sie zurück zu gerade


Um der Bestätigungslinie Sie silent wie folgt verwenden können loszuwerden zu Vim. (die redraw! wird nur in einigen Terminals benötigt)

+0

Es tut es! Wie führe ich den Prozess im Hintergrund aus? Der Bildschirm wechselt also nicht für Sekundenbruchteile in die Shell? –

+1

@ MusséRedi - Sie haben zwei Möglichkeiten.Der Hacky ist es, 'makeprg = make \>/dev/null \ 2> & 1 \ &' zu setzen und den gesamten make-Prozess im Hintergrund laufen zu lassen. Und die richtige ist die Verwendung von Kanälen (siehe ': h-Kanäle'), dennoch würde ich von Kanälen abraten, da sie immer noch sehr fehlerhaft sind. (und meine Erfahrung, etwas in VimScript mit Kanälen zu programmieren, war ziemlich schlecht.) – grochmal

1

können Sie diesen Befehl ausführen:

:silent exec "!make >Output" | :redraw! 

Die Datei Output enthält die letzte Ausgabe des ausgeführten make Befehl.

0

Verwenden Sie :silent, um die Ausgabe zu entfernen und die Eingabetaste zu drücken. Ich schlage vor, eine schöne Abbildung oder Befehl:

command! -nargs=* Smake silent make <args> 
nnoremap <f5> :silent make<cr> 

:make die quickfix Liste mit den Ergebnissen aus :make bevölkert. Verwenden Sie :copen, um das Quickfix-Fenster zu öffnen.

Weitere Hilfe finden Sie unter:

:h :command 
:h silent 
:h :make 
:h 'makeprg' 
:h quickfix 
Verwandte Themen