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

如何配置VIM以在文件的不同部分使用不同的语法?,vim,syntax,syntax-highlighting,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"); }; ::JavaScript 函数whatIsThis(){ 返回“示例”; } ::哈斯克尔 mai

我有一个这样的文件:

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

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

:: C
#include <stdio.h>
int main(){
    printf("yes, it is");
};
::JavaScript
函数whatIsThis(){
返回“示例”;
}
::哈斯克尔
main=putStrLn“这是一个例子吗?”
::C
#包括
int main(){
printf(“是的,是”);
};
换句话说,以
::
开头的一行确定下一行的语法,直到找到另一行
。有没有办法配置vim以正确突出显示这些块的语法?

看看我的;它提供了一个
:[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')
看看我的眼睛;它提供了一个
:[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')

如果您希望为每个单独的部分(即特定于文件类型的设置、自定义、映射、命令)提供完整的编辑功能,而不仅仅是特定的语法高亮显示,那么您就无法为每个片段提供单独的缓冲区(因为这些都与缓冲区的文件类型相关)


使用,您可以将原始文件分割为单独的缓冲区(如在拆分窗口中所示),插件会自动将任何更改同步回原始文件。

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


使用,您可以将原始文件分割为单独的缓冲区(如在拆分窗口中所示),插件会自动将任何更改同步回原始文件。

@downvoter,mind deploying?@downvoter,mind deploying?Woa,spot on。我很快会测试的。你为什么写这个?我刚刚想到,评论还是会有问题的,对吗?也就是说,我使用NerdCommenter,我想这取决于文件类型。但这已经是很多了。谢谢。这个插件基本上是从链接的Vim Tips Wiki页面改进而来的。我用它来突出电子邮件中的差异。对于特定于文件类型的完整设置,我会使用另一种方法;看我的第二个答案。哇,没错。我很快会测试的。你为什么写这个?我刚刚想到,评论还是会有问题的,对吗?也就是说,我使用NerdCommenter,我想这取决于文件类型。但这已经是很多了。谢谢。这个插件基本上是从链接的Vim Tips Wiki页面改进而来的。我用它来突出电子邮件中的差异。对于特定于文件类型的完整设置,我会使用另一种方法;见我的第二个答案。