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