> Hello All!
>
> I've been looking around to see if it is possible to create a script 
> or add a feature that I would use quite a bit.
>
> When editing python code, how much a line is indented sets the scope 
> of the code, as many of you know, however, sometimes with long scopes 
> that are heavily nested, it can be confusing to easily see how many 
> indents you need.
>
> What I would LOVE is to set vim similar to where it shows numbers, but 
> instead, have the number show the number of indents relative to the 
> current setting of ts.
>
> What would happen is this
>
> 	1)  The number is computed by the number of spaces at the lead
> 	(^\s*) / tab space setting (ts)
>
> 	2)  If the number had any remainder (so not zero remainder) this
> 	means something isn't spaced right, set the text color to orange.
>
> 	3)  If ANY tabs (\t) are in the line, set the color to red to
> 	indicate the line needs to be fixed.
>
> I realize computing every line is expensive, but I'd be willing to 
> take that hit on turning this one for some of the difficult functions 
> I write.  It would also be nice if it ran on what was displayed only 
> maybe.
>
> Is this possible?  Or will I need to actually edit the gvim sourcecode 
> for this sort of functionality?
The following seems to do what I think you're describing.  Put it in a 
file called after/syntax/python.vim, somewhere in your .vim directory in 
your home dir.  E.g., mine is at: ~/.vim/after/syntax/python.vim:
==> ~/.vim/after/syntax/python.vim <==
" Match any lines with tabs as PythonTabError
syn match PythonTabError /^.*\t.*$/
" Set up something to match lines w/ leading spaces not divisible by 'ts'
if &l:ts > 1
 	let s:badindent = '^\( \{'.&l:ts.'\}\)* \{1,'.(&l:ts-1).'\}[^ ].*$'
 	let s:badindent = ':syn match PythonSpacingError /'.s:badindent.'/'
 	exe s:badindent
endif
" PythonSpacingErrors should be orange (assumes 256-color terminal)
hi PythonSpacingError ctermbg=208 ctermfg=0 guifg=#ff9900
" PythonTabErrors should be red (just show the line the same as an error)
hi link PythonTabError Error
======================================
An example of the 'badindent' regular expression that's generated when 
'ts=4':
syn match PythonSpacingError /^\( \{4\}\)* \{1,3\}[^ ].*$/
That matches:
^              -- start of line
\( \{4\}\)*    -- any number of correct indentations
  \{1,3\}       -- followed by a number of spaces not divisible by 'ts'
[^ ]           -- followed by a non-space
.*$            -- and the rest of the line
For more on everything:
:help :syn-match
:help :highlight
:help :highlight-link
:help after-directory
-- 
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
 
No comments:
Post a Comment