Tux*_*ude 6 vim file-type syntax-highlighting vim-syntax-highlighting
我正在寻找一种方法来确定vim中文件的文件类型,并根据文件类型设置语法高亮.唯一的问题是我无法使用文件扩展名来确定文件类型.
这是我的场景:我使用vimdiff
或gvimdiff
作为我的P4DIFF
工具,它显示本地副本中的文件与perforce服务器中的文件之间的更改.Perforce似乎将perforce服务器中的文件引入/ tmp目录并使用PID
命名文件,例如:
/tmp/tmp.24673.23
Run Code Online (Sandbox Code Playgroud)
这是一个C++源文件.
我在perforce存储库中遇到的最常见的文件类型是C/C++源代码和头文件,Makefile,python脚本,perl脚本,ruby脚本和tcl脚本.
我已经开始使用了modeline
,但是我们树中的大多数源都没有嵌入文件中的这些信息.
这篇文章提到了一种搜索和识别魔术模式的可能方法.我找不到任何一致的魔术模式,我可以获得很高的成功率.
尝试使用file
我的linux盒子上的二进制文件来查看我得到的结果.它似乎很好地识别了C/C++源代码,但是对于Makefile甚至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
Run Code Online (Sandbox Code Playgroud)
笔记:
au VimEnter
行,但通常最好将自动命令放在某个自动命令组au!
中,顶部有一个reset().VimEnter
因为否则diff
或窗口尚未正确初始化vimdiff
可能是由于拆分右侧或左侧的旧文件触发,因此我们考虑两种情况. 2/winnr()
是一个在1到2之间翻转的数学技巧(2/2 = 1,2/1 = 2)