基于当前文件类型,使用文件扩展名进行Vim gf命令。

6

我正在尝试设置我的.vimrc文件,以便gf可以自动处理没有文件扩展名的路径,通过尝试使用与当前文件类型相同的扩展名打开文件。

换句话说,我想要像这样的东西:

autocmd FileType <filetype> setl suffixesadd+=<exts>

其中<exts>是当前<filetype>关联的所有文件扩展名的列表。

例如,我的filetype.vim将FileType“javascript”定义为名称为*.js*.javascript*.es*.jsx*.json的文件,因此每当我编辑JavaScript缓冲区时,如果光标在路径./index上,运行gf应该尝试打开./index.js。如果该文件不存在,则应尝试./index.javascript等。如果文件类型是Python,则应尝试./index.py./index.pyw等。

我相信上面的自动命令应该会为每个FileType产生预期的行为,但我不确定如何做到这一点。


你写的自动命令有什么问题? - And R
1
你把这个打包成了 vim 插件吗?……“我会和 autocmd 一起使用,将当前文件的扩展名添加到 suffixesadd 中”——听起来像是个好主意。 - alexanderbird
3
我主要是在NodeJs的require语句中使用这个东西来跳转文件,并且意识到实际上匹配每个文件类型的_每个_扩展名并不是很有用。现在我只需使用此自动命令添加当前文件扩展名: autocmd BufRead * execute 'setl suffixesadd+=.' . expand('%:e') - Elliot Hatch
1个回答

10

默认扩展名并没有以有用的格式存储在任何地方,因此您需要构建自己的列表并循环遍历它以运行您的自动命令。

例如:

augroup suffixes
    autocmd!

    let associations = [
                \["javascript", ".js,.javascript,.es,.esx,.json"],
                \["python", ".py,.pyw"]
                \]

    for ft in associations
        execute "autocmd FileType " . ft[0] . " setlocal suffixesadd=" . ft[1]
    endfor
augroup END

很失望听到这个。谢谢你的回答,我会将其与一个自动命令一起使用,该命令将当前文件扩展名添加到 suffixesadd 中。 - Elliot Hatch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接