tomkersten-vixploder 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,14 @@
1
+ " Ruby
2
+ au BufNewFile,BufRead *.rb,*.rbw,*.gem,*.gemspec set filetype=ruby
3
+
4
+ " Ruby on Rails
5
+ au BufNewFile,BufRead *.builder,*.rxml,*.rjs set filetype=ruby
6
+
7
+ " Rakefile
8
+ au BufNewFile,BufRead [rR]akefile,*.rake set filetype=ruby
9
+
10
+ " Rantfile
11
+ au BufNewFile,BufRead [rR]antfile,*.rant set filetype=ruby
12
+
13
+ " eRuby
14
+ au BufNewFile,BufRead *.erb,*.rhtml set filetype=eruby
@@ -0,0 +1,101 @@
1
+ " Vim filetype plugin
2
+ " Language: eRuby
3
+ " Maintainer: Tim Pope <vimNOSPAM@tpope.info>
4
+ " Info: $Id: eruby.vim,v 1.10 2007/05/06 16:05:40 tpope Exp $
5
+ " URL: http://vim-ruby.rubyforge.org
6
+ " Anon CVS: See above site
7
+ " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
8
+
9
+ " Only do this when not done yet for this buffer
10
+ if exists("b:did_ftplugin")
11
+ finish
12
+ endif
13
+
14
+ let s:save_cpo = &cpo
15
+ set cpo-=C
16
+
17
+ " Define some defaults in case the included ftplugins don't set them.
18
+ let s:undo_ftplugin = ""
19
+ let s:browsefilter = "All Files (*.*)\t*.*\n"
20
+ let s:match_words = ""
21
+
22
+ if !exists("g:eruby_default_subtype")
23
+ let g:eruby_default_subtype = "html"
24
+ endif
25
+
26
+ if !exists("b:eruby_subtype")
27
+ let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
28
+ let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
29
+ if b:eruby_subtype == ''
30
+ let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\)\+$','',''),'\.\zs\w\+$')
31
+ endif
32
+ if b:eruby_subtype == 'rhtml'
33
+ let b:eruby_subtype = 'html'
34
+ elseif b:eruby_subtype == 'rb'
35
+ let b:eruby_subtype = 'ruby'
36
+ elseif b:eruby_subtype == 'yml'
37
+ let b:eruby_subtype = 'yaml'
38
+ elseif b:eruby_subtype == 'js'
39
+ let b:eruby_subtype = 'javascript'
40
+ elseif b:eruby_subtype == 'txt'
41
+ " Conventional; not a real file type
42
+ let b:eruby_subtype = 'text'
43
+ elseif b:eruby_subtype == ''
44
+ let b:eruby_subtype = g:eruby_default_subtype
45
+ endif
46
+ endif
47
+
48
+ if exists("b:eruby_subtype") && b:eruby_subtype != ''
49
+ exe "runtime! ftplugin/".b:eruby_subtype.".vim ftplugin/".b:eruby_subtype."_*.vim ftplugin/".b:eruby_subtype."/*.vim"
50
+ else
51
+ runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
52
+ endif
53
+ unlet! b:did_ftplugin
54
+
55
+ " Override our defaults if these were set by an included ftplugin.
56
+ if exists("b:undo_ftplugin")
57
+ let s:undo_ftplugin = b:undo_ftplugin
58
+ unlet b:undo_ftplugin
59
+ endif
60
+ if exists("b:browsefilter")
61
+ let s:browsefilter = b:browsefilter
62
+ unlet b:browsefilter
63
+ endif
64
+ if exists("b:match_words")
65
+ let s:match_words = b:match_words
66
+ unlet b:match_words
67
+ endif
68
+
69
+ runtime! ftplugin/ruby.vim ftplugin/ruby_*.vim ftplugin/ruby/*.vim
70
+ let b:did_ftplugin = 1
71
+
72
+ " Combine the new set of values with those previously included.
73
+ if exists("b:undo_ftplugin")
74
+ let s:undo_ftplugin = b:undo_ftplugin . " | " . s:undo_ftplugin
75
+ endif
76
+ if exists ("b:browsefilter")
77
+ let s:browsefilter = substitute(b:browsefilter,'\cAll Files (\*\.\*)\t\*\.\*\n','','') . s:browsefilter
78
+ endif
79
+ if exists("b:match_words")
80
+ let s:match_words = b:match_words . ',' . s:match_words
81
+ endif
82
+
83
+ " Change the browse dialog on Win32 to show mainly eRuby-related files
84
+ if has("gui_win32")
85
+ let b:browsefilter="eRuby Files (*.erb, *.rhtml)\t*.erb;*.rhtml\n" . s:browsefilter
86
+ endif
87
+
88
+ " Load the combined list of match_words for matchit.vim
89
+ if exists("loaded_matchit")
90
+ let b:match_words = s:match_words
91
+ endif
92
+
93
+ " TODO: comments=
94
+ setlocal commentstring=<%#%s%>
95
+
96
+ let b:undo_ftplugin = "setl cms< "
97
+ \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
98
+
99
+ let &cpo = s:save_cpo
100
+
101
+ " vim: nowrap sw=2 sts=2 ts=8 ff=unix:
@@ -0,0 +1,230 @@
1
+ " Vim filetype plugin
2
+ " Language: Ruby
3
+ " Maintainer: Gavin Sinclair <gsinclair at gmail.com>
4
+ " Info: $Id: ruby.vim,v 1.39 2007/05/06 16:38:40 tpope Exp $
5
+ " URL: http://vim-ruby.rubyforge.org
6
+ " Anon CVS: See above site
7
+ " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
8
+ " ----------------------------------------------------------------------------
9
+ "
10
+ " Original matchit support thanks to Ned Konz. See his ftplugin/ruby.vim at
11
+ " http://bike-nomad.com/vim/ruby.vim.
12
+ " ----------------------------------------------------------------------------
13
+
14
+ " Only do this when not done yet for this buffer
15
+ if (exists("b:did_ftplugin"))
16
+ finish
17
+ endif
18
+ let b:did_ftplugin = 1
19
+
20
+ let s:cpo_save = &cpo
21
+ set cpo&vim
22
+
23
+ if has("gui_running") && !has("gui_win32")
24
+ setlocal keywordprg=ri\ -T
25
+ else
26
+ setlocal keywordprg=ri
27
+ endif
28
+
29
+ " Matchit support
30
+ if exists("loaded_matchit") && !exists("b:match_words")
31
+ let b:match_ignorecase = 0
32
+
33
+ let b:match_words =
34
+ \ '\<\%(if\|unless\|case\|while\|until\|for\|do\|class\|module\|def\|begin\)\>=\@!' .
35
+ \ ':' .
36
+ \ '\<\%(else\|elsif\|ensure\|when\|rescue\|break\|redo\|next\|retry\)\>' .
37
+ \ ':' .
38
+ \ '\<end\>' .
39
+ \ ',{:},\[:\],(:)'
40
+
41
+ let b:match_skip =
42
+ \ "synIDattr(synID(line('.'),col('.'),0),'name') =~ '" .
43
+ \ "\\<ruby\\%(String\\|StringDelimiter\\|ASCIICode\\|Escape\\|" .
44
+ \ "Interpolation\\|NoInterpolation\\|Comment\\|Documentation\\|" .
45
+ \ "ConditionalModifier\\|RepeatModifier\\|OptionalDo\\|" .
46
+ \ "Function\\|BlockArgument\\|KeywordAsMethod\\|ClassVariable\\|" .
47
+ \ "InstanceVariable\\|GlobalVariable\\|Symbol\\)\\>'"
48
+ endif
49
+
50
+ setlocal formatoptions-=t formatoptions+=croql
51
+
52
+ setlocal include=^\\s*\\<\\(load\\\|\w*require\\)\\>
53
+ setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'$','.rb','')
54
+ setlocal suffixesadd=.rb
55
+
56
+ if exists("&ofu") && has("ruby")
57
+ setlocal omnifunc=rubycomplete#Complete
58
+ endif
59
+
60
+ " To activate, :set ballooneval
61
+ if has('balloon_eval') && exists('+balloonexpr')
62
+ setlocal balloonexpr=RubyBalloonexpr()
63
+ endif
64
+
65
+
66
+ " TODO:
67
+ "setlocal define=^\\s*def
68
+
69
+ setlocal comments=:#
70
+ setlocal commentstring=#\ %s
71
+
72
+ if !exists("s:rubypath")
73
+ if has("ruby") && has("win32")
74
+ ruby VIM::command( 'let s:rubypath = "%s"' % ($: + begin; require %q{rubygems}; Gem.all_load_paths.sort.uniq; rescue LoadError; []; end).join(%q{,}) )
75
+ let s:rubypath = '.,' . substitute(s:rubypath, '\%(^\|,\)\.\%(,\|$\)', ',,', '')
76
+ elseif executable("ruby")
77
+ let s:code = "print ($: + begin; require %q{rubygems}; Gem.all_load_paths.sort.uniq; rescue LoadError; []; end).join(%q{,})"
78
+ if &shellxquote == "'"
79
+ let s:rubypath = system('ruby -e "' . s:code . '"')
80
+ else
81
+ let s:rubypath = system("ruby -e '" . s:code . "'")
82
+ endif
83
+ let s:rubypath = '.,' . substitute(s:rubypath, '\%(^\|,\)\.\%(,\|$\)', ',,', '')
84
+ else
85
+ " If we can't call ruby to get its path, just default to using the
86
+ " current directory and the directory of the current file.
87
+ let s:rubypath = ".,,"
88
+ endif
89
+ endif
90
+
91
+ let &l:path = s:rubypath
92
+
93
+ if has("gui_win32") && !exists("b:browsefilter")
94
+ let b:browsefilter = "Ruby Source Files (*.rb)\t*.rb\n" .
95
+ \ "All Files (*.*)\t*.*\n"
96
+ endif
97
+
98
+ let b:undo_ftplugin = "setl fo< inc< inex< sua< def< com< cms< path< kp<"
99
+ \."| unlet! b:browsefilter b:match_ignorecase b:match_words b:match_skip"
100
+ \."| if exists('&ofu') && has('ruby') | setl ofu< | endif"
101
+ \."| if has('balloon_eval') && exists('+bexpr') | setl bexpr< | endif"
102
+
103
+ if !exists("g:no_plugin_maps") && !exists("g:no_ruby_maps")
104
+
105
+ noremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','b')<CR>
106
+ noremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','')<CR>
107
+ noremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','b')<CR>
108
+ noremap <silent> <buffer> ]M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','')<CR>
109
+
110
+ noremap <silent> <buffer> [[ :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','b')<CR>
111
+ noremap <silent> <buffer> ]] :<C-U>call <SID>searchsyn('\<\%(class\<Bar>module\)\>','rubyModule\<Bar>rubyClass','')<CR>
112
+ noremap <silent> <buffer> [] :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','b')<CR>
113
+ noremap <silent> <buffer> ][ :<C-U>call <SID>searchsyn('\<end\>','rubyModule\<Bar>rubyClass','')<CR>
114
+
115
+ let b:undo_ftplugin = b:undo_ftplugin
116
+ \."| sil! exe 'unmap <buffer> [[' | sil! exe 'unmap <buffer> ]]' | sil! exe 'unmap <buffer> []' | sil! exe 'unmap <buffer> ]['"
117
+ \."| sil! exe 'unmap <buffer> [m' | sil! exe 'unmap <buffer> ]m' | sil! exe 'unmap <buffer> [M' | sil! exe 'unmap <buffer> ]M'"
118
+ endif
119
+
120
+ let &cpo = s:cpo_save
121
+ unlet s:cpo_save
122
+
123
+ if exists("g:did_ruby_ftplugin_functions")
124
+ finish
125
+ endif
126
+ let g:did_ruby_ftplugin_functions = 1
127
+
128
+ function! RubyBalloonexpr()
129
+ if !exists('s:ri_found')
130
+ let s:ri_found = executable('ri')
131
+ endif
132
+ if s:ri_found
133
+ let line = getline(v:beval_lnum)
134
+ let b = matchstr(strpart(line,0,v:beval_col),'\%(\w\|[:.]\)*$')
135
+ let a = substitute(matchstr(strpart(line,v:beval_col),'^\w*\%([?!]\|\s*=\)\?'),'\s\+','','g')
136
+ let str = b.a
137
+ let before = strpart(line,0,v:beval_col-strlen(b))
138
+ let after = strpart(line,v:beval_col+strlen(a))
139
+ if str =~ '^\.'
140
+ let str = substitute(str,'^\.','#','g')
141
+ if before =~ '\]\s*$'
142
+ let str = 'Array'.str
143
+ elseif before =~ '}\s*$'
144
+ " False positives from blocks here
145
+ let str = 'Hash'.str
146
+ elseif before =~ "[\"'`]\\s*$" || before =~ '\$\d\+\s*$'
147
+ let str = 'String'.str
148
+ elseif before =~ '\$\d\+\.\d\+\s*$'
149
+ let str = 'Float'.str
150
+ elseif before =~ '\$\d\+\s*$'
151
+ let str = 'Integer'.str
152
+ elseif before =~ '/\s*$'
153
+ let str = 'Regexp'.str
154
+ else
155
+ let str = substitute(str,'^#','.','')
156
+ endif
157
+ endif
158
+ let str = substitute(str,'.*\.\s*to_f\s*\.\s*','Float#','')
159
+ let str = substitute(str,'.*\.\s*to_i\%(nt\)\=\s*\.\s*','Integer#','')
160
+ let str = substitute(str,'.*\.\s*to_s\%(tr\)\=\s*\.\s*','String#','')
161
+ let str = substitute(str,'.*\.\s*to_sym\s*\.\s*','Symbol#','')
162
+ let str = substitute(str,'.*\.\s*to_a\%(ry\)\=\s*\.\s*','Array#','')
163
+ let str = substitute(str,'.*\.\s*to_proc\s*\.\s*','Proc#','')
164
+ if str !~ '^\w'
165
+ return ''
166
+ endif
167
+ silent! let res = substitute(system("ri -f simple -T \"".str.'"'),'\n$','','')
168
+ if res =~ '^Nothing known about' || res =~ '^Bad argument:' || res =~ '^More than one method'
169
+ return ''
170
+ endif
171
+ return res
172
+ else
173
+ return ""
174
+ endif
175
+ endfunction
176
+
177
+ function! s:searchsyn(pattern,syn,flags)
178
+ norm! m'
179
+ let i = 0
180
+ let cnt = v:count ? v:count : 1
181
+ while i < cnt
182
+ let i = i + 1
183
+ let line = line('.')
184
+ let col = col('.')
185
+ let pos = search(a:pattern,'W'.a:flags)
186
+ while pos != 0 && s:synname() !~# a:syn
187
+ let pos = search(a:pattern,'W'.a:flags)
188
+ endwhile
189
+ if pos == 0
190
+ call cursor(line,col)
191
+ return
192
+ endif
193
+ endwhile
194
+ endfunction
195
+
196
+ function! s:synname()
197
+ return synIDattr(synID(line('.'),col('.'),0),'name')
198
+ endfunction
199
+
200
+ "
201
+ " Instructions for enabling "matchit" support:
202
+ "
203
+ " 1. Look for the latest "matchit" plugin at
204
+ "
205
+ " http://www.vim.org/scripts/script.php?script_id=39
206
+ "
207
+ " It is also packaged with Vim, in the $VIMRUNTIME/macros directory.
208
+ "
209
+ " 2. Copy "matchit.txt" into a "doc" directory (e.g. $HOME/.vim/doc).
210
+ "
211
+ " 3. Copy "matchit.vim" into a "plugin" directory (e.g. $HOME/.vim/plugin).
212
+ "
213
+ " 4. Ensure this file (ftplugin/ruby.vim) is installed.
214
+ "
215
+ " 5. Ensure you have this line in your $HOME/.vimrc:
216
+ " filetype plugin on
217
+ "
218
+ " 6. Restart Vim and create the matchit documentation:
219
+ "
220
+ " :helptags ~/.vim/doc
221
+ "
222
+ " Now you can do ":help matchit", and you should be able to use "%" on Ruby
223
+ " keywords. Try ":echo b:match_words" to be sure.
224
+ "
225
+ " Thanks to Mark J. Reed for the instructions. See ":help vimrc" for the
226
+ " locations of plugin directories, etc., as there are several options, and it
227
+ " differs on Windows. Email gsinclair@soyabean.com.au if you need help.
228
+ "
229
+
230
+ " vim: nowrap sw=2 sts=2 ts=8 ff=unix:
@@ -0,0 +1,73 @@
1
+ " Vim indent file
2
+ " Language: eRuby
3
+ " Maintainer: Tim Pope <vimNOSPAM@tpope.info>
4
+ " Info: $Id: eruby.vim,v 1.9 2007/04/16 17:03:36 tpope Exp $
5
+ " URL: http://vim-ruby.rubyforge.org
6
+ " Anon CVS: See above site
7
+ " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
8
+
9
+ if exists("b:did_indent")
10
+ finish
11
+ endif
12
+
13
+ runtime! indent/ruby.vim
14
+ unlet! b:did_indent
15
+ set indentexpr=
16
+
17
+ if exists("b:eruby_subtype")
18
+ exe "runtime! indent/".b:eruby_subtype.".vim"
19
+ else
20
+ runtime! indent/html.vim
21
+ endif
22
+ unlet! b:did_indent
23
+
24
+ if &l:indentexpr == ''
25
+ if &l:cindent
26
+ let &l:indentexpr = 'cindent(v:lnum)'
27
+ else
28
+ let &l:indentexpr = 'indent(prevnonblank(v:lnum-1))'
29
+ endif
30
+ endif
31
+ let b:eruby_subtype_indentexpr = &l:indentexpr
32
+
33
+ let b:did_indent = 1
34
+
35
+ setlocal indentexpr=GetErubyIndent()
36
+ setlocal indentkeys=o,O,*<Return>,<>>,{,},0),0],o,O,!^F,=end,=else,=elsif,=rescue,=ensure,=when
37
+
38
+ " Only define the function once.
39
+ if exists("*GetErubyIndent")
40
+ finish
41
+ endif
42
+
43
+ function! GetErubyIndent()
44
+ let vcol = col('.')
45
+ call cursor(v:lnum,1)
46
+ let inruby = searchpair('<%','','%>')
47
+ call cursor(v:lnum,vcol)
48
+ if inruby && getline(v:lnum) !~ '^<%'
49
+ let ind = GetRubyIndent()
50
+ else
51
+ exe "let ind = ".b:eruby_subtype_indentexpr
52
+ endif
53
+ let lnum = prevnonblank(v:lnum-1)
54
+ let line = getline(lnum)
55
+ let cline = getline(v:lnum)
56
+ if cline =~# '<%\s*\%(end\|else\|\%(ensure\|rescue\|elsif\|when\).\{-\}\)\s*\%(-\=%>\|$\)'
57
+ let ind = ind - &sw
58
+ endif
59
+ if line =~# '\<do\%(\s*|[^|]*|\)\=\s*-\=%>'
60
+ let ind = ind + &sw
61
+ elseif line =~# '<%\s*\%(module\|class\|def\|if\|for\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue\)\>.*%>'
62
+ let ind = ind + &sw
63
+ endif
64
+ if line =~# '^\s*<%[=#]\=\s*$' && cline !~# '^\s*end\>'
65
+ let ind = ind + &sw
66
+ endif
67
+ if cline =~# '^\s*-\=%>\s*$'
68
+ let ind = ind - &sw
69
+ endif
70
+ return ind
71
+ endfunction
72
+
73
+ " vim:set sw=2 sts=2 ts=8 noet ff=unix:
@@ -0,0 +1,373 @@
1
+ " Vim indent file
2
+ " Language: Ruby
3
+ " Maintainer: Nikolai Weibull <now at bitwi.se>
4
+ " Info: $Id: ruby.vim,v 1.40 2007/03/20 13:54:25 dkearns Exp $
5
+ " URL: http://vim-ruby.rubyforge.org
6
+ " Anon CVS: See above site
7
+ " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
8
+
9
+ " 0. Initialization {{{1
10
+ " =================
11
+
12
+ " Only load this indent file when no other was loaded.
13
+ if exists("b:did_indent")
14
+ finish
15
+ endif
16
+ let b:did_indent = 1
17
+
18
+ setlocal nosmartindent
19
+
20
+ " Now, set up our indentation expression and keys that trigger it.
21
+ setlocal indentexpr=GetRubyIndent()
22
+ setlocal indentkeys=0{,0},0),0],!^F,o,O,e
23
+ setlocal indentkeys+==end,=elsif,=when,=ensure,=rescue,==begin,==end
24
+
25
+ " Only define the function once.
26
+ if exists("*GetRubyIndent")
27
+ finish
28
+ endif
29
+
30
+ let s:cpo_save = &cpo
31
+ set cpo&vim
32
+
33
+ " 1. Variables {{{1
34
+ " ============
35
+
36
+ " Regex of syntax group names that are or delimit string or are comments.
37
+ let s:syng_strcom = '\<ruby\%(String\|StringDelimiter\|ASCIICode' .
38
+ \ '\|Interpolation\|NoInterpolation\|Escape\|Comment\|Documentation\)\>'
39
+
40
+ " Regex of syntax group names that are strings.
41
+ let s:syng_string =
42
+ \ '\<ruby\%(String\|StringDelimiter\|Interpolation\|NoInterpolation\|Escape\)\>'
43
+
44
+ " Regex of syntax group names that are strings or documentation.
45
+ let s:syng_stringdoc =
46
+ \'\<ruby\%(String\|StringDelimiter\|Interpolation\|NoInterpolation\|Escape\|Documentation\)\>'
47
+
48
+ " Expression used to check whether we should skip a match with searchpair().
49
+ let s:skip_expr =
50
+ \ "synIDattr(synID(line('.'),col('.'),0),'name') =~ '".s:syng_strcom."'"
51
+
52
+ " Regex used for words that, at the start of a line, add a level of indent.
53
+ let s:ruby_indent_keywords = '^\s*\zs\<\%(module\|class\|def\|if\|for' .
54
+ \ '\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure' .
55
+ \ '\|rescue\)\>' .
56
+ \ '\|\%([*+/,=:-]\|<<\|>>\)\s*\zs' .
57
+ \ '\<\%(if\|for\|while\|until\|case\|unless\|begin\)\>'
58
+
59
+ " Regex used for words that, at the start of a line, remove a level of indent.
60
+ let s:ruby_deindent_keywords =
61
+ \ '^\s*\zs\<\%(ensure\|else\|rescue\|elsif\|when\|end\)\>'
62
+
63
+ " Regex that defines the start-match for the 'end' keyword.
64
+ "let s:end_start_regex = '\%(^\|[^.]\)\<\%(module\|class\|def\|if\|for\|while\|until\|case\|unless\|begin\|do\)\>'
65
+ " TODO: the do here should be restricted somewhat (only at end of line)?
66
+ let s:end_start_regex = '^\s*\zs\<\%(module\|class\|def\|if\|for' .
67
+ \ '\|while\|until\|case\|unless\|begin\)\>' .
68
+ \ '\|\%([*+/,=:-]\|<<\|>>\)\s*\zs' .
69
+ \ '\<\%(if\|for\|while\|until\|case\|unless\|begin\)\>' .
70
+ \ '\|\<do\>'
71
+
72
+ " Regex that defines the middle-match for the 'end' keyword.
73
+ let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue\>\|when\|elsif\)\>'
74
+
75
+ " Regex that defines the end-match for the 'end' keyword.
76
+ let s:end_end_regex = '\%(^\|[^.:@$]\)\@<=\<end\>'
77
+
78
+ " Expression used for searchpair() call for finding match for 'end' keyword.
79
+ let s:end_skip_expr = s:skip_expr .
80
+ \ ' || (expand("<cword>") == "do"' .
81
+ \ ' && getline(".") =~ "^\\s*\\<while\\|until\\|for\\>")'
82
+
83
+ " Regex that defines continuation lines, not including (, {, or [.
84
+ let s:continuation_regex = '\%([\\*+/.,=:-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
85
+
86
+ " Regex that defines continuation lines.
87
+ " TODO: this needs to deal with if ...: and so on
88
+ let s:continuation_regex2 =
89
+ \ '\%([\\*+/.,=:({[-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
90
+
91
+ " Regex that defines blocks.
92
+ let s:block_regex =
93
+ \ '\%(\<do\>\|{\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=\s*\%(#.*\)\=$'
94
+
95
+ " 2. Auxiliary Functions {{{1
96
+ " ======================
97
+
98
+ " Check if the character at lnum:col is inside a string, comment, or is ascii.
99
+ function s:IsInStringOrComment(lnum, col)
100
+ return synIDattr(synID(a:lnum, a:col, 0), 'name') =~ s:syng_strcom
101
+ endfunction
102
+
103
+ " Check if the character at lnum:col is inside a string.
104
+ function s:IsInString(lnum, col)
105
+ return synIDattr(synID(a:lnum, a:col, 0), 'name') =~ s:syng_string
106
+ endfunction
107
+
108
+ " Check if the character at lnum:col is inside a string or documentation.
109
+ function s:IsInStringOrDocumentation(lnum, col)
110
+ return synIDattr(synID(a:lnum, a:col, 0), 'name') =~ s:syng_stringdoc
111
+ endfunction
112
+
113
+ " Find line above 'lnum' that isn't empty, in a comment, or in a string.
114
+ function s:PrevNonBlankNonString(lnum)
115
+ let in_block = 0
116
+ let lnum = prevnonblank(a:lnum)
117
+ while lnum > 0
118
+ " Go in and out of blocks comments as necessary.
119
+ " If the line isn't empty (with opt. comment) or in a string, end search.
120
+ let line = getline(lnum)
121
+ if line =~ '^=begin$'
122
+ if in_block
123
+ let in_block = 0
124
+ else
125
+ break
126
+ endif
127
+ elseif !in_block && line =~ '^=end$'
128
+ let in_block = 1
129
+ elseif !in_block && line !~ '^\s*#.*$' && !(s:IsInStringOrComment(lnum, 1)
130
+ \ && s:IsInStringOrComment(lnum, strlen(line)))
131
+ break
132
+ endif
133
+ let lnum = prevnonblank(lnum - 1)
134
+ endwhile
135
+ return lnum
136
+ endfunction
137
+
138
+ " Find line above 'lnum' that started the continuation 'lnum' may be part of.
139
+ function s:GetMSL(lnum)
140
+ " Start on the line we're at and use its indent.
141
+ let msl = a:lnum
142
+ let lnum = s:PrevNonBlankNonString(a:lnum - 1)
143
+ while lnum > 0
144
+ " If we have a continuation line, or we're in a string, use line as MSL.
145
+ " Otherwise, terminate search as we have found our MSL already.
146
+ let line = getline(lnum)
147
+ let col = match(line, s:continuation_regex2) + 1
148
+ if (col > 0 && !s:IsInStringOrComment(lnum, col))
149
+ \ || s:IsInString(lnum, strlen(line))
150
+ let msl = lnum
151
+ else
152
+ break
153
+ endif
154
+ let lnum = s:PrevNonBlankNonString(lnum - 1)
155
+ endwhile
156
+ return msl
157
+ endfunction
158
+
159
+ " Check if line 'lnum' has more opening brackets than closing ones.
160
+ function s:LineHasOpeningBrackets(lnum)
161
+ let open_0 = 0
162
+ let open_2 = 0
163
+ let open_4 = 0
164
+ let line = getline(a:lnum)
165
+ let pos = match(line, '[][(){}]', 0)
166
+ while pos != -1
167
+ if !s:IsInStringOrComment(a:lnum, pos + 1)
168
+ let idx = stridx('(){}[]', line[pos])
169
+ if idx % 2 == 0
170
+ let open_{idx} = open_{idx} + 1
171
+ else
172
+ let open_{idx - 1} = open_{idx - 1} - 1
173
+ endif
174
+ endif
175
+ let pos = match(line, '[][(){}]', pos + 1)
176
+ endwhile
177
+ return (open_0 > 0) . (open_2 > 0) . (open_4 > 0)
178
+ endfunction
179
+
180
+ function s:Match(lnum, regex)
181
+ let col = match(getline(a:lnum), a:regex) + 1
182
+ return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0
183
+ endfunction
184
+
185
+ function s:MatchLast(lnum, regex)
186
+ let line = getline(a:lnum)
187
+ let col = match(line, '.*\zs' . a:regex)
188
+ while col != -1 && s:IsInStringOrComment(a:lnum, col)
189
+ let line = strpart(line, 0, col)
190
+ let col = match(line, '.*' . a:regex)
191
+ endwhile
192
+ return col + 1
193
+ endfunction
194
+
195
+ " 3. GetRubyIndent Function {{{1
196
+ " =========================
197
+
198
+ function GetRubyIndent()
199
+ " 3.1. Setup {{{2
200
+ " ----------
201
+
202
+ " Set up variables for restoring position in file. Could use v:lnum here.
203
+ let vcol = col('.')
204
+
205
+ " 3.2. Work on the current line {{{2
206
+ " -----------------------------
207
+
208
+ " Get the current line.
209
+ let line = getline(v:lnum)
210
+ let ind = -1
211
+
212
+ " If we got a closing bracket on an empty line, find its match and indent
213
+ " according to it. For parentheses we indent to its column - 1, for the
214
+ " others we indent to the containing line's MSL's level. Return -1 if fail.
215
+ let col = matchend(line, '^\s*[]})]')
216
+ if col > 0 && !s:IsInStringOrComment(v:lnum, col)
217
+ call cursor(v:lnum, col)
218
+ let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
219
+ if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
220
+ if line[col-1]==')' && col('.') != col('$') - 1
221
+ let ind = virtcol('.')-1
222
+ else
223
+ let ind = indent(s:GetMSL(line('.')))
224
+ endif
225
+ endif
226
+ return ind
227
+ endif
228
+
229
+ " If we have a =begin or =end set indent to first column.
230
+ if match(line, '^\s*\%(=begin\|=end\)$') != -1
231
+ return 0
232
+ endif
233
+
234
+ " If we have a deindenting keyword, find its match and indent to its level.
235
+ " TODO: this is messy
236
+ if s:Match(v:lnum, s:ruby_deindent_keywords)
237
+ call cursor(v:lnum, 1)
238
+ if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
239
+ \ s:end_skip_expr) > 0
240
+ let line = getline('.')
241
+ if strpart(line, 0, col('.') - 1) =~ '=\s*$' &&
242
+ \ strpart(line, col('.') - 1, 2) !~ 'do'
243
+ let ind = virtcol('.') - 1
244
+ else
245
+ let ind = indent('.')
246
+ endif
247
+ endif
248
+ return ind
249
+ endif
250
+
251
+ " If we are in a multi-line string or line-comment, don't do anything to it.
252
+ if s:IsInStringOrDocumentation(v:lnum, matchend(line, '^\s*') + 1)
253
+ return indent('.')
254
+ endif
255
+
256
+ " 3.3. Work on the previous line. {{{2
257
+ " -------------------------------
258
+
259
+ " Find a non-blank, non-multi-line string line above the current line.
260
+ let lnum = s:PrevNonBlankNonString(v:lnum - 1)
261
+
262
+ " At the start of the file use zero indent.
263
+ if lnum == 0
264
+ return 0
265
+ endif
266
+
267
+ " Set up variables for current line.
268
+ let line = getline(lnum)
269
+ let ind = indent(lnum)
270
+
271
+ " If the previous line ended with a block opening, add a level of indent.
272
+ if s:Match(lnum, s:block_regex)
273
+ return indent(s:GetMSL(lnum)) + &sw
274
+ endif
275
+
276
+ " If the previous line contained an opening bracket, and we are still in it,
277
+ " add indent depending on the bracket type.
278
+ if line =~ '[[({]'
279
+ let counts = s:LineHasOpeningBrackets(lnum)
280
+ if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
281
+ if col('.') + 1 == col('$')
282
+ return ind + &sw
283
+ else
284
+ return virtcol('.')
285
+ endif
286
+ elseif counts[1] == '1' || counts[2] == '1'
287
+ return ind + &sw
288
+ else
289
+ call cursor(v:lnum, vcol)
290
+ end
291
+ endif
292
+
293
+ " If the previous line ended with an "end", match that "end"s beginning's
294
+ " indent.
295
+ let col = s:Match(lnum, '\%(^\|[^.:@$]\)\<end\>\s*\%(#.*\)\=$')
296
+ if col > 0
297
+ call cursor(lnum, col)
298
+ if searchpair(s:end_start_regex, '', s:end_end_regex, 'bW',
299
+ \ s:end_skip_expr) > 0
300
+ let n = line('.')
301
+ let ind = indent('.')
302
+ let msl = s:GetMSL(n)
303
+ if msl != n
304
+ let ind = indent(msl)
305
+ end
306
+ return ind
307
+ endif
308
+ end
309
+
310
+ let col = s:Match(lnum, s:ruby_indent_keywords)
311
+ if col > 0
312
+ call cursor(lnum, col)
313
+ let ind = virtcol('.') - 1 + &sw
314
+ " let ind = indent(lnum) + &sw
315
+ " TODO: make this better (we need to count them) (or, if a searchpair
316
+ " fails, we know that something is lacking an end and thus we indent a
317
+ " level
318
+ if s:Match(lnum, s:end_end_regex)
319
+ let ind = indent('.')
320
+ endif
321
+ return ind
322
+ endif
323
+
324
+ " 3.4. Work on the MSL line. {{{2
325
+ " --------------------------
326
+
327
+ " Set up variables to use and search for MSL to the previous line.
328
+ let p_lnum = lnum
329
+ let lnum = s:GetMSL(lnum)
330
+
331
+ " If the previous line wasn't a MSL and is continuation return its indent.
332
+ " TODO: the || s:IsInString() thing worries me a bit.
333
+ if p_lnum != lnum
334
+ if s:Match(p_lnum,s:continuation_regex)||s:IsInString(p_lnum,strlen(line))
335
+ return ind
336
+ endif
337
+ endif
338
+
339
+ " Set up more variables, now that we know we wasn't continuation bound.
340
+ let line = getline(lnum)
341
+ let msl_ind = indent(lnum)
342
+
343
+ " If the MSL line had an indenting keyword in it, add a level of indent.
344
+ " TODO: this does not take into account contrived things such as
345
+ " module Foo; class Bar; end
346
+ if s:Match(lnum, s:ruby_indent_keywords)
347
+ let ind = msl_ind + &sw
348
+ if s:Match(lnum, s:end_end_regex)
349
+ let ind = ind - &sw
350
+ endif
351
+ return ind
352
+ endif
353
+
354
+ " If the previous line ended with [*+/.-=], indent one extra level.
355
+ if s:Match(lnum, s:continuation_regex)
356
+ if lnum == p_lnum
357
+ let ind = msl_ind + &sw
358
+ else
359
+ let ind = msl_ind
360
+ endif
361
+ endif
362
+
363
+ " }}}2
364
+
365
+ return ind
366
+ endfunction
367
+
368
+ " }}}1
369
+
370
+ let &cpo = s:cpo_save
371
+ unlet s:cpo_save
372
+
373
+ " vim:set sw=2 sts=2 ts=8 noet ff=unix: