tomkersten-vixploder 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +105 -0
  3. data/PostInstall.txt +21 -0
  4. data/README.rdoc +131 -0
  5. data/Rakefile +21 -0
  6. data/bin/256colors2.pl +63 -0
  7. data/bin/colortest +365 -0
  8. data/bin/vixplode +10 -0
  9. data/lib/dotfiles/aliases +30 -0
  10. data/lib/dotfiles/gvimrc +20 -0
  11. data/lib/dotfiles/vim/.VimballRecord +2 -0
  12. data/lib/dotfiles/vim/after/ftplugin/actionscript_snippets.vim +9 -0
  13. data/lib/dotfiles/vim/after/ftplugin/aspvbs_snippets.vim +17 -0
  14. data/lib/dotfiles/vim/after/ftplugin/c_snippets.vim +58 -0
  15. data/lib/dotfiles/vim/after/ftplugin/css_snippets.vim +30 -0
  16. data/lib/dotfiles/vim/after/ftplugin/django_model_snippets.vim +61 -0
  17. data/lib/dotfiles/vim/after/ftplugin/django_template_snippets.vim +32 -0
  18. data/lib/dotfiles/vim/after/ftplugin/f-script_snippets.vim +14 -0
  19. data/lib/dotfiles/vim/after/ftplugin/haskell_snippets.vim +9 -0
  20. data/lib/dotfiles/vim/after/ftplugin/html_snippets.vim +57 -0
  21. data/lib/dotfiles/vim/after/ftplugin/java_snippets.vim +52 -0
  22. data/lib/dotfiles/vim/after/ftplugin/javascript_snippets.vim +10 -0
  23. data/lib/dotfiles/vim/after/ftplugin/latex_snippets.vim +13 -0
  24. data/lib/dotfiles/vim/after/ftplugin/logo_snippets.vim +9 -0
  25. data/lib/dotfiles/vim/after/ftplugin/markdown_snippets.vim +10 -0
  26. data/lib/dotfiles/vim/after/ftplugin/movable_type_snippets.vim +14 -0
  27. data/lib/dotfiles/vim/after/ftplugin/objc_snippets.vim +53 -0
  28. data/lib/dotfiles/vim/after/ftplugin/ocaml_snippets.vim +26 -0
  29. data/lib/dotfiles/vim/after/ftplugin/perl_snippets.vim +23 -0
  30. data/lib/dotfiles/vim/after/ftplugin/php_snippets.vim +30 -0
  31. data/lib/dotfiles/vim/after/ftplugin/phpdoc_snippets.vim +19 -0
  32. data/lib/dotfiles/vim/after/ftplugin/propel_snippets.vim +14 -0
  33. data/lib/dotfiles/vim/after/ftplugin/python_snippets.vim +202 -0
  34. data/lib/dotfiles/vim/after/ftplugin/rails_snippets.vim +54 -0
  35. data/lib/dotfiles/vim/after/ftplugin/ruby_snippets.vim +32 -0
  36. data/lib/dotfiles/vim/after/ftplugin/sh_snippets.vim +12 -0
  37. data/lib/dotfiles/vim/after/ftplugin/slate_snippets.vim +19 -0
  38. data/lib/dotfiles/vim/after/ftplugin/smarty_snippets.vim +35 -0
  39. data/lib/dotfiles/vim/after/ftplugin/symfony_snippets.vim +21 -0
  40. data/lib/dotfiles/vim/after/ftplugin/tcl_snippets.vim +14 -0
  41. data/lib/dotfiles/vim/after/ftplugin/template_toolkit_snippets.vim +13 -0
  42. data/lib/dotfiles/vim/after/ftplugin/tex_snippets.vim +13 -0
  43. data/lib/dotfiles/vim/after/ftplugin/xhtml_snippets.vim +48 -0
  44. data/lib/dotfiles/vim/autoload/fakeclip.vim +253 -0
  45. data/lib/dotfiles/vim/autoload/rails.vim +4377 -0
  46. data/lib/dotfiles/vim/autoload/rubycomplete.vim +802 -0
  47. data/lib/dotfiles/vim/colors/inkpot.vim +212 -0
  48. data/lib/dotfiles/vim/colors/ir_black.vim +212 -0
  49. data/lib/dotfiles/vim/colors/ir_black_mod.vim +213 -0
  50. data/lib/dotfiles/vim/colors/railscasts.vim +100 -0
  51. data/lib/dotfiles/vim/colors/rubyblue.vim +74 -0
  52. data/lib/dotfiles/vim/colors/twilight.vim +75 -0
  53. data/lib/dotfiles/vim/colors/twilight2.vim +74 -0
  54. data/lib/dotfiles/vim/colors/wombat256.vim +302 -0
  55. data/lib/dotfiles/vim/compiler/eruby.vim +41 -0
  56. data/lib/dotfiles/vim/compiler/ruby.vim +68 -0
  57. data/lib/dotfiles/vim/compiler/rubyunit.vim +35 -0
  58. data/lib/dotfiles/vim/doc/NERD_tree.txt +1235 -0
  59. data/lib/dotfiles/vim/doc/fakeclip.txt +190 -0
  60. data/lib/dotfiles/vim/doc/matchit.txt +406 -0
  61. data/lib/dotfiles/vim/doc/project.txt +710 -0
  62. data/lib/dotfiles/vim/doc/rails.txt +1123 -0
  63. data/lib/dotfiles/vim/doc/snippets_emu.txt +354 -0
  64. data/lib/dotfiles/vim/doc/surround.txt +218 -0
  65. data/lib/dotfiles/vim/doc/tags +433 -0
  66. data/lib/dotfiles/vim/filetype.vim +13 -0
  67. data/lib/dotfiles/vim/ftdetect/gist.vim +3 -0
  68. data/lib/dotfiles/vim/ftdetect/ruby.vim +14 -0
  69. data/lib/dotfiles/vim/ftplugin/eruby.vim +101 -0
  70. data/lib/dotfiles/vim/ftplugin/ruby.vim +230 -0
  71. data/lib/dotfiles/vim/indent/eruby.vim +73 -0
  72. data/lib/dotfiles/vim/indent/ruby.vim +373 -0
  73. data/lib/dotfiles/vim/plugin/NERD_tree.vim +3536 -0
  74. data/lib/dotfiles/vim/plugin/comments.vim +321 -0
  75. data/lib/dotfiles/vim/plugin/fakeclip.vim +174 -0
  76. data/lib/dotfiles/vim/plugin/fuzzyfinder.vim +1676 -0
  77. data/lib/dotfiles/vim/plugin/fuzzyfinder_textmate.vim +150 -0
  78. data/lib/dotfiles/vim/plugin/gist.vim +241 -0
  79. data/lib/dotfiles/vim/plugin/gitdiff.vim +141 -0
  80. data/lib/dotfiles/vim/plugin/matchit.vim +812 -0
  81. data/lib/dotfiles/vim/plugin/mru.vim +787 -0
  82. data/lib/dotfiles/vim/plugin/rails.vim +310 -0
  83. data/lib/dotfiles/vim/plugin/rspec.vim +12 -0
  84. data/lib/dotfiles/vim/plugin/snippets.vim +17 -0
  85. data/lib/dotfiles/vim/plugin/snippetsEmu.vim +973 -0
  86. data/lib/dotfiles/vim/plugin/supertab.vim +531 -0
  87. data/lib/dotfiles/vim/plugin/surround.vim +632 -0
  88. data/lib/dotfiles/vim/ref_vimrc +80 -0
  89. data/lib/dotfiles/vim/ruby/fuzzy_file_finder.rb +353 -0
  90. data/lib/dotfiles/vim/syntax/eruby.vim +85 -0
  91. data/lib/dotfiles/vim/syntax/haml.vim +113 -0
  92. data/lib/dotfiles/vim/syntax/mkd.vim +86 -0
  93. data/lib/dotfiles/vim/syntax/ruby.vim +324 -0
  94. data/lib/dotfiles/vim/syntax/sass.vim +93 -0
  95. data/lib/dotfiles/vimrc +269 -0
  96. data/lib/vixplode/cli.rb +73 -0
  97. data/lib/vixploder.rb +6 -0
  98. data/script/console +10 -0
  99. data/script/destroy +14 -0
  100. data/script/generate +14 -0
  101. data/spec/spec.opts +1 -0
  102. data/spec/spec_helper.rb +10 -0
  103. data/spec/vixplode_cli_spec.rb +15 -0
  104. data/spec/vixploder_spec.rb +7 -0
  105. data/tasks/rspec.rake +21 -0
  106. metadata +202 -8
