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,80 @@
1
+ filetype plugin indent on " Automatically detect file types.
2
+ set nocompatible " We don't want vi compatibility.
3
+
4
+ " Add recently accessed projects menu (project plugin)
5
+ set viminfo^=!
6
+
7
+ " Minibuffer Explorer Settings
8
+ let g:miniBufExplMapWindowNavVim = 1
9
+ let g:miniBufExplMapWindowNavArrows = 1
10
+ let g:miniBufExplMapCTabSwitchBufs = 1
11
+ let g:miniBufExplModSelTarget = 1
12
+
13
+ " Change which file opens after executing :Rails command
14
+ let g:rails_default_file='config/database.yml'
15
+
16
+ syntax enable
17
+
18
+ set cf " Enable error files & error jumping.
19
+ set clipboard+=unnamed " Yanks go on clipboard instead.
20
+ set history=256 " Number of things to remember in history.
21
+ set autowrite " Writes on make/shell commands
22
+ set ruler " Ruler on
23
+ set nu " Line numbers on
24
+ set nowrap " Line wrapping off
25
+ set timeoutlen=250 " Time to wait after ESC (default causes an annoying delay)
26
+
27
+ " Color scheme
28
+ set background=dark
29
+ colorscheme ir_black_mod " This is a much better color scheme, Scotty :)
30
+ "colorscheme twilight
31
+
32
+ " Formatting (some of these are for coding in C and C++)
33
+ set ts=2 " Tabs are 4 spaces
34
+ set bs=2 " Backspace over everything in insert mode
35
+ set shiftwidth=2 " Tabs under smart indent
36
+ set nocp incsearch
37
+ set nocp hlsearch
38
+ set cinoptions=:0,p0,t0
39
+ set cinwords=if,else,while,do,for,switch,case
40
+ set formatoptions=tcqr
41
+ set cindent
42
+ set autoindent
43
+ set smarttab
44
+ "set lines=50
45
+ "set columns=120
46
+ set backspace=2
47
+
48
+ " Visual
49
+ set showmatch " Show matching brackets.
50
+ set mat=5 " Bracket blinking.
51
+ set novisualbell " No blinking .
52
+ set noerrorbells " No noise.
53
+ set laststatus=2 " Always show status line.
54
+
55
+ " gvim specific
56
+ set mousehide " Hide mouse after chars typed
57
+ set mouse=a " Mouse in all modes
58
+
59
+ "set showtabline=2
60
+ set tabpagemax=15
61
+ " set guifont=DejaVu\ Sans\ Mono\ 10
62
+ set cursorline
63
+
64
+ runtime! macros/matchit.vim
65
+
66
+ augroup myfiletypes
67
+ autocmd!
68
+ autocmd FileType ruby,eruby,yaml set ai sw=2 sts=2 et
69
+ augroup END
70
+
71
+ nnoremap <silent> <C-n> :tabnext<CR>
72
+ nnoremap <silent> <C-p> :tabprevious<CR>
73
+ nnoremap <silent> <C-t> :tabnew<CR>
74
+ nnoremap <silent> <C-w> :tabclose<CR>
75
+ noremap <C-j> :bprev<CR>
76
+ noremap <C-k> :bnext<CR>
77
+
78
+ let g:buftabs_only_basename=1
79
+ set laststatus=2
80
+ let g:buftabs_in_statusline=1
@@ -0,0 +1,353 @@
1
+ #--
2
+ # ==================================================================
3
+ # Author: Jamis Buck (jamis@jamisbuck.org)
4
+ # Date: 2008-10-09
5
+ #
6
+ # This file is in the public domain. Usage, modification, and
7
+ # redistribution of this file are unrestricted.
8
+ # ==================================================================
9
+ #++
10
+
11
+ # The "fuzzy" file finder provides a way for searching a directory
12
+ # tree with only a partial name. This is similar to the "cmd-T"
13
+ # feature in TextMate (http://macromates.com).
14
+ #
15
+ # Usage:
16
+ #
17
+ # finder = FuzzyFileFinder.new
18
+ # finder.search("app/blogcon") do |match|
19
+ # puts match[:highlighted_path]
20
+ # end
21
+ #
22
+ # In the above example, all files matching "app/blogcon" will be
23
+ # yielded to the block. The given pattern is reduced to a regular
24
+ # expression internally, so that any file that contains those
25
+ # characters in that order (even if there are other characters
26
+ # in between) will match.
27
+ #
28
+ # In other words, "app/blogcon" would match any of the following
29
+ # (parenthesized strings indicate how the match was made):
30
+ #
31
+ # * (app)/controllers/(blog)_(con)troller.rb
32
+ # * lib/c(ap)_(p)ool/(bl)ue_(o)r_(g)reen_(co)loratio(n)
33
+ # * test/(app)/(blog)_(con)troller_test.rb
34
+ #
35
+ # And so forth.
36
+ class FuzzyFileFinder
37
+ module Version
38
+ MAJOR = 1
39
+ MINOR = 0
40
+ TINY = 4
41
+ STRING = [MAJOR, MINOR, TINY].join(".")
42
+ end
43
+
44
+ # This is the exception that is raised if you try to scan a
45
+ # directory tree with too many entries. By default, a ceiling of
46
+ # 10,000 entries is enforced, but you can change that number via
47
+ # the +ceiling+ parameter to FuzzyFileFinder.new.
48
+ class TooManyEntries < RuntimeError; end
49
+
50
+ # Used internally to represent a run of characters within a
51
+ # match. This is used to build the highlighted version of
52
+ # a file name.
53
+ class CharacterRun < Struct.new(:string, :inside) #:nodoc:
54
+ def to_s
55
+ if inside
56
+ "(#{string})"
57
+ else
58
+ string
59
+ end
60
+ end
61
+ end
62
+
63
+ # Used internally to represent a file within the directory tree.
64
+ class FileSystemEntry #:nodoc:
65
+ attr_reader :parent
66
+ attr_reader :name
67
+
68
+ def initialize(parent, name)
69
+ @parent = parent
70
+ @name = name
71
+ end
72
+
73
+ def path
74
+ File.join(parent.name, name)
75
+ end
76
+ end
77
+
78
+ # Used internally to represent a subdirectory within the directory
79
+ # tree.
80
+ class Directory #:nodoc:
81
+ attr_reader :name
82
+
83
+ def initialize(name, is_root=false)
84
+ @name = name
85
+ @is_root = is_root
86
+ end
87
+
88
+ def root?
89
+ is_root
90
+ end
91
+ end
92
+
93
+ # The roots directory trees to search.
94
+ attr_reader :roots
95
+
96
+ # The list of files beneath all +roots+
97
+ attr_reader :files
98
+
99
+ # The maximum number of files beneath all +roots+
100
+ attr_reader :ceiling
101
+
102
+ # The prefix shared by all +roots+.
103
+ attr_reader :shared_prefix
104
+
105
+ # The list of glob patterns to ignore.
106
+ attr_reader :ignores
107
+
108
+ # Initializes a new FuzzyFileFinder. This will scan the
109
+ # given +directories+, using +ceiling+ as the maximum number
110
+ # of entries to scan. If there are more than +ceiling+ entries
111
+ # a TooManyEntries exception will be raised.
112
+ def initialize(directories=['.'], ceiling=10_000, ignores=nil)
113
+ directories = Array(directories)
114
+ directories << "." if directories.empty?
115
+
116
+ # expand any paths with ~
117
+ root_dirnames = directories.map { |d| File.expand_path(d) }.select { |d| File.directory?(d) }.uniq
118
+
119
+ @roots = root_dirnames.map { |d| Directory.new(d, true) }
120
+ @shared_prefix = determine_shared_prefix
121
+ @shared_prefix_re = Regexp.new("^#{Regexp.escape(shared_prefix)}" + (shared_prefix.empty? ? "" : "/"))
122
+
123
+ @files = []
124
+ @ceiling = ceiling
125
+
126
+ @ignores = Array(ignores)
127
+
128
+ rescan!
129
+ end
130
+
131
+ # Rescans the subtree. If the directory contents every change,
132
+ # you'll need to call this to force the finder to be aware of
133
+ # the changes.
134
+ def rescan!
135
+ @files.clear
136
+ roots.each { |root| follow_tree(root) }
137
+ end
138
+
139
+ # Takes the given +pattern+ (which must be a string) and searches
140
+ # all files beneath +root+, yielding each match.
141
+ #
142
+ # +pattern+ is interpreted thus:
143
+ #
144
+ # * "foo" : look for any file with the characters 'f', 'o', and 'o'
145
+ # in its basename (discounting directory names). The characters
146
+ # must be in that order.
147
+ # * "foo/bar" : look for any file with the characters 'b', 'a',
148
+ # and 'r' in its basename (discounting directory names). Also,
149
+ # any successful match must also have at least one directory
150
+ # element matching the characters 'f', 'o', and 'o' (in that
151
+ # order.
152
+ # * "foo/bar/baz" : same as "foo/bar", but matching two
153
+ # directory elements in addition to a file name of "baz".
154
+ #
155
+ # Each yielded match will be a hash containing the following keys:
156
+ #
157
+ # * :path refers to the full path to the file
158
+ # * :directory refers to the directory of the file
159
+ # * :name refers to the name of the file (without directory)
160
+ # * :highlighted_directory refers to the directory of the file with
161
+ # matches highlighted in parentheses.
162
+ # * :highlighted_name refers to the name of the file with matches
163
+ # highlighted in parentheses
164
+ # * :highlighted_path refers to the full path of the file with
165
+ # matches highlighted in parentheses
166
+ # * :abbr refers to an abbreviated form of :highlighted_path, where
167
+ # path segments without matches are compressed to just their first
168
+ # character.
169
+ # * :score refers to a value between 0 and 1 indicating how closely
170
+ # the file matches the given pattern. A score of 1 means the
171
+ # pattern matches the file exactly.
172
+ def search(pattern, &block)
173
+ pattern.strip!
174
+ path_parts = pattern.split("/")
175
+ path_parts.push "" if pattern[-1,1] == "/"
176
+
177
+ file_name_part = path_parts.pop || ""
178
+
179
+ if path_parts.any?
180
+ path_regex_raw = "^(.*?)" + path_parts.map { |part| make_pattern(part) }.join("(.*?/.*?)") + "(.*?)$"
181
+ path_regex = Regexp.new(path_regex_raw, Regexp::IGNORECASE)
182
+ end
183
+
184
+ file_regex_raw = "^(.*?)" << make_pattern(file_name_part) << "(.*)$"
185
+ file_regex = Regexp.new(file_regex_raw, Regexp::IGNORECASE)
186
+
187
+ path_matches = {}
188
+ files.each do |file|
189
+ path_match = match_path(file.parent, path_matches, path_regex, path_parts.length)
190
+ next if path_match[:missed]
191
+
192
+ match_file(file, file_regex, path_match, &block)
193
+ end
194
+ end
195
+
196
+ # Takes the given +pattern+ (which must be a string, formatted as
197
+ # described in #search), and returns up to +max+ matches in an
198
+ # Array. If +max+ is nil, all matches will be returned.
199
+ def find(pattern, max=nil)
200
+ results = []
201
+ search(pattern) do |match|
202
+ results << match
203
+ break if max && results.length >= max
204
+ end
205
+ return results
206
+ end
207
+
208
+ # Displays the finder object in a sane, non-explosive manner.
209
+ def inspect #:nodoc:
210
+ "#<%s:0x%x roots=%s, files=%d>" % [self.class.name, object_id, roots.map { |r| r.name.inspect }.join(", "), files.length]
211
+ end
212
+
213
+ private
214
+
215
+ # Recursively scans +directory+ and all files and subdirectories
216
+ # beneath it, depth-first.
217
+ def follow_tree(directory)
218
+ Dir.entries(directory.name).each do |entry|
219
+ next if entry[0,1] == "."
220
+ raise TooManyEntries if files.length > ceiling
221
+
222
+ full = File.join(directory.name, entry)
223
+
224
+ if File.directory?(full)
225
+ follow_tree(Directory.new(full))
226
+ elsif !ignore?(full.sub(@shared_prefix_re, ""))
227
+ files.push(FileSystemEntry.new(directory, entry))
228
+ end
229
+ end
230
+ end
231
+
232
+ # Returns +true+ if the given name matches any of the ignore
233
+ # patterns.
234
+ def ignore?(name)
235
+ ignores.any? { |pattern| File.fnmatch(pattern, name) }
236
+ end
237
+
238
+ # Takes the given pattern string "foo" and converts it to a new
239
+ # string "(f)([^/]*?)(o)([^/]*?)(o)" that can be used to create
240
+ # a regular expression.
241
+ def make_pattern(pattern)
242
+ pattern = pattern.split(//)
243
+ pattern << "" if pattern.empty?
244
+
245
+ pattern.inject("") do |regex, character|
246
+ regex << "([^/]*?)" if regex.length > 0
247
+ regex << "(" << Regexp.escape(character) << ")"
248
+ end
249
+ end
250
+
251
+ # Given a MatchData object +match+ and a number of "inside"
252
+ # segments to support, compute both the match score and the
253
+ # highlighted match string. The "inside segments" refers to how
254
+ # many patterns were matched in this one match. For a file name,
255
+ # this will always be one. For directories, it will be one for
256
+ # each directory segment in the original pattern.
257
+ def build_match_result(match, inside_segments)
258
+ runs = []
259
+ inside_chars = total_chars = 0
260
+ match.captures.each_with_index do |capture, index|
261
+ if capture.length > 0
262
+ # odd-numbered captures are matches inside the pattern.
263
+ # even-numbered captures are matches between the pattern's elements.
264
+ inside = index % 2 != 0
265
+
266
+ total_chars += capture.gsub(%r(/), "").length # ignore '/' delimiters
267
+ inside_chars += capture.length if inside
268
+
269
+ if runs.last && runs.last.inside == inside
270
+ runs.last.string << capture
271
+ else
272
+ runs << CharacterRun.new(capture, inside)
273
+ end
274
+ end
275
+ end
276
+
277
+ # Determine the score of this match.
278
+ # 1. fewer "inside runs" (runs corresponding to the original pattern)
279
+ # is better.
280
+ # 2. better coverage of the actual path name is better
281
+
282
+ inside_runs = runs.select { |r| r.inside }
283
+ run_ratio = inside_runs.length.zero? ? 1 : inside_segments / inside_runs.length.to_f
284
+
285
+ char_ratio = total_chars.zero? ? 1 : inside_chars.to_f / total_chars
286
+
287
+ score = run_ratio * char_ratio
288
+
289
+ return { :score => score, :result => runs.join }
290
+ end
291
+
292
+ # Match the given path against the regex, caching the result in +path_matches+.
293
+ # If +path+ is already cached in the path_matches cache, just return the cached
294
+ # value.
295
+ def match_path(path, path_matches, path_regex, path_segments)
296
+ return path_matches[path] if path_matches.key?(path)
297
+
298
+ name_with_slash = path.name + "/" # add a trailing slash for matching the prefix
299
+ matchable_name = name_with_slash.sub(@shared_prefix_re, "")
300
+ matchable_name.chop! # kill the trailing slash
301
+
302
+ if path_regex
303
+ match = matchable_name.match(path_regex)
304
+
305
+ path_matches[path] =
306
+ match && build_match_result(match, path_segments) ||
307
+ { :score => 1, :result => matchable_name, :missed => true }
308
+ else
309
+ path_matches[path] = { :score => 1, :result => matchable_name }
310
+ end
311
+ end
312
+
313
+ # Match +file+ against +file_regex+. If it matches, yield the match
314
+ # metadata to the block.
315
+ def match_file(file, file_regex, path_match, &block)
316
+ if file_match = file.name.match(file_regex)
317
+ match_result = build_match_result(file_match, 1)
318
+ full_match_result = path_match[:result].empty? ? match_result[:result] : File.join(path_match[:result], match_result[:result])
319
+ shortened_path = path_match[:result].gsub(/[^\/]+/) { |m| m.index("(") ? m : m[0,1] }
320
+ abbr = shortened_path.empty? ? match_result[:result] : File.join(shortened_path, match_result[:result])
321
+
322
+ result = { :path => file.path,
323
+ :abbr => abbr,
324
+ :directory => file.parent.name,
325
+ :name => file.name,
326
+ :highlighted_directory => path_match[:result],
327
+ :highlighted_name => match_result[:result],
328
+ :highlighted_path => full_match_result,
329
+ :score => path_match[:score] * match_result[:score] }
330
+ yield result
331
+ end
332
+ end
333
+
334
+ def determine_shared_prefix
335
+ # the common case: if there is only a single root, then the entire
336
+ # name of the root is the shared prefix.
337
+ return roots.first.name if roots.length == 1
338
+
339
+ split_roots = roots.map { |root| root.name.split(%r{/}) }
340
+ segments = split_roots.map { |root| root.length }.max
341
+ master = split_roots.pop
342
+
343
+ segments.times do |segment|
344
+ if !split_roots.all? { |root| root[segment] == master[segment] }
345
+ return master[0,segment].join("/")
346
+ end
347
+ end
348
+
349
+ # shouldn't ever get here, since we uniq the root list before
350
+ # calling this method, but if we do, somehow...
351
+ return roots.first.name
352
+ end
353
+ end
@@ -0,0 +1,85 @@
1
+ " Vim syntax file
2
+ " Language: eRuby
3
+ " Maintainer: Tim Pope <vimNOSPAM@tpope.info>
4
+ " Info: $Id: eruby.vim,v 1.18 2007/05/06 23:56:12 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:current_syntax")
10
+ finish
11
+ endif
12
+
13
+ if !exists("main_syntax")
14
+ let main_syntax = 'eruby'
15
+ endif
16
+
17
+ if !exists("g:eruby_default_subtype")
18
+ let g:eruby_default_subtype = "html"
19
+ endif
20
+
21
+ if !exists("b:eruby_subtype") && main_syntax == 'eruby'
22
+ let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
23
+ let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
24
+ if b:eruby_subtype == ''
25
+ let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\)\+$','',''),'\.\zs\w\+$')
26
+ endif
27
+ if b:eruby_subtype == 'rhtml'
28
+ let b:eruby_subtype = 'html'
29
+ elseif b:eruby_subtype == 'rb'
30
+ let b:eruby_subtype = 'ruby'
31
+ elseif b:eruby_subtype == 'yml'
32
+ let b:eruby_subtype = 'yaml'
33
+ elseif b:eruby_subtype == 'js'
34
+ let b:eruby_subtype = 'javascript'
35
+ elseif b:eruby_subtype == 'txt'
36
+ " Conventional; not a real file type
37
+ let b:eruby_subtype = 'text'
38
+ elseif b:eruby_subtype == ''
39
+ let b:eruby_subtype = g:eruby_default_subtype
40
+ endif
41
+ endif
42
+
43
+ if !exists("b:eruby_nest_level")
44
+ let b:eruby_nest_level = strlen(substitute(substitute(substitute(expand("%:t"),'@','','g'),'\c\.\%(erb\|rhtml\)\>','@','g'),'[^@]','','g'))
45
+ endif
46
+ if !b:eruby_nest_level
47
+ let b:eruby_nest_level = 1
48
+ endif
49
+
50
+ if exists("b:eruby_subtype") && b:eruby_subtype != ''
51
+ exe "runtime! syntax/".b:eruby_subtype.".vim"
52
+ unlet! b:current_syntax
53
+ endif
54
+ syn include @rubyTop syntax/ruby.vim
55
+
56
+ syn cluster erubyRegions contains=erubyOneLiner,erubyBlock,erubyExpression,erubyComment
57
+
58
+ exe 'syn region erubyOneLiner matchgroup=erubyDelimiter start="^%\{1,'.b:eruby_nest_level.'\}%\@!" end="$" contains=@rubyTop containedin=ALLBUT,@erbRegions keepend oneline'
59
+ exe 'syn region erubyBlock matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}%\@!-\=" end="-\=%>" contains=@rubyTop containedin=ALLBUT,@erbRegions'
60
+ exe 'syn region erubyExpression matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}=" end="-\=%>" contains=@rubyTop containedin=ALLBUT,@erbRegions'
61
+ exe 'syn region erubyComment matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}#" end="-\=%>" contains=rubyTodo,@Spell containedin=ALLBUT,@erbRegions keepend'
62
+
63
+ " Define the default highlighting.
64
+ " For version 5.7 and earlier: only when not done already
65
+ " For version 5.8 and later: only when an item doesn't have highlighting yet
66
+ if version >= 508 || !exists("did_eruby_syntax_inits")
67
+ if version < 508
68
+ let did_ruby_syntax_inits = 1
69
+ command -nargs=+ HiLink hi link <args>
70
+ else
71
+ command -nargs=+ HiLink hi def link <args>
72
+ endif
73
+
74
+ HiLink erubyDelimiter Delimiter
75
+ HiLink erubyComment Comment
76
+
77
+ delcommand HiLink
78
+ endif
79
+ let b:current_syntax = 'eruby'
80
+
81
+ if main_syntax == 'eruby'
82
+ unlet main_syntax
83
+ endif
84
+
85
+ " vim: nowrap sw=2 sts=2 ts=8 ff=unix: