有没有一种方法可以使用vimscript获取文件的名称和扩展名?

如果这样,我想分别使用名称和扩展名。

评论

“一份文件”?哪个文件?当前缓冲区中的那个?搜索路径中某处的文件?

用户通过`vim <文件名>
打开的文件
如何查看当前文件的完整路径的可能重复项?

我不想要完整的路径。我只想要文件的名称和扩展名。不是路径,我也想在vimscript中使用它。

是的,这两个答案实际上都在链接的问题中(特别是CharlesL的答案)...

#1 楼

: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


您可以使用expand函数扩展它们并获取它们的值:

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


>例如:

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


评论


:t“必须在任何:r或:e之前,”但:e“仅在单独使用时才有意义”。作为示例,我会支持后者,但是有趣的是文档在那里相互矛盾。

–SnoringFrog
15年3月9日在20:50

@SnoringFrog我相信这意味着你不能做:e:t,但是:t:e是允许的,如果没有意义的话。

–muru
15年3月9日在20:54

哦,我知道怎么可以这样读。那很有道理。

–SnoringFrog
15年3月9日在20:56

#2 楼

您可以使用expand(),请参阅:h expand()

在脚本中,您可以执行以下操作以获取文件名:

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


要获取扩展名,您可以请执行:

let extension = expand('%:e')



expand()函数可以扩展通配符和特殊符号。在这里,我使用了%,它可以扩展为当前文件名。