我最近刚刚从Textmate设置了我的Vim环境,后来沉迷于它的模态输入.
但是,在Vim中,语法高亮似乎并不那么美观.我用C++编写代码,因为函数调用和类名不能突出显示,所以代码更难以阅读.我玩了一些配色方案,但找不到任何对应"类名"或"功能名称"的字段.
在下图中,注意MacVim右侧的突出显示方式DroughtLayer::和*.size()突出显示方式.
Textmate(左)和Vim(右)之间的图片比较http://ivzhao.com/temp/vimHL.png
任何想法如何解决这个问题?它真的让我烦恼,因为我是一个视觉敏感的家伙.
c++ vim textmate 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个文件中,右边的文件来自我的本地副本,因此具有带扩展名的正确文件名,因此右侧的文件正确启用了语法突出显示.
有没有办法可以利用它为左侧显示的文件设置相同的语法高亮显示?
对此问题的任何替代解决方案也是受欢迎的.
C ++的标准标头通常安装在/usr/include/c++/4.x中(在Linux中)。由于大多数头文件没有任何扩展名(.h,.hpp等),因此vim无法将这些文件的格式识别为C ++。
我在SO中看到了另一个问题,但是在那里发布的解决方案无法解决我的问题。那里的一种解决方案涉及使用,modeline但是标准的C ++头文件不包含vim友好的签名。相反,它们在第一行中包含以下内容:
// <algorithm> -*- C++ -*-
Run Code Online (Sandbox Code Playgroud)
我想我可以搜索该模式(-*- C++ -*-)以检测文件类型。前面提到的SO问题中发布的另一个解决方案实际上就是朝这个方向发展的。答案建议使用:
au BufRead * if search('MagicPattern', 'nw') | setlocal ft=cpp | endif
Run Code Online (Sandbox Code Playgroud)
所以我尝试做:
au BufRead * if search('-*- C++ -*-', 'nw') | setlocal ft=cpp | endif
Run Code Online (Sandbox Code Playgroud)
但它不起作用(即未检测到文件类型)。
使用这种方法是否可以检测文件类型?是否存在任何插件或其他解决方案?
如何在 Vim 中根据文件内容而不是扩展名设置 aa 文件的文件类型?
即使文件没有扩展名,Vim 似乎也有能力读取 shebang 并推断文件类型。如何定义要在文件中查找的任意标志并更改文件类型。例如,如果文件以 开头,/** @flow */则将文件类型设置为javascript.flow.