gpt4 book ai didi

vim - 在没有有效文件扩展名的情况下检测vim中的文件类型

转载 作者:行者123 更新时间:2023-12-04 13:45:20 24 4
gpt4 key购买 nike

我正在寻找一种方法来确定 vim 中文件的文件类型并根据文件类型设置语法突出显示。唯一的问题是我不能使用文件扩展名来确定文件类型。

这是我的场景:我使用 vimdiffgvimdiff作为我的 P4DIFF工具,它显示了我的本地副本中的文件与来自 perforce 服务器的文件之间的更改。 Perforce 似乎将 perforce 服务器中的文件引入/tmp 目录并使用 PID命名文件,例如:

/tmp/tmp.24673.23

这是一个 C++ 源文件。

我在 perforce 存储库中遇到的最常见的文件类型是 C/C++ 源文件和头文件、Makefile、python 脚本、perl 脚本、ruby 脚本和 tcl 脚本。
  • 我已经考虑使用 modeline ,但我们树中的大多数源文件中都没有嵌入此信息。
  • This帖子提到了一种可能的搜索和识别魔法模式的方法。我找不到任何能够获得高成功率的一致魔法模式。
  • 尝试使用 file二进制文件在我的 linux 机器上,看看我得到了什么结果。它似乎可以很好地识别 C/C++ 源代码,但对于 Makefiles 甚至 python 脚本(没有 hashbang)都失败了

  • 一件好事是,在比较的 2 个文件中,右侧的文件来自我的本地副本,因此具有正确的文件名和扩展名,从而为右侧的文件正确启用了语法突出显示。

    有没有办法可以利用它为左侧显示的文件设置相同的语法突出显示?

    也欢迎对此问题的任何替代解决方案。

    最佳答案

    这是一个有趣的谜题。 :)

    aug SmartDiffType
    au!
    au VimEnter * :if &diff && len(&ft) | call setwinvar(2/winnr(),'&ft',&ft) | elseif &diff | let &ft=getwinvar(2/winnr(),'&ft') | endif
    aug END

    笔记:
  • 在上面的 4 行中,您只需要 au VimEnter行,但通常将自动命令放在某个自动命令组中并在顶部带有重置 ( au! ) 是一个好习惯。
  • 自动命令 VimEnter因为否则 diff或者 Windows 尚未正确初始化
  • vimdiff可能是由拆分右侧或左侧的旧文件触发的,因此我们考虑这两种情况。
  • 2/winnr()是在 1 和 2 之间翻转的数学技巧 (2/2 = 1, 2/1=2)
  • 关于vim - 在没有有效文件扩展名的情况下检测vim中的文件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15371499/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com