On Wed, 15 Sep 2010, hsitz wrote:
On Sep 15, 7:16 pm, hsitz wrote:
1. The code in my Python region highlights perfectly.
2. The code in my Perl region highlights properly, but text in the
main document after the Perl region has some Perl highlighting
applied (mostly pink or magena, I think, I forget which syntax
element).
3. The code in my R region doesn't get highlighted at all, although
it gets highlighted fine when it's in its own separate 'rcode.r'
document.
Are these bugs, limitations, or am I doing something wrong? Do the
syntax files themselves have to be written a certain way to be
compatible with 'syntax include'?
In playing a bit more, it seems my problem with R may be that only one
'syntax include' is allowed at a time. When the R 'syntax include' is
the only one in my main syntax file the nested R region gets
highlighted properly. When the R 'syntax include' is the second
'syntax include' after the Python one, then only the Python nested
region gets highlighted. So it seems only the first 'syntax include'
is processed or recognized. Does that sound right? Only one nested
language can be highlighted at a time?
That's the gist -- most syntax files are designed to be "main" syntax
files. But, it's not too hard to work around. Most of them set a
'b:current_syntax' variable to prevent other syntax files from being
loaded. So, you can just 'unlet' it.
==> ~/.vim/syntax/combined.vim <==
syn include @inc-perl syntax/perl.vim
unlet b:current_syntax
syn include @inc-python syntax/python.vim
unlet b:current_syntax
syn include @inc-r syntax/r.vim
unlet b:current_syntax
syn region orgPerl matchgroup=OrgLang
\ start=/^src-Perl.*$/ end=/^end-Perl.*$/
\ contai...@inc-perl
\ fold
syn region orgPython matchgroup=OrgLang
\ start=/^src-Python.*$/ end=/^end-Python.*$/
\ contai...@inc-python
\ fold
syn region orgR matchgroup=OrgLang
\ start=/^src-R.*$/ end=/^end-R.*$/
\ contai...@inc-r
\ fold
hi link OrgLang Comment
let b:current_syntax = 'combined'
==================================
But that's an awful lot of repeated code. Adding a few syntax types,
and only adding the languages in an array:
==> ~/.vim/syntax/combined.vim <== (attached)
let s:langs = [ 'Perl', 'Python', 'R', 'PHP', 'XML' ]
let s:lower = map(copy(s:langs), 'tolower(v:val)')
" load the languages to include
for l in s:lower
unlet! b:current_syntax
exe "syn include @inc-".l." syntax/".l.".vim"
endfor
" set up the src-Lang/end-Lang regions
for L in s:langs
let l = tolower(L)
exe "syn region org".L." matchgroup=OrgLang"
\ "start=/^src-".L.".*$/ end=/^end-".L.".*$/"
\ "contai...@inc-".l
\ "fold"
endfor
hi def link OrgLang Comment
let b:current_syntax = 'combined'
==================================
Works well for me on the attached testfile.combined.
Still have the problem with the Perl highlighting continuing in
non-Perl text down beyond the Perl region.
I'm not seeing extra highlighting. But I am seeing bizarre colors. The
'src-R' and 'src-Perl' sections in particular. Not sure what's up with
that. Perhaps someone else will comment.
--
Best,
Ben
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
This is a normal text file, except it has included code regions.
src-Perl from somewhere
sub asdf {
my ($var, $param) = @_;
print "Got $var and $param\n";
}
end-Perl
This is back to regular text?
src-Python
class y(Object):
def foo(self, x=None):
if x:
print "Got %s" % (x)
end-Python
Some comments about the above Python. (It sucks.)
src-R
library(stats)
tocor <- data.frame(read.table("some-data.tab"))
attach(tocor)
normalcor <- cor(V2,V3)
end-R
What's that R doing?
src-XML
<?xml version="1.0" encoding="UTF-8"?>
<some>
<x:test data="&ersand"/>
<y:a><![CDATA[
foo <> &
]]></y:a>
</some>
end-XML
PHP syntax highlighting handles embedding well (since it already has to handle
PHP-within-HTML).
src-PHP
<?php
function something($a, $var) {
echo "Got a variable? $a and $var\n";
}
$sql = <<<SQL
select id, max(dimension) as maxdim
from nonexistent
where dimension > 20
SQL;
?><html>
<head><title>A PHP page</title></head>
<body><p>In a document! <?= something(1,2) ?></p></body>
</html>
end-PHP
" vim:set ft=combined ts=3 sts=3 sw=3 et:
let s:langs = [ 'Perl', 'Python', 'R', 'PHP', 'XML' ]
let s:lower = map(copy(s:langs), 'tolower(v:val)')
" load the languages to include
for l in s:lower
unlet! b:current_syntax
exe "syn include @inc-".l." syntax/".l.".vim"
endfor
" set up the src-Lang/end-Lang regions
for L in s:langs
let l = tolower(L)
exe "syn region org".L." matchgroup=OrgLang"
\ "start=/^src-".L.".*$/ end=/^end-".L.".*$/"
\ "contai...@inc-".l
\ "fold"
endfor
hi def link OrgLang Comment
let b:current_syntax = 'combined'