Stahlman Family wrote:
> 
> 
> Lenin Lee wrote:
>> I want to write notes and save them into plain text files, in my notes,
>> there are always some pieces of code.
>>
>> I want to apply syntax color of that language only to the block of code, is
>> there a way to do so ?
> 
> I think the following tip from the Vim tips wiki describes how to do 
> what you want.
> http://vim.wikia.com/wiki/Different_syntax_highlighting_within_regions_of_a_file
> 
> If you want to highlight the plain text (non-code) within your file with 
> arbitrary formats and colors (i.e., like rtf highlighting), you could 
> use the Txtfmt plugin.
> http://www.vim.org/scripts/script.php?script_id=2208
> 
> Here's a quick example of how I included C++ and Txtfmt regions within 
> the same file.
> 
> --- inside snip.vim ---
> :syntax on
> :syntax include @CPP syntax/cpp.vim
> :syntax region cppSnip matchgroup=Snip start="@begin=cpp@" 
> end="@end=cpp@" contai...@cpp
> :hi link Snip SpecialComment
> 
> :syntax include @TXTFMT syntax/txtfmt.vim
> :syntax include ftplugin/txtfmt.vim
> :syntax region txtfmtSnip matchgroup=Snip start="@begin=txtfmt@" 
> end="@end=txtfmt@" contai...@txtfmt
> :hi link Snip SpecialComment
> 
> --- inside snip.txt ---
> @begin=cpp@
> ... C++ code here...
> @end=cpp@
> 
> @begin=txtfmt@
> ...Plain text highlighted with Txtfmt here...
> @end=txtfmt@
> 
> Note that you have to source snip.vim from within snip.txt. You can do 
> so manually...
> :so snip.vim
> ...but a better approach might be to use an autocommand: e.g., something 
> like...
> au! BufRead,BufNewFile *.snip         runtime syntax/snip.vim

If you're using something like Txtfmt to highlight the non-code portions 
of the file, you may not want to have to enclose these sections within 
explicit @begin / @end markers.

The following example supports C++ and Perl code blocks with Txtfmt 
regions at the top-level (i.e., outside any snippet begin/end markers), 
with a very slight modification to Ivan Tischenko's TextEnableCodeSnip 
function.

*** Modification to TextEnableCodeSnip ***
Change...
   \ contains=@'.group
...at the end of the function to...
   \ contains=@'.group
   \ .' containedin=Tf.*'

This permits the various code snippet blocks to be recognized *inside* 
the Txtfmt syntax regions. Of course, if you want to use a markup syntax 
other than Txtfmt for your plain text regions, you would change Tf.* to 
a regular expression matching the other script's region names.

--- snip.vim ---
:syntax on
:runtime syntax/txtfmt.vim
:runtime ftplugin/txtfmt.vim
unlet! b:current_syntax

call TextEnableCodeSnip('cpp', '@begin=cpp@', '@end=cpp@', 'SpecialComment')
call TextEnableCodeSnip('perl', '@begin=perl@', '@end=perl@', 
'SpecialComment')

Note that you would need to ensure that the TextEnableCodeSnip function 
definition is sourced before snip.vim: e.g., you could put it in a file 
within your plugin directory, or in your .vimrc.

Brett Stahlman

> 
> Brett Stahlman
> 
>> Thanks !
>>
> 
> > 
> 

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_use" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Reply via email to