Wie führe ich eine Datei aus, die ich in Vi (m) bearbeite, und erhalte die Ausgabe im geteilten Fenster (wie in SciTE)?
Natürlich könnte ich es so ausführen:
:!scriptname
Aber ist es möglich, das Schreiben von Skriptnamen zu vermeiden und zu vermeiden, dass die Ausgabe im geteilten Fenster statt nur am unteren Bildschirmrand erfolgt?
:!"%:p"
mit Leerzeichen fertig zu werden.Antworten:
Da ist der
make
Befehl. Es führt den Befehlssatz in dermakeprg
Option aus. Verwenden Sie%
als Platzhalter für die aktuellen Dateinamen. Wenn Sie beispielsweise ein Python-Skript bearbeitet haben:Ja, du musst dem Raum entkommen. Danach können Sie einfach ausführen:
Wenn Sie möchten, können Sie die
autowrite
Option festlegen und sie wird automatisch gespeichert, bevor Folgendes ausgeführt wirdmakeprg
:Dies löst den Ausführungsteil. Ich kenne keine Möglichkeit, diese Ausgabe in ein geteiltes Fenster zu bringen, das keine Umleitung in eine Datei beinhaltet.
quelle
:copen
diese Option, um die "Fehlerliste" zu öffnen, die durch Ausführen von:make
.in einem eigenen Fenster erstellt wurde. Um die Ausgabe richtig formatieren zu können, ist leider eine gewisse Feinabstimmung dererrorformat
Option erforderlich. Andernfalls wird angenommen, dass die Ausgabe das von gcc ausgegebene Format hat.:let f=expand("%")|vnew|execute '.!ruby "' . f . '"'
) sieht zwar kryptisch aus, funktioniert aber genau so, wie es der Autor der Frage gestellt hat.Verwenden Sie, um auf den Dateinamen des aktuellen Puffers zuzugreifen
%
. Um es in eine Variable zu bekommen, können Sie dieexpand()
Funktion verwenden. Verwenden Sie:new
oder, um ein neues Fenster mit einem neuen Puffer zu öffnen:vnew
. Verwenden Sie, um die Ausgabe eines Befehls in den aktuellen Puffer zu leiten:.!
. Alles zusammen:offensichtlich durch einen
ruby
beliebigen Befehl ersetzen . Ich habe verwendet,execute
damit ich den Dateinamen mit Anführungszeichen umgeben kann. Es funktioniert also, wenn der Dateiname Leerzeichen enthält.quelle
:command! R let f=expand("%")|vnew|execute '.!ruby "' . f . '"'
diese Option , um nur:R
seinen Befehl ausführen zu könnenVim hat den
!
Befehl ("bang"), der den Shell-Befehl direkt aus dem VIM-Fenster ausführt. Darüber hinaus können Sie eine Folge von Befehlen starten, die mit Pipe verbunden sind, und stdout lesen.Beispielsweise:
entspricht dem Öffnen des Eingabeaufforderungsfensters und dem Starten von Befehlen:
Weitere Informationen finden Sie unter "Vim-Tipps: Arbeiten mit externen Befehlen" .
quelle
Ich habe eine Verknüpfung dafür in meinem vimrc:
Dies schreibt den aktuellen Puffer, macht die aktuelle Datei ausführbar (nur Unix), führt sie aus (nur Unix) und leitet die Ausgabe an .tmp.xyz um, erstellt dann eine neue Registerkarte, liest die Datei und löscht sie dann.
Brechen sie ab:
quelle
:w<CR>:silent !chmod +x %:p<CR>:silent !%:p 2>&1 | tee ~/.vim/output<CR>:split ~/.vim/output<CR>:redraw!<CR>
Meinung dazu: - Dadurch werden sowohl stdout als auch stderr in die temporäre Datei umgeleitet. Zuvor wird alles in stdout gedruckt. Wenn die Ausführung eines Skripts also lange dauert, funktioniert es tatsächlich. Außerdem ist es verzeichnisunabhängig (beim Öffnen von Dateien über ihren absoluten Pfad wurden Fehler angezeigt). Es werden jedoch keine Skripte interaktiv ausgeführt, und ich habe keinen Weg gefunden, dies zu erreichen.Für Shell-Skript habe ich verwendet
quelle
In Vim 8 ist ein interaktives Terminal integriert. So führen Sie das aktuelle Bash-Skript in einem geteilten Bereich aus:
oder kurz gesagt
%
wird auf den aktuellen Dateinamen erweitert.Von
:help terminal
:quelle
Ich benutze einen etwas aufdringlicheren Mechanismus durch Karten:
Macht es einfach so, dass ich nicht sparen muss, dann geh. Geh einfach.
quelle
Sie können das Plugin bexec von vim verwenden . Meines Wissens ist die neueste Version 0.5.
Dann:
In vim selbst beim Bearbeiten der .vba-Datei gehen Sie wie folgt vor:
Einige Ausgaben zeigen an, dass bexec.vim geschrieben wurde, sowie Dokumentation usw.
Jetzt können Sie es testen, indem Sie Ihr (unabhängig von der Sprache funktionierendes Skript, in dem ein #! - Interpreter ordnungsgemäß funktioniert) in vim öffnen und ausführen
Hinweis: Ich wollte, dass die Aufteilung eher vertikal als horizontal ist, also habe ich Folgendes getan:
und änderte den Wert von "hor" in "ver" ..
Ich weiß, dass es eine alte Frage ist, aber ich hoffe, dass dies jemandem da draußen helfen kann. Ich habe in der gleichen Ausgabe gearbeitet, als ich an Courseras Startup Engineering-Kurs teilgenommen habe, in dem Professor Palaji Emacs verwendet und ich Emacs nicht mag.
quelle
Basierend auf den Antworten von @SethKriticos und @Cyril verwende ich jetzt Folgendes:
Verwenden Sie F9, um das neue Fenster einzurichten, und F2, um Ihr Skript auszuführen und zu Ihrer Ausgabedatei zu wechseln.
Ich habe auch den Skriptnamen zum Namen der Ausgabedatei hinzugefügt, damit Sie diesen für mehrere Skripte gleichzeitig verwenden können.
quelle
In Ihre können
.vimrc
Sie diese Funktion einfügenDanach im
vim
Befehl run:shell python ~/p.py
als Beispiel. Und Sie erhalten die Ausgabe in einem geteilten Fenster. + Nach Änderungen imp.py
Beispiel führen Sie denselben Befehl erneut aus. Diese Funktion erstellt kein neues Fenster, sondern zeigt das Ergebnis im vorherigen (gleichen) geteilten Fenster an.quelle
@xorpaul
Ich habe lange nach diesem Skript (Python / Windows) gesucht. Da es in Windows kein "Tee" gibt, habe ich es geändert in:
quelle
Verwenden Sie einfach Doppelpunkt und Ausrufezeichen wie unten gezeigt
quelle