Vimscript:如何将当前文件类型作为变量获取

Vimscript:如何将当前文件类型作为变量获取,vim,Vim,我想在vimscript中获取当前文件类型作为变量 我正在创建一个函数,它获取当前文件类型并编辑另一个相应文件类型的文件 例如: 编辑“foo/bar.txt”,想要打开“tmp/other.txt” 编辑“foo/bar.cpp”,想要打开“tmp/other.cpp” 等等。我知道:set ft?在vim中显示文件类型,但我不确定如何捕获它,然后使用它作为新文件字符串的一部分打开另一个文件。您可以通过在设置前加一个符号和来访问设置值。要将文件类型分配给变量,请执行以下等效操作: let

我想在vimscript中获取当前文件类型作为变量

我正在创建一个函数,它获取当前文件类型并编辑另一个相应文件类型的文件

例如:

  • 编辑“foo/bar.txt”,想要打开“tmp/other.txt”
  • 编辑“foo/bar.cpp”,想要打开“tmp/other.cpp”

等等。我知道
:set ft?
在vim中显示文件类型,但我不确定如何捕获它,然后使用它作为新文件字符串的一部分打开另一个文件。

您可以通过在设置前加一个符号和来访问设置值。要将文件类型分配给变量,请执行以下等效操作:

let my_filetype = &filetype
let my_filetype = &ft
因此,对于您的示例,假设当前缓冲区的文件类型已设置,您可以执行以下操作

execute 'edit tmp/other.' . &filetype

请注意,您需要执行表达式,以便在串接字符串之前展开变量。

文件类型和文件后缀不一定相同。例如,如果您正在编辑一个.txt文件,则让zft=&ft将zft设置为“text”。让zfs=fnamemodify(bufname(“%”,:e”)将zfs设置为“txt”。

&filetype
不一定对应于文件扩展名!您真的想为此使用文件类型,还是更愿意像解析
fnamemodify(bufname(“%”,“:t”)
那样解析
bufname(“%”)
,以提取当前文件的扩展名?例如,名为“foo.hpp”的文件具有cpp的
&filetype
。在这种情况下,是否要打开“tmp/other.cpp”或“tmp/other.hpp”?