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,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: