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.

iProgram
quelle
"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
muru
quelle
: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.

Runium
quelle