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,787 @@
1
+ " File: mru.vim
2
+ " Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
3
+ " Version: 3.2
4
+ " Last Modified: September 22, 2008
5
+ "
6
+ " Overview
7
+ " --------
8
+ " The Most Recently Used (MRU) plugin provides an easy access to a list of
9
+ " recently opened/edited files in Vim. This plugin automatically stores the
10
+ " file names as you open/edit them in Vim.
11
+ "
12
+ " This plugin will work on all the platforms where Vim is supported. This
13
+ " plugin will work in both console and GUI Vim. This version of the MRU
14
+ " plugin needs Vim 7.0 and above. If you are using an earlier version of
15
+ " Vim, then you should use an older version of the MRU plugin.
16
+ "
17
+ " The recently used filenames are stored in a file specified by the Vim
18
+ " MRU_File variable.
19
+ "
20
+ " Installation
21
+ " ------------
22
+ " 1. Copy the mru.vim file to one of the following directories:
23
+ "
24
+ " $HOME/.vim/plugin - Unix like systems
25
+ " $HOME/vimfiles/plugin - MS-Windows
26
+ " $VIM:vimfiles:plugin - Macintosh
27
+ " $VIM/vimfiles/plugin - All
28
+ "
29
+ " Refer to the following Vim help topics for more information about Vim
30
+ " plugins:
31
+ "
32
+ " :help add-plugin
33
+ " :help add-global-plugin
34
+ " :help runtimepath
35
+ "
36
+ " 2. Set the MRU_File Vim variable in the .vimrc file to the location of a
37
+ " file to store the most recently edited file names. This step is needed
38
+ " only if you want to change the default MRU filename.
39
+ " 3. Restart Vim.
40
+ " 4. You can use the ":MRU" command to list and edit the recently used files.
41
+ " In GUI Vim, you can use the 'File->Recent Files' menu to access the
42
+ " recently used files.
43
+ "
44
+ " To uninstall this plugin, remove this file (mru.vim) from the
45
+ " $HOME/.vim/plugin or $HOME/vimfiles/plugin or the $VIM/vimfile/plugin
46
+ " directory.
47
+ "
48
+ " Usage
49
+ " -----
50
+ " To list and edit files from the MRU list, you have to use the ":MRU"
51
+ " command. The ":MRU" command displays the MRU file list in a temporary Vim
52
+ " window. If the MRU window is already opened, then the MRU list displayed in
53
+ " the window is refreshed.
54
+ "
55
+ " If you are using GUI Vim, then the names of the recently edited files are
56
+ " added to the "File->Recent Files" menu. You can select the name of a file
57
+ " from this sub-menu to edit the file.
58
+ "
59
+ " You can use the normal Vim commands to move around in the MRU window. You
60
+ " cannot make changes in the MRU window.
61
+ "
62
+ " You can select a file name to edit by pressing the <Enter> key or by double
63
+ " clicking the left mouse button on a file name. The selected file will be
64
+ " opened. If the file is already opened in a window, the cursor will be moved
65
+ " to that window. Otherwise, the file is opened in the previous window. If the
66
+ " previous window has a modified buffer or is the preview window or is used by
67
+ " some other plugin, then the file is opened in a new window.
68
+ "
69
+ " You can press the 'o' key to open the file name under the cursor in the
70
+ " MRU window in a new window.
71
+ "
72
+ " To open a file from the MRU window in a new tab, press the 't' key. If the
73
+ " file is already opened in a window in the current or in another tab, then
74
+ " the cursor is moved to that tab. Otherwise, a new tab is opened.
75
+ "
76
+ " You can press the 'u' key in the MRU window to update the file list. This is
77
+ " useful if you keep the MRU window open always.
78
+ "
79
+ " You can close the MRU window by pressing the 'q' key or using one of the Vim
80
+ " window commands.
81
+ "
82
+ " To display only files matching a pattern from the MRU list in the MRU
83
+ " window, you can specify a pattern to the ":MRU" command. For example, to
84
+ " display only file names containing "vim" in them, you can use the following
85
+ " command ":MRU vim". When you specify a partial file name and only one
86
+ " matching filename is found, then the ":MRU" command will edit that file.
87
+ "
88
+ " The ":MRU" command supports command-line completion of file names from
89
+ " the MRU list. You can enter a partial file name and then press <Tab>
90
+ " or <Ctrl-D> to complete or list all the matching file names.
91
+ "
92
+ " Whenever the MRU list changes, the MRU file is updated with the latest MRU
93
+ " list. When you have multiple instances of Vim running at the same time, the
94
+ " latest MRU list will show up in all the instances of Vim.
95
+ "
96
+ " Configuration
97
+ " -------------
98
+ " By changing the following variables you can configure the behavior of this
99
+ " plugin. Set the following variables in your .vimrc file using the 'let'
100
+ " command.
101
+ "
102
+ " The list of recently edited file names is stored in the file specified by the
103
+ " MRU_File variable. The default setting for this variable is
104
+ " $HOME/.vim_mru_files for Unix-like systems and $USERPROFILE/_vim_mru_files
105
+ " for MS-Windows systems. You can change this variable to point to a file by
106
+ " adding the following line to the .vimrc file:
107
+ "
108
+ " let MRU_File = 'd:\myhome\_vim_mru_files'
109
+ "
110
+ " By default, the plugin will remember the names of the last 10 used files.
111
+ " As you edit more files, old file names will be removed from the MRU list.
112
+ " You can set the 'MRU_Max_Entries' variable to remember more file names. For
113
+ " example, to remember 20 most recently used file names, you can use
114
+ "
115
+ " let MRU_Max_Entries = 20
116
+ "
117
+ " By default, all the edited file names will be added to the MRU list. If you
118
+ " want to exclude file names matching a list of patterns, you can set the
119
+ " MRU_Exclude_Files variable to a list of Vim regular expressions. By default,
120
+ " this variable is set to an empty string. For example, to not include files
121
+ " in the temporary (/tmp, /var/tmp and d:\temp) directories, you can set the
122
+ " MRU_Exclude_Files variable to
123
+ "
124
+ " let MRU_Exclude_Files = '^/tmp/.*\|^/var/tmp/.*' " For Unix
125
+ " let MRU_Exclude_Files = '^c:\\temp\\.*' " For MS-Windows
126
+ "
127
+ " The specified pattern should be a Vim regular expression pattern.
128
+ "
129
+ " If you want to add only file names matching a set of patterns to the MRU
130
+ " list, then you can set the MRU_Include_Files variable. This variable should
131
+ " be set to a Vim regular expression pattern. For example, to add only .c and
132
+ " .h files to the MRU list, you can set this variable as below:
133
+ "
134
+ " let MRU_Include_Files = '\.c$\|\.h$'
135
+ "
136
+ " By default, MRU_Include_Files is set to an empty string and all the edited
137
+ " filenames are added to the MRU list.
138
+ "
139
+ " The default height of the MRU window is 8. You can set the MRU_Window_Height
140
+ " variable to change the window height.
141
+ "
142
+ " let MRU_Window_Height = 15
143
+ "
144
+ " By default, when the :MRU command is invoked, the MRU list will be displayed
145
+ " in a new window. Instead, if you want the MRU plugin to reuse the current
146
+ " window, then you can set the 'MRU_Use_Current_Window' variable to one.
147
+ "
148
+ " let MRU_Use_Current_Window = 1
149
+ "
150
+ " The MRU plugin will reuse the current window. When a file name is selected,
151
+ " the file is also opened in the current window.
152
+ "
153
+ " When you select a file from the MRU window, the MRU window will be
154
+ " automatically closed and the selected file will be opened in the previous
155
+ " window. You can set the 'MRU_Auto_Close' variable to zero to keep the MRU
156
+ " window open.
157
+ "
158
+ " let MRU_Auto_Close = 0
159
+ "
160
+ " If you don't use the "File->Recent Files" menu and want to disable it,
161
+ " then you can set the 'MRU_Add_Menu' variable to zero. By default, the
162
+ " menu is enabled.
163
+ "
164
+ " let MRU_Add_Menu = 0
165
+ "
166
+ " ****************** Do not modify after this line ************************
167
+ if exists('loaded_mru')
168
+ finish
169
+ endif
170
+ let loaded_mru=1
171
+
172
+ if v:version < 700
173
+ finish
174
+ endif
175
+
176
+ " Line continuation used here
177
+ let s:cpo_save = &cpo
178
+ set cpo&vim
179
+
180
+ " Maximum number of entries allowed in the MRU list
181
+ if !exists('MRU_Max_Entries')
182
+ let MRU_Max_Entries = 10
183
+ endif
184
+
185
+ " Files to exclude from the MRU list
186
+ if !exists('MRU_Exclude_Files')
187
+ let MRU_Exclude_Files = ''
188
+ endif
189
+
190
+ " Files to include in the MRU list
191
+ if !exists('MRU_Include_Files')
192
+ let MRU_Include_Files = ''
193
+ endif
194
+
195
+ " Height of the MRU window
196
+ " Default height is 8
197
+ if !exists('MRU_Window_Height')
198
+ let MRU_Window_Height = 8
199
+ endif
200
+
201
+ if !exists('MRU_Use_Current_Window')
202
+ let MRU_Use_Current_Window = 0
203
+ endif
204
+
205
+ if !exists('MRU_Auto_Close')
206
+ let MRU_Auto_Close = 1
207
+ endif
208
+
209
+ if !exists('MRU_File')
210
+ if has('unix') || has('macunix')
211
+ let MRU_File = $HOME . '/.vim_mru_files'
212
+ else
213
+ let MRU_File = $VIM . '/_vim_mru_files'
214
+ if has('win32')
215
+ " MS-Windows
216
+ if $USERPROFILE != ''
217
+ let MRU_File = $USERPROFILE . '\_vim_mru_files'
218
+ endif
219
+ endif
220
+ endif
221
+ endif
222
+
223
+ " Option for enabling or disabling the MRU menu
224
+ if !exists('MRU_Add_Menu')
225
+ let MRU_Add_Menu = 1
226
+ endif
227
+
228
+ " Control to temporarily lock the MRU list. Used to prevent files from
229
+ " getting added to the MRU list when the ':vimgrep' command is executed.
230
+ let s:mru_list_locked = 0
231
+
232
+ " MRU_LoadList
233
+ " Load the latest MRU file list from the MRU file
234
+ function! s:MRU_LoadList()
235
+ " Read the list from the MRU file.
236
+ if filereadable(g:MRU_File)
237
+ let s:MRU_files = readfile(g:MRU_File)
238
+ if s:MRU_files[0] =~# '^\s*" Most recently edited files in Vim'
239
+ " Generated by the previous version of the MRU plugin.
240
+ " Discard the list.
241
+ let s:MRU_files = []
242
+ elseif s:MRU_files[0] =~# '^#'
243
+ " Remove the comment line
244
+ call remove(s:MRU_files, 0)
245
+ else
246
+ " Unsupported format
247
+ let s:MRU_files = []
248
+ endif
249
+ else
250
+ let s:MRU_files = []
251
+ endif
252
+
253
+ " Refresh the MRU menu
254
+ call s:MRU_Refresh_Menu()
255
+ endfunction
256
+
257
+ " MRU_SaveList
258
+ " Save the MRU list to the file
259
+ function! s:MRU_SaveList()
260
+ let l = []
261
+ call add(l, '# Most recently edited files in Vim (version 3.0)')
262
+ call extend(l, s:MRU_files)
263
+ call writefile(l, g:MRU_File)
264
+ endfunction
265
+
266
+ " MRU_AddFile
267
+ " Add a file to the MRU file list
268
+ function! s:MRU_AddFile(acmd_bufnr)
269
+ if s:mru_list_locked
270
+ " MRU list is currently locked
271
+ return
272
+ endif
273
+
274
+ " Get the full path to the filename
275
+ let fname = fnamemodify(bufname(a:acmd_bufnr + 0), ':p')
276
+ if fname == ''
277
+ return
278
+ endif
279
+
280
+ " Skip temporary buffer with buftype set
281
+ if &buftype != ''
282
+ return
283
+ endif
284
+
285
+ if g:MRU_Include_Files != ''
286
+ " If MRU_Include_Files is set, include only files matching the
287
+ " specified pattern
288
+ if fname !~# g:MRU_Include_Files
289
+ return
290
+ endif
291
+ endif
292
+
293
+ if g:MRU_Exclude_Files != ''
294
+ " Do not add files matching the pattern specified in the
295
+ " MRU_Exclude_Files to the MRU list
296
+ if fname =~# g:MRU_Exclude_Files
297
+ return
298
+ endif
299
+ endif
300
+
301
+ " If the filename is not already present in the MRU list and is not
302
+ " readable then ignore it
303
+ let idx = index(s:MRU_files, fname)
304
+ if idx == -1
305
+ if !filereadable(fname)
306
+ " File is not readable and is not in the MRU list
307
+ return
308
+ endif
309
+ endif
310
+
311
+ " Load the latest MRU file list
312
+ call s:MRU_LoadList()
313
+
314
+ " Remove the new file name from the existing MRU list (if already present)
315
+ call filter(s:MRU_files, 'v:val !=# fname')
316
+
317
+ " Add the new file list to the beginning of the updated old file list
318
+ call insert(s:MRU_files, fname, 0)
319
+
320
+ " Trim the list
321
+ if len(s:MRU_files) > g:MRU_Max_Entries
322
+ call remove(s:MRU_files, g:MRU_Max_Entries, -1)
323
+ endif
324
+
325
+ " Save the updated MRU list
326
+ call s:MRU_SaveList()
327
+
328
+ " Refresh the MRU menu
329
+ call s:MRU_Refresh_Menu()
330
+
331
+ " If the MRU window is open, update the displayed MRU list
332
+ let bname = '__MRU_Files__'
333
+ let winnum = bufwinnr(bname)
334
+ if winnum != -1
335
+ let cur_winnr = winnr()
336
+ call s:MRU_Open_Window()
337
+ if winnr() != cur_winnr
338
+ exe cur_winnr . 'wincmd w'
339
+ endif
340
+ endif
341
+ endfunction
342
+
343
+ " Special characters in file names that should be escaped (for security
344
+ " reasons)
345
+ let s:esc_filename_chars = ' *?[{`$%#"|!<>();&' . "'\t\n"
346
+ function! s:MRU_escape_filename(fname)
347
+ return escape(a:fname, s:esc_filename_chars)
348
+ endfunction
349
+
350
+ " MRU_Edit_File
351
+ " Edit the specified file
352
+ function! s:MRU_Edit_File(filename, sanitized)
353
+ if !a:sanitized
354
+ let esc_fname = s:MRU_escape_filename(a:filename)
355
+ else
356
+ let esc_fname = a:filename
357
+ endif
358
+ " If the file is already open in one of the windows, jump to it
359
+ let winnum = bufwinnr('^' . a:filename . '$')
360
+ if winnum != -1
361
+ if winnum != winnr()
362
+ exe winnum . 'wincmd w'
363
+ endif
364
+ else
365
+ if &modified || &buftype != '' || &previewwindow
366
+ " Current buffer has unsaved changes or is a special buffer or is
367
+ " the preview window. So open the file in a new window
368
+ exe 'split ' . esc_fname
369
+ else
370
+ exe 'edit ' . esc_fname
371
+ endif
372
+ endif
373
+ endfunction
374
+
375
+ " MRU_Window_Edit_File
376
+ " Open a file selected from the MRU window
377
+ " win_opt == useopen, open file in previous window
378
+ " win_opt == newwin, open file in new window
379
+ " win_opt == newtab, open file in new tab
380
+ function! s:MRU_Window_Edit_File(win_opt)
381
+ let fname = getline('.')
382
+
383
+ if fname == ''
384
+ return
385
+ endif
386
+
387
+ let esc_fname = s:MRU_escape_filename(fname)
388
+
389
+ if a:win_opt == 'newwin'
390
+ " Edit the file in a new window
391
+ exe 'leftabove new ' . esc_fname
392
+
393
+ if g:MRU_Auto_Close == 1 && g:MRU_Use_Current_Window == 0
394
+ " Go back to the MRU window and close it
395
+ let cur_winnr = winnr()
396
+
397
+ wincmd p
398
+ silent! close
399
+
400
+ if winnr() != cur_winnr
401
+ exe cur_winnr . 'wincmd w'
402
+ endif
403
+ endif
404
+ elseif a:win_opt == 'newtab'
405
+ if g:MRU_Auto_Close == 1 && g:MRU_Use_Current_Window == 0
406
+ " Automatically close the window if the file window is
407
+ " not used to display the MRU list.
408
+ silent! close
409
+ endif
410
+
411
+ " If the selected file is already open in the current tab or in
412
+ " another tab, jump to it. Otherwise open it in a new tab
413
+ if bufwinnr('^' . fname . '$') == -1
414
+ let tabnum = -1
415
+ let i = 1
416
+ let bnum = bufnr('^' . fname . '$')
417
+ while i <= tabpagenr('$')
418
+ if index(tabpagebuflist(i), bnum) != -1
419
+ let tabnum = i
420
+ break
421
+ endif
422
+ let i += 1
423
+ endwhile
424
+
425
+ if tabnum != -1
426
+ " Goto the tab containing the file
427
+ exe 'tabnext ' . i
428
+ else
429
+ " Open a new tab as the last tab page
430
+ exe '999tabnew ' . esc_fname
431
+ endif
432
+ endif
433
+
434
+ " Jump to the window containing the file
435
+ let winnum = bufwinnr('^' . fname . '$')
436
+ if winnum != winnr()
437
+ exe winnum . 'wincmd w'
438
+ endif
439
+ else
440
+ " If the selected file is already open in one of the windows,
441
+ " jump to it
442
+ let winnum = bufwinnr('^' . fname . '$')
443
+ if winnum != -1
444
+ if g:MRU_Auto_Close == 1 && g:MRU_Use_Current_Window == 0
445
+ " Automatically close the window if the file window is
446
+ " not used to display the MRU list.
447
+ silent! close
448
+ endif
449
+ " As the window numbers will change after closing a window,
450
+ " get the window number again and jump to it, if the cursor
451
+ " is not already in that window
452
+ let winnum = bufwinnr('^' . fname . '$')
453
+ if winnum != winnr()
454
+ exe winnum . 'wincmd w'
455
+ endif
456
+ else
457
+ if g:MRU_Auto_Close == 1 && g:MRU_Use_Current_Window == 0
458
+ " Automatically close the window if the file window is
459
+ " not used to display the MRU list.
460
+ silent! close
461
+
462
+ " Jump to the window from which the MRU window was opened
463
+ if exists('s:MRU_last_buffer')
464
+ let last_winnr = bufwinnr(s:MRU_last_buffer)
465
+ if last_winnr != -1 && last_winnr != winnr()
466
+ exe last_winnr . 'wincmd w'
467
+ endif
468
+ endif
469
+ else
470
+ if g:MRU_Use_Current_Window == 0
471
+ " Goto the previous window
472
+ " If MRU_Use_Current_Window is set to one, then the
473
+ " current window is used to open the file
474
+ wincmd p
475
+ endif
476
+ endif
477
+
478
+ " Edit the file
479
+ if &modified || &buftype != '' || &previewwindow
480
+ " Current buffer has unsaved changes or is a special buffer or
481
+ " is the preview window. So open the file in a new window
482
+ exe 'split ' . esc_fname
483
+ else
484
+ exe 'edit ' . esc_fname
485
+ endif
486
+ endif
487
+ endif
488
+ endfunction
489
+
490
+ " MRU_Warn_Msg
491
+ " Display a warning message
492
+ function! s:MRU_Warn_Msg(msg)
493
+ echohl WarningMsg
494
+ echo a:msg
495
+ echohl None
496
+ endfunction
497
+
498
+ " MRU_Open_Window
499
+ " Display the Most Recently Used file list in a temporary window.
500
+ function! s:MRU_Open_Window(...)
501
+
502
+ " Load the latest MRU file list
503
+ call s:MRU_LoadList()
504
+
505
+ " Empty MRU list
506
+ if empty(s:MRU_files)
507
+ call s:MRU_Warn_Msg('MRU file list is empty')
508
+ return
509
+ endif
510
+
511
+ " Save the current buffer number. This is used later to open a file when a
512
+ " entry is selected from the MRU window. The window number is not saved,
513
+ " as the window number will change when new windows are opened.
514
+ let s:MRU_last_buffer = bufnr('%')
515
+
516
+ let bname = '__MRU_Files__'
517
+
518
+ " If the window is already open, jump to it
519
+ let winnum = bufwinnr(bname)
520
+ if winnum != -1
521
+ if winnr() != winnum
522
+ " If not already in the window, jump to it
523
+ exe winnum . 'wincmd w'
524
+ endif
525
+
526
+ setlocal modifiable
527
+
528
+ " Delete the contents of the buffer to the black-hole register
529
+ silent! %delete _
530
+ else
531
+ if g:MRU_Use_Current_Window
532
+ " Reuse the current window
533
+ "
534
+ " If the __MRU_Files__ buffer exists, then reuse it. Otherwise open
535
+ " a new buffer
536
+ let bufnum = bufnr(bname)
537
+ if bufnum == -1
538
+ let cmd = 'edit ' . bname
539
+ else
540
+ let cmd = 'buffer ' . bufnum
541
+ endif
542
+
543
+ exe cmd
544
+
545
+ if bufnr('%') != bufnr(bname)
546
+ " Failed to edit the MRU buffer
547
+ return
548
+ endif
549
+ else
550
+ " Open a new window at the bottom
551
+
552
+ " If the __MRU_Files__ buffer exists, then reuse it. Otherwise open
553
+ " a new buffer
554
+ let bufnum = bufnr(bname)
555
+ if bufnum == -1
556
+ let wcmd = bname
557
+ else
558
+ let wcmd = '+buffer' . bufnum
559
+ endif
560
+
561
+ exe 'silent! botright ' . g:MRU_Window_Height . 'split ' . wcmd
562
+ endif
563
+ endif
564
+
565
+ " Mark the buffer as scratch
566
+ setlocal buftype=nofile
567
+ setlocal bufhidden=delete
568
+ setlocal noswapfile
569
+ setlocal nowrap
570
+ setlocal nobuflisted
571
+ " Use fixed height for the MRU window
572
+ if v:version >= 602
573
+ setlocal winfixheight
574
+ endif
575
+
576
+ " Setup the cpoptions properly for the maps to work
577
+ let old_cpoptions = &cpoptions
578
+ set cpoptions&vim
579
+
580
+ " Create a mapping to jump to the file
581
+ nnoremap <buffer> <silent> <CR>
582
+ \ :call <SID>MRU_Window_Edit_File('useopen')<CR>
583
+ nnoremap <buffer> <silent> o
584
+ \ :call <SID>MRU_Window_Edit_File('newwin')<CR>
585
+ nnoremap <buffer> <silent> t
586
+ \ :call <SID>MRU_Window_Edit_File('newtab')<CR>
587
+ nnoremap <buffer> <silent> u :MRU<CR>
588
+ nnoremap <buffer> <silent> <2-LeftMouse>
589
+ \ :call <SID>MRU_Window_Edit_File('useopen')<CR>
590
+ nnoremap <buffer> <silent> q :close<CR>
591
+
592
+ " Restore the previous cpoptions settings
593
+ let &cpoptions = old_cpoptions
594
+
595
+ " Display the MRU list
596
+ if a:0 == 0
597
+ " No search pattern specified. Display the complete list
598
+ silent! 0put =s:MRU_files
599
+ else
600
+ " Display only the entries matching the specified pattern
601
+ " First try using it as a literal pattern
602
+ let m = filter(copy(s:MRU_files), 'stridx(v:val, a:1) != -1')
603
+ if len(m) == 0
604
+ " No match. Try using it as a regular expression
605
+ let m = filter(copy(s:MRU_files), 'v:val =~# a:1')
606
+ endif
607
+ silent! 0put =m
608
+ endif
609
+
610
+ " Move the cursor to the beginning of the file
611
+ normal! gg
612
+
613
+ setlocal nomodifiable
614
+ endfunction
615
+
616
+ " MRU_Complete
617
+ " Command-line completion function used by :MRU command
618
+ function! s:MRU_Complete(ArgLead, CmdLine, CursorPos)
619
+ if a:ArgLead == ''
620
+ " Return the list of MRU files
621
+ return s:MRU_files
622
+ else
623
+ return filter(copy(s:MRU_files), 'v:val =~? a:ArgLead')
624
+ endif
625
+ endfunction
626
+
627
+ " MRU_Cmd
628
+ " Function to handle the MRU command
629
+ function! s:MRU_Cmd(pat)
630
+ if a:pat == ''
631
+ " No arguments specified. Open the MRU window
632
+ call s:MRU_Open_Window()
633
+ return
634
+ endif
635
+
636
+ " Load the latest MRU file
637
+ call s:MRU_LoadList()
638
+
639
+ " Empty MRU list
640
+ if empty(s:MRU_files)
641
+ call s:MRU_Warn_Msg('MRU file list is empty')
642
+ return
643
+ endif
644
+
645
+ " First use the specified string as a literal string and search for
646
+ " filenames containing the string. If only one filename is found,
647
+ " then edit it.
648
+ let m = filter(copy(s:MRU_files), 'stridx(v:val, a:pat) != -1')
649
+ if len(m) > 0
650
+ if len(m) == 1
651
+ call s:MRU_Edit_File(m[0], 0)
652
+ return
653
+ endif
654
+
655
+ " More than one file matches. Try find an accurate match
656
+ let new_m = filter(m, 'v:val ==# a:pat')
657
+ if len(new_m) == 1
658
+ call s:MRU_Edit_File(new_m[0], 0)
659
+ return
660
+ endif
661
+
662
+ " Couldn't find an exact match, open the MRU window
663
+ call s:MRU_Open_Window(a:pat)
664
+ return
665
+ endif
666
+
667
+ " Use the specified string as a regular expression pattern and search
668
+ " for filenames matching the pattern
669
+ let m = filter(copy(s:MRU_files), 'v:val =~? a:pat')
670
+
671
+ if len(m) == 0
672
+ " No filenames matching the specified pattern are found
673
+ call s:MRU_Warn_Msg("MRU file list doesn't contain " .
674
+ \ "files containing " . a:pat)
675
+ return
676
+ endif
677
+
678
+ if len(m) == 1
679
+ call s:MRU_Edit_File(m[0], 0)
680
+ return
681
+ endif
682
+
683
+ call s:MRU_Open_Window(a:pat)
684
+ endfunction
685
+
686
+ function! s:MRU_add_files_to_menu(prefix, file_list)
687
+ for fname in a:file_list
688
+ " Escape special characters in the filename
689
+ let esc_fname = escape(fnamemodify(fname, ':t'), ".\\" .
690
+ \ s:esc_filename_chars)
691
+ let esc_fname = substitute(esc_fname, '&', '&&', 'g')
692
+
693
+ " Truncate the directory name if it is long
694
+ let dir_name = fnamemodify(fname, ':h')
695
+ let len = strlen(dir_name)
696
+ " Shorten long file names by adding only few characters from
697
+ " the beginning and end.
698
+ if len > 30
699
+ let dir_name = strpart(dir_name, 0, 10) .
700
+ \ '...' .
701
+ \ strpart(dir_name, len - 20)
702
+ endif
703
+ let esc_dir_name = escape(dir_name, ".\\" . s:esc_filename_chars)
704
+ let esc_dir_name = substitute(esc_dir_name, '&', '&&', 'g')
705
+
706
+ let menu_path = '&File.Recent\ Files.' . a:prefix . esc_fname .
707
+ \ '\ (' . esc_dir_name . ')'
708
+ let esc_mfname = s:MRU_escape_filename(fname)
709
+ exe 'anoremenu <silent> ' . menu_path .
710
+ \ " :call <SID>MRU_Edit_File('" . esc_mfname . "', 1)<CR>"
711
+ exe 'tmenu ' . menu_path . ' Edit file ' . esc_mfname
712
+ endfor
713
+ endfunction
714
+
715
+ " MRU_Refresh_Menu()
716
+ " Refresh the MRU menu
717
+ function! s:MRU_Refresh_Menu()
718
+ if !has('menu') || !g:MRU_Add_Menu
719
+ " No support for menus
720
+ return
721
+ endif
722
+
723
+ " Setup the cpoptions properly for the maps to work
724
+ let old_cpoptions = &cpoptions
725
+ set cpoptions&vim
726
+
727
+ " Remove the MRU menu
728
+ " To retain the teared-off MRU menu, we need to add a dummy entry
729
+ silent! unmenu &File.Recent\ Files
730
+ " The menu priority of the File menu is 10. If the MRU plugin runs
731
+ " first before menu.vim, the File menu order may not be correct.
732
+ " So specify the priority of the File menu here.
733
+ 10noremenu &File.Recent\ Files.Dummy <Nop>
734
+ silent! unmenu! &File.Recent\ Files
735
+
736
+ anoremenu <silent> &File.Recent\ Files.Refresh\ list
737
+ \ :call <SID>MRU_LoadList()<CR>
738
+ exe 'tmenu File.Recent\ Files.Refresh\ list Reload the MRU file list from '
739
+ \ . s:MRU_escape_filename(g:MRU_File)
740
+ anoremenu File.Recent\ Files.-SEP1- :
741
+
742
+ " Add the filenames in the MRU list to the menu
743
+ let entry_cnt = len(s:MRU_files)
744
+ if entry_cnt > 10
745
+ " Split the MRU menu into sub-menus
746
+ for start_idx in range(0, entry_cnt, 10)
747
+ let last_idx = start_idx + 9
748
+ if last_idx >= entry_cnt
749
+ let last_idx = entry_cnt - 1
750
+ endif
751
+ let prefix = 'Files\ (' . (start_idx + 1) . '\.\.\.' .
752
+ \ (last_idx + 1) . ').'
753
+ call s:MRU_add_files_to_menu(prefix,
754
+ \ s:MRU_files[start_idx : last_idx])
755
+ endfor
756
+ else
757
+ call s:MRU_add_files_to_menu('', s:MRU_files)
758
+ endif
759
+
760
+ " Remove the dummy menu entry
761
+ unmenu &File.Recent\ Files.Dummy
762
+
763
+ " Restore the previous cpoptions settings
764
+ let &cpoptions = old_cpoptions
765
+ endfunction
766
+
767
+ " Load the MRU list on plugin startup
768
+ call s:MRU_LoadList()
769
+
770
+ " Autocommands to detect the most recently used files
771
+ autocmd BufRead * call s:MRU_AddFile(expand('<abuf>'))
772
+ autocmd BufNewFile * call s:MRU_AddFile(expand('<abuf>'))
773
+ autocmd BufWritePost * call s:MRU_AddFile(expand('<abuf>'))
774
+
775
+ " The ':vimgrep' command adds all the files searched to the buffer list.
776
+ " This also modifies the MRU list, even though the user didn't edit the
777
+ " files. Use the following autocmds to prevent this.
778
+ autocmd QuickFixCmdPre *vimgrep* let s:mru_list_locked = 1
779
+ autocmd QuickFixCmdPost *vimgrep* let s:mru_list_locked = 0
780
+
781
+ " Command to open the MRU window
782
+ command! -nargs=? -complete=customlist,s:MRU_Complete MRU
783
+ \ call s:MRU_Cmd(<q-args>)
784
+
785
+ " restore 'cpo'
786
+ let &cpo = s:cpo_save
787
+ unlet s:cpo_save