2010-04-09 8 views
38

Ich möchte den Dateinamen ohne die Dateierweiterung in Vim erhalten.Erhalte den Dateinamen ohne Dateiendung in der Vim-Funktion.

Ich schrieb die folgenden Funktionen in meiner .vimrc Datei für die Kompilierung und führen Sie das Java-Programm.

In der Funktion wie bekomme ich den Dateinamen ohne die Erweiterung.

+0

Sie müssen keine Funktion machen, um das zu tun '(map :! Java%: r )' – yesennes

Antwort

75

:help expand() sollte Ihnen die Antwort geben, siehe expand().

Sie sollten den r Modifikator für%, mit %:r anstelle von % verwenden, um den Dateinamen ohne Erweiterung zu erhalten.

Wenn Sie Funktionen zum Erstellen und Ausführen von Dateien schreiben möchten, sollten Sie sich auch die Dokumentation zu shellescape ansehen, um Probleme mit Leerzeichen im Dateinamen oder Pfad zu vermeiden.

+0

Vielen Dank dafür! Verwendet es als eine einfache Möglichkeit, um aktuelle Dateiformate zu konvertieren, ohne aus vim springen. – Jason

+0

Gibt es einen Unterschied zwischen '%: r' und'% <'? – nggit

+0

Ja, es ist, aber es ist subtil. '% <' wird aus Gründen der Abwärtskompatibilität mit 3.0 weiterhin unterstützt und entspricht "%: r". Die ': r'-Form ist bevorzugt. Es kann mit den anderen Modifikatoren kombiniert werden und kann auch mehrfach verwendet werden, zum Beispiel wenn Sie mehrere Erweiterungen haben, wie zum Beispiel '.tar.gz'. – tonio

4

ich buchstäblich nur eine ähnliche Frage dazu lesen (in, dass jemand anderes vim zu konfigurieren schien zu versuchen, automatisch mit der F-Taste für sie zu bauen) und schrieb an answer darüber, wie Sie die Leistung von Vims nutzen können :make Befehl, ohne ein Makefile schreiben zu müssen. In Ihrem Fall ist es weniger direkt mit der Frage verbunden, aber ich dachte, ich würde es erwähnen, falls Sie interessiert sind.

Darüber hinaus scheint jemand etwas über Vim Tips Wiki über die Einrichtung von vim :make Befehl geschrieben zu haben, um speziell mit Java-Projekten zu arbeiten, die mit ant erstellt wurden. Ich habe selbst eine Weile nicht mit Java gearbeitet, aber in Ihrem Fall könnte es ein guter Einstieg sein.

0

Wenn Sie bei fnamemodify()

fnamemodify({fname}, {mods})    *fnamemodify()* 
     Modify file name {fname} according to {mods}. {mods} is a 
     string of characters like it is used for file names on the 
     command line. See |filename-modifiers|. 

fnamemodify("main.java", ":r") kehrt main einen Dateinamen (außer % usw.) werfen Sie einen Blick auf exand.

0

Ich kam hier auf der Suche nach einer Antwort für eine ähnliche Frage. Ich wollte in der Lage sein, den aktuellen Klassennamen aus der bearbeiteten Java-Datei zu extrahieren. Ich fand eine sehr nette Art und Weise dies mit einer Abkürzung in vim zu tun:

ab xclass <C-R>=expand('%:t:r')<CR> 

Platz diese Zeile in Ihrer .vimrc (oder ähnlich) für diese zu arbeiten. Eine Abkürzung wird automatisch ausgelöst, sobald du die Leertaste drückst. Daher setze ich ihnen normalerweise ein "x" voran, um ihre versehentliche Ausdehnung zu vermeiden.

Der Trick hier ist die Kombination :t und :r im Argument zu expand(). % ist der "aktuelle Dateiname", :t wählt nur die t ail des Pfades ("letzte Pfadkomponente nur") und :r wählt nur die r oot ("eine Erweiterung entfernt"). (zitierte Teile sind von der offiziellen expand() Dokumentation.

)

Also, wenn Sie eine neue Klasse in Datei erstellen /a/b/ClassIAmAboutToCreate.java würden Sie eingeben:

public class xclass { 

sobald Sie Platz nach „xclass“ drücken, wird die Abkürzung public class ClassIAmAboutToCreate erweitert werden, was genau das ist, was Sie brauchen.

Beachten Sie auch, dass eine Abkürzung durch Drücken Ctrl +] ausgelöst werden, die einen Raum nach dem Klassennamen vermeidet Einfügen.

Verwandte Themen