JohnBeckett (talk | contribs) (Since we're now keeping this, I have added a todo and deleted comments what I earlier put in tip 6) |
Carpetsmoker (talk | contribs) m (→See also: use {{script}} for rainbow_parenthesis) |
||
Line 49: | Line 49: | ||
==See also== |
==See also== |
||
+ | *{{script|id=1561|text=Rainbow Parenthsis Bundle : Colors Parenthsis}} |
||
− | *[http://code.google.com/p/vim-scripts/wiki/RainbowParenthsisBundle rainbow_parenthesis] |
||
*[[Highlight matching brackets]] |
*[[Highlight matching brackets]] |
||
*[[Highlighting whitespaces at end of line]] |
*[[Highlighting whitespaces at end of line]] |
Revision as of 02:12, 23 April 2008
Duplicate tip
This tip is very similar to the following:
These tips need to be merged – see the merge guidelines.
created June 26, 2004 · complexity basic · author joerga · version 6.0
I was getting far too many errors creating ruby cgi-scripts due to misplaced curly braces, so here's my solution.
The following ruby script generates a pattern (see below) used for highlighting a codesection from the curly brace under the cursor to the matching brace. It currently finds 12 recursions, you can generate larger patterns reaching deeper by changing the parameter (n=12) in method "generate".
# ruby script def next_iteration(text) text.gsub( /#{Regexp.quote("a%(x)*b")}/, "a%(%(a%(x)*b)|%(x))*b" ) end def generate( text, n ) 1.upto(n){ |i| text = next_iteration( text ) } text end def to_pattern(text) text.gsub(/x/,"\\n|[^ab]").gsub(/a/,"\\{").gsub(/b/,"\\}") end ax = generate("a%(x)*b", 12).sub(/b$/,"") # a = starting brace, b = ending brace, x = characters in between puts to_pattern( "/\\v%(%##{ax}b)|%(#{ax}%#b)/" )
"a" and "b" are synonyms for the starting/ending brace, "x" holds the characters in between, if any. Using recursion, the original pattern "a(x)*b" is expanded to the monstrous pattern seen below.
Note: Use %() for grouping in the pattern, as the normal (captivating) variant cannot be used that often in one pattern.
Append the following to your vimrc:
highlight ShowMatches guibg=darkgrey guifg=white au! Cursorhold * exe 'match ShowMatches /\v%(%#\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(\n|[^\{\}])*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(%(\{%(\n|[^\{\}])*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*\})|%(\n|[^\{\}]))*%#\})/' set ut=30
Up to now, creating a pattern for mixing curly braces and brackets hasn't been very successful. The resulting patterns grow far too fast.
See also
- Rainbow Parenthsis Bundle : Colors Parenthsis
- Highlight matching brackets
- Highlighting whitespaces at end of line
- Moving to matching braces for simple methods to select a block
Comments
TO DO
Is the above useful for Vim 7?
- It is not the same thing as matchparen
- --Luc Hermitte 14:11, 7 September 2007 (UTC)
Need to clarify what the tip actually does (a reader shouldn't have to decode stuff to work this out). What's that ruby script for, and why does it start the tip? Is this tip superseded by rainbow_parenthesis?
Is rainbow_parenthesis just script#1561? The text on that page doesn't give much of a description. Someone needs to install it and tell readers what it does. Or, maybe we should delete this tip if no one wants to fix it by, say, July 2008. --JohnBeckett 01:58, 23 April 2008 (UTC)
I tried this and in certain C files I am getting ERROR
E363: pattern caused out-of-stack error
It crashes Vim 6.3