marked-up Python code

Luc Goossens luc.goossens at cern.ch
Tue Nov 20 08:00:33 EST 2007


Hi Tim,

thanks for your suggestions

I have two questions.
1. can I color the background of the text keeping the normal syntax  
coloring for actual text? can you give some hints on how to do that  
in vim?
2. will the # mark-up lines show in the editor? is there some visual  
clue that something has been hidden?

I will gladly settle for some pointer into the vim documentation,  
which I found already.

many thanks,
Luc

On Nov 20, 2007, at 1:03 PM, Tim Chase wrote:

>> "all" the Python parser has to do is skip the mark-up.
> [snip]
>> I know I can put the mark-up after a # and the problem is
>> solved trivially, but this will not work for all cases (e.g.
>> mark-up of single identifiers) and to be honest I was thinking
>>  of recycling some mark-up capable editor and an existing
>> mark-up language
>
> Comments *are* the way in which you tell Python parser to "skip
> the mark-up".
>
> With a good editor, this is fairly easy to do.  And
> folding/coloring is the job of the editor, not of Python.
>
> I'll use Vim as an example, as it's my preferred tool and I know
> it well enough to offer a solution using it, though surely any
> other good editor can do similarly.
>
> Vim offers two ways to do what you're describing.  First, you can
> color sections by defining your own highlighting/syntax
> augmentation.  Second, you can use folding to hide away bits of
> your code that you don't want to see.
>
> This combo can be used to do something like define several
> markers such as
>
>   # begin instrumenting
>   # end instrumenting
>   # one-line instrumentation
>
> You can then do something like
>
>   :set foldmethod=marker
>   :set foldmarker=#\ begin,#\ end
>
> This will create folds across all your blocks.  You can
> selectively open/close these blocks with
>
>   zR
>
> to open all the folds and
>
>   :g/#begin instrumenting/norm zC
>
> to close just those folds tagged with "begin instrumenting".  The
> two can be mapped into a single keypress, so you can do something
> like
>
>   :nnoremap <f4> zR:g/# begin instrumenting/norm zC<cr>
>
> which will open all the folds and then just close the ones that
> involve instrumenting merely by pressing <f4>
>
> As for the single-line ones, you can use Vim's ":match"
> functionality:
>
>   :match Folded /.*# one-line instrumentation
>
> The "Folded" is a highlighting group (it can be an existing one
> such as "Folded" or "Error", or one you create to give you the
> coloring you want).
>
> Thus, in Vim, the whole thing could be done with a fairly simple
> setup:
>
>   :set foldmethod=marker foldmarker=#\ begin,#\ end
>   :nnoremap <f4> zR:g/# begin instrumentation/norm zC<cr>:match
> Folded /.*# one-line instrumentation/<cr>
>   :nnoremap <f5> zR:g/# begin debugging/norm zC<cr>:match Folded
> /.*# one-line debugging/<cr>
>
> You would then mark up your code with things like
>
>     import pdb; pdb.set_trace() # one-line debugging
>     start = now() # one-line instrumentation
>     do_stuff()
>     # begin instrumentation
>     end = now()
>     delta = end - start
>     # end instrumentation
>
> and then use <f4> to hide your instrumentation code, and <f5> to
> hide your debugging code.  it's a little more complex to invert
> the behavior, but doable.
>
> This can even be augmented to create these blocks for you:
>
>   :vnoremap <s-F4> :'<put! ='# begin instrumentation'<cr>:'>put
> ='# end instrumentation'<cr>
>   :nnoremap <s-F4> A# one-line instrumentation<esc>
>
> which should define two mappings for shift+F4:  the first, in
> visual-mode (with text selected) wraps those lines in the
> begin/end pair.  In normal mode, shift+F4 just appends the
> one-line tag to the end of the line.  Do similarly for shift+F5
> for the debugging.
>
> Hope this gives you some ideas to work with.  And perhaps
> advocates of other editors can chime in with how it would be done
> there.
>
> -tkc
>
>
>
>
>
>
>
>




More information about the Python-list mailing list