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
-~----------~----~----~----~------~----~------~--~---