Answers:
简单的解决方案
键入:setfiletype
(后跟一个空格),然后按Ctrl-d
。
有关:help cmdline-completion
更多信息,请参见vim的命令行。
复杂的解决方案
该解决方案使用该'runtimepath'
选项来获取所有可用的语法目录,然后在这些目录中删除其扩展名的情况下获取vimscript文件的列表。这可能不是最安全的方法,因此欢迎进行改进:
function! GetFiletypes()
" Get a list of all the runtime directories by taking the value of that
" option and splitting it using a comma as the separator.
let rtps = split(&runtimepath, ",")
" This will be the list of filetypes that the function returns
let filetypes = []
" Loop through each individual item in the list of runtime paths
for rtp in rtps
let syntax_dir = rtp . "/syntax"
" Check to see if there is a syntax directory in this runtimepath.
if (isdirectory(syntax_dir))
" Loop through each vimscript file in the syntax directory
for syntax_file in split(glob(syntax_dir . "/*.vim"), "\n")
" Add this file to the filetypes list with its everything
" except its name removed.
call add(filetypes, fnamemodify(syntax_file, ":t:r"))
endfor
endif
endfor
" This removes any duplicates and returns the resulting list.
" NOTE: This might not be the best way to do this, suggestions are welcome.
return uniq(sort(filetypes))
endfunction
然后,您可以以任何所需的方式使用此功能,例如打印列表中的所有值。您可以这样完成:
for f in GetFiletypes() | echo f | endfor
注意,这可能可以压缩很多,就像为了可读性一样。我不会在这里解释所有使用的功能和命令,但是这里是它们的所有帮助页面:
:help 'runtimepath'
:help :let
:help :let-&
:help split()
:help :for
:help expr-.
:help :if
:help isdirectory()
:help glob()
:help fnamemodify()
:help add()
:help uniq()
:help sort()
set filetype<space><c d>
,它会显示一个列表,但html不在列表中。Java不在列表中。如何以与语法格式配置相对应的文件类型来显示文件类型名称?
:setfiletype
在“ set”和“ filetype”之间没有典型的空格。您可以通过:help :setfiletype
和找到更多信息:help ftdetect
。
:setfiletype ht<Ctrl+D>
用来列出以ht开头的文件类型,从而过滤掉不需要的结果。:)
如果您的vim版本足够新(v7.4.2011 +),则可以使用我们现在可以用来帮助定义手动自动完成功能的功能来请求已知文件类型: getcompletion()
:echo getcompletion('', 'filetype')
如果您希望将列表限制为以开头的文件类型'c'
,请致电
:echo getcompletion('c', 'filetype')
等等。
注意:与解析中的文件名和目录名的$VIMRUNTIME/{syntax,filetype}/
解决方案不同,此解决方案'runtimepath'
也会进行分析。据我了解,它看不到使用set ft=foobar
或在自动命令之后动态定义/注册的新文件类型。
您还可以通过运行以下2个命令在终端中打印所有文件类型:
1。
cd $(vim -e -T dumb --cmd 'exe "set t_cm=\<C-M>"|echo $VIMRUNTIME|quit' | tr -d '\015')
2。
cat <(ls -1 ftplugin/*.vim) <(ls -1 syntax/*.vim) | tr '\n' '\0' | xargs -0 -n 1 basename | sort | uniq | cut -f 1 -d '.'
第一个命令只是导航到您的vim运行时路径(对我来说是/ usr / share / vim / vim80)。
第二条命令列出了vim存储文件类型定义的两个文件夹中的所有文件类型名称。
建议对muru的两个命令进行以下改进:
1。
cd $(vim -Nesc '!echo $VIMRUNTIME' -c qa)
2。
find syntax ftplugin -iname '*.vim' -exec basename -s .vim {} + | sort -u
tr
转换换行,只空将其转换回第二天命令,进程替换时,简单的命令分组会做。我建议使用类似以下内容:find syntax ftplugin -iname '*.vim' -exec basename -s .vim {} + | sort -u
vim -Nesc '!echo $VIMRUNTIME' -c qa
, 我认为。
printf
是一个内置)f=({ftplugin,syntax}/*.vim) && f=(${f[@]##*/}) && printf "%s\n" "${f[@]%%.*}" | sort -u
。有关象形文字的说明,请参见Bash手册页中的“参数扩展”。
bash
,“不是真正的文件类型插件...并获得文件类型” sh”的效果”
:setfiletype
(即Tab
在空格后加上),您可以查看列表。不知道这是完整的列表,还是不确定如何将其捕获到某些缓冲区/文件中。