Wie erhalte ich den Namen und die Erweiterung der aktuellen Datei?


24

Gibt es eine Möglichkeit, den Namen und die Erweiterung einer Datei mithilfe von Vimscript abzurufen?

Wenn ja, möchte ich den Namen und die Erweiterung separat.


"eine Datei"? Welche datei Der im aktuellen Puffer? Eine Datei irgendwo im Suchpfad?
muru

Die Datei, die der Benutzer über `vim <Dateiname>
iProgram


Ich will nicht den vollen Weg. Ich möchte nur den Namen und die Erweiterung der Datei. Nicht der Pfad, den ich auch in Vimscript verwenden möchte.
iProgram

Ja, beide Antworten befinden sich tatsächlich in der verknüpften Frage (insbesondere in der Antwort von CharlesL) ...
Martin Tournoij

Antworten:


27

Von :he filename-modifiers:

    :t      Tail of the file name (last component of the name).  Must
            precede any :r or :e.
    :r      Root of the file name (the last extension removed).  When
            there is only an extension (file name that starts with '.',
            e.g., ".vimrc"), it is not removed.  Can be repeated to remove
            several extensions (last one first).

    :e      Extension of the file name.  Only makes sense when used alone.
            When there is no extension the result is empty.
            When there is only an extension (file name that starts with
            '.'), the result is empty.  Can be repeated to include more
            extensions.  If there are not enough extensions (but at least
            one) as much as possible are included.
Examples, when the file name is "src/version.c", current dir
"/home/mool/vim":
  :p                    /home/mool/vim/src/version.c
  :t                                       version.c
  :t:r                                     version
  :e                                               c

Mit der expandFunktion können Sie diese erweitern und ihre Werte erhalten:

:let b:baz=expand('%:e')

Beispielsweise:

$ vim '+ exe ":normal i" . expand("%:t") . "^M" . expand("%:e")' +wqa foo.bar; cat foo.bar
foo.bar
bar

:tMsgstr " Muss vor jedem: r oder: e stehen," macht aber :e"nur Sinn, wenn es alleine verwendet wird". An dem Beispiel würde ich mich für letzteres einsetzen, aber interessant, dass sich die Dokumente dort widersprechen.
SnoringFrog

@ SnoringFrog Ich glaube, was es bedeutet, dass Sie nicht tun können :e:t, aber :t:eerlaubt ist, wenn bedeutungslos.
muru

Oh, ich verstehe, wie man das so lesen kann. Das macht dann Sinn.
SnoringFrog

10

Sie können verwenden expand(), sehen:h expand()

In einem Skript können Sie folgendermaßen vorgehen, um den Dateinamen abzurufen:

let file_name = expand('%:t:r')

Um eine Erweiterung zu erhalten, können Sie Folgendes tun:

let extension = expand('%:e')

Die expand()Funktion kann Platzhalter und spezielle Symbole erweitern . Hier habe ich verwendet, %die auf den aktuellen Dateinamen erweitert.

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.