2009-07-09 5 views
16

Ich möchte notepad ++ den Befehl "ruby {filename_here}" ausführen, wenn der aktuelle Dateiname mit .rb und "perl {filename_here}" endet, wenn er mit .pl endet. Ich habe versucht, das NppExec Plugin zu verwenden, aber es kann bedingte Sachen nicht tun, so schrieb ich eine FledermausWie macht Notepad ++ Skript basierend auf seinem Namen ausführen?

@echo off 

if /i %~sx1 == .pl perl "%~f1" 
if /i %~sx1 == .rb ruby "%~f1" 
if /i %~sx1 == .php php "%~f1" 

Jetzt kann ich es von der Kommandozeile wie C verwenden: \ Programme \ Notepad ++> runscript "D \ pl.pl" und es funktioniert gut. Wie kann ich nun einen Schlüssel in Notepad ++ an "runscript $ (FULL_CURRENT_PATH)" binden? Ich habe versucht, das Run-> Run-Menü (F5) zu verwenden, aber es scheint nicht zu funktionieren.

Antwort

21

Sie müssen den Dateinamen am Ende des Befehls setzen. Im Run (F5) Dialog, versuchen Sie dies:

runscript $(FULL_CURRENT_PATH) 

Wenn Sie es heraus testen möchten, können Sie einen & pause am Ende setzen könnte, nur um zu sehen, ob es funktioniert.

Sie auch Ihr Skript ein bisschen zwicken könnte, so dass jede Datei für jede Nebenstelle nicht testen, indem Sie den gefürchteten GOTO Befehl mit der Dateierweiterung Etiketten mit:

@echo off 
GOTO %~sx1 
:.pl 
    perl "%~f1" 
    GOTO end 
:.rb 
    ruby "%~f1" 
    GOTO end 
:.php 
    php "%~f1" 
    GOTO end 
:end 
+11

In der aktuellen Notepad ++ - Version enthält '$ (FULL_CURRENT_PATH)' bereits den Dateinamen. –

+1

Hier ist ein Fehler, den Sie verwenden müssen, um sicherzustellen, dass Sie das Skript "$ (Full_CURRENT_PATH)" verwenden. Andernfalls erhalten Sie einen Fehler, wenn Sie sich in einem Ordner mit Leerzeichen befinden. –

+1

Keine Notwendigkeit für das Skript.Bat überhaupt - nur "$ (Full_CURRENT_PATH)" und Windows sollte die Datei an die richtige ausführbare Datei senden, solange Dateizuordnungen und PATHEXT korrekt eingestellt sind – dankingsbury

1

Sie könnten versuchen, npp_exec das folgende Skript verwenden :

NPP_SAVE 
SET Executer = execute$(EXT_PART) 
NPP_EXEC "$(Executer)" 

Und dann ein Skript namens execute.rb verwenden:

perl $(FULL_CURRENT_PATH) //or something like that 

4

Ich hatte Probleme damit es funktioniert, so dass es das Shell-Fenster geöffnet bleibt, während ich einen Blick darauf werfen, was es getan hat. Inbetriebnahme der „& Pause“ am Ende schien nicht zu helfen, bis ich cmd /c am Anfang hinzugefügt:

cmd /c c:\php\php.exe -l "$(FULL_CURRENT_PATH)" & pause

Für auf dem Bildschirm, um die Befehlsergebnisse zu halten, können Sie/verwenden k Schalter, wie von George vorgeschlagen: cmd /k c:\php\php.exe -l "$(FULL_CURRENT_PATH)"

Das funktioniert gut, ich verwende es für die schnelle Syntaxprüfung in Notepad ++.

+2

Sie könnten auch versuchen,/k anstelle von/c zu verwenden und dann die & pause loszuwerden./c endet, wo/k bleibt. – George

+1

Das ist ein guter, George. Sieht aus wie ein Mann kann nie genug lernen seine Shell-Schalter :) – userfuser

6

Im Notizblock ++ Version 6.2 unter Windows ausgeführt wird, verwenden nur „$ (FULL_CURRENT_PATH)“, mit Anführungszeichen, so wird die Datei in die Datei verknüpft mit dem Standard-Programm geöffnet werden. Stellen Sie also sicher, dass "Edit with Notepad ++" NICHT der Standard-Doppelklick-Aktion ist.

1

Es gibt ein Plugin namens RunMe, das die aktuelle Datei im Standardprogramm öffnen kann. Es ist eine bessere Lösung als der Befehl "$ (FULL_CURRENT_PATH)", weil das aktuelle Verzeichnis in den Dateipfad geändert wird und dieser Befehl die Datei im N ++ - Pfad ausführt.

+0

Ich löschte den Shortcut-Befehl für 'mainmenu> Run' und set' Shell Execute current file' zu ​​'F5' aber es dauert nicht. Seltsam. Wenn ich die Funktion aus dem Menü aufrufen, funktioniert es. – bgmCoder