如何配置VIM以在文件的不同部分使用不同的语法?

时间:2014-10-03 18:15:51

标签: vim syntax syntax-highlighting

我有一个像这样的文件:

:: JavaScript
function whatIsThis(){
    return "an example";
}

:: Haskell
main = putStrLn "is this is an example?"

:: C
#include <stdio.h>
int main(){
    printf("yes, it is");
};

换句话说,以::开头的行确定下一行的语法,直到找到另一个::。有没有办法配置vim以正确突出显示这些块的语法?

2 个答案:

答案 0 :(得分:3)

看看我的SyntaxRange plugin;它提供了:[range]SyntaxInclude命令,以及用于定义区域(基于开始和结束模式)以使用特定语法突出显示的功能。以你的例子:

call SyntaxRange#IncludeEx('start="^:: Haskell" end="^::"me=e-3', 'haskell')
call SyntaxRange#IncludeEx('start="^:: C" end="^::"me=e-3', 'c')
call SyntaxRange#IncludeEx('start="^:: JavaScript" end="^::"me=e-3', 'javascript')

答案 1 :(得分:1)

如果您希望为每个单独的部分(即文件类型特定的设置,自定义,映射,命令)具有完整的编辑功能,而不仅仅是特定的语法突出显示,那么您不会为每个片段设置单独的缓冲区(因为这些都与缓冲区的文件类型有关。)

使用NrrwRgn - A Narrow Region Plugin similar to Emacs,您可以将原始文件剪切为单独的缓冲区(例如在拆分窗口中显示),插件会自动将所有更改同步回原始文件。