@@ -0,0 +1,190 @@
1
+ *fakeclip.txt* pseudo clipboard register for non-GUI version of Vim
2
+
3
+ Version 0.2.1
4
+ Script ID: 2098
5
+ Copyright (C) 2007-2008 kana <http://whileimautomaton.net/>
6
+ License: MIT license {{{
7
+ Permission is hereby granted, free of charge, to any person obtaining
8
+ a copy of this software and associated documentation files (the
9
+ "Software"), to deal in the Software without restriction, including
10
+ without limitation the rights to use, copy, modify, merge, publish,
11
+ distribute, sublicense, and/or sell copies of the Software, and to
12
+ permit persons to whom the Software is furnished to do so, subject to
13
+ the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be included
16
+ in all copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
+ }}}
26
+
27
+ CONTENTS *fakeclip-contents*
28
+
29
+ Introduction |fakeclip-introduction|
30
+ Interface |fakeclip-interface|
31
+ Key Mappings |fakeclip-key-mappings|
32
+ Bugs |fakeclip-bugs|
33
+ Changelog |fakeclip-changelog|
34
+
35
+
36
+
37
+
38
+ ==============================================================================
39
+ INTRODUCTION *fakeclip-introduction*
40
+
41
+ *fakeclip* is a Vim plugin to provide pseudo clipboard register (|quotestar|
42
+ or |quoteplus|) for non-GUI version of Vim on the following platforms:
43
+
44
+ - Cygwin
45
+ - Mac OS X
46
+
47
+ fakeclip also supports the following stuff as a pseudo register:
48
+
49
+ - GNU screen (the paste buffer)
50
+
51
+
52
+ Requirements:
53
+ - Vim 7.0 or later
54
+
55
+
56
+
57
+
58
+ ==============================================================================
59
+ INTERFACE *fakeclip-interface*
60
+
61
+ ------------------------------------------------------------------------------
62
+ KEY MAPPINGS *fakeclip-key-mappings*
63
+
64
+ [count]<Plug>(fakeclip-y){motion} *<Plug>(fakeclip-y)*
65
+ [count]<Plug>(fakeclip-Y) *<Plug>(fakeclip-Y)*
66
+ {Visual}<Plug>(fakeclip-y) *v_<Plug>(fakeclip-y)*
67
+ {Visual}<Plug>(fakeclip-Y) *v_<Plug>(fakeclip-Y)*
68
+ Same as |y| or |Y|, but yank into the clipboard.
69
+
70
+ [count]<Plug>(fakeclip-p) *<Plug>(fakeclip-p)*
71
+ [count]<Plug>(fakeclip-P) *<Plug>(fakeclip-P)*
72
+ [count]<Plug>(fakeclip-gp) *<Plug>(fakeclip-gp)*
73
+ [count]<Plug>(fakeclip-gP) *<Plug>(fakeclip-gP)*
74
+ Same as |p|, |P|, |gp| or |gP|, but put from the
75
+ clipboard.
76
+ *i_<Plug>(fakeclip-insert)*
77
+ <Plug>(fakeclip-insert) *c_<Plug>(fakeclip-insert)*
78
+ Insert the content of the clipboard like |i_CTRL-R|.
79
+
80
+ [count]<Plug>(fakeclip-screen-y){motion} *<Plug>(fakeclip-screen-y)*
81
+ [count]<Plug>(fakeclip-screen-Y) *<Plug>(fakeclip-screen-Y)*
82
+ {Visual}<Plug>(fakeclip-screen-y) *v_<Plug>(fakeclip-screen-y)*
83
+ {Visual}<Plug>(fakeclip-screen-Y) *v_<Plug>(fakeclip-screen-Y)*
84
+ Same as |y| or |Y|, but yank into the paste buffer of
85
+ GNU screen.
86
+
87
+ [count]<Plug>(fakeclip-screen-p) *<Plug>(fakeclip-screen-p)*
88
+ [count]<Plug>(fakeclip-screen-P) *<Plug>(fakeclip-screen-P)*
89
+ [count]<Plug>(fakeclip-screen-gp) *<Plug>(fakeclip-screen-gp)*
90
+ [count]<Plug>(fakeclip-screen-gP) *<Plug>(fakeclip-screen-gP)*
91
+ Same as |p|, |P|, |gp| or |gP|, but put from the paste
92
+ buffer of the GNU screen.
93
+ *i_<Plug>(fakeclip-screen-insert)*
94
+ <Plug>(fakeclip-screen-insert) *c_<Plug>(fakeclip-screen-insert)*
95
+ Insert the content of the paste buffer of the GNU
96
+ screen like |i_CTRL-R|.
97
+
98
+
99
+ *g:fakeclip_no_default_key_mappings*
100
+ *:FakeclipDefaultKeyMappings*
101
+ Fakeclip will define the following key mappings. If you don't want to define
102
+ these default key mappings, define |g:fakeclip_no_default_key_mappings| before
103
+ this plugin is loaded (e.g. in your |vimrc|). You can also use
104
+ |:FakeclipDefaultKeyMappings| to redefine these key mappings. This command
105
+ doesn't override existing {lhs}s unless [!] is given.
106
+
107
+ modes {lhs} {rhs} ~
108
+ ----- ------ ----------------------- ~
109
+ nv "+y <Plug>(fakeclip-y)
110
+ nv "*y <Plug>(fakeclip-y)
111
+ n "+yy <Plug>(fakeclip-Y)
112
+ n "*yy <Plug>(fakeclip-Y)
113
+ nv "+Y <Plug>(fakeclip-Y)
114
+ nv "*Y <Plug>(fakeclip-Y)
115
+ nv "+p <Plug>(fakeclip-p)
116
+ nv "*p <Plug>(fakeclip-p)
117
+ nv "+P <Plug>(fakeclip-P)
118
+ nv "*P <Plug>(fakeclip-P)
119
+ nv "+gp <Plug>(fakeclip-gp)
120
+ nv "*gp <Plug>(fakeclip-gp)
121
+ nv "+gP <Plug>(fakeclip-gP)
122
+ nv "*gP <Plug>(fakeclip-gP)
123
+ ic <C-r>+ <Plug>(fakeclip-insert)
124
+ ic <C-r>* <Plug>(fakeclip-insert)
125
+ nv "&y <Plug>(fakeclip-screen-y)
126
+ n "&yy <Plug>(fakeclip-screen-Y)
127
+ nv "&Y <Plug>(fakeclip-screen-Y)
128
+ nv "&p <Plug>(fakeclip-screen-p)
129
+ nv "&P <Plug>(fakeclip-screen-P)
130
+ nv "&gp <Plug>(fakeclip-screen-gp)
131
+ nv "&gP <Plug>(fakeclip-screen-gP)
132
+ ic <C-r>& <Plug>(fakeclip-screen-insert)
133
+
134
+
135
+
136
+
137
+ ==============================================================================
138
+ BUGS *fakeclip-bugs*
139
+
140
+ (a) This plugin just provide pseudo clipboard register for ordinary editing.
141
+ So |getreg()|, |setreg()|, |expr-register| and other interface on clipboard
142
+ register are not supported.
143
+
144
+ (b) The characteristic (i.e., characterwise, linewise or blockwise) of the
145
+ clipboard content is not remembered. It will be linewise if each line of the
146
+ clipboard content ends with a newline, otherwise it will be characterwise.
147
+
148
+ (c) Executing <Plug>(fakeclip-y) in Normal mode, the display of 'showcmd' is
149
+ different from the ordinary one.
150
+
151
+ (d) <Plug>(fakeclip-y) in Normal mode doesn't accept "y" as a linewise
152
+ {motion} like the built-in |y|.
153
+
154
+ (e) On Mac OS X, you have to set a proper value to the environment variable
155
+ __CF_USER_TEXT_ENCODING. It caontins :-separated values and the 2nd value
156
+ means the character encoding which is used to translate string data between
157
+ GUI and Terminal. For example, if you work on Terminal with UTF-8,
158
+ the 2nd value of __CF_USER_TEXT_ENCODING must be set to "0x08000100". See the
159
+ following URI for the magic values to specify character encodings:
160
+
161
+ http://developer.apple.com/documentation/CoreFoundation/Reference/CFStringRef/
162
+
163
+
164
+
165
+
166
+ ==============================================================================
167
+ CHANGELOG *fakeclip-changelog*
168
+
169
+ 0.2.1 2008-10-24T16:18:32+09:00
170
+ - Refactor.
171
+ - Support the paste buffer of GNU screen as a pseudo register.
172
+
173
+ 0.2.0 2008-07-14T14:09:49+09:00
174
+ - Rename as "fakeclip" (the old name is "cygclip").
175
+ - Support Mac OS X.
176
+ - Autoloaded.
177
+
178
+ 0.1 2007-12-27T22:47:34+09:00
179
+ - Modify to automatically define the default key mappings as this
180
+ plugin is loaded. See |g:fakeclip_no_default_key_mappings| for how
181
+ to suppress this behavior.
182
+
183
+ 0.0 2007-08-13
184
+ - First release.
185
+
186
+
187
+
188
+
189
+ ==============================================================================
190
+ vim:tw=78:ts=8:ft=help:norl:fdm=marker:
@@ -0,0 +1,406 @@
1
+ *matchit.txt* Extended "%" matching
2
+
3
+ For instructions on installing this file, type
4
+ :help matchit-install
5
+ inside Vim.
6
+
7
+ For Vim version 6.3. Last change: 2007 Aug 29
8
+
9
+
10
+ VIM REFERENCE MANUAL by Benji Fisher
11
+
12
+ *matchit* *matchit.vim*
13
+
14
+ 1. Extended matching with "%" |matchit-intro|
15
+ 2. Activation |matchit-activate|
16
+ 3. Configuration |matchit-configure|
17
+ 4. Supporting a New Language |matchit-newlang|
18
+ 5. Known Bugs and Limitations |matchit-bugs|
19
+
20
+ The functionality mentioned here is a plugin, see |add-plugin|.
21
+ This plugin is only available if 'compatible' is not set.
22
+ You can avoid loading this plugin by setting the "loaded_matchit" variable
23
+ in your |vimrc| file: >
24
+ :let loaded_matchit = 1
25
+
26
+ {Vi does not have any of this}
27
+
28
+ ==============================================================================
29
+ 1. Extended matching with "%" *matchit-intro*
30
+
31
+ *matchit-%*
32
+ % Cycle forward through matching groups, such as "if", "else", "endif",
33
+ as specified by |b:match_words|.
34
+
35
+ *g%* *v_g%* *o_g%*
36
+ g% Cycle backwards through matching groups, as specified by
37
+ |b:match_words|. For example, go from "if" to "endif" to "else".
38
+
39
+ *[%* *v_[%* *o_[%*
40
+ [% Go to [count] previous unmatched group, as specified by
41
+ |b:match_words|. Similar to |[{|.
42
+
43
+ *]%* *v_]%* *o_]%*
44
+ ]% Go to [count] next unmatched group, as specified by
45
+ |b:match_words|. Similar to |]}|.
46
+
47
+ *v_a%*
48
+ a% In Visual mode, select the matching group, as specified by
49
+ |b:match_words|, containing the cursor. Similar to |v_a[|.
50
+ A [count] is ignored, and only the first character of the closing
51
+ pattern is selected.
52
+
53
+ In Vim, as in plain vi, the percent key, |%|, jumps the cursor from a brace,
54
+ bracket, or paren to its match. This can be configured with the 'matchpairs'
55
+ option. The matchit plugin extends this in several ways:
56
+
57
+ You can match whole words, such as "if" and "endif", not just
58
+ single characters. You can also specify a |regular-expression|.
59
+ You can define groups with more than two words, such as "if",
60
+ "else", "endif". Banging on the "%" key will cycle from the "if" to
61
+ the first "else", the next "else", ..., the closing "endif", and back
62
+ to the opening "if". Nested structures are skipped. Using |g%| goes
63
+ in the reverse direction.
64
+ By default, words inside comments and strings are ignored, unless
65
+ the cursor is inside a comment or string when you type "%". If the
66
+ only thing you want to do is modify the behavior of "%" so that it
67
+ behaves this way, you do not have to define |b:match_words|, since the
68
+ script uses the 'matchpairs' option as well as this variable.
69
+
70
+ See |matchit-details| for details on what the script does, and |b:match_words|
71
+ for how to specify matching patterns.
72
+
73
+ MODES: *matchit-modes* *matchit-v_%* *matchit-o_%*
74
+
75
+ Mostly, % and related motions (|g%| and |[%| and |]%|) work just like built-in
76
+ |motion| commands in |Operator-pending| and |Visual| modes. However, you
77
+ cannot make these motions |linewise| or |characterwise|, since the |:omap|s
78
+ that define them start with "v" in order to make the default behavior
79
+ inclusive. (See |o_v|.) In other words, "dV%" will not work. The
80
+ work-around is to go through Visual mode: "V%d" will work.
81
+
82
+ LANGUAGES: *matchit-languages*
83
+
84
+ Currently, the following languages are supported: Ada, ASP with VBS, Csh,
85
+ DTD, Entity, Essbase, Fortran, HTML, JSP (same as HTML), LaTeX, Lua, Pascal,
86
+ SGML, Shell, Tcsh, Vim, XML. Other languages may already have support via
87
+ the default |filetype-plugin|s in the standard vim distribution.
88
+
89
+ To support a new language, see |matchit-newlang| below.
90
+
91
+ DETAILS: *matchit-details* *matchit-parse*
92
+
93
+ Here is an outline of what matchit.vim does each time you hit the "%" key. If
94
+ there are |backref|s in |b:match_words| then the first step is to produce a
95
+ version in which these back references have been eliminated; if there are no
96
+ |backref|s then this step is skipped. This step is called parsing. For
97
+ example, "\(foo\|bar\):end\1" is parsed to yield
98
+ "\(foo\|bar\):end\(foo\|bar\)". This can get tricky, especially if there are
99
+ nested groups. If debugging is turned on, the parsed version is saved as
100
+ |b:match_pat|.
101
+
102
+ *matchit-choose*
103
+ Next, the script looks for a word on the current line that matches the pattern
104
+ just constructed. It includes the patterns from the 'matchpairs' option.
105
+ The goal is to do what you expect, which turns out to be a little complicated.
106
+ The script follows these rules:
107
+
108
+ Insist on a match that ends on or after the cursor.
109
+ Prefer a match that includes the cursor position (that is, one that
110
+ starts on or before the cursor).
111
+ Prefer a match that starts as close to the cursor as possible.
112
+ If more than one pattern in |b:match_words| matches, choose the one
113
+ that is listed first.
114
+
115
+ Examples:
116
+
117
+ Suppose you >
118
+ :let b:match_words = '<:>,<tag>:</tag>'
119
+ < and hit "%" with the cursor on or before the "<" in "a <tag> is born".
120
+ The pattern '<' comes first, so it is preferred over '<tag>', which
121
+ also matches. If the cursor is on the "t", however, then '<tag>' is
122
+ preferred, because this matches a bit of text containing the cursor.
123
+ If the two groups of patterns were reversed then '<' would never be
124
+ preferred.
125
+
126
+ Suppose you >
127
+ :let b:match_words = 'if:end if'
128
+ < (Note the space!) and hit "%" with the cursor at the end of "end if".
129
+ Then "if" matches, which is probably not what you want, but if the
130
+ cursor starts on the "end " then "end if" is chosen. (You can avoid
131
+ this problem by using a more complicated pattern.)
132
+
133
+ If there is no match, the cursor does not move. (Before version 1.13 of the
134
+ script, it would fall back on the usual behavior of |%|). If debugging is
135
+ turned on, the matched bit of text is saved as |b:match_match| and the cursor
136
+ column of the start of the match is saved as |b:match_col|.
137
+
138
+ Next, the script looks through |b:match_words| (original and parsed versions)
139
+ for the group and pattern that match. If debugging is turned on, the group is
140
+ saved as |b:match_ini| (the first pattern) and |b:match_tail| (the rest). If
141
+ there are |backref|s then, in addition, the matching pattern is saved as
142
+ |b:match_word| and a table of translations is saved as |b:match_table|. If
143
+ there are |backref|s, these are determined from the matching pattern and
144
+ |b:match_match| and substituted into each pattern in the matching group.
145
+
146
+ The script decides whether to search forwards or backwards and chooses
147
+ arguments for the |searchpair()| function. Then, the cursor is moved to the
148
+ start of the match, and |searchpair()| is called. By default, matching
149
+ structures inside strings and comments are ignored. This can be changed by
150
+ setting |b:match_skip|.
151
+
152
+ ==============================================================================
153
+ 2. Activation *matchit-activate*
154
+
155
+ You can use this script as a plugin, by copying it to your plugin directory.
156
+ See |add-global-plugin| for instructions. You can also add a line to your
157
+ |vimrc| file, such as >
158
+ :source $VIMRUNTIME/macros/matchit.vim
159
+ or >
160
+ :runtime macros/matchit.vim
161
+ Either way, the script should start working the next time you start up Vim.
162
+
163
+ (Earlier versions of the script did nothing unless a |buffer-variable| named
164
+ |b:match_words| was defined. Even earlier versions contained autocommands
165
+ that set this variable for various file types. Now, |b:match_words| is
166
+ defined in many of the default |filetype-plugin|s instead.)
167
+
168
+ For a new language, you can add autocommands to the script or to your vimrc
169
+ file, but the recommended method is to add a line such as >
170
+ let b:match_words = '\<foo\>:\<bar\>'
171
+ to the |filetype-plugin| for your language. See |b:match_words| below for how
172
+ this variable is interpreted.
173
+
174
+ TROUBLESHOOTING *matchit-troubleshoot*
175
+
176
+ The script should work in most installations of Vim. It may not work if Vim
177
+ was compiled with a minimal feature set, for example if the |+syntax| option
178
+ was not enabled. If your Vim has support for syntax compiled in, but you do
179
+ not have |syntax| highlighting turned on, matchit.vim should work, but it may
180
+ fail to skip matching groups in comments and strings. If the |filetype|
181
+ mechanism is turned off, the |b:match_words| variable will probably not be
182
+ defined automatically.
183
+
184
+ ==============================================================================
185
+ 3. Configuration *matchit-configure*
186
+
187
+ There are several variables that govern the behavior of matchit.vim. Note
188
+ that these are variables local to the buffer, not options, so use |:let| to
189
+ define them, not |:set|. Some of these variables have values that matter; for
190
+ others, it only matters whether the variable has been defined. All of these
191
+ can be defined in the |filetype-plugin| or autocommand that defines
192
+ |b:match_words| or "on the fly."
193
+
194
+ The main variable is |b:match_words|. It is described in the section below on
195
+ supporting a new language.
196
+
197
+ *MatchError* *matchit-hl* *matchit-highlight*
198
+ MatchError is the highlight group for error messages from the script. By
199
+ default, it is linked to WarningMsg. If you do not want to be bothered by
200
+ error messages, you can define this to be something invisible. For example,
201
+ if you use the GUI version of Vim and your command line is normally white, you
202
+ can do >
203
+ :hi MatchError guifg=white guibg=white
204
+ <
205
+ *b:match_ignorecase*
206
+ If you >
207
+ :let b:match_ignorecase = 1
208
+ then matchit.vim acts as if 'ignorecase' is set: for example, "end" and "END"
209
+ are equivalent. If you >
210
+ :let b:match_ignorecase = 0
211
+ then matchit.vim treats "end" and "END" differently. (There will be no
212
+ b:match_infercase option unless someone requests it.)
213
+
214
+ *b:match_debug*
215
+ Define b:match_debug if you want debugging information to be saved. See
216
+ |matchit-debug|, below.
217
+
218
+ *b:match_skip*
219
+ If b:match_skip is defined, it is passed as the skip argument to
220
+ |searchpair()|. This controls when matching structures are skipped, or
221
+ ignored. By default, they are ignored inside comments and strings, as
222
+ determined by the |syntax| mechanism. (If syntax highlighting is turned off,
223
+ nothing is skipped.) You can set b:match_skip to a string, which evaluates to
224
+ a non-zero, numerical value if the match is to be skipped or zero if the match
225
+ should not be skipped. In addition, the following special values are
226
+ supported by matchit.vim:
227
+ s:foo becomes (current syntax item) =~ foo
228
+ S:foo becomes (current syntax item) !~ foo
229
+ r:foo becomes (line before cursor) =~ foo
230
+ R:foo becomes (line before cursor) !~ foo
231
+ (The "s" is meant to suggest "syntax", and the "r" is meant to suggest
232
+ "regular expression".)
233
+
234
+ Examples:
235
+
236
+ You can get the default behavior with >
237
+ :let b:match_skip = 's:comment\|string'
238
+ <
239
+ If you want to skip matching structures unless they are at the start
240
+ of the line (ignoring whitespace) then you can >
241
+ :let b:match_skip = 'R:^\s*'
242
+ < Do not do this if strings or comments can span several lines, since
243
+ the normal syntax checking will not be done if you set b:match_skip.
244
+
245
+ In LaTeX, since "%" is used as the comment character, you can >
246
+ :let b:match_skip = 'r:%'
247
+ < Unfortunately, this will skip anything after "\%", an escaped "%". To
248
+ allow for this, and also "\\%" (an excaped backslash followed by the
249
+ comment character) you can >
250
+ :let b:match_skip = 'r:\(^\|[^\\]\)\(\\\\\)*%'
251
+ <
252
+ See the $VIMRUNTIME/ftplugin/vim.vim for an example that uses both
253
+ syntax and a regular expression.
254
+
255
+ ==============================================================================
256
+ 4. Supporting a New Language *matchit-newlang*
257
+ *b:match_words*
258
+ In order for matchit.vim to support a new language, you must define a suitable
259
+ pattern for |b:match_words|. You may also want to set some of the
260
+ |matchit-configure| variables, as described above. If your language has a
261
+ complicated syntax, or many keywords, you will need to know something about
262
+ Vim's |regular-expression|s.
263
+
264
+ The format for |b:match_words| is similar to that of the 'matchpairs' option:
265
+ it is a comma (,)-separated list of groups; each group is a colon(:)-separated
266
+ list of patterns (regular expressions). Commas and backslashes that are part
267
+ of a pattern should be escaped with backslashes ('\:' and '\,'). It is OK to
268
+ have only one group; the effect is undefined if a group has only one pattern.
269
+ A simple example is >
270
+ :let b:match_words = '\<if\>:\<endif\>,'
271
+ \ . '\<while\>:\<continue\>:\<break\>:\<endwhile\>'
272
+ (In Vim regular expressions, |\<| and |\>| denote word boundaries. Thus "if"
273
+ matches the end of "endif" but "\<if\>" does not.) Then banging on the "%"
274
+ key will bounce the cursor between "if" and the matching "endif"; and from
275
+ "while" to any matching "continue" or "break", then to the matching "endwhile"
276
+ and back to the "while". It is almost always easier to use |literal-string|s
277
+ (single quotes) as above: '\<if\>' rather than "\\<if\\>" and so on.
278
+
279
+ Exception: If the ":" character does not appear in b:match_words, then it is
280
+ treated as an expression to be evaluated. For example, >
281
+ :let b:match_words = 'GetMatchWords()'
282
+ allows you to define a function. This can return a different string depending
283
+ on the current syntax, for example.
284
+
285
+ Once you have defined the appropriate value of |b:match_words|, you will
286
+ probably want to have this set automatically each time you edit the
287
+ appropriate file type. The recommended way to do this is by adding the
288
+ definition to a |filetype-plugin| file.
289
+
290
+ Tips: Be careful that your initial pattern does not match your final pattern.
291
+ See the example above for the use of word-boundary expressions. It is usually
292
+ better to use ".\{-}" (as many as necessary) instead of ".*" (as many as
293
+ possible). See |\{-|. For example, in the string "<tag>label</tag>", "<.*>"
294
+ matches the whole string whereas "<.\{-}>" and "<[^>]*>" match "<tag>" and
295
+ "</tag>".
296
+
297
+ *matchit-spaces* *matchit-s:notend*
298
+ If "if" is to be paired with "end if" (Note the space!) then word boundaries
299
+ are not enough. Instead, define a regular expression s:notend that will match
300
+ anything but "end" and use it as follows: >
301
+ :let s:notend = '\%(\<end\s\+\)\@<!'
302
+ :let b:match_words = s:notend . '\<if\>:\<end\s\+if\>'
303
+ < *matchit-s:sol*
304
+ This is a simplified version of what is done for Ada. The s:notend is a
305
+ |script-variable|. Similarly, you may want to define a start-of-line regular
306
+ expression >
307
+ :let s:sol = '\%(^\|;\)\s*'
308
+ if keywords are only recognized after the start of a line or after a
309
+ semicolon (;), with optional white space.
310
+
311
+ *matchit-backref* *matchit-\1*
312
+ In any group, the expressions |\1|, |\2|, ..., |\9| refer to parts of the
313
+ INITIAL pattern enclosed in |\(|escaped parentheses|\)|. These are referred
314
+ to as back references, or backrefs. For example, >
315
+ :let b:match_words = '\<b\(o\+\)\>:\(h\)\1\>'
316
+ means that "bo" pairs with "ho" and "boo" pairs with "hoo" and so on. Note
317
+ that "\1" does not refer to the "\(h\)" in this example. If you have
318
+ "\(nested \(parentheses\)\) then "\d" refers to the d-th "\(" and everything
319
+ up to and including the matching "\)": in "\(nested\(parentheses\)\)", "\1"
320
+ refers to everything and "\2" refers to "\(parentheses\)". If you use a
321
+ variable such as |s:notend| or |s:sol| in the previous paragraph then remember
322
+ to count any "\(" patterns in this variable. You do not have to count groups
323
+ defined by |\%(\)|.
324
+
325
+ It should be possible to resolve back references from any pattern in the
326
+ group. For example, >
327
+ :let b:match_words = '\(foo\)\(bar\):more\1:and\2:end\1\2'
328
+ would not work because "\2" cannot be determined from "morefoo" and "\1"
329
+ cannot be determined from "andbar". On the other hand, >
330
+ :let b:match_words = '\(\(foo\)\(bar\)\):\3\2:end\1'
331
+ should work (and have the same effect as "foobar:barfoo:endfoobar"), although
332
+ this has not been thoroughly tested.
333
+
334
+ You can use |zero-width| patterns such as |\@<=| and |\zs|. (The latter has
335
+ not been thouroughly tested in matchit.vim.) For example, if the keyword "if"
336
+ must occur at the start of the line, with optional white space, you might use
337
+ the pattern "\(^\s*\)\@<=if" so that the cursor will end on the "i" instead of
338
+ at the start of the line. For another example, if HTML had only one tag then
339
+ one could >
340
+ :let b:match_words = '<:>,<\@<=tag>:<\@<=/tag>'
341
+ so that "%" can bounce between matching "<" and ">" pairs or (starting on
342
+ "tag" or "/tag") between matching tags. Without the |\@<=|, the script would
343
+ bounce from "tag" to the "<" in "</tag>", and another "%" would not take you
344
+ back to where you started.
345
+
346
+ DEBUGGING *matchit-debug* *:MatchDebug*
347
+
348
+ If you are having trouble figuring out the appropriate definition of
349
+ |b:match_words| then you can take advantage of the same information I use when
350
+ debugging the script. This is especially true if you are not sure whether
351
+ your patterns or my script are at fault! To make this more convenient, I have
352
+ made the command :MatchDebug, which defines the variable |b:match_debug| and
353
+ creates a Matchit menu. This menu makes it convenient to check the values of
354
+ the variables described below. You will probably also want to read
355
+ |matchit-details| above.
356
+
357
+ Defining the variable |b:match_debug| causes the script to set the following
358
+ variables, each time you hit the "%" key. Several of these are only defined
359
+ if |b:match_words| includes |backref|s.
360
+
361
+ *b:match_pat*
362
+ The b:match_pat variable is set to |b:match_words| with |backref|s parsed.
363
+ *b:match_match*
364
+ The b:match_match variable is set to the bit of text that is recognized as a
365
+ match.
366
+ *b:match_col*
367
+ The b:match_col variable is set to the cursor column of the start of the
368
+ matching text.
369
+ *b:match_wholeBR*
370
+ The b:match_wholeBR variable is set to the comma-separated group of patterns
371
+ that matches, with |backref|s unparsed.
372
+ *b:match_iniBR*
373
+ The b:match_iniBR variable is set to the first pattern in |b:match_wholeBR|.
374
+ *b:match_ini*
375
+ The b:match_ini variable is set to the first pattern in |b:match_wholeBR|,
376
+ with |backref|s resolved from |b:match_match|.
377
+ *b:match_tail*
378
+ The b:match_tail variable is set to the remaining patterns in
379
+ |b:match_wholeBR|, with |backref|s resolved from |b:match_match|.
380
+ *b:match_word*
381
+ The b:match_word variable is set to the pattern from |b:match_wholeBR| that
382
+ matches |b:match_match|.
383
+ *b:match_table*
384
+ The back reference '\'.d refers to the same thing as '\'.b:match_table[d] in
385
+ |b:match_word|.
386
+
387
+ ==============================================================================
388
+ 5. Known Bugs and Limitations *matchit-bugs*
389
+
390
+ Just because I know about a bug does not mean that it is on my todo list. I
391
+ try to respond to reports of bugs that cause real problems. If it does not
392
+ cause serious problems, or if there is a work-around, a bug may sit there for
393
+ a while. Moral: if a bug (known or not) bothers you, let me know.
394
+
395
+ The various |:vmap|s defined in the script (%, |g%|, |[%|, |]%|, |a%|) may
396
+ have undesired effects in Select mode |Select-mode-mapping|. At least, if you
397
+ want to replace the selection with any character in "ag%[]" there will be a
398
+ pause of |'updatetime'| first.
399
+
400
+ It would be nice if "\0" were recognized as the entire pattern. That is, it
401
+ would be nice if "foo:\end\0" had the same effect as "\(foo\):\end\1". I may
402
+ try to implement this in a future version. (This is not so easy to arrange as
403
+ you might think!)
404
+
405
+ ==============================================================================
406
+ vim:tw=78:fo=tcq2: