diff options
author | Johannes Stolp <jstolp@vgfr65cs2.internal.synopsys.com> | 2016-07-01 17:41:55 +0200 |
---|---|---|
committer | Johannes Stolp <jstolp@vgfr65cs2.internal.synopsys.com> | 2016-07-01 17:41:55 +0200 |
commit | 72706eb9323065cdb4152d73926fd680a4c5a9ab (patch) | |
tree | 4ab215cd6f2093d81915d2c8e5c685c5e3082fd3 /.vim/available_plugins | |
parent | d3501225442d08275d1300e8797d1c15e0025488 (diff) | |
download | dotfiles-72706eb9323065cdb4152d73926fd680a4c5a9ab.tar.gz dotfiles-72706eb9323065cdb4152d73926fd680a4c5a9ab.zip |
Removed current plugin handling, added script to install vundle(a vim plugin manager).
Adapted vim config files to use vundle. To install new vim plugins, they must be added to .vim/vimrc_files/vundle.vim
Diffstat (limited to '.vim/available_plugins')
-rwxr-xr-x | .vim/available_plugins/bufexplorer/LICENSE | 27 | ||||
-rwxr-xr-x | .vim/available_plugins/bufexplorer/README.md | 71 | ||||
-rwxr-xr-x | .vim/available_plugins/bufexplorer/doc/bufexplorer.txt | 751 | ||||
-rwxr-xr-x | .vim/available_plugins/bufexplorer/plugin/bufexplorer.vim | 1257 | ||||
-rwxr-xr-x | .vim/available_plugins/minibufexpl/.gitignore | 1 | ||||
-rwxr-xr-x | .vim/available_plugins/minibufexpl/README.md | 231 | ||||
-rwxr-xr-x | .vim/available_plugins/minibufexpl/doc/minibufexpl.txt | 1137 | ||||
-rwxr-xr-x | .vim/available_plugins/minibufexpl/plugin/minibufexpl.vim | 2467 |
8 files changed, 0 insertions, 5942 deletions
diff --git a/.vim/available_plugins/bufexplorer/LICENSE b/.vim/available_plugins/bufexplorer/LICENSE deleted file mode 100755 index 28d7bc4..0000000 --- a/.vim/available_plugins/bufexplorer/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2001-2013, Jeff Lanzarotta -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - -* Neither the name of the {organization} nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/.vim/available_plugins/bufexplorer/README.md b/.vim/available_plugins/bufexplorer/README.md deleted file mode 100755 index 55ae948..0000000 --- a/.vim/available_plugins/bufexplorer/README.md +++ /dev/null @@ -1,71 +0,0 @@ -bufexplorer -=========== - -BufExplorer Plugin for Vim - -With bufexplorer, you can quickly and easily switch between buffers by using the one of the default public interfaces: - - '<Leader>be' (normal open) or - '<Leader>bt' (toggle open / close) or - '<Leader>bs' (force horizontal split open) or - '<Leader>bv' (force vertical split open) - -Once the bufexplorer window is open you can use the normal movement keys (hjkl) to move around and then use <Enter> or <Left-Mouse-Click> to select the buffer you would like to open. If you would like to have the selected buffer opened in a new tab, simply press either <Shift-Enter> or 't'. Please note that when opening a buffer in a tab, that if the buffer is already in another tab, bufexplorer can switch to that tab automatically for you if you would like. More about that in the supplied VIM help. - -Bufexplorer also offers various options including: -- Display the list of buffers in various sort orders including: - - Most Recently Used (MRU) which is the default - - Buffer number - - File name - - File extension - - Full file path name -- Delete buffer from list - -For more about options, sort orders, configuration options, etc. please see the supplied VIM help. - -## vim.org -This plugin can also be found at http://www.vim.org/scripts/script.php?script_id=42. - -## Installation - -If you do not have a preferred installation method, I would recommend installing [neobundle.vim](https://github.com/Shougo/neobundle.vim), and -then simply putting the following in your _vimrc or .vimrc file: - - Neobundle 'jlanzarotta/bufexplorer' - -If you do not want to use [neobundle.vim](https://github.com/Shougo/neobundle.vim), you can take the zip file from vim.org and unzip it and copy the plugin to your vimfiles\plugin directory and the txt file to your vimfiles\doc directory. If you do that, make sure you generate the help by executing - -`:helptag <your runtime directory>/doc` - -Once help tags have been generated, you can view the manual with -`:help bufexplorer`. - -## License -Copyright (c) 2001-2016, Jeff Lanzarotta - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - -* Neither the name of the {organization} nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/.vim/available_plugins/bufexplorer/doc/bufexplorer.txt b/.vim/available_plugins/bufexplorer/doc/bufexplorer.txt deleted file mode 100755 index 41020ef..0000000 --- a/.vim/available_plugins/bufexplorer/doc/bufexplorer.txt +++ /dev/null @@ -1,751 +0,0 @@ -*bufexplorer.txt* Buffer Explorer Last Change: 01 Apr 2016 - -Buffer Explorer *buffer-explorer* *bufexplorer* - Version 7.4.9 - -Plugin for easily exploring (or browsing) Vim|:buffers|. - -|bufexplorer-installation| Installation -|bufexplorer-usage| Usage -|bufexplorer-windowlayout| Window Layout -|bufexplorer-customization| Customization -|bufexplorer-changelog| Change Log -|bufexplorer-todo| Todo -|bufexplorer-credits| Credits -|bufexplorer-copyright| Copyright - -For Vim version 7.0 and above. -This plugin is only available if 'compatible' is not set. - -{Vi does not have any of this} - -============================================================================== -INSTALLATION *bufexplorer-installation* - -To install: - - Download the bufexplorer.zip from one of the following places: - https://github.com/jlanzarotta/bufexplorer - http://www.vim.org/scripts/script.php?script_id=42 - or use a package manager like Vundle. - - Extract the zip archive into your runtime directory. - The archive contains plugin/bufexplorer.vim, and doc/bufexplorer.txt. - - Start Vim or goto an existing instance of Vim. - - Execute the following command: -> - :helptag <your runtime directory>/doc -< - This will generate all the help tags for any file located in the doc - directory. - -============================================================================== -USAGE *bufexplorer-usage* - -To start exploring in the current window, use: > - <Leader>be or :BufExplorer or Your custom key mapping -To toggle bufexplorer on or off in the current window, use: > - <Leader>bt or :ToggleBufExplorer or Your custom key mapping -To start exploring in a newly split horizontal window, use: > - <Leader>bs or :BufExplorerHorizontalSplit or Your custom key mapping -To start exploring in a newly split vertical window, use: > - <Leader>bv or :BufExplorerVerticalSplit or Your custom key mapping - -If you would like to use something other than the default leader key - '\' - -you may simply change the leader (see |mapleader|). - -When <Leader>bs or <Leader>bv is issued, bufexplorer opens in either a -horizontally or vertically split window. By issusing either of these commands, -the user is telling bufexplorer that they want to split the window and have -bufexplorer show the buffer they are about to select (from the bufexplorer -windows) in the newly split window. When <Leader>be is issued, bufexplorer -opens the bufexplorer contents in the current window and the buffer the user -selects is opened in the current window. - -Note: If the current buffer is modified when bufexplorer started, the current - window is always split and the new bufexplorer is displayed in that new - window. - -Commands to use once exploring: - - <F1> Toggle help information. - <enter> Opens the buffer that is under the cursor into the current - window. - <leftmouse> Opens the buffer that is under the cursor into the current - window. - <shift-enter> Opens the buffer that is under the cursor in another tab. - b Fast buffer switching with b<any bufnum>. - B Works in association with the |ShowTabBuffer| option. If - |ShowTabBuffer| is set to 1, this toggles if BufExplorer is to - only store the most recent tab for this buffer or not. - d |:delete| the buffer under the cursor from the list. The - buffer's 'buflisted' is cleared. This allows for the buffer to - be displayed again using the 'show unlisted' command. - D |:wipeout| the buffer under the cursor from the list. When a - buffer is wiped, it will not be shown when unlisted buffers are - displayed. - f Toggles whether you are taken to the active window when - selecting a buffer or not. - o Opens the buffer that is under the cursor into the current - window. - p Toggles the showing of a split filename/pathname. - q Exit/Close bufexplorer. - r Reverses the order the buffers are listed in. - R Toggles relative path/absolute path. - s Cycle thru how the buffers are listed. Either by buffer - number, file name, file extension, most recently used (MRU), or - full path. - S Cycle thru how the buffers are listed, in reverse order. - Either by buffer number, file name, file extension, most - recently used (MRU), or full path. - t Opens the buffer that is under the cursor in another tab. - T Toggles to show only buffers for this tab or not. - u Toggles the showing of "unlisted" buffers. - -Once invoked, Buffer Explorer displays a sorted list (MRU is the default -sort method) of all the buffers that are currently opened. You are then -able to move the cursor to the line containing the buffer's name you are -wanting to act upon. Once you have selected the buffer you would like, -you can then either open it, close it (delete), resort the list, reverse -the sort, quit exploring and so on... - -=============================================================================== -WINDOW LAYOUT *bufexplorer-windowlayout* - -------------------------------------------------------------------------------- -" Press <F1> for Help -" Sorted by mru | Locate buffer | Absolute Split path -"= - 1 %a bufexplorer.txt C:\Vim\vimfiles\doc line 87 - 2 # bufexplorer.vim c:\Vim\vimfiles\plugin line 1 -------------------------------------------------------------------------------- - | | | | | - | | | | +-- Current Line #. - | | | +-- Relative/Full Path - | | +-- Buffer Name. - | +-- Buffer Attributes. See |:buffers| for more information. - +-- Buffer Number. See |:buffers| for more information. - -=============================================================================== -CUSTOMIZATION *bufexplorer-customization* - -If you do not like the default key mappings of <Leader>be, <Leader>bs, and -<Leader>bv, you can override bufexplorer's default mappings by setting up -something like the following in your vimrc file: - - nnoremap <silent> <F11> :BufExplorer<CR> - nnoremap <silent> <s-F11> :ToggleBufExplorer<CR> - nnoremap <silent> <m-F11> :BufExplorerHorizontalSplit<CR> - nnoremap <silent> <c-F11> :BufExplorerVerticalSplit<CR> - - *g:bufExplorerChgWin* -If set, bufexplorer will bring up the selected buffer in the window specified -by g:bufExplorerChgWin. - - *g:bufExplorerDefaultHelp* -To control whether the default help is displayed or not, use: > - let g:bufExplorerDefaultHelp=0 " Do not show default help. - let g:bufExplorerDefaultHelp=1 " Show default help. -The default is to show the default help. - - *g:bufExplorerDisableDefaultKeyMapping* -To control whether the default key mappings are enabled or not, use: > - let g:bufExplorerDisableDefaultKeyMapping=0 " Do not disable mapping. - let g:bufExplorerDisableDefaultKeyMapping=1 " Disable mapping. -The default is NOT to disable the default key mapping. - - *g:bufExplorerDetailedHelp* -To control whether detailed help is display by, use: > - let g:bufExplorerDetailedHelp=0 " Do not show detailed help. - let g:bufExplorerDetailedHelp=1 " Show detailed help. -The default is NOT to show detailed help. - - *g:bufExplorerFindActive* -To control whether you are taken to the active window when selecting a buffer, -use: > - let g:bufExplorerFindActive=0 " Do not go to active window. - let g:bufExplorerFindActive=1 " Go to active window. -The default is to be taken to the active window. - - *g:bufExplorerFuncRef* -When a buffer is selected, the functions specified either singly or as a list -will be called. - - *g:bufExplorerReverseSort* -To control whether to sort the buffer in reverse order or not, use: > - let g:bufExplorerReverseSort=0 " Do not sort in reverse order. - let g:bufExplorerReverseSort=1 " Sort in reverse order. -The default is NOT to sort in reverse order. - - *g:bufExplorerShowDirectories* -Directories usually show up in the list from using a command like ":e .". -To control whether to show directories in the buffer list or not, use: > - let g:bufExplorerShowDirectories=0 " Do not show directories. - let g:bufExplorerShowDirectories=1 " Show directories. -The default is to show directories. - - *g:bufExplorerShowNoName* -To control whether to show "No Name" buffers or not, use: > - let g:bufExplorerShowNoName=0 " Do not "No Name" buffers. - let g:bufExplorerShowNoName=1 " Show "No Name" buffers. -The default is to NOT show "No Name buffers. - - *g:bufExplorerShowRelativePath* -To control whether to show absolute paths or relative to the current -directory, use: > - let g:bufExplorerShowRelativePath=0 " Show absolute paths. - let g:bufExplorerShowRelativePath=1 " Show relative paths. -The default is to show absolute paths. - - *g:bufExplorerShowTabBuffer* -To control weither or not to show buffers on for the specific tab or not, use: > - let g:bufExplorerShowTabBuffer=0 " No. - let g:bufExplorerShowTabBuffer=1 " Yes. -The default is not to show. - - *g:bufExplorerShowUnlisted* -To control whether to show unlisted buffers or not, use: > - let g:bufExplorerShowUnlisted=0 " Do not show unlisted buffers. - let g:bufExplorerShowUnlisted=1 " Show unlisted buffers. -The default is to NOT show unlisted buffers. - - *g:bufExplorerSortBy* -To control what field the buffers are sorted by, use: > - let g:bufExplorerSortBy='extension' " Sort by file extension. - let g:bufExplorerSortBy='fullpath' " Sort by full file path name. - let g:bufExplorerSortBy='mru' " Sort by most recently used. - let g:bufExplorerSortBy='name' " Sort by the buffer's name. - let g:bufExplorerSortBy='number' " Sort by the buffer's number. -The default is to sort by mru. - - *g:bufExplorerSplitBelow* -To control where the new split window will be placed above or below the -current window, use: > - let g:bufExplorerSplitBelow=1 " Split new window below current. - let g:bufExplorerSplitBelow=0 " Split new window above current. -The default is to use whatever is set by the global &splitbelow -variable. - - *g:bufExplorerSplitHorzSize* -To control the size of the new horizontal split window. use: > - let g:bufExplorerSplitHorzSize=n " New split window is n rows high. - let g:bufExplorerSplitHorzSize=0 " New split window size set by Vim. -The default is 0, so that the size is set by Vim. - - *g:bufExplorerSplitOutPathName* -To control whether to split out the path and file name or not, use: > - let g:bufExplorerSplitOutPathName=1 " Split the path and file name. - let g:bufExplorerSplitOutPathName=0 " Don't split the path and file - " name. -The default is to split the path and file name. - - *g:bufExplorerSplitRight* -To control where the new vsplit window will be placed to the left or right of -current window, use: > - let g:bufExplorerSplitRight=0 " Split left. - let g:bufExplorerSplitRight=1 " Split right. -The default is to use the global &splitright. - - *g:bufExplorerSplitVertSize* -To control the size of the new vertical split window. use: > - let g:bufExplorerVertSize=n " New split window is n columns wide. - let g:bufExplorerVertSize=0 " New split windows size set by Vim. -The default is 0, so that the size is set by Vim. - -=============================================================================== -CHANGE LOG *bufexplorer-changelog* - -7.4.9 April 01, 2016 - - Thanks to ivegotasthma for supplying a patch to fix a major issue with - plugin performance when lots of buffers are open. - - Thanks to ershov for the patch to fix grouping of files in ambiguous - sort modes. - - Thanks to PhilRunninger for changing documentation to use <Leader>, in - place of '\'. -7.4.8 January 27, 2015 - - Thanks to Marius Gedminas for fixing up the documentation and correcting - various typos. -7.4.7 January 20, 2015 - - Thanks goes out to Phil Runninger for added the ability to toggle the - bufexplorer list on and off using the :ToggleBufExplorer command, the - map <Leader>bt, and the function ToggleBufExplorer(). -7.4.6 November 03, 2014 - - Not sure how, but the file format was converted to Dos instead of Unix. - I converted the file back to Unix. -7.4.5 October 24, 2014 - - Dr Michael Henry suggested to change all noremap commands to nnoremap. - Using noremap is unnecessarily broad and can cause problems, especially - for select mode. -7.4.4 August 19, 2014 - - Revert change where bufexplorer windows was closed even if the target - buffer has not been loaded yet. -7.4.3 August 13, 2014 - - Ivan Ukhov fixed issue with deleting the last window. This update also - fixes as well as another. If you have say, NERDtree open on the left - side and bufexplorer on the right, that bufexplorer would close NERDtree - erroneously thinking that it is closing itself. - - Radoslaw Burny fixed a few bugs that surfaced when bufexplorer is used - within winmanager. -7.4.2 October 22, 2013 - - Added global option g:bufExplorerDisableDefaultKeyMapping. This option - controls weather the default key mappings (\be, \bs, and \bv) are - enabled or not. See documentation for more information. -7.4.1 October 11, 2013 - - First update related to Vim 7.4. - - Changed license text. - - Fixed issue with 'hidden'. If 'hidden' is set, make sure that - g:bufExplorerFindActive is set to 0. Otherwise, when using \bs or \bv, - and selecting a buffer, the original buffer will be switched to instead - of being opened in the newly created windows. - - Added new 'b' mapping when the bufExplorer window is opened. When 'b' - is pressed, the user is prompted for the buffer number to switch to, and - is is then switched to when <CR> is pressed. This allows for somewhat - faster buffer switching instead of using the j and k keys or the mouse - to select the buffer to switch to. - - Removed 'set nolist' from the Initialize() function as well as the - restore of the 'list' setting in the CleanUp() function. These were - causing issues when multiple new files were opened from the command - line. Furthermore, there was really no reason, that I can remember, to - why the 'list' setting was saved, modified, and restored anyways. - - Fixed issue with WinManager integration code not working correctly - anymore. - - Brought back the xnoremap setup for the 'd' and 'D' keys. These were - removed for some reason after version 7.2.8. - - Thanks to all the contributors and testers. -7.3.6 May 06, 2013 - - Removed the 'drop' window command that was causing issue with the - argument-list being modified after the BufExplorer windows was - displayed. -7.3.5 February 08, 2013 - - Michael Henry added the ability to view "No Name" buffers. This - functionality was lost since version 7.3.0. He also did some removal of - "dead" code and cleaned up the code to handle filenames with embedded - '"'. -7.3.4 January 28, 2013 - - Thanks go out to John Szakmeister for finding and fixing a bug in the - RebuildBufferList method. The keepjumps line that clears the list could - potentially reference a backwards range. -7.3.3 January 14, 2013 - - Major cleanup and reorganization of the change log. - - We welcome the return of g:bufExplorerSplitHorzSize and - g:bufExplorerSplitVertSize. When setting these values, anything less - than or equal to 0 causes the split windows size to be determined by - Vim. If for example you want your new horizontal split window 10 rows - high, set g:bufExplorerSplitHorzSize = 10 in your .vimrc. Similar would - be done if wanting a vertical split except you would use the - g:bufExplorerSplitVertSize variable instead. -7.3.2 December 24, 2012 - - Thanks go out to Michael Henry for pointing out that I completely - missed yet another function, ReverseSortSelect(), during the - refactoring. This function has now returned. -7.3.1 December 06, 2012 - - Thanks go out to Brett Rasmussen for pointing out that the feature - added way back in version 7.2.3 by Yuriy Ershov to automatically - reposition the cursor to the line containing the active buffer, was - no longer in the plugin. That bit of code has been re-added and - all is well. -7.3.0 October 09, 2012 - - It has been quite a while since I published a new version and this - is the first version since Vim 7.3 was released. I have put some - time into reworking and cleaning up the code as well as various bug - fixes. Overall, I am hopeful that I not forgotten or lost a feature. - - Thanks to Tim Johnson for testing out this new version. - - I have hopefully allowed for better mapping of the main public - methods as is explained in the |bufexplorer-customization| section - of the documentation. - - Add new 'B', 'o', and 'S' key mappings. -7.2.8 November 08, 2010 - - Thanks to Charles Campbell for integrating bufexplorer with GDBMGR. - http://mysite.verizon.net/astronaut/vim/index.html#GDBMGR -7.2.7 April 26, 2010 - - My 1st attempt to fix the "cache" issue where buffers information - has changed but the cache/display does not reflect those changes. - More work still needs to be done. -7.2.6 February 12, 2010 - - Thanks to Michael Henry for pointing out that I totally forgot to - update the inline help to reflect the previous change to the 'd' - and 'D' keys. Opps! -7.2.5 February 10, 2010 - - Philip Morant suggested switching the command (bwipe) associated - with the 'd' key with the command (bdelete) associated with the 'D' - key. This made sense since the 'd' key is more likely to be used - compared to the 'D' key. -7.2.4 January 14, 2010 - - I did not implement the patch provided by Godefroid Chapelle - correctly. I missed one line which happened to be the most important - one :) -7.2.3 December 15, 2009 - - Hopefully I have not left anyone or anything out :) - - Thanks to David Fishburn for helping me out with a much needed - code overhaul as well as some awesome performance enhancements. - - David also reworked the handling of tabs. - - Thanks to Vladimir Dobriakov for making the suggestions on - enhancing the documentation to include a better explaination of - what is contained in the main bufexplorer window. - - Thanks to Yuriy Ershov for added code that when the bufexplorer - window is opened, the cursor is now positioned at the line with the - active buffer (useful in non-MRU sort modes). - - Yuriy also added the abiltiy to cycle through the sort fields in - reverse order. - - Thanks to Michael Henry for supplying a patch that allows - bufexplorer to be opened even when there is one buffer or less. - - Thanks to Godefroid Chapelle for supplying a patch that fixed - MRU sort order after loading a session. -7.2.2 November 19, 2008 - - Thanks to David L. Dight for spotting and fixing an issue when using - ctrl^. bufexplorer would incorrectly handle the previous buffer so - that when ctrl^ was pressed the incorrect file was opened. -7.2.1 September 03, 2008 - - Thanks to Dimitar for spotting and fixing a feature that was - inadvertently left out of the previous version. The feature was when - bufexplorer was used together with WinManager, you could use the tab - key to open a buffer in a split window. -7.2.0 August 15, 2008 - - For all those missing the \bs and \bv commands, these have now - returned. Thanks to Phil O'Connell for asking for the return of - these missing features and helping test out this version. - - Fixed problem with the bufExplorerFindActive code not working - correctly. - - Fixed an incompatibility between bufexplorer and netrw that caused - buffers to be incorrectly removed from the MRU list. -7.1.7 December 21, 2007 - - TaCahiroy fixed several issues related to opening a buffer in a tab. -7.1.6 December 01, 2007 - - Removed ff=unix from modeline in bufexplorer.txt. Found by Bill - McCarthy. -7.1.5 November 30, 2007 - - Could not open unnamed buffers. Fixed by TaCahiroy. -7.1.4 November 16, 2007 - - Sometimes when a file's path has 'white space' in it, extra buffers - would be created containing each piece of the path. i.e: - opening c:\document and settings\test.txt would create a buffer - named "and" and a buffer named "Documents". This was reported and - fixed by TaCa Yoss. -7.1.3 November 15, 2007 - - Added code to allow only one instance of the plugin to run at a time. - Thanks Dennis Hostetler. -7.1.2 November 07, 2007 - - Dave Larson added handling of tabs. - - Dave Larson removed \bs and \bv commands because these are easier for - the used to create horizontal and vertical windows. - - Fixed a jumplist issue spotted by JiangJun. I overlooked the - 'jumplist' and with a couple calls to 'keepjumps', everything is fine - again. - - Went back to using just a plugin file, instead of both an autoload - and plugin file. The splitting of the file caused issues with other - plugins. So if you have a prior version of bufexplorer that has an - autoload file, please remove autoload\bufexplorer and - plugin\bufexplorer before installing this new version. - - Fixed E493 error spotted by Thomas Arendsen Hein. - - Minor cosmetic changes. - - Minor help file changes. -7.1.1 August 02, 2007 - - A problem spotted by Thomas Arendsen Hein. When running Vim - (7.1.94), error E493 was being thrown. - * Added 'D' for 'delete' buffer as the 'd' command was a 'wipe' buffer. -7.1.0 August 01, 2007 - - Another 'major' update, some by Dave Larson, some by me. - - Making use of 'autoload' now to make the plugin load quicker. - - Removed '\bs' and '\bv'. These are now controlled by the user. The - user can issue a ':sp' or ':vs' to create a horizontal or vertical - split window and then issue a '\be' - - Added handling of tabs. -7.0.17 July 24, 2007 - - Fixed issue with 'drop' command. - - Various enhancements and improvements. -7.0.16 May 15, 2007 - - Fixed issue reported by Liu Jiaping on non Windows systems, which was - ... - Open file1, open file2, modify file1, open bufexplorer, you get the - following error: - - --------8<-------- - Error detected while processing function - <SNR>14_StartBufExplorer..<SNR>14_SplitOpen: - line 4: - E37: No write since last change (add ! to override) - - But the worse thing is, when I want to save the current buffer and - type ':w', I get another error message: - E382: Cannot write, 'buftype' option is set - --------8<-------- - -7.0.15 April 27, 2007 - - Thanks to Mark Smithfield for suggesting bufexplorer needed to handle - the ':args' command. -7.0.14 March 23, 2007 - - Thanks to Randall Hansen for removing the requirement of terminal - versions to be recompiled with 'gui' support so the 'drop' command - would work. The 'drop' command is really not needed in terminal - versions. -7.0.13 February 23, 2007 - - Fixed integration with WinManager. - - Thanks to Dave Eggum for another update. - * Fix: The detailed help didn't display the mapping for toggling - the split type, even though the split type is displayed. - * Fixed incorrect description in the detailed help for toggling - relative or full paths. - * Deprecated s:ExtractBufferNbr(). Vim's str2nr() does the same - thing. - * Created a s:Set() function that sets a variable only if it hasn't - already been defined. It's useful for initializing all those - default settings. - * Removed checks for repetitive command definitions. They were - unnecessary. - * Made the help highlighting a little more fancy. - * Minor reverse compatibility issue: Changed ambiguous setting - names to be more descriptive of what they do (also makes the code - easier to follow): - Changed bufExplorerSortDirection to bufExplorerReverseSort - Changed bufExplorerSplitType to bufExplorerSplitVertical - Changed bufExplorerOpenMode to bufExplorerUseCurrentWindow - * When the BufExplorer window closes, all the file-local marks are - now deleted. This may have the benefit of cleaning up some of the - jumplist. - * Changed the name of the parameter for StartBufExplorer from - "split" to "open". The parameter is a string which specifies how - the buffer will be open, not if it is split or not. - * Deprecated DoAnyMoreBuffersExist() - it is a one line function - only used in one spot. - * Created four functions (SplitOpen(), RebuildBufferList(), - UpdateHelpStatus() and ReSortListing()) all with one purpose - to - reduce repeated code. - * Changed the name of AddHeader() to CreateHelp() to be more - descriptive of what it does. It now returns an array instead of - updating the window directly. This has the benefit of making the - code more efficient since the text the function returns is used a - little differently in the two places the function is called. - * Other minor simplifications. -7.0.12 November 30, 2006 - - MAJOR Update. This version will ONLY run with Vim version 7.0 or - greater. - - Dave Eggum has made some 'significant' updates to this latest - version: - * Added BufExplorerGetAltBuf() global function to be used in the - user's rulerformat. - * Added g:bufExplorerSplitRight option. - * Added g:bufExplorerShowRelativePath option with mapping. - * Added current line highlighting. - * The split type can now be changed whether bufexplorer is opened - in split mode or not. - * Various major and minor bug fixes and speed improvements. - * Sort by extension. - - Other improvements/changes: - * Changed the help key from '?' to <F1> to be more 'standard'. - * Fixed splitting of vertical bufexplorer window. - - Hopefully I have not forgot something :) -7.0.11 March 10, 2006 - - Fixed a couple of highlighting bugs, reported by David Eggum. - - Dave Eggum also changed passive voice to active on a couple of - warning messages. -7.0.10 March 02, 2006 - - Fixed bug report by Xiangjiang Ma. If the 'ssl' option is set, - the slash character used when displaying the path was incorrect. -7.0.9 February 28, 2006 - - Martin Grenfell found and eliminated an annoying bug in the - bufexplorer/winmanager integration. The bug was were an - annoying message would be displayed when a window was split or - a new file was opened in a new window. Thanks Martin! -7.0.8 January 18, 2006 - - Thanks to Mike Li for catching a bug in the WinManager integration. - The bug was related to the incorrect displaying of the buffer - explorer's window title. -7.0.7 December 19, 2005 - - Thanks to Jeremy Cowgar for adding a new enhancement. This - enhancement allows the user to press 'S', that is capital S, which - will open the buffer under the cursor in a newly created split - window. -7.0.6 November 18, 2005 - - Thanks to Larry Zhang for finding a bug in the "split" buffer code. - If you force set g:bufExplorerSplitType='v' in your vimrc, and if you - tried to do a \bs to split the bufexplorer window, it would always - split horizontal, not vertical. - - Larry Zhang also found that I had a typeo in that the variable - g:bufExplorerSplitVertSize was all lower case in the documentation - which was incorrect. -7.0.5 October 18, 2005 - - Thanks to Mun Johl for pointing out a bug that if a buffer was - modified, the '+' was not showing up correctly. -7.0.4 October 03, 2005 - - Fixed a problem discovered first by Xiangjiang Ma. Well since I've - been using vim 7.0 and not 6.3, I started using a function (getftype) - that is not in 6.3. So for backward compatibility, I conditionaly use - this function now. Thus, the g:bufExplorerShowDirectories feature is - only available when using vim 7.0 and above. -7.0.3 September 30, 2005 - - Thanks to Erwin Waterlander for finding a problem when the last - buffer was deleted. This issue got me to rewrite the buffer display - logic (which I've wanted to do for sometime now). - - Also great thanks to Dave Eggum for coming up with idea for - g:bufExplorerShowDirectories. Read the above information about this - feature. -7.0.2 March 25, 2005 - - Thanks to Thomas Arendsen Hein for finding a problem when a user - has the default help turned off and then brought up the explorer. An - E493 would be displayed. -7.0.1 March 10, 2005 - - Thanks to Erwin Waterlander for finding a couple problems. - The first problem allowed a modified buffer to be deleted. Opps! The - second problem occurred when several files were opened, BufExplorer - was started, the current buffer was deleted using the 'd' option, and - then BufExplorer was exited. The deleted buffer was still visible - while it is not in the buffers list. Opps again! -7.0.0 March 10, 205 - - Thanks to Shankar R. for suggesting to add the ability to set - the fixed width (g:bufExplorerSplitVertSize) of a new window - when opening bufexplorer vertically and fixed height - (g:bufExplorerSplitHorzSize) of a new window when opening - bufexplorer horizontally. By default, the windows are normally - split to use half the existing width or height. -6.3.0 July 23, 2004 - - Added keepjumps so that the jumps list would not get cluttered with - bufexplorer related stuff. -6.2.3 April 15, 2004 - - Thanks to Jay Logan for finding a bug in the vertical split position - of the code. When selecting that the window was to be split - vertically by doing a '\bv', from then on, all splits, i.e. '\bs', - were split vertically, even though g:bufExplorerSplitType was not set - to 'v'. -6.2.2 January 09, 2004 - - Thanks to Patrik Modesto for adding a small improvement. For some - reason his bufexplorer window was always showing up folded. He added - 'setlocal nofoldenable' and it was fixed. -6.2.1 October 09, 2003 - - Thanks goes out to Takashi Matsuo for added the 'fullPath' sorting - logic and option. -6.2.0 June 13, 2003 - - Thanks goes out to Simon Johann-Ganter for spotting and fixing a - problem in that the last search pattern is overridden by the search - pattern for blank lines. -6.1.6 May 05, 2003 - - Thanks to Artem Chuprina for finding a pesky bug that has been around - for sometime now. The <esc> key mapping was causing the buffer - explored to close prematurely when vim was run in an xterm. The <esc> - key mapping is now removed. -6.1.5 April 28, 2003 - - Thanks to Khorev Sergey. Added option to show default help or not. -6.1.4 March 18, 2003 - - Thanks goes out to Valery Kondakoff for suggesting the addition of - setlocal nonumber and foldcolumn=0. This allows for line numbering - and folding to be turned off temporarily while in the explorer. -6.1.3 March 11, 2003 - - Added folding. - - Did some code cleanup. - - Added the ability to force the newly split window to be temporarily - vertical, which was suggested by Thomas Glanzmann. -6.1.2 November 05, 2002 - - Now pressing the <esc> key will quit, just like 'q'. - - Added folds to hide winmanager configuration. - - If anyone had the 'C' option in their cpoptions they would receive - a E10 error on startup of BufExplorer. cpo is now saved, updated and - restored. Thanks to Charles E Campbell, Jr. - - Attempted to make sure there can only be one BufExplorer window open - at a time. -6.1.1 March 28, 2002 - - Thanks to Brian D. Goodwin for adding toupper to FileNameCmp. This - way buffers sorted by name will be in the correct order regardless of - case. -6.0.16 March 14, 2002 - - Thanks to Andre Pang for the original patch/idea to get bufexplorer - to work in insertmode/modeless mode (evim). - - Added Initialize and Cleanup autocommands to handle commands that - need to be performed when starting or leaving bufexplorer. -6.0.15 February 20, 2002 - - Srinath Avadhanulax added a patch for winmanager.vim. -6.0.14 February 19, 2002 - - Fix a few more bug that I thought I already had fixed. - - Thanks to Eric Bloodworth for adding 'Open Mode/Edit in Place'. - - Added vertical splitting. -6.0.13 February 05, 2002 - - Thanks to Charles E Campbell, Jr. for pointing out some embarrassing - typos that I had in the documentation. I guess I need to run the - spell checker more :o) -6.0.12 February 04, 2002 - - Thanks to Madoka Machitani, for the tip on adding the augroup command - around the MRUList autocommands. -6.0.11 January 26, 2002 - - Fixed bug report by Xiangjiang Ma. '"=' was being added to the search - history which messed up hlsearch. -6.0.10 January 14, 2002 - - Added the necessary hooks so that the Srinath Avadhanula's - winmanager.vim script could more easily integrate with this script. - - Tried to improve performance. -6.0.9 December 17, 2001 - - Added MRU (Most Recently Used) sort ordering. -6.0.8 December 03, 2001 - - Was not resetting the showcmd command correctly. - - Added nifty help file. -6.0.7 November 19, 2001 - - Thanks to Brett Carlane for some great enhancements. Some are added, - some are not, yet. Added highlighting of current and alternate - filenames. Added splitting of path/filename toggle. Reworked - ShowBuffers(). - - Changed my email address. -6.0.6 September 05, 2001 - - Copyright notice added. Needed this so that it could be distributed - with Debian Linux. - - Fixed problem with the SortListing() function failing when there was - only one buffer to display. -6.0.5 August 10, 2001 - - Fixed problems reported by David Pascoe, in that you where unable to - hit 'd' on a buffer that belonged to a files that no longer existed - and that the 'yank' buffer was being overridden by the help text when - the bufexplorer was opened. -6.0.4 July, 31, 2001 - - Thanks to Charles Campbell, Jr. for making this plugin more plugin - *compliant*, adding default keymappings of <Leader>be and <Leader>bs - as well as fixing the 'w:sortDirLabel not being defined' bug. -6.0.3 July 30, 2001 - - Added sorting capabilities. Sort taken from explorer.vim. -6.0.2 July 25, 2001 - - Can't remember. -6.0.1 Sometime before July 25, 2001 - - Initial release. - -=============================================================================== -TODO *bufexplorer-todo* - -- Add ability to open a buffer in a horizontal or vertical split after the - initial bufexplorer window is opened. - -=============================================================================== -CREDITS *bufexplorer-credits* - -Author: Jeff Lanzarotta <delux256-vim at yahoo dot com> - -Credit must go out to Bram Moolenaar and all the Vim developers for -making the world's best editor (IMHO). I also want to thank everyone who -helped and gave me suggestions. I wouldn't want to leave anyone out so I -won't list names. - -=============================================================================== -COPYRIGHT *bufexplorer-copyright* - -Copyright (c) 2001-2014, Jeff Lanzarotta -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the {organization} nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================== -vim:tw=78:noet:wrap:ts=4:ft=help:norl: diff --git a/.vim/available_plugins/bufexplorer/plugin/bufexplorer.vim b/.vim/available_plugins/bufexplorer/plugin/bufexplorer.vim deleted file mode 100755 index 08f2dcf..0000000 --- a/.vim/available_plugins/bufexplorer/plugin/bufexplorer.vim +++ /dev/null @@ -1,1257 +0,0 @@ -"============================================================================= -" Copyright: Copyright (c) 2001-2016, Jeff Lanzarotta -" All rights reserved. -" -" Redistribution and use in source and binary forms, with or -" without modification, are permitted provided that the -" following conditions are met: -" -" * Redistributions of source code must retain the above -" copyright notice, this list of conditions and the following -" disclaimer. -" -" * Redistributions in binary form must reproduce the above -" copyright notice, this list of conditions and the following -" disclaimer in the documentation and/or other materials -" provided with the distribution. -" -" * Neither the name of the {organization} nor the names of its -" contributors may be used to endorse or promote products -" derived from this software without specific prior written -" permission. -" -" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND -" CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -" DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -" EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -" Name Of File: bufexplorer.vim -" Description: Buffer Explorer Vim Plugin -" Maintainer: Jeff Lanzarotta (delux256-vim at yahoo dot com) -" Last Changed: Friday, 1 April 2016 -" Version: See g:bufexplorer_version for version number. -" Usage: This file should reside in the plugin directory and be -" automatically sourced. -" -" You may use the default keymappings of -" -" <Leader>be - Opens BufExplorer -" <Leader>bt - Toggles BufExplorer open or closed -" <Leader>bs - Opens horizontally split window BufExplorer -" <Leader>bv - Opens vertically split window BufExplorer -" -" Or you can override the defaults and define your own mapping -" in your vimrc file, for example: -" -" nnoremap <silent> <F11> :BufExplorer<CR> -" nnoremap <silent> <s-F11> :ToggleBufExplorer<CR> -" nnoremap <silent> <m-F11> :BufExplorerHorizontalSplit<CR> -" nnoremap <silent> <c-F11> :BufExplorerVerticalSplit<CR> -" -" Or you can use -" -" ":BufExplorer" - Opens BufExplorer -" ":ToggleBufExplorer" - Opens/Closes BufExplorer -" ":BufExplorerHorizontalSplit" - Opens horizontally window BufExplorer -" ":BufExplorerVerticalSplit" - Opens vertically split window BufExplorer -" -" For more help see supplied documentation. -" History: See supplied documentation. -"============================================================================= - -" Exit quickly if already running or when 'compatible' is set. {{{1 -if exists("g:bufexplorer_version") || &cp - finish -endif -"1}}} - -" Version number -let g:bufexplorer_version = "7.4.9" - -" Pluging Code {{{1 -" Check for Vim version {{{2 -if v:version < 700 - echohl WarningMsg - echo "Sorry, bufexplorer ".g:bufexplorer_version." required Vim 7.0 or greater." - echohl None - finish -endif -" Check to see if the version of Vim has the correct patch applied, if not, do -" not used <nowait>. -if v:version > 703 || v:version == 703 && has('patch1261') && has('patch1264') - " We are good to go. -else - echohl WarningMsg - echo "Sorry, bufexplorer ".g:bufexplorer_version." required Vim 7.3 or greater with patch1261 and patch1264." - echohl None - finish -endif - -" Create commands {{{2 -command! BufExplorer :call BufExplorer() -command! ToggleBufExplorer :call ToggleBufExplorer() -command! BufExplorerHorizontalSplit :call BufExplorerHorizontalSplit() -command! BufExplorerVerticalSplit :call BufExplorerVerticalSplit() - -" Set {{{2 -function! s:Set(var, default) - if !exists(a:var) - if type(a:default) - execute "let" a:var "=" string(a:default) - else - execute "let" a:var "=" a:default - endif - - return 1 - endif - - return 0 -endfunction - -" Script variables {{{2 -let s:MRU_Exclude_List = ["[BufExplorer]","__MRU_Files__"] -let s:MRUList = [] -let s:name = '[BufExplorer]' -let s:originBuffer = 0 -let s:running = 0 -let s:sort_by = ["number", "name", "fullpath", "mru", "extension"] -let s:splitMode = "" -let s:tabSpace = [] -let s:types = {"fullname": ':p', "path": ':p:h', "relativename": ':~:.', "relativepath": ':~:.:h', "shortname": ':t'} - -" Setup the autocommands that handle the MRUList and other stuff. {{{2 -autocmd VimEnter * call s:Setup() - -" Setup {{{2 -function! s:Setup() - call s:Reset() - - " Now that the MRUList is created, add the other autocmds. - augroup BufExplorer - autocmd! - autocmd BufEnter,BufNew * call s:ActivateBuffer() - autocmd BufWipeOut * call s:DeactivateBuffer(1) - autocmd BufDelete * call s:DeactivateBuffer(0) - autocmd BufWinEnter \[BufExplorer\] call s:Initialize() - autocmd BufWinLeave \[BufExplorer\] call s:Cleanup() - autocmd TabEnter * call s:TabEnter() - augroup END -endfunction - -" Reset {{{2 -function! s:Reset() - " Build initial MRUList. This makes sure all the files specified on the - " command line are picked up correctly. - let s:MRUList = range(1, bufnr('$')) - - " Initialize one tab space array, ignore zero-based tabpagenr since all - " tabpagenr's start at 1. -1 signifies this is the first time we are - " referencing this tabpagenr. - " - " If Vim has been loaded with mksession, then it is possible for more tabs - " to exist. So use tabpagenr() to determine how large to make the array. If - " there are 4 tabs, there should be 5 elements in this array. - " - " Each element will hold a CSV list of buffers viewed in that tab. So on - " the 3rd tab, if there user has viewed 4 different buffers in that tab, the - " value would be: - " echo s:tabSpace[3] - " [4, 9, 1, 10] - " echo s:tabSpace - " [[-1], [-1], [-1], [4, 9, 1, 10], [-1]] - let s:tabSpace = [] - let i = 0 - - while(tabpagenr('$') > 0 && i <= tabpagenr('$')) - call add(s:tabSpace, [-1]) - let i = i + 1 - endwhile -endfunction - -" ActivateBuffer {{{2 -function! s:ActivateBuffer() - " Verify the current tabpage exists in the - " current s:tabSpace array. This can be missing - " entries when restoring sessions. - let i = 0 - while( tabpagenr('$') > 0 && i <= tabpagenr() ) - " Number: 0 - " String: 1 - " Funcref: 2 - " List: 3 - " Dictionary: 4 - " Float: 5 - if type(get(s:tabSpace, i)) == 0 - call add(s:tabSpace, [-1]) - endif - - let i = i + 1 - endwhile - - let _bufnr = bufnr("%") - let list = get(s:tabSpace, tabpagenr(), [-1]) - - if !empty(list) && list[0] == '-1' - " The first time we add a tab, Vim uses the current buffer - " as it's starting page. Even though we are about to - " edit a new page (BufEnter is triggered after), so - " remove the -1 entry indicating we have covered this case. - let list = [] - call add(list, _bufnr) - let s:tabSpace[tabpagenr()] = list - elseif empty(list) || index(list, _bufnr) == -1 - " Add new buffer to this tab's buffer list. - call add(list, _bufnr) - let s:tabSpace[tabpagenr()] = list - - if g:bufExplorerOnlyOneTab == 1 - " If a buffer can only be available in 1 tab page ensure this - " buffer is not present in any other tabs - let tabidx = 1 - while tabidx < len(s:tabSpace) - if tabidx != tabpagenr() - let bufidx = index(s:tabSpace[tabidx], _bufnr) - if bufidx != -1 - call remove(s:tabSpace[tabidx], bufidx) - endif - endif - let tabidx = tabidx + 1 - endwhile - endif - endif - - call s:MRUPush(_bufnr) -endfunction - -" DeactivateBuffer {{{2 -function! s:DeactivateBuffer(remove) - let _bufnr = str2nr(expand("<abuf>")) - call s:MRUPop(_bufnr) -endfunction - -" TabEnter {{{2 -function! s:TabEnter() - " Make s:tabSpace 1-based - if empty(s:tabSpace) || len(s:tabSpace) < (tabpagenr() + 1) - call add(s:tabSpace, [-1]) - endif -endfunction - -" MRUPop {{{2 -function! s:MRUPop(bufnr) - call filter(s:MRUList, 'v:val != '.a:bufnr) -endfunction - -" MRUPush {{{2 -function! s:MRUPush(buf) - " Skip temporary buffer with buftype set. Don't add the BufExplorer window - " to the list. - if s:ShouldIgnore(a:buf) == 1 - return - endif - - " Remove the buffer number from the list if it already exists. - call s:MRUPop(a:buf) - - " Add the buffer number to the head of the list. - call insert(s:MRUList, a:buf) -endfunction - -" ShouldIgnore {{{2 -function! s:ShouldIgnore(buf) - " Ignore temporary buffers with buftype set. - if empty(getbufvar(a:buf, "&buftype") == 0) - return 1 - endif - - " Ignore buffers with no name. - if empty(bufname(a:buf)) == 1 - return 1 - endif - - " Ignore the BufExplorer buffer. - if fnamemodify(bufname(a:buf), ":t") == s:name - return 1 - endif - - " Ignore any buffers in the exclude list. - if index(s:MRU_Exclude_List, bufname(a:buf)) >= 0 - return 1 - endif - - " Else return 0 to indicate that the buffer was not ignored. - return 0 -endfunction - -" Initialize {{{2 -function! s:Initialize() - let s:_insertmode = &insertmode - set noinsertmode - - let s:_showcmd = &showcmd - set noshowcmd - - let s:_cpo = &cpo - set cpo&vim - - let s:_report = &report - let &report = 10000 - - setlocal nonumber - setlocal foldcolumn=0 - setlocal nofoldenable - setlocal cursorline - setlocal nospell - - setlocal nobuflisted - - let s:running = 1 -endfunction - -" Cleanup {{{2 -function! s:Cleanup() - if exists("s:_insertmode") - let &insertmode = s:_insertmode - endif - - if exists("s:_showcmd") - let &showcmd = s:_showcmd - endif - - if exists("s:_cpo") - let &cpo = s:_cpo - endif - - if exists("s:_report") - let &report = s:_report - endif - - let s:running = 0 - let s:splitMode = "" - - delmarks! -endfunction - -" BufExplorerHorizontalSplit {{{2 -function! BufExplorerHorizontalSplit() - let s:splitMode = "sp" - execute "BufExplorer" -endfunction - -" BufExplorerVerticalSplit {{{2 -function! BufExplorerVerticalSplit() - let s:splitMode = "vsp" - execute "BufExplorer" -endfunction - -" ToggleBufExplorer {{{2 -function! ToggleBufExplorer() - if exists("s:running") && s:running == 1 && bufname(winbufnr(0)) == s:name - call s:Close() - else - call BufExplorer() - endif -endfunction - -" BufExplorer {{{2 -function! BufExplorer() - let name = s:name - - if !has("win32") - " On non-Windows boxes, escape the name so that is shows up correctly. - let name = escape(name, "[]") - endif - - " Make sure there is only one explorer open at a time. - if s:running == 1 - " Go to the open buffer. - if has("gui") - execute "drop" name - endif - - return - endif - - " Add zero to ensure the variable is treated as a number. - let s:originBuffer = bufnr("%") + 0 - - silent let s:raw_buffer_listing = s:GetBufferInfo(0) - - " We may have to split the current window. - if s:splitMode != "" - " Save off the original settings. - let [_splitbelow, _splitright] = [&splitbelow, &splitright] - - " Set the setting to ours. - let [&splitbelow, &splitright] = [g:bufExplorerSplitBelow, g:bufExplorerSplitRight] - let _size = (s:splitMode == "sp") ? g:bufExplorerSplitHorzSize : g:bufExplorerSplitVertSize - - " Split the window either horizontally or vertically. - if _size <= 0 - execute 'keepalt ' . s:splitMode - else - execute 'keepalt ' . _size . s:splitMode - endif - - " Restore the original settings. - let [&splitbelow, &splitright] = [_splitbelow, _splitright] - endif - - if !exists("b:displayMode") || b:displayMode != "winmanager" - " Do not use keepalt when opening bufexplorer to allow the buffer that - " we are leaving to become the new alternate buffer - execute "silent keepjumps hide edit".name - endif - - call s:DisplayBufferList() - - " Position the cursor in the newly displayed list on the line representing - " the active buffer. The active buffer is the line with the '%' character - " in it. - execute search("%") -endfunction - -" DisplayBufferList {{{2 -function! s:DisplayBufferList() - " Do not set bufhidden since it wipes out the data if we switch away from - " the buffer using CTRL-^. - setlocal buftype=nofile - setlocal modifiable - setlocal noswapfile - setlocal nowrap - - call s:SetupSyntax() - call s:MapKeys() - - " Wipe out any existing lines in case BufExplorer buffer exists and the - " user had changed any global settings that might reduce the number of - " lines needed in the buffer. - silent keepjumps 1,$d _ - - call setline(1, s:CreateHelp()) - call s:BuildBufferList() - call cursor(s:firstBufferLine, 1) - - if !g:bufExplorerResize - normal! zz - endif - - setlocal nomodifiable -endfunction - -" MapKeys {{{2 -function! s:MapKeys() - if exists("b:displayMode") && b:displayMode == "winmanager" - nnoremap <buffer> <silent> <tab> :call <SID>SelectBuffer()<CR> - endif - - nnoremap <script> <silent> <nowait> <buffer> <2-leftmouse> :call <SID>SelectBuffer()<CR> - nnoremap <script> <silent> <nowait> <buffer> <CR> :call <SID>SelectBuffer()<CR> - nnoremap <script> <silent> <nowait> <buffer> <F1> :call <SID>ToggleHelp()<CR> - nnoremap <script> <silent> <nowait> <buffer> <s-cr> :call <SID>SelectBuffer("tab")<CR> - nnoremap <script> <silent> <nowait> <buffer> B :call <SID>ToggleOnlyOneTab()<CR> - nnoremap <script> <silent> <nowait> <buffer> b :call <SID>SelectBuffer("ask")<CR> - nnoremap <script> <silent> <nowait> <buffer> d :call <SID>RemoveBuffer("delete")<CR> - xnoremap <script> <silent> <nowait> <buffer> d :call <SID>RemoveBuffer("delete")<CR> - nnoremap <script> <silent> <nowait> <buffer> D :call <SID>RemoveBuffer("wipe")<CR> - xnoremap <script> <silent> <nowait> <buffer> D :call <SID>RemoveBuffer("wipe")<CR> - nnoremap <script> <silent> <nowait> <buffer> f :call <SID>ToggleFindActive()<CR> - nnoremap <script> <silent> <nowait> <buffer> m :call <SID>MRUListShow()<CR> - nnoremap <script> <silent> <nowait> <buffer> o :call <SID>SelectBuffer()<CR> - nnoremap <script> <silent> <nowait> <buffer> p :call <SID>ToggleSplitOutPathName()<CR> - nnoremap <script> <silent> <nowait> <buffer> q :call <SID>Close()<CR> - nnoremap <script> <silent> <nowait> <buffer> r :call <SID>SortReverse()<CR> - nnoremap <script> <silent> <nowait> <buffer> R :call <SID>ToggleShowRelativePath()<CR> - nnoremap <script> <silent> <nowait> <buffer> s :call <SID>SortSelect()<CR> - nnoremap <script> <silent> <nowait> <buffer> S :call <SID>ReverseSortSelect()<CR> - nnoremap <script> <silent> <nowait> <buffer> t :call <SID>SelectBuffer("tab")<CR> - nnoremap <script> <silent> <nowait> <buffer> T :call <SID>ToggleShowTabBuffer()<CR> - nnoremap <script> <silent> <nowait> <buffer> u :call <SID>ToggleShowUnlisted()<CR> - - for k in ["G", "n", "N", "L", "M", "H"] - execute "nnoremap <buffer> <silent>" k ":keepjumps normal!" k."<CR>" - endfor -endfunction - -" SetupSyntax {{{2 -function! s:SetupSyntax() - if has("syntax") - syn match bufExplorerHelp "^\".*" contains=bufExplorerSortBy,bufExplorerMapping,bufExplorerTitle,bufExplorerSortType,bufExplorerToggleSplit,bufExplorerToggleOpen - syn match bufExplorerOpenIn "Open in \w\+ window" contained - syn match bufExplorerSplit "\w\+ split" contained - syn match bufExplorerSortBy "Sorted by .*" contained contains=bufExplorerOpenIn,bufExplorerSplit - syn match bufExplorerMapping "\" \zs.\+\ze :" contained - syn match bufExplorerTitle "Buffer Explorer.*" contained - syn match bufExplorerSortType "'\w\{-}'" contained - syn match bufExplorerBufNbr /^\s*\d\+/ - syn match bufExplorerToggleSplit "toggle split type" contained - syn match bufExplorerToggleOpen "toggle open mode" contained - - syn match bufExplorerModBuf /^\s*\d\+.\{4}+.*/ - syn match bufExplorerLockedBuf /^\s*\d\+.\{3}[\-=].*/ - syn match bufExplorerHidBuf /^\s*\d\+.\{2}h.*/ - syn match bufExplorerActBuf /^\s*\d\+.\{2}a.*/ - syn match bufExplorerCurBuf /^\s*\d\+.%.*/ - syn match bufExplorerAltBuf /^\s*\d\+.#.*/ - syn match bufExplorerUnlBuf /^\s*\d\+u.*/ - syn match bufExplorerInactBuf /^\s*\d\+ \{7}.*/ - - hi def link bufExplorerBufNbr Number - hi def link bufExplorerMapping NonText - hi def link bufExplorerHelp Special - hi def link bufExplorerOpenIn Identifier - hi def link bufExplorerSortBy String - hi def link bufExplorerSplit NonText - hi def link bufExplorerTitle NonText - hi def link bufExplorerSortType bufExplorerSortBy - hi def link bufExplorerToggleSplit bufExplorerSplit - hi def link bufExplorerToggleOpen bufExplorerOpenIn - - hi def link bufExplorerActBuf Identifier - hi def link bufExplorerAltBuf String - hi def link bufExplorerCurBuf Type - hi def link bufExplorerHidBuf Constant - hi def link bufExplorerLockedBuf Special - hi def link bufExplorerModBuf Exception - hi def link bufExplorerUnlBuf Comment - hi def link bufExplorerInactBuf Comment - endif -endfunction - -" ToggleHelp {{{2 -function! s:ToggleHelp() - let g:bufExplorerDetailedHelp = !g:bufExplorerDetailedHelp - - setlocal modifiable - - " Save position. - normal! ma - - " Remove old header. - if s:firstBufferLine > 1 - execute "keepjumps 1,".(s:firstBufferLine - 1) "d _" - endif - - call append(0, s:CreateHelp()) - - silent! normal! g`a - delmarks a - - setlocal nomodifiable - - if exists("b:displayMode") && b:displayMode == "winmanager" - call WinManagerForceReSize("BufExplorer") - endif -endfunction - -" GetHelpStatus {{{2 -function! s:GetHelpStatus() - let ret = '" Sorted by '.((g:bufExplorerReverseSort == 1) ? "reverse " : "").g:bufExplorerSortBy - let ret .= ' | '.((g:bufExplorerFindActive == 0) ? "Don't " : "")."Locate buffer" - let ret .= ((g:bufExplorerShowUnlisted == 0) ? "" : " | Show unlisted") - let ret .= ((g:bufExplorerShowTabBuffer == 0) ? "" : " | Show buffers/tab") - let ret .= ((g:bufExplorerOnlyOneTab == 0) ? "" : " | One tab/buffer") - let ret .= ' | '.((g:bufExplorerShowRelativePath == 0) ? "Absolute" : "Relative") - let ret .= ' '.((g:bufExplorerSplitOutPathName == 0) ? "Full" : "Split")." path" - - return ret -endfunction - -" CreateHelp {{{2 -function! s:CreateHelp() - if g:bufExplorerDefaultHelp == 0 && g:bufExplorerDetailedHelp == 0 - let s:firstBufferLine = 1 - return [] - endif - - let header = [] - - if g:bufExplorerDetailedHelp == 1 - call add(header, '" Buffer Explorer ('.g:bufexplorer_version.')') - call add(header, '" --------------------------') - call add(header, '" <F1> : toggle this help') - call add(header, '" <enter> or o or Mouse-Double-Click : open buffer under cursor') - call add(header, '" <shift-enter> or t : open buffer in another tab') - call add(header, '" B : toggle if to save/use recent tab or not') - call add(header, '" d : delete buffer') - call add(header, '" D : wipe buffer') - call add(header, '" f : toggle find active buffer') - call add(header, '" p : toggle splitting of file and path name') - call add(header, '" q : quit') - call add(header, '" r : reverse sort') - call add(header, '" R : toggle showing relative or full paths') - call add(header, '" s : cycle thru "sort by" fields '.string(s:sort_by).'') - call add(header, '" S : reverse cycle thru "sort by" fields') - call add(header, '" T : toggle if to show only buffers for this tab or not') - call add(header, '" u : toggle showing unlisted buffers') - else - call add(header, '" Press <F1> for Help') - endif - - if (!exists("b:displayMode") || b:displayMode != "winmanager") || (b:displayMode == "winmanager" && g:bufExplorerDetailedHelp == 1) - call add(header, s:GetHelpStatus()) - call add(header, '"=') - endif - - let s:firstBufferLine = len(header) + 1 - - return header -endfunction - -" GetBufferInfo {{{2 -function! s:GetBufferInfo(bufnr) - redir => bufoutput - - " Show all buffers including the unlisted ones. [!] tells Vim to show the - " unlisted ones. - buffers! - redir END - - if a:bufnr > 0 - " Since we are only interested in this specified buffer - " remove the other buffers listed - let bufoutput = substitute(bufoutput."\n", '^.*\n\(\s*'.a:bufnr.'\>.\{-}\)\n.*', '\1', '') - endif - - let [all, allwidths, listedwidths] = [[], {}, {}] - - for n in keys(s:types) - let allwidths[n] = [] - let listedwidths[n] = [] - endfor - - " Loop over each line in the buffer. - for buf in split(bufoutput, '\n') - let bits = split(buf, '"') - - " Use first and last components after the split on '"', in case a - " filename with an embedded '"' is present. - let b = {"attributes": bits[0], "line": substitute(bits[-1], '\s*', '', '')} - - let name = bufname(str2nr(b.attributes)) - let b["hasNoName"] = empty(name) - if b.hasNoName - let name = "[No Name]" - endif - - for [key, val] in items(s:types) - let b[key] = fnamemodify(name, val) - endfor - - if getftype(b.fullname) == "dir" && g:bufExplorerShowDirectories == 1 - let b.shortname = "<DIRECTORY>" - endif - - call add(all, b) - - for n in keys(s:types) - call add(allwidths[n], s:StringWidth(b[n])) - - if b.attributes !~ "u" - call add(listedwidths[n], s:StringWidth(b[n])) - endif - endfor - endfor - - let [s:allpads, s:listedpads] = [{}, {}] - - for n in keys(s:types) - let s:allpads[n] = repeat(' ', max(allwidths[n])) - let s:listedpads[n] = repeat(' ', max(listedwidths[n])) - endfor - - return all -endfunction - -" BuildBufferList {{{2 -function! s:BuildBufferList() - let lines = [] - - " Loop through every buffer. - for buf in s:raw_buffer_listing - " Skip unlisted buffers if we are not to show them. - if !g:bufExplorerShowUnlisted && buf.attributes =~ "u" - " Skip unlisted buffers if we are not to show them. - continue - endif - - " Skip "No Name" buffers if we are not to show them. - if g:bufExplorerShowNoName == 0 && buf.hasNoName - continue - endif - - " Are we to show only buffer(s) for this tab? - if g:bufExplorerShowTabBuffer - let show_buffer = 0 - - for bufnr in s:tabSpace[tabpagenr()] - if buf.attributes =~ '^\s*'.bufnr.'\>' - " Only buffers shown on the current tabpagenr - let show_buffer = 1 - break - endif - endfor - - if show_buffer == 0 - continue - endif - endif - - let line = buf.attributes." " - - " Are we to split the path and file name? - if g:bufExplorerSplitOutPathName - let type = (g:bufExplorerShowRelativePath) ? "relativepath" : "path" - let path = buf[type] - let pad = (g:bufExplorerShowUnlisted) ? s:allpads.shortname : s:listedpads.shortname - let line .= buf.shortname." ".strpart(pad.path, s:StringWidth(buf.shortname)) - else - let type = (g:bufExplorerShowRelativePath) ? "relativename" : "fullname" - let path = buf[type] - let line .= path - endif - - let pads = (g:bufExplorerShowUnlisted) ? s:allpads : s:listedpads - - if !empty(pads[type]) - let line .= strpart(pads[type], s:StringWidth(path))." " - endif - - let line .= buf.line - - call add(lines, line) - endfor - - call setline(s:firstBufferLine, lines) - call s:SortListing() -endfunction - -" SelectBuffer {{{2 -function! s:SelectBuffer(...) - " Sometimes messages are not cleared when we get here so it looks like an - " error has occurred when it really has not. - "echo "" - - let _bufNbr = -1 - - if (a:0 == 1) && (a:1 == "ask") - " Ask the user for input. - call inputsave() - let cmd = input("Enter buffer number to switch to: ") - call inputrestore() - - " Clear the message area from the previous prompt. - redraw | echo - - if strlen(cmd) > 0 - let _bufNbr = str2nr(cmd) - else - call s:Error("Invalid buffer number, try again.") - return - endif - else - " Are we on a line with a file name? - if line('.') < s:firstBufferLine - execute "normal! \<CR>" - return - endif - - let _bufNbr = str2nr(getline('.')) - - " Check and see if we are running BufferExplorer via WinManager. - if exists("b:displayMode") && b:displayMode == "winmanager" - let _bufName = expand("#"._bufNbr.":p") - - if (a:0 == 1) && (a:1 == "tab") - call WinManagerFileEdit(_bufName, 1) - else - call WinManagerFileEdit(_bufName, 0) - endif - - return - endif - endif - - if bufexists(_bufNbr) - if bufnr("#") == _bufNbr && !exists("g:bufExplorerChgWin") - return s:Close() - endif - - " Are we suppose to open the selected buffer in a tab? - if (a:0 == 1) && (a:1 == "tab") - " Yes, we are to open the selected buffer in a tab. - - " Restore [BufExplorer] buffer. - execute "silent buffer!".s:originBuffer - - " Get the tab nmber where this bufer is located in. - let tabNbr = s:GetTabNbr(_bufNbr) - - " Was the tab found? - if tabNbr == 0 - " _bufNbr is not opened in any tabs. Open a new tab with the selected buffer in it. - execute "999tab split +buffer" . _bufNbr - else - " The _bufNbr is already opened in a tab, go to that tab. - execute tabNbr . "tabnext" - - " Focus window. - execute s:GetWinNbr(tabNbr, _bufNbr) . "wincmd w" - endif - else - " No, the user did not ask to open the selected buffer in a tab. - - " Are we suppose to move to the tab where the active buffer is? - if exists("g:bufExplorerChgWin") - execute g:bufExplorerChgWin."wincmd w" - elseif bufloaded(_bufNbr) && g:bufExplorerFindActive - if g:bufExplorerFindActive - call s:Close() - endif - - " Get the tab number where this buffer is located in. - let tabNbr = s:GetTabNbr(_bufNbr) - - " Was the tab found? - if tabNbr != 0 - " Yes, the buffer is located in a tab. Go to that tab number. - execute tabNbr . "tabnext" - else - "Nope, the buffer is not in a tab. Simply switch to that - "buffer. - let _bufName = expand("#"._bufNbr.":p") - execute _bufName ? "drop ".escape(_bufName, " ") : "buffer "._bufNbr - endif - endif - - " Switch to the selected buffer. - execute "keepalt silent b!" _bufNbr - endif - - " Make the buffer 'listed' again. - call setbufvar(_bufNbr, "&buflisted", "1") - - " Call any associated function references. g:bufExplorerFuncRef may be - " an individual function reference or it may be a list containing - " function references. It will ignore anything that's not a function - " reference. - " - " See :help FuncRef for more on function references. - if exists("g:BufExplorerFuncRef") - if type(g:BufExplorerFuncRef) == 2 - keepj call g:BufExplorerFuncRef() - elseif type(g:BufExplorerFuncRef) == 3 - for FncRef in g:BufExplorerFuncRef - if type(FncRef) == 2 - keepj call FncRef() - endif - endfor - endif - endif - else - call s:Error("Sorry, that buffer no longer exists, please select another") - call s:DeleteBuffer(_bufNbr, "wipe") - endif -endfunction - -" RemoveBuffer {{{2 -function! s:RemoveBuffer(mode) - " Are we on a line with a file name? - if line('.') < s:firstBufferLine - return - endif - - " Do not allow this buffer to be deleted if it is the last one. - if len(s:MRUList) == 1 - call s:Error("Sorry, you are not allowed to delete the last buffer") - return - endif - - " These commands are to temporarily suspend the activity of winmanager. - if exists("b:displayMode") && b:displayMode == "winmanager" - call WinManagerSuspendAUs() - end - - let _bufNbr = str2nr(getline('.')) - - if getbufvar(_bufNbr, '&modified') == 1 - call s:Error("Sorry, no write since last change for buffer "._bufNbr.", unable to delete") - return - else - " Okay, everything is good, delete or wipe the buffer. - call s:DeleteBuffer(_bufNbr, a:mode) - endif - - " Reactivate winmanager autocommand activity. - if exists("b:displayMode") && b:displayMode == "winmanager" - call WinManagerForceReSize("BufExplorer") - call WinManagerResumeAUs() - end -endfunction - -" DeleteBuffer {{{2 -function! s:DeleteBuffer(buf, mode) - " This routine assumes that the buffer to be removed is on the current line. - try - " Wipe/Delete buffer from Vim. - if a:mode == "wipe" - execute "silent bwipe" a:buf - else - execute "silent bdelete" a:buf - endif - - " Delete the buffer from the list on screen. - setlocal modifiable - normal! "_dd - setlocal nomodifiable - - " Delete the buffer from the raw buffer list. - call filter(s:raw_buffer_listing, 'v:val.attributes !~ " '.a:buf.' "') - catch - call s:Error(v:exception) - endtry -endfunction - -" Close {{{2 -function! s:Close() - " Get only the listed buffers. - let listed = filter(copy(s:MRUList), "buflisted(v:val)") - if len(listed) == 0 - let listed = filter(range(1, bufnr('$')), "buflisted(v:val)") - endif - - " If we needed to split the main window, close the split one. - if s:splitMode != "" && bufwinnr(s:originBuffer) != -1 - execute "wincmd c" - endif - - " Check to see if there are anymore buffers listed. - if len(listed) == 0 - " Since there are no buffers left to switch to, open a new empty - " buffers. - execute "enew" - else - " Since there are buffers left to switch to, switch to the previous and - " then the current. - for b in reverse(listed[0:1]) - execute "keepjumps silent b ".b - endfor - endif - - " Clear any messages. - echo -endfunction - -" ToggleSplitOutPathName {{{2 -function! s:ToggleSplitOutPathName() - let g:bufExplorerSplitOutPathName = !g:bufExplorerSplitOutPathName - call s:RebuildBufferList() - call s:UpdateHelpStatus() -endfunction - -" ToggleShowRelativePath {{{2 -function! s:ToggleShowRelativePath() - let g:bufExplorerShowRelativePath = !g:bufExplorerShowRelativePath - call s:RebuildBufferList() - call s:UpdateHelpStatus() -endfunction - -" ToggleShowTabBuffer {{{2 -function! s:ToggleShowTabBuffer() - let g:bufExplorerShowTabBuffer = !g:bufExplorerShowTabBuffer - call s:RebuildBufferList(g:bufExplorerShowTabBuffer) - call s:UpdateHelpStatus() -endfunction - -" ToggleOnlyOneTab {{{2 -function! s:ToggleOnlyOneTab() - let g:bufExplorerOnlyOneTab = !g:bufExplorerOnlyOneTab - call s:RebuildBufferList() - call s:UpdateHelpStatus() -endfunction - -" ToggleShowUnlisted {{{2 -function! s:ToggleShowUnlisted() - let g:bufExplorerShowUnlisted = !g:bufExplorerShowUnlisted - let num_bufs = s:RebuildBufferList(g:bufExplorerShowUnlisted == 0) - call s:UpdateHelpStatus() -endfunction - -" ToggleFindActive {{{2 -function! s:ToggleFindActive() - let g:bufExplorerFindActive = !g:bufExplorerFindActive - call s:UpdateHelpStatus() -endfunction - -" RebuildBufferList {{{2 -function! s:RebuildBufferList(...) - setlocal modifiable - - let curPos = getpos('.') - - if a:0 && a:000[0] && (line('$') >= s:firstBufferLine) - " Clear the list first. - execute "silent keepjumps ".s:firstBufferLine.',$d _' - endif - - let num_bufs = s:BuildBufferList() - - call setpos('.', curPos) - - setlocal nomodifiable - - return num_bufs -endfunction - -" UpdateHelpStatus {{{2 -function! s:UpdateHelpStatus() - setlocal modifiable - - let text = s:GetHelpStatus() - call setline(s:firstBufferLine - 2, text) - - setlocal nomodifiable -endfunction - -" MRUCmp {{{2 -function! s:MRUCmp(line1, line2) - return index(s:MRUList, str2nr(a:line1)) - index(s:MRUList, str2nr(a:line2)) -endfunction - -" SortReverse {{{2 -function! s:SortReverse() - let g:bufExplorerReverseSort = !g:bufExplorerReverseSort - call s:ReSortListing() -endfunction - -" SortSelect {{{2 -function! s:SortSelect() - let g:bufExplorerSortBy = get(s:sort_by, index(s:sort_by, g:bufExplorerSortBy) + 1, s:sort_by[0]) - call s:ReSortListing() -endfunction - -" ReverseSortSelect {{{2 -function! s:ReverseSortSelect() - let g:bufExplorerSortBy = get(s:sort_by, index(s:sort_by, g:bufExplorerSortBy) - 1, s:sort_by[-1]) - call s:ReSortListing() -endfunction - -" ReSortListing {{{2 -function! s:ReSortListing() - setlocal modifiable - - let curPos = getpos('.') - - call s:SortListing() - call s:UpdateHelpStatus() - - call setpos('.', curPos) - - setlocal nomodifiable -endfunction - -" SortListing {{{2 -function! s:SortListing() - let sort = s:firstBufferLine.",$sort".((g:bufExplorerReverseSort == 1) ? "!": "") - - if g:bufExplorerSortBy == "number" - " Easiest case. - execute sort 'n' - elseif g:bufExplorerSortBy == "name" - " Sort by full path first - execute sort 'ir /\zs\f\+\ze\s\+line/' - - if g:bufExplorerSplitOutPathName - execute sort 'ir /\d.\{7}\zs\f\+\ze/' - else - execute sort 'ir /\zs[^\/\\]\+\ze\s*line/' - endif - elseif g:bufExplorerSortBy == "fullpath" - if g:bufExplorerSplitOutPathName - " Sort twice - first on the file name then on the path. - execute sort 'ir /\d.\{7}\zs\f\+\ze/' - endif - - execute sort 'ir /\zs\f\+\ze\s\+line/' - elseif g:bufExplorerSortBy == "extension" - " Sort by full path... - execute sort 'ir /\zs\f\+\ze\s\+line/' - - " Sort by name... - if g:bufExplorerSplitOutPathName - " Sort twice - first on the file name then on the path. - execute sort 'ir /\d.\{7}\zs\f\+\ze/' - endif - - " Sort by extension. - execute sort 'ir /\.\zs\w\+\ze\s/' - elseif g:bufExplorerSortBy == "mru" - let l = getline(s:firstBufferLine, "$") - - call sort(l, "<SID>MRUCmp") - - if g:bufExplorerReverseSort - call reverse(l) - endif - - call setline(s:firstBufferLine, l) - endif -endfunction - -" MRUListShow {{{2 -function! s:MRUListShow() - echomsg "MRUList=".string(s:MRUList) -endfunction - -" Error {{{2 -" Display a message using ErrorMsg highlight group. -function! s:Error(msg) - echohl ErrorMsg - echomsg a:msg - echohl None -endfunction - -" Warning {{{2 -" Display a message using WarningMsg highlight group. -function! s:Warning(msg) - echohl WarningMsg - echomsg a:msg - echohl None -endfunction - -" GetTabNbr {{{2 -function! s:GetTabNbr(bufNbr) - " Searching buffer bufno, in tabs. - for i in range(tabpagenr("$")) - if index(tabpagebuflist(i + 1), a:bufNbr) != -1 - return i + 1 - endif - endfor - - return 0 -endfunction - -" GetWinNbr" {{{2 -function! s:GetWinNbr(tabNbr, bufNbr) - " window number in tabpage. - let tablist = tabpagebuflist(a:tabNbr) - " Number: 0 - " String: 1 - " Funcref: 2 - " List: 3 - " Dictionary: 4 - " Float: 5 - if type(tablist) == 3 - return index(tabpagebuflist(a:tabNbr), a:bufNbr) + 1 - else - return 1 - endif -endfunction - -" StringWidth" {{{2 -if exists('*strwidth') - function s:StringWidth(s) - return strwidth(a:s) - endfunction -else - function s:StringWidth(s) - return len(a:s) - endfunction -endif - -" Winmanager Integration {{{2 -let g:BufExplorer_title = "\[Buf\ List\]" -call s:Set("g:bufExplorerResize", 1) -call s:Set("g:bufExplorerMaxHeight", 25) " Handles dynamic resizing of the window. - -" function! to start display. Set the mode to 'winmanager' for this buffer. -" This is to figure out how this plugin was called. In a standalone fashion -" or by winmanager. -function! BufExplorer_Start() - let b:displayMode = "winmanager" - call BufExplorer() -endfunction - -" Returns whether the display is okay or not. -function! BufExplorer_IsValid() - return 0 -endfunction - -" Handles dynamic refreshing of the window. -function! BufExplorer_Refresh() - let b:displayMode = "winmanager" - call BufExplorer() -endfunction - -function! BufExplorer_ReSize() - if !g:bufExplorerResize - return - end - - let nlines = min([line("$"), g:bufExplorerMaxHeight]) - - execute nlines." wincmd _" - - " The following lines restore the layout so that the last file line is also - " the last window line. Sometimes, when a line is deleted, although the - " window size is exactly equal to the number of lines in the file, some of - " the lines are pushed up and we see some lagging '~'s. - let pres = getpos(".") - - normal! $ - - let _scr = &scrolloff - let &scrolloff = 0 - - normal! z- - - let &scrolloff = _scr - - call setpos(".", pres) -endfunction - -" Default values {{{2 -call s:Set("g:bufExplorerDisableDefaultKeyMapping", 0) " Do not disable default key mappings. -call s:Set("g:bufExplorerDefaultHelp", 1) " Show default help? -call s:Set("g:bufExplorerDetailedHelp", 0) " Show detailed help? -call s:Set("g:bufExplorerFindActive", 1) " When selecting an active buffer, take you to the window where it is active? -call s:Set("g:bufExplorerOnlyOneTab", 1) " If ShowTabBuffer = 1, only store the most recent tab for this buffer. -call s:Set("g:bufExplorerReverseSort", 0) " Sort in reverse order by default? -call s:Set("g:bufExplorerShowDirectories", 1) " (Dir's are added by commands like ':e .') -call s:Set("g:bufExplorerShowRelativePath", 0) " Show listings with relative or absolute paths? -call s:Set("g:bufExplorerShowTabBuffer", 0) " Show only buffer(s) for this tab? -call s:Set("g:bufExplorerShowUnlisted", 0) " Show unlisted buffers? -call s:Set("g:bufExplorerShowNoName", 0) " Show 'No Name' buffers? -call s:Set("g:bufExplorerSortBy", "mru") " Sorting methods are in s:sort_by: -call s:Set("g:bufExplorerSplitBelow", &splitbelow) " Should horizontal splits be below or above current window? -call s:Set("g:bufExplorerSplitOutPathName", 1) " Split out path and file name? -call s:Set("g:bufExplorerSplitRight", &splitright) " Should vertical splits be on the right or left of current window? -call s:Set("g:bufExplorerSplitVertSize", 0) " Height for a vertical split. If <=0, default Vim size is used. -call s:Set("g:bufExplorerSplitHorzSize", 0) " Height for a horizontal split. If <=0, default Vim size is used. - -" Default key mapping {{{2 -if !hasmapto('BufExplorer') && g:bufExplorerDisableDefaultKeyMapping == 0 - nnoremap <script> <silent> <unique> <Leader>be :BufExplorer<CR> -endif - -if !hasmapto('ToggleBufExplorer') && g:bufExplorerDisableDefaultKeyMapping == 0 - nnoremap <script> <silent> <unique> <Leader>bt :ToggleBufExplorer<CR> -endif - -if !hasmapto('BufExplorerHorizontalSplit') && g:bufExplorerDisableDefaultKeyMapping == 0 - nnoremap <script> <silent> <unique> <Leader>bs :BufExplorerHorizontalSplit<CR> -endif - -if !hasmapto('BufExplorerVerticalSplit') && g:bufExplorerDisableDefaultKeyMapping == 0 - nnoremap <script> <silent> <unique> <Leader>bv :BufExplorerVerticalSplit<CR> -endif - -" vim:ft=vim foldmethod=marker sw=4 diff --git a/.vim/available_plugins/minibufexpl/.gitignore b/.vim/available_plugins/minibufexpl/.gitignore deleted file mode 100755 index 0a56e3f..0000000 --- a/.vim/available_plugins/minibufexpl/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/doc/tags diff --git a/.vim/available_plugins/minibufexpl/README.md b/.vim/available_plugins/minibufexpl/README.md deleted file mode 100755 index 5652417..0000000 --- a/.vim/available_plugins/minibufexpl/README.md +++ /dev/null @@ -1,231 +0,0 @@ -# MiniBufExpl - -This is a fork of [Bindu Wavell][]'s [MiniBufExpl][] plugin for [Vim][]. - -[Federico Holgado][] started this fork and made lots of improvements. It is -currently maintained by [Techlive Zheng][], the development has been moved to -[@techlivezheng's repo][], only new version will be released to [@fholgado's -repo][]. - -[Vim]: http://vim.org -[MiniBufExpl]: http://www.vim.org/scripts/script.php?script_id=159 -[Techlive Zheng]: http://techlivezheng.me -[Federico Holgado]: http://www.fholgado.com -[@fholgado's repo]:https://github.com/fholgado/minibufexpl.vim -[@techlivezheng's repo]: https://github.com/techlivezheng/vim-plugin-minibufexpl - -## The Story - ->The reason why I took it upon myself to improve MiniBufExplorer is a matter of -need. I am a User Interface designer who spends a lot of time writing front- -end code. I recently found Vim and fell in love with it. During my search for -the plugins that would help me the most, I came across MBE. I loved it -initially, but quickly saw that it had some major flaws. - ->After using MBE for some time, I have been able to identify some areas that -needed some dire attention from a usability standpoint. I am doing my best to -fix those issues without adding "feature bloat" or other unnecessary things to -MBE. I am always open to suggestions and discussion as to what we can do to -improve this great plugin. - ->I would also like to thank [Bindu Wavell][], who is the plugin's original -creator and [Oliver Uvman][], who like myself has been hacking at MBE to make -needed improvements. My goal is to consolidate the code and act as the -maintainer so that any further changes from contributors can be found in a -single location. - -[Bindu Wavell]: http://www.wavell.net -[Oliver Uvman]: https://github.com/OliverUv - --- Federico Holgado - ->This is a very useful plugin, being able to see the buffer status in a -tab-like fashion while you are working with mutiple buffers is very pleasant. -Since @fholgado began to improve this plugin, lots of new features has been -added, it's great. Meanwhile, there are still some annoying bugs that haven't -been fixed for a long time, so I decide to step out and do something. - --- Techlive Zheng - -## Improvements in Version 6.5.0 - -### Bugfixes - -Squashed almost every known bugs due to the relase of version 6.5.0, for more -details, please check out the 6.5.0 milestones. - -* https://github.com/fholgado/minibufexpl.vim/issues?milestone=1&page=1&state=closed -* https://github.com/techlivezheng/vim-plugin-minibufexpl/issues?milestone=1&page=1&state=closed - -### Buffer With No Name - -Buffer without a name would be shown as `[1:--NO NAME--<timestamp>]` now. - -### User Interface Change - -Options, commands and key bindings have some changes, please see changelog for -more details. - -### Cycle Buffer in MRU Fashion - -As a long expected feature, command ':MBEbf' or ':MBEbb' could be used to cycle -the buffer forwards or backwards in the most recently used order. - -### Handle Buffers with Duplicate Name - -Mechanism for checking buffers with duplicate name has been totally refactored, -it is now more efficient. - -Mechanism for generating unique name for these buffers has been refactored too, -each buffer should be uniquely identified now. - - ./test --> test - ./alpha/foo/test --> alpha/foo/test - ./alpha/bar/test --> alpha/bar/test - ./beta/new/test --> beta/-/test - ./omega/old/test --> omega/old/test - ./omega/test --> omega/test - -### MBE Window is Local to Tab Page - -Open or close MBE window in one tab page would not interfere another. Commands -':MBEOpenAll', ':MBECloseAll' and ':MBEToggleAll' have been introduced to mani- -pulate MBEs in all tab pags. - -### Preserve Window Entering History - -Previous versions of MBE will interfere the window entering history on updating, -this behavior has caused many incompatibilities with other plugins. It should -be fixed now, 'wincmd p' would work as usual. - -### Quit MBE if No More Normal Window Open - -MBE now will be closed if all the other open windows are plugin windows. - -### Delete/Wipeout/Unload Buffers Preserving the Window - -Commnad ':MBEbd', ':MBEbw' or ':MBEbun' could be used to delete/wipeout/unload -buffers just as ':bd', ':bw' or ':bun', but the window that previously holding -them will be preserved. - -## Improvements in Previous Versions - -### Current Buffer Highlighting - -Previously, MBE would only tell you if a buffer was currently visible in the -editor like such: - -![][current_buffer_old] - -[current_buffer_old]: http://dl.dropbox.com/u/118650/mbe/screenshots/current_buffer/old.png - -Now, MBE shows you the buffer that is currently visible _and_ active in the -editor. Here is an animated GIF that shows the current buffer highlighting in -action: - -![][current_buffer_new] - -[current_buffer_new]: http://dl.dropbox.com/u/118650/mbe/screenshots/mbe1.gif - -### Duplicate Buffer Names - -If you are an MBE user, I am sure you are familiar with the following -scenario: - -![][dup_buf_names_old] - -[dup_buf_names_old]: http://dl.dropbox.com/u/118650/mbe/screenshots/dupe_buf_names/old_fade.png - -The problem is that buffers with the same filename do not get differentiated, -and it makes it very hard to find the buffer you are trying to edit. The -simple solution is to show a parent directory that is different between all -buffers like such: - -![][dup_buf_names_new] - -[dup_buf_names_new]: http://dl.dropbox.com/u/118650/mbe/screenshots/dupe_buf_names/new_fade.png - -Let me explain how it works. Let's observe 2 files that have the same -filename. - - /Users/fholgado/Sites/website1/css/style.css - /Users/fholgado/Sites/website2/css/style.css - -You'll notice both files have the same filename _and_ are in a folder called -'css'. This happens all the time in web development projects. - -In order to differentiate the two files, MBE now crawls up the directory tree -and finds the first parent directory that differs from both files, which in -this case is 'website1' and 'website2'. MBE will now show you these 2 files as -such: - - [1:website1/style.css][2:website2/style.css] - -### Buffer States - -It is always important to be able to see at a glance what buffers are modified -and need to be saved. MBE now shows you respective colors whether the buffer -is modified or not modified. - -![][buffer_status] - -[buffer_status]: http://dl.dropbox.com/u/118650/mbe/screenshots/save_states/new.png - -**Most importantly**, MBE now updates the buffer states immediately after -making changes, instead of the previous behavior that only updated buffer -states when switching buffers. - -### Status Line Clutter - -Previously, the MBE buffer would use the same statusline that is currently -configured for Vim. This adds a lot of visual clutter to MBE and does not add -any functionality, since the status line is showing information for a buffer -that does not contain any real content. - -![][stauts_line_clutter_old] - -[status_line_clutter_old]: http://dl.dropbox.com/u/118650/mbe/screenshots/status_line/old.png - -MBE now uses it's own custom Status Line format to reduce the unwanted -information. This line is customizable and can even be empty. - -![][status_line_clutter_new] - -[status_line_clutter_new]: http://dl.dropbox.com/u/118650/mbe/screenshots/status_line/new.png - -### Window Auto Resizing - -Previously, the MBE buffer made the automatic window resizing using the ctrl + -w + = command in Vim. Many of you have seen the following picture: - -![][window_auto_resizing_old] - -[window_auto_resizing_old]: http://dl.dropbox.com/u/118650/mbe/screenshots/window_resizing/old.png - -MBE now maintains it's buffer size both in horizontal and vertical mode when -using window resizing commands. Now you can take a Vim tab that looks like -this: - -![][window_auto_resizing_new1] - -[window_auto_resizing_new1]: http://dl.dropbox.com/u/118650/mbe/screenshots/window_resizing/new1.png - -And turn it into something like this without worrying about the MBE window -becoming large as well: - -![][window_auto_resizing_new2] - -[window_auto_resizing_new2]: http://dl.dropbox.com/u/118650/mbe/screenshots/window_resizing/new2.png - -### Customizing Colors - -Here are all the color additions to customize MBE's new features. You can add -the following to your Color file and customize the color accordingly: - - " MiniBufExpl Colors - hi MBENormal guifg=#808080 guibg=fg - hi MBEChanged guifg=#CD5907 guibg=fg - hi MBEVisibleNormal guifg=#5DC2D6 guibg=fg - hi MBEVisibleChanged guifg=#F1266F guibg=fg - hi MBEVisibleActiveNormal guifg=#A6DB29 guibg=fg - hi MBEVisibleActiveChanged guifg=#F1266F guibg=fg diff --git a/.vim/available_plugins/minibufexpl/doc/minibufexpl.txt b/.vim/available_plugins/minibufexpl/doc/minibufexpl.txt deleted file mode 100755 index 133b566..0000000 --- a/.vim/available_plugins/minibufexpl/doc/minibufexpl.txt +++ /dev/null @@ -1,1137 +0,0 @@ -*minibufexpl.txt* Mini Buffer Explorer - - *MiniBufExpl* -============================================================================== -CONTENTS *MiniBufExpl-contents* - - 1. Install................................|MiniBufExplInstall| - 2. Mappings...............................|MiniBufExplMappings| - 2.1 Global Mappings |MiniBufExplMappings-Global| - 2.2 Window Mappings |MiniBufExplMappings-Window| - 3. Commands...............................|MiniBufExplCommands| - 4. Options................................|MiniBufExplOptions| - 4.1 Splits.............................|MiniBufExplSplits| - 4.2 Window Size........................|MiniBufExplWindowSize| - 4.3 Automatic Opening..................|MiniBufExplAutoOpen| - 4.4 Keyboard Control...................|MiniBufExplKeyboard| - 4.5 Misc...............................|MiniBufExplMisc| - 4.6 Debugging..........................|MiniBufExplDebugging| - 5. Highlighting...........................|MiniBufExplHighlighting| - 6. Known Issues...........................|MiniBufExplKnownIssues| - 7. About..................................|MiniBufExplAbout| - 8. Changelog..............................|MiniBufExplChangelog| - -============================================================================== -1. Install *MiniBufExplInstall* - -Normally, this file should reside in the plugins directory and be -automatically sourced. If not, you must manually source this file using -':source minibufexplorer.vim'. - -============================================================================== -2. Key Mappings *MiniBufExplMappings* - ------------------------------------------------------------------------------- -2.1 Global Mappings *MiniBufExplMappings-Global* - -MBE has no longer provide default key bindings for controling MBE window. - -You may want to add something like the following to your .vimrc file: - - map <Leader>mbe :MBEOpen<cr> - map <Leader>mbc :MBEClose<cr> - map <Leader>mbt :MBEToggle<cr> - -Or, much shorter form: - - map <Leader>e :MBEOpen<cr> - map <Leader>c :MBEClose<cr> - map <Leader>t :MBEToggle<cr> - -Either way, the key bindings used in these mappings should fit with your -configuration of Vim. - ------------------------------------------------------------------------------- -2.2 Window Mappings *MiniBufExplMappings-Window* - - o *MiniBufExpl-Mapping-o* - e *MiniBufExpl-Mapping-e* - <CR> *MiniBufExpl-Mapping-<CR>* - Open selected buffer in the previous window - - s *MiniBufExpl-Mapping-s* - Open selected buffer in a horizontal split of the previous window - - v *MiniBufExpl-Mapping-v* - Open selected buffer in a vertical split of the previous window - - d *MiniBufExpl-Mapping-d* - Delete selected buffer without closing the window it located - - k *MiniBufExpl-Mapping-k* - <up> *MiniBufExpl-Mapping-<up>* - Move one line up in the MBE window - - j *MiniBufExpl-Mapping-j* - <down> *MiniBufExpl-Mapping-<down>* - Move one line down in the MBE window - - l *MiniBufExpl-Mapping-l* - <right> *MiniBufExpl-Mapping-<right>* - Move one buffer forward in the MBE window - - h *MiniBufExpl-Mapping-h* - <left> *MiniBufExpl-Mapping-<left>* - Move one buffer backward in the MBE window - -============================================================================== -3. Commands *MiniBufExplCommands* - -:MiniBufExplorer (depreciated) *:MiniBufExplorer* - Use :MBEOpen instead - -:CMiniBufExplorer (depreciated) *:CMiniBufExplorer* - Use :MBEClose instead - -:TMiniBufExplorer (depreciated) *:TMiniBufExplorer* - Use :MBEToggle instead - -:UMiniBufExplorer (Obsolete) *:UMiniBufExplorer* - Command has been removed - -:MBEFocus *:MBEFocus* - Focus into the MBE window. - -:MBEFocusAll *:MBEFocusAll* - Focus into the MBE window in every tab page. - -:MBEOpen[!] *:MBEOpen* - Open the Explorer. - With '!' appended, MBE will be reopened if it is already open. - -:MBEOpenAll[!] *:MBEOpenAll* - Open the Explorer in every tab page. - With '!' appended, MBE will be reopened if it is already open. - -:MBEClose[!] *:MBEClose* - Close the Explorer if it's open. - With '!' appended, auto-updating will be disabled even if it does not - meet the required numbers of eligible buffers. Otherwise, auto-updating - will only be disabled if the required numbers of eligible buffers has - been meet. - -:MBECloseAll[!] *:MBECloseAll* - Close the Explorer in every tab page if it's open. - With '!' appended, auto-updating will be disabled even if it does not - meet the required numbers of eligible buffers. Otherwise, auto-updating - will only be disabled if the required numbers of eligible buffers has - been meet. - -:MBEToggle[!] *:MBEToggle* - Toggle the Explorer open and closed. - With '!' appended: On the open action, it does not have any effect; On - the close action, auto-updating will be disabled even if it does not - meet the required numbers of eligible buffers, otherwise, auto-updating - will only be disabled if the required numbers of eligible buffers has - been meet. - -:MBEToggleAll[!] *:MBEToggleAll* - Toggle the Explorer open and closed in every tab page. - With '!' appended: On the open action, MBE will be reopened if it is - already open; On the close action, auto-updating will be disabled even - if it does not meet the required numbers of eligible buffers, otherwise, - auto-updating will only be disabled if the required numbers of eligible - buffers has been meet. - -:MBEToggleMRU *:MBEToggleMRU* - Toggle the buffer listing order of the MBE window between its default and - most recently used. - -:MBEToggleMRUAll *:MBEToggleMRUAll* - Toggle the buffer listing order of the MBE window between its default and - most recently used in every tab page. - -:MBEbn *:MBEbn* - Switch to next normal buffer in current window. - -:MBEbp *:MBEbp* - Switch to previous normal buffer in current window. - -:MBEbf *:MBEbf* - Move one buffer forward in the most recent used buffer list. - -:MBEbb *:MBEbb* - Move one buffer backward in the most recent used buffer list. - -:MBEbd[!] [N1] [N2] ... *:MBEbd* - Delete buffers but preserve the window that holding them. - [N*] is the buffer's number or name to be deleted. If no [N*] is given, - then current buffer will be deleted. Multiple buffers could be deleted - at the same time. - -:MBEbw[!] [N1] [N2] ... *:MBEbw* - Wipe out buffers but preserve the window that holding them. - [N*] is the buffer's number or name to be wiped out. If no [N*] is given, - then current buffer will be deleted. Multiple buffers could be unloaded - at the same time. - -:MBEbun[!] [N1] [N2] ... *:MBEbun* - Unload buffers but preserve the window that holding them. - [N*] is the buffer's number or name to be unloaded. If no [N*] is given, - then current buffer will be deleted. Multiple buffers could be wiped out - at the same time. - -============================================================================== -4. Options *MiniBufExplOptions* - ------------------------------------------------------------------------------- -4.1 Splits *MiniBufExplSplits* - - *'g:miniBufExplVSplit'* -If you would like a vertical explorer you can assign the column width (in -characters) you want for your explorer window with the following .vimrc -variable (this was introduced in 6.3.0): - - let g:miniBufExplVSplit = 20 " column width in chars - - *'g:miniBufExplBRSplit'* -To control where the new split window goes relative to the current window, use -the setting: - - let g:miniBufExplBRSplit = 0 " Put new window above - " current or on the - " left for vertical split - let g:miniBufExplBRSplit = 1 " Put new window below - " current or on the - " right for vertical split - -The default for this is read from the 'splitbelow' or 'splitright' Vim option -which depends on 'g:miniBufExplVSplit' option. - - *'g:miniBufExplSplitBelow'* -This option has been depreciated by 'g:miniBufExplBRSplit'. - - *'g:miniBufExplSplitToEdge'* -By default we are now (as of 6.0.2) forcing the -MiniBufExplorer- window to -open up at the edge of the screen. You can turn this off by setting the -following variable in your .vimrc: - - let g:miniBufExplSplitToEdge = 0 - ------------------------------------------------------------------------------- -4.2 Window Size *MiniBufExplWindowSize* - - *'g:miniBufExplMaxSize'* ------------------------------------------------------------------------------- -Horizontal - -It is now (as of 6.1.1) possible to set a maximum height -for the -MiniBufExplorer- window. You can set the max height by letting the -following variable in your .vimrc: - - let g:miniBufExplMaxSize = <max lines: default 0> - -setting this to 0 will mean the window gets as big as needed to fit all your -buffers. - ------------------------------------------------------------------------------- -Vertical - -(as of 6.3.0) - -By default the vertical explorer has a fixed width . If you put: - - let g:miniBufExplMaxSize = <max width: default 0> - -into your .vimrc then MBE will attempt to set the width of the MBE window to -be as wide as your widest tab. The width will not exceed MaxSize even if you -have wider tabs. - -Accepting the default value of 0 for this will give you a fixed width MBE -window. - -NOTE: This was *'g:miniBufExplMaxHeight'* before 6.3.0; the old -setting is backwards compatible if you don't use MaxSize. - - *'g:miniBufExplMinSize'* ------------------------------------------------------------------------------- -Horizontal - -As of 6.2.2 it is possible to set a minimum height for the -MiniBufExplorer- -window. You can set the min height by letting the following variable in your -.vimrc: - - let g:miniBufExplMinSize = <min height: default 1> - ------------------------------------------------------------------------------- -Vertical - -You can specify a MinSize for the vertical explorer window by putting the -following in your .vimrc: - - let g:miniBufExplMinSize = <min width: default 1> - -This will have no effect unless you also specify MaxSize. - -NOTE: This was *'g:miniBufExplMinHeight'* before 6.3.0; the old -setting is backwards compatible if you don't use MinSize. - ------------------------------------------------------------------------------- -4.3 Automatic Opening *MiniBufExplAutoOpen* - - *'g:miniBufExplAutoStart'* -If you only want open MBE manually when needed, you can put the following into -your .vimrc: - - let g:miniBufExplorerAutoStart = 0 - - *'g:miniBufExplorerAutoStart'* -This option has been depreciated by 'g:miniBufExplAutoStart'. - - *'g:miniBufExplBuffersNeeded'* -This variable controls how man buffers should be available until MBE shows up, -if 'g:miniBufExplorerAutoStart' is enabled. By default, at least 2 buffers are -needed. - -You can put the following into your .vimrc to let MBE start as soon as a normal -buffer is available. - - let g:miniBufExplBuffersNeeded = 1 - -You can put the following into your .vimrc to skip the eligible buffer checking. - - let g:miniBufExplBuffersNeeded = 0 - - *'g:miniBufExplorerMoreThanOne'* -This option has been depreciated by 'g:miniBufExplBuffersNeeded'. - - *'g:miniBufExplHideWhenDiff'* -Disable automatic opening if vim is started in diff mode(vimdiff, or with '-d' -option). This option only affected the first tab page created at vim start. - - *'g:miniBufExplorerHideWhenDiff'* -This option has been depreciated by 'g:miniBufExplHideWhenDiff'. - ------------------------------------------------------------------------------- -4.4 Keyboard Control *MiniBufExplKeyboard* - - *'g:miniBufExplMapWindowNavVim'* - *'g:miniBufExplMapWindowNavArrows'* - *'g:miniBufExplMapCTabSwitchBufs'* - *'g:miniBufExplMapCTabSwitchWindows'* -These configuration variabes have been obsolete, MBE does no longer provide -this functionality any more. If you'd like them be back, please add the -following mappings to your .vimrc file. - - " If you like control + vim direction key to navigate - " windows then perform the remapping - " - noremap <C-J> <C-W>j - noremap <C-K> <C-W>k - noremap <C-H> <C-W>h - noremap <C-L> <C-W>l - - " If you like control + arrow key to navigate windows - " then perform the remapping - " - noremap <C-Down> <C-W>j - noremap <C-Up> <C-W>k - noremap <C-Left> <C-W>h - noremap <C-Right> <C-W>l - - " If you like <C-TAB> and <C-S-TAB> to switch buffers - " in the current window then perform the remapping - " - noremap <C-TAB> :MBEbn<CR> - noremap <C-S-TAB> :MBEbp<CR> - " - " Or, in MRU fashion - " - noremap <C-TAB> :MBEbf<CR> - noremap <C-S-TAB> :MBEbb<CR> - - " - " If you like <C-TAB> and <C-S-TAB> to switch windows - " then perform the remapping - " - noremap <C-TAB> <C-W>w - noremap <C-S-TAB> <C-W>W - - ------------------------------------------------------------------------------- -4.5 Misc *MiniBufExplMisc* - - *'g:miniBufExplSetUT'* -Set the 'updatetime' to a proper value. - - *'g:miniBufExplCycleArround'* - -Should buffer be cycled arround if hits the begining or the end while -using MBE's buffer movement commands. - - *'g:miniBufExplStatusLineText'* -MBE window status line text. - - *'g:miniBufExplUseSingleClick'* -As of MBE 6.3.0, you can put the following into your .vimrc: - - let g:miniBufExplUseSingleClick = 1 - -If you would like to single click on tabs rather than double clicking on them -to goto the selected buffer. - - *'g:miniBufExplCloseOnSelect'* -If you would like MBE to close when you select a buffer, put: - - let g:miniBufExplCloseOnSelect = 1 - -into your .vimrc in order to force MBE to try to place selected buffers into a -window that does not have a nonmodifiable buffer. The upshot of this should be -that if you go into MBE and select a buffer, the buffer should not show up in -a window that is hosting an explorer. - - *'g:miniBufExplShowBufNumbers'* -If you would like to omit the buffer number from MBE's buffer display, put the -following in your .vimrc: - - let g:miniBufExplShowBufNumbers = 0 - ------------------------------------------------------------------------------- -4.6 Debugging *MiniBufExplDebugging* - - *'g:miniBufExplDebugMode'* -You can also set a DebugMode to cause output to be target as follows (default -is mode 3): - - let g:miniBufExplDebugMode = 0 " Errors will show up in - " a Vim window - let g:miniBufExplDebugMode = 1 " Uses Vim's echo function - " to display on the screen - let g:miniBufExplDebugMode = 2 " Writes to a file - " MiniBufExplorer.DBG - let g:miniBufExplDebugMode = 3 " Store output in global variable - " g:miniBufExplDebugOutput - - *'g:miniBufExplorerDebugMode'* -This option has been depreciated by 'g:miniBufExplDebugMode'. - - *'g:miniBufExplDebugLevel'* -MBE has had a basic debugging capability for quite some time. However, it has -not been very friendly in the past. As of 6.0.8, you can put one of each of -the following into your .vimrc: - - let g:miniBufExplDebugLevel = 0 " MBE serious errors output - let g:miniBufExplDebugLevel = 4 " MBE all errors output - let g:miniBufExplDebugLevel = 10 " MBE reports everything - - *'g:miniBufExplorerDebugLevel'* -This option has been depreciated by 'g:miniBufExplDebugLevel'. - -Or if you are able to start Vim, you might just perform these at a command -prompt right before you do the operation that is failing. - -============================================================================== -5. Highlighting *MiniBufExplHighlighting* - -It is possible to customize the highlighting for the tabs in the MBE by -configuring the following highlighting groups: - - MBENormal - for buffers that have NOT CHANGED and are - NOT VISIBLE - MBEChanged - for buffers that have CHANGED and are - NOT VISIBLE - MBEVisibleNormal - for buffers that have NOT CHANGED and are - VISIBLE - MBEVisibleChanged - for buffers that have CHANGED and are - VISIBLE - MBEVisibleActiveNormal - for buffers that have NOT CHANGED and are - VISIBLE and is the active buffer - MBEVisibleActiveChanged - for buffers that have CHANGED and are - VISIBLE and is the active buffer - -You can either link to an existing highlighting group by adding a command -like: - - hi link MBEVisibleChanged Error - -to your .vimrc or you can specify exact foreground and background colors using -the following syntax: - - hi MBEChanged guibg=darkblue ctermbg=darkblue termbg=white - -If you have customized the above highlight groups, remember to set -'g:did_minibufexplorer_syntax_inits = 1' so that MBE would not override -your settings. - -NOTE: If you set a colorscheme in your .vimrc you should do it - BEFORE updating the MBE highlighting groups. - -============================================================================== -6. Known Issues *MiniBufExplKnownIssues* - -============================================================================== -6. Todo *MiniBufExplTodo* - -- Add the ability to specify a regexp for eligible buffers - allowing the ability to filter out certain buffers that - you don't want to control from MBE. - -============================================================================== -7. About *MiniBufExplAbout* - - Copyright: Copyright (C) 2002 & 2003 Bindu Wavell - Copyright (C) 2010 Oliver Uvman - Copyright (C) 2010 Danielle Church - Copyright (C) 2010 Stephan Sokolow - Copyright (C) 2010 & 2011 Federico Holgado - Copyright (C) 2012 & 2013 Techlive Zheng - - Permission is hereby granted to use and distribute this code, - with or without modifications, provided that this copyright - notice is copied with it. Like anything else that's free, - minibufexpl.vim is provided *as is* and comes with no - warranty of any kind, either expressed or implied. In no - event will the copyright holder be liable for any damages - resulting from the use of this software. - - Description: Mini Buffer Explorer Vim Plugin - Maintainer: Techlive Zheng <techlivezheng@gmail.com> - Last Updated: Techlive Zheng <techlivezheng@gmail.com> - URL: http://vim.sourceforge.net/scripts/script.php?script_id=159 - GitHub URL: https://github.com/techlivezheng/vim-plugin-minibufexpl - Version: 6.5.0 - -============================================================================== -8. Changelog *MiniBufExplChangelog* - -6.5.0 - - - Configuration variables changing: - - * 'g:miniBufExplModSelTarget' is absolete. - MBE will try to avoid using any other plugin's winow. - (cba0147) - - * 'g:miniBufExplCheckDupeBufs' is obsolete. - (176cf27,fd737d3) - - * 'g:miniBufExplorerAutoUpdate' is obsolete. - (3cee9f9) - - * 'g:miniBufExplForceSyntaxEnable' is obsolete. - (373691f) - - * Several configuration variables have been renamed. - (48f2934) - - - 'g:miniBufExplorerAutoStart' -> 'g:miniBufExplAutoStart' - - 'g:miniBufExplorerDebugMode' -> 'g:miniBufExplDebugMode' - - 'g:miniBufExplorerDebugLevel' -> 'g:miniBufExplDebugLevel' - - 'g:miniBufExplorerDebugOutput' -> 'g:miniBufExplDebugOutput' - - 'g:miniBufExplorerHideWhenDiff' -> 'g:miniBufExplHideWhenDiff' - - * 'g:statusLineText' is depreciated by 'g:miniBufExplStatusLineText'. - (1aeb012) - - * 'g:miniBufExplSplitBelow' is depreciated by 'g:miniBufExplBRSplit'. - Window spliting is now controled by '&splitbelow' and '&splitright' - settings. - (282025e) - - * 'g:miniBufExplorerAutoStart' could be used to control whether MBE - should be startd at the startup or not. - (f581428) - - * 'g:miniBufExplorerMoreThanOne' is depreciated by 'g:miniBufExplBuffersNeeded'. - (4e4acec) - - * New configuration option 'g:miniBufExplCycleArround' to control - whether buffer list should be cycled arround if hits the start of - the end. - (2df9b2b) - - - Commands and mappings interface changing: - - * Key binding 'p' in MBE window has been removed. - (b45cd77) - - * New commands ':MBEbf' and ':MBEbb' now could be used to go forward - or backward the buffer entering history, aka in MRU fashion. - (b7d2ad5,a4e9ce9) - - * Command ':UMiniBufExplorer' has been removed, function - 'AutoUpdate()' is not supposed to be triggered manually. - (9c12f71) - - * Several main commands have been renamed. - (8d88b9a) - - * ':MiniBufExplorer' is depreciated by ':MBEOpen' - * ':CMiniBufExplorer' is depreciated by ':MBEClose' - * ':TMiniBufExplorer' is depreciated by ':MBEToggle' - - * Introduce commands ':MBEOpenAll', ':MBECloseAll', - ':MBEToggleAll' to manage MBEs in all tabs. - (e839c1d) - - * Introduce ':MBEFocus' and ':MBEFocusAll' to focus into - the MBE window. - (fa9e5d5) - - * Introduce commands ':MBEbd', ':MBEbw' and - ':MBEbun' to delete buffer but preserve the window that it - was in. - (e4f9294,9b7635e) - - * Key bindings '<TAB>' and '<S-TAB>' in MBE window have been changed - to '<right>' and '<left>' to avoid unnecessary conflict with some - system's key bindings. - (ca0cc8d,d788c7a) - - * MBE has no longer provide the key-bindings for switching - between buffers and windows, this should be up to the user. - (417e952) - - * MBE has no longer provide the default mappings for MBE's - management, this should be up to the user. - (a0977cd) - - * Introduce command 'MBEToggleMRU' to change the MBE listing order. - (8a7baaa) - - - Bugfixes, Enhancements, Closed Issues, Merged Pull Requests: - - See https://github.com/fholgado/minibufexpl.vim/issues?milestone=1&page=1&state=closed - and https://github.com/techlivezheng/vim-plugin-minibufexpl/issues?milestone=1&page=1&state=closed - - * Quit MBE if there is no more normal window open. - (cea185b,7ebc049,b0d4c4a) - - - Fix fholgado/minibufexpl.vim#1 - - Fix fholgado/minibufexpl.vim#41 - - Fix fholgado/minibufexpl.vim#78 - - These changes should also fix the following issues which state the remaining - buffer's syntax highlighting gets lost. More details please refer to - https://github.com/fholgado/minibufexpl.vim/issues/71#issuecomment-17781092. - - - Fix fholgado/minibufexpl.vim#24 - - Fix fholgado/minibufexpl.vim#71 - - Fix fholgado/minibufexpl.vim#73 - - * Update MBE will no longer interfere window entering history. - (3add236,4155048) - - - Fix fholgado/minibufexpl.vim#3 - - Fix fholgado/minibufexpl.vim#7 - - Fix fholgado/minibufexpl.vim#17 - - Fix fholgado/minibufexpl.vim#21 - - Fix fholgado/minibufexpl.vim#44 - - Fix fholgado/minibufexpl.vim#48 - - Fix fholgado/minibufexpl.vim#75 - - * Mechanism for checking buffers with duplicate name and generating a - unique name for each of these buffers have been completely refactored, - it is more efficient now and each buffer should be uniquely identified. - Thanks to jmnas@github for the orginal work. - (f3723aa,5715dd9,950a81a,763a623) - - - Fix fholgado/minibufexpl.vim#5 - - Fix fholgado/minibufexpl.vim#6 - - Fix fholgado/minibufexpl.vim#9 - - Fix fholgado/minibufexpl.vim#13 - - Fix fholgado/minibufexpl.vim#61 - - Fix fholgado/minibufexpl.vim#77 - - * Buffer now could be cycled in a MRU fashion - (b7d2ad5,a4e9ce9) - - - Fix fholgado/minibufexpl.vim#20. - - * Prevent duplicate MBE window from opening. - (bfd4b9a) - - - Fix fholgado/minibufexpl.vim#31 - - Fix fholgado/minibufexpl.vim#37 - - Fix fholgado/minibufexpl.vim#82 - - Fix fholgado/minibufexpl.vim#83 - - * Use "very nomagic" in search() function. - (9474294) - - - Fix fholgado/minibufexpl.vim#33 - - Merge fholgado/minibufexpl.vim#67 -- By mr-vinn@github - - * Removing trailing whitespace - (6fd9d11) - - - Merge fholgado/minibufexpl.vim#35 -- By ubunatic@github - - * Avoid MBE window being affected by 'relativenumber' option. - (adbac4d,eba2fc5) - - - Merge fholgado/minibufexpl.vim#43 -- By hoopes@github - - Fix techlivezheng/vim-plugin-minibufexpl#7 - - Merge techlivezheng/vim-plugin-minibufexpl#9 -- By chadburrus@github - - * Improve documentation. - (ed9c12f,a9d7810,ccd5f14) - - - Merge fholgado/minibufexpl.vim#45 -- By Inkane@github - - Merge fholgado/minibufexpl.vim#53 -- By jesboat@github - - Merge fholgado/minibufexpl.vim#57 -- By hfs@github - - Fix techlivezheng/vim-plugin-minibufexpl#10 - - * Fix a bug that a buffer with no name would be force closed. - (c06f82d) - - - Fix fholgado/minibufexpl.vim#47 - - Fix fholgado/minibufexpl.vim#79 - - * Fix a bug that switching between buffers is unfunctional when - 'g:miniBufExplShowBufNumbers' is set to 0. - (51fb73c,40ffb01) - - - Fix fholgado/minibufexpl.vim#49 - - Merge fholgado/minibufexpl.vim#69 - - * Make Powerline plugin be happy with MBE. - (9410d5c,7584a7a) - - - Fix fholgado/minibufexpl.vim#50 - - Partially merge fholgado/minibufexpl.vim#64 -- By s5unty@github - - * Cooperate with Windows machine. - - - Fix fholgado/minibufexpl.vim#51 - - Fix fholgado/minibufexpl.vim#70 - - Fix fholgado/minibufexpl.vim#74 - - * Handle buffers without a name correctly. - (8fad45b) - - - Fix fholgado/minibufexpl.vim#54 - - Fix techlivezheng/vim-plugin-minibufexpl#1 - - * No startup on diff mode. - (391a9b2,ff9fcfe) - - - Merge fholgado/minibufexpl.vim#55 -- By dccmx@github - - * Fix focusing current buffer in vsplit MBE window. - (917d4dc) - - - Merge fholgado/minibufexpl.vim#56 -- By tyamaz@github - - * Suppress "-- no lines in buffer --" message. - (dcec2d1) - - - Merge fholgado/minibufexpl.vim#58 -- By tyamaz@github - - * Respect user's 'updatetime' setting, only change it when instructed - and the original setting is not changed. - (c99ea42,87543bc) - - - Fix fholgado/minibufexpl.vim#59 - - Fix fholgado/minibufexpl.vim#62 - - * MBE buffer now has its filetype set to 'minibufexpl'. - (02c1fa8) - - - Fix fholgado/minibufexpl.vim#60. - - * Fix bufname('%') and bufnr('%') mixing up. - (984cffb,dd2124d,b2c692e) - - - Merge fholgado/minibufexpl.vim#63 -- By doublemarked@github - - * Toggle MBE will not affect the size of the currently opened windows. - (bb1d90e) - - - Fix fholgado/minibufexpl.vim#80 - - * Fix for &winminheight setting - (731fca2,879c1f5) - - - Merge fholgado/minibufexpl.vim#81 -- By zhaocai@github - - * Set syntax on FileType event - (0985c01) - - - Fix techlivezheng/vim-plugin-minibufexpl#3. - - * Fix a wrongly defined highlight group - (572346d,452265c,fd6992a,43a019a) - - - Fix techlivezheng/vim-plugin-minibufexpl#4 - - * Add the ability to manually control the start of MBE - (f921a35) - - - Fix techlivezheng/vim-plugin-minibufexpl#5 - - * Make MBE window temporarily modifiable during the resizing - (08c9c4a,88e3924) - - - Fix techlivezheng/vim-plugin-minibufexpl#6 - - Merge techlviezheng/vim-plugin-minibufexpl#8 -- By whitelynx@github - - * Open MBE manually will ignore 'g:miniBufExplBuffersNeeded'. - (8ac7f45) - - * Annoying "No Lines in Buffer" messages have been suppressed. - (0126c7fc,f6f654d) - - * If a MBE buffer already exists, it will be used instead of creating - a new one. - (3153ffd) - - * MBE window is local to tab page. Open or close MBE window in one - tab page would not interfere another. - (b8deb38,7247d52) - - * Fix a bug that color highlighting gets lost in MBE window. - (e5e6d15,362f2d8) - - * Auto updating will run inside any window if a buffers gets deleted. - (5d6e445) - - * Open buffer in MBE will try to use the previous window first, then - the next normal window. - (4f9c957) - - * If the eligible buffers requirement has been meet, closing MBE will - disable auto updating. - (876b771) - -6.4.4 - - Set up proper documentation. Thanks to Claytron :) - - Fix colorcolumn feature detection. Thanks to sandaya :) - - MBE now ignores buffers with empty name. Thanks to Folke - for the pull :) - - Fix incompatibility with tildes in filenames. Thanks to - future for the pull :) - -6.4.3 - - Fix MBE losing highlighting when a buffer is closed. - Thanks to Markus Koller for the pull request! - - Disable spellcheck on MBE buffer. - - Don't use colorcolumn setting on MBE buffer. Thanks to - grassofhust for the pull requests for this and the - previous issue! - -6.4.2 - - Moving current build out of beta. Getting ready for a - re-write! - -6.4.1b5 - - Allow users to turn off Buffer number display on explorer - tabs courtesy of jmatraszek. - - Allow users to turn off duplicate buffer name checking - to speed up MBE buffer switching. We are working on - optimizing this feature so that it is usable even with - many buffers open. - - Set Shellslash fix for Windows users so that duplicate - buffer name checking works properly. - - Re-enable syntax highlighting after cycling the buffer - courtesy of Sontek. - - Fix erratic :q behavior when MBE is the last buffer - courtesy of Moopet. - -6.4.1b4 - - Finally figured out how to turn off parentheses - matching for the MBE buffer, which solves a couple of - annoying graphical glitches. Thanks to Thomas Egreger - for the patch! - - Added a temporary fix for the issues with MBE and - FuzzyFinder thanks to toupeira. - -6.4.1b2 - - Fixed Dupe File Name checking function to prevent some - errors and actually work properly! - -6.4.1b1 - - Added handler function to only update MBE on changes. - -6.4.0 - - Added Emacs-like 'uniquify' feature where MBE will - show a parent directory when there are 2 buffers with - the same filename. Example: There are 2 buffers, one - is /ProjectA/Application/CSS/style.css and - /ProjectB/Applications/CSS/style.css. Originally, MBE - would just display 'style.css' for both buffers. Now, - MBE crawls up the directory tree to find the first - differentiating parent directory for both buffers, so - MBE will show 'ProjectA/style.css' and - 'ProjectB/style.css' for each buffer name. - - Now setting winfixheight and winfixwidth for the MBE - buffer so that it does not get resized automatically - by window resizing commands such as 'CTRL W='. - -6.3.7 - - MBE now uses it's own status line format to reduce the - amount of visual clutter. This can be customized. - -6.3.6 - - MBE now updates current buffer's status on buffer save - and when a buffer is modified. Patched by Federico - Holgado (fholgado at gmail dot com). - -6.3.5 - - Added highlighting for currently active buffer. - Patched by Federico Holgado (fholgado at gmail dot - com). - -6.3.4 - - Now returns to augroup NONE after setting augroup - commands. Big thanks to Maciej Laszcz for the bug - report! - -6.3.3 - - Added additional keybindings. In addition to <TAB> and - <S-TAB>, l and h can now be used. In addition to <CR>, - and e can now be used. - - You can open the selected buffer in a new split window - by pressing s while in the minibufexplorer window. - - You can open the selected buffer in a new vertically - split window while pressing v while in the - minibufexplorer window. Patched by Oliver Uvman. - -6.3.2 - - For some reason there was still a call to StopExplorer - with 2 params. Very old bug. I know I fixed before, - any way many thanks to Jason Mills for reporting this! - -6.3.1 - - Include folds in source so that it's easier to - navigate. - - Added g:miniBufExplForceSyntaxEnable setting for folks - that want a :syntax enable to be called when we enter - buffers. This can resolve issues caused by a Vim bug - where buffers show up without highlighting when another - buffer has been closed, quit, wiped or deleted. - -6.3.0 - - Added an option to allow single click (rather than - the default double click) to select buffers in the - MBE window. This feature was requested by AW Law - and was inspired by taglist.vim. Note that you will - need the latest version of taglist.vim if you want to - use MBE and taglist both with singleclick turned on. - Also thanks to AW Law for pointing out that you can - make an Explorer not be listed in a standard :ls. - - Added the ability to have your tabs show up in a - vertical window rather than the standard horizontal - one. Just let g:miniBufExplVSplit = <width> in your - .vimrc and your will get this functionality. - - If you use the vertical explorer and you want it to - autosize then let g:miniBufExplMaxSize = <max width> - in your .vimrc. You may use the MinSize letting in - addition to the MaxLetting if you don't want a super - thin window. - - g:miniBufExplMaxHeight was renamed g:miniBufExplMaxSize - g:miniBufExplMinHeight was renamed g:miniBufExplMinSize - the old settings are backwards compatible if you don't - use the new settings, but they are depreciated. - -6.2.8 - - Add an option to stop MBE from targeting non-modifiable - buffers when switching buffers. Thanks to AW Law for - the inspiration for this. This may not work if a user - has lots of explorer/help windows open. - -6.2.7 - - Very minor bug fix for people who want to set - loaded_minibufexplorer in their .vimrc in order to - stop MBE from loading. 99.99% of users do not need - this update. - -6.2.6 - - Moved history to end of source file - - Updated highlighting documentation - - Created global commands MBEbn and MBEbp that can be - used in mappings if folks want to cycle buffers while - skipping non-eligible buffers. - -6.2.5 - - Added <Leader>mbt key mapping which will toggle - the MBE window. I map this to F3 in my .vimrc - with "map <F3> :TMiniBufExplorer<CR>" which - means I can easily close the MBE window when I'm - not using it and get it back when I want it. - - Changed default debug mode to 3 (write to global - g:miniBufExplDebugOutput) - - Made a pass through the documentation to clarify - serveral issues and provide more complete docs - for mappings and commands. - -6.2.4 - - Because of the autocommand switch (see 6.2.0) it - was possible to remove the restriction on the - :set hidden option. It is now possible to use - this option with MBE. - -6.2.3 - - Added miniBufExplTabWrap option. It is turned - off by default. When turned on spaces are added - between tabs and gq} is issued to perform line - formatting. This won't work very well if filenames - contain spaces. It would be pretty easy to write - my own formatter, but I'm too lazy, so if someone - really needs that feature I'll add it :) - -6.2.2 - - Changed the way the g:miniBufExplorerMoreThanOne - global is handled. You can set this to the number - of eligible buffers you want to be loaded before - the MBE window is loaded. Setting it to 0 causes - the MBE window to be opened even if there are no - buffers. Setting it to 4 causes the window to stay - closed until the 4th eligible buffer is loaded. - - Added a MinHeight option. This is nice if you want - the MBE window to always take the same amount of - space. For example set MaxSize and MinSize to 2 - and set MoreThanOne to 0 and you will always have - a 2 row (plus the ruler :) MBE window. - NOTE: in 6.3.0 we started using MinSize instead of - Minheight. This will still work if MinSize is not - specified, but it is depreciated. Use MinSize instead. - - I now setlocal foldcolumn=0 and nonumber in the MBE - window. This is for those of you that like to have - these options turned on locally. I'm assuming no one - out there wants foldcolumns and line numbers in the - MBE window? :) - - Fixed a bug where an empty MBE window was taking half - of the screen (partly why the MinHeight option was - added.) - -6.2.1 - - If MBE is the only window (because of :bd for example) - and there are still eligible buffers then one of them - will be displayed. - - The <Leader>mbe mapping now highlights the buffer from - the current window. - - The delete ('d') binding in the MBE window now restors - the cursor position, which can help if you want to - delete several buffers in a row that are not at the - beginning of the buffer list. - - Added a new key binding ('p') in the MBE window to - switch to the previous window (last edit window) - -6.2.0 - - Major overhaul of autocommand and list updating code, - we now have much better handling of :bd (which is the - most requested feature.) As well as resolving other - issues where the buffer list would not be updated - automatically. The old version tried to trap specific - events, this one just updates frequently, but it keeps - track and only changes the screen if there has been - a change. - - Added g:miniBufExplMaxHeight variable so you can keep - the -MiniBufExplorer- window small when you have lots - of buffers (or buffers with long names :) - NOTE: in 6.3.0 we started using MaxSize instead of - MaxHeight. This will still work if MaxSize is not - specified, but it is depreciated. Use MaxSize instead. - - Improvement to internal syntax highlighting code - I renamed the syntax group names. Anyone who has - figured out how to use them already shouldn't have - any trouble with the new Nameing :) - - Added debug mode 3 which writes to a global variable - this is fast and doesn't mess with the buffer/window - lists. - -6.1.0 - - <Leader>mbc was failing because I was calling one of - my own functions with the wrong number of args. :( - Thanks to Gerry Patterson for finding this! - This code is very stable (although it has some - idiocyncracies.) - -6.0.9 - - Double clicking tabs was overwriting the clipboard - register on MS Windows. Thanks to Shoeb Bhinderwala - for reporting this issue. - -6.0.8 - - Apparently some Vim builds are having a hard time with - line continuation in scripts so the few that were here - have been removed. - - Generalized FindExplorer and FindCreateExplorer so - that they can be used for the debug window. Renaming - to FindWindow and FindCreateWindow. - - Updated debugging code so that debug output is put into - a buffer which can then be written to disk or emailed - to me when someone is having a major issue. Can also - write directly to a file (VERY SLOWLY) on UNIX or Win32 - (not 95 or 98 at the moment) or use Vim's echo function - to display the output to the screen. - - Several people have had issues when the hidden option - is turned on. So I have put in several checks to make - sure folks know this if they try to use MBE with this - option set. - -6.0.7 - - Handling BufDelete autocmd so that the UI updates - properly when using :bd (rather than going through - the MBE UI.) - - The AutoUpdate code will now close the MBE window when - there is a single eligible buffer available. - This has the useful side effect of stopping the MBE - window from blocking the Vim session open when you close - the last buffer. - - Added functions, commands and maps to close & update - the MBE window (<leader>mbc and <leader>mbu.) - - Made MBE open/close state be sticky if set through - StartExplorer(1) or StopExplorer(1), which are - called from the standard mappings. So if you close - the mbe window with \mbc it won't be automatically - opened again unless you do a \mbe (or restart Vim). - - Removed spaces between "tabs" (even more mini :) - - Simplified MBE tab processing - -6.0.6 - - Fixed register overwrite bug found by Sébastien Pierre - -6.0.5 - - Fixed an issue with window sizing when we run out of - buffers. - - Fixed some weird commenting bugs. - - Added more optional fancy window/buffer navigation: - - You can turn on the capability to use control and the - arrow keys to move between windows. - - You can turn on the ability to use <C-TAB> and - <C-S-TAB> to open the next and previous (respectively) - buffer in the current window. - - You can turn on the ability to use <C-TAB> and - <C-S-TAB> to switch windows (forward and backwards - respectively.) - -6.0.4 - - Added optional fancy window navigation: - - Holding down control and pressing a Vim direction - [hjkl] will switch windows in the indicated direction. - -6.0.3 - - Changed buffer name to -MiniBufExplorer- to resolve - Issue in filename pattern matching on Windows. - -6.0.2 - - 2 Changes requested by Suresh Govindachar: - - Added SplitToEdge option and set it on by default - - Added tab and shift-tab mappings in [MBE] window - -6.0.1 - - Added MoreThanOne option and set it on by default - MiniBufExplorer will not automatically open until - more than one eligible buffers are opened. This - reduces clutter when you are only working on a - single file. - NOTE: See change log for 6.2.2 for more details about - this feature - -6.0.0 - - Initial Release on November 20, 2001 - -============================================================================== -vim: ft=help tw=78 cc=79 et ts=8 sw=4 sts=4 diff --git a/.vim/available_plugins/minibufexpl/plugin/minibufexpl.vim b/.vim/available_plugins/minibufexpl/plugin/minibufexpl.vim deleted file mode 100755 index e2b3348..0000000 --- a/.vim/available_plugins/minibufexpl/plugin/minibufexpl.vim +++ /dev/null @@ -1,2467 +0,0 @@ -" Mini Buffer Explorer <minibufexpl.vim> -" -" HINT: Type zR if you don't know how to use folds -" -" Script Info and Documentation {{{ -"============================================================================= -" Copyright: Copyright (C) 2002 & 2003 Bindu Wavell -" Copyright (C) 2010 Oliver Uvman -" Copyright (C) 2010 Danielle Church -" Copyright (C) 2010 Stephan Sokolow -" Copyright (C) 2010 & 2011 Federico Holgado -" Permission is hereby granted to use and distribute this code, -" with or without modifications, provided that this copyright -" notice is copied with it. Like anything else that's free, -" minibufexpl.vim is provided *as is* and comes with no -" warranty of any kind, either expressed or implied. In no -" event will the copyright holder be liable for any damamges -" resulting from the use of this software. -" -" Name Of File: minibufexpl.vim -" Description: Mini Buffer Explorer Vim Plugin -" Documentation: See minibufexpl.txt -" -"============================================================================= -" }}} -" -" Startup Check -" -" Has this plugin already been loaded? {{{ -" -if exists('loaded_minibufexplorer') - finish -endif -let loaded_minibufexplorer = 1 - -" }}} -" -" Mappings and Commands -" -" MBE commands {{{ -" -if !exists(':MiniBufExplorer') - command! MiniBufExplorer echoe 'MiniBufExplorer is depreciated, please use MBEOpen instead.' -endif -if !exists(':CMiniBufExplorer') - command! CMiniBufExplorer echoe 'CMiniBufExplorer is depreciated, please use MBEClose instead.' -endif -if !exists(':TMiniBufExplorer') - command! TMiniBufExplorer echoe 'TMiniBufExplorer is depreciated, please use MBEToggle instead.' -endif -if !exists(':MBEFocus') - command! MBEFocus call <SID>FocusExplorer() -endif -if !exists(':MBEFocusAll') - command! MBEFocusAll tabdo call <SID>FocusExplorer() -endif -if !exists(':MBEOpen') - command! -bang MBEOpen let t:skipEligibleBuffersCheck = 1 | if '<bang>' == '!' | call <SID>StopExplorer(0) | endif | call <SID>StartExplorer(bufnr("%")) -endif -if !exists(':MBEOpenAll') - command! -bang MBEOpenAll tabdo let t:skipEligibleBuffersCheck = 1 | if '<bang>' == '!' | call <SID>StopExplorer(0) | endif | call <SID>StartExplorer(bufnr("%")) | let s:TabsMBEState = 1 -endif -if !exists(':MBEClose') - command! -bang MBEClose let t:skipEligibleBuffersCheck = 0 | call <SID>StopExplorer('<bang>' == '!') -endif -if !exists(':MBECloseAll') - command! -bang MBECloseAll tabdo let t:skipEligibleBuffersCheck = 0 | call <SID>StopExplorer('<bang>' == '!') | let s:TabsMBEState = 0 -endif -if !exists(':MBEToggle') - command! -bang MBEToggle call <SID>ToggleExplorer(0,'<bang>'=='!') -endif -if !exists(':MBEToggleAll') - command! -bang MBEToggleAll call <SID>ToggleExplorer(1,'<bang>'=='!') -endif -if !exists(':MBEToggleMRU') - command! -bang MBEToggleMRU call <SID>ToggleMRU() -endif -if !exists(':MBEToggleMRUAll') - command! -bang MBEToggleMRUAll tabdo call <SID>ToggleMRU() -endif -if !exists(':MBEbn') - command! MBEbn call <SID>CycleBuffer(1) -endif -if !exists(':MBEbp') - command! MBEbp call <SID>CycleBuffer(0) -endif -if !exists(':MBEbf') - command! MBEbf call <SID>CycleBuffer(1,1) -endif -if !exists(':MBEbb') - command! MBEbb call <SID>CycleBuffer(0,1) -endif -if !exists(':MBEbd') - command! -bang -nargs=* MBEbd call <SID>DeleteBuffer(0,'<bang>'=='!',<f-args>) -endif -if !exists(':MBEbw') - command! -bang -nargs=* MBEbw call <SID>DeleteBuffer(1,'<bang>'=='!',<f-args>) -endif -if !exists(':MBEbun') - command! -bang -nargs=* MBEbun call <SID>DeleteBuffer(2,'<bang>'=='!',<f-args>) -endif - -" }}} -" -" Global Configuration Variables - Depreciated -" -" {{{ -if exists('g:miniBufExplSplitBelow') - let g:miniBufExplBRSplit = g:miniBufExplSplitBelow -endif - -if exists('g:miniBufExplMaxHeight') - let g:miniBufExplMaxSize = g:miniBufExplMaxHeight -endif - -if exists('g:miniBufExplMinHeight') - let g:miniBufExplMinSize = g:miniBufExplMinHeight -endif - -if exists('g:miniBufExplorerMoreThanOne') - let g:miniBufExplBuffersNeeded = g:miniBufExplorerMoreThanOne -endif - -if exists('g:miniBufExplorerAutoStart') - let g:miniBufExplAutoStart = g:miniBufExplorerAutoStart -endif - -if exists('g:miniBufExplorerDebugMode') - let g:miniBufExplDebugMode = g:miniBufExplorerDebugMode -endif - -if exists('g:miniBufExplorerDebugLevel') - let g:miniBufExplDebugLevel = g:miniBufExplorerDebugLevel -endif - -if exists('g:miniBufExplorerDebugOutput') - let g:miniBufExplDebugOutput = g:miniBufExplorerDebugOutput -endif - -if exists('g:miniBufExplorerHideWhenDiff') - let g:miniBufExplHideWhenDiff = g:miniBufExplorerHideWhenDiff -endif - -" }}} -" -" Global Configuration Variables -" -" Start MBE automatically ? {{{ -" -if !exists('g:miniBufExplAutoStart') - let g:miniBufExplAutoStart = 1 -endif - -" }}} -" Debug Mode {{{ -" -" 0 = debug to a window -" 1 = use vim's echo facility -" 2 = write to a file named MiniBufExplorer.DBG -" in the directory where vim was started -" THIS IS VERY SLOW -" 3 = Write into g:miniBufExplDebugOutput -" global variable [This is the default] -if !exists('g:miniBufExplDebugMode') - let g:miniBufExplDebugMode = 3 -endif - -" }}} -" Debug Level {{{ -" -" 0 = no logging -" 1=5 = errors ; 1 is the most important -" 5-9 = info ; 5 is the most important -" 10 = Entry/Exit -if !exists('g:miniBufExplDebugLevel') - let g:miniBufExplDebugLevel = 1 -endif - -" }}} -" Stop auto starting MBE in diff mode? {{{ -if !exists('g:miniBufExplHideWhenDiff') - let g:miniBufExplHideWhenDiff = 0 -endif - -" }}} -" MoreThanOne? {{{ -" Display Mini Buf Explorer when there are 'More Than One' eligible buffers -" -if !exists('g:miniBufExplBuffersNeeded') - let g:miniBufExplBuffersNeeded = 2 -endif - -" }}} -" Set the updatetime? {{{ -if !exists('g:miniBufExplSetUT') - let g:miniBufExplSetUT = 1 -endif - -" }}} -" Horizontal or Vertical explorer? {{{ -" For folks that like vertical explorers, I'm caving in and providing for -" veritcal splits. If this is set to 0 then the current horizontal -" splitting logic will be run. If however you want a vertical split, -" assign the width (in characters) you wish to assign to the MBE window. -" -if !exists('g:miniBufExplVSplit') - let g:miniBufExplVSplit = 0 -endif - -" }}} -" Split below/above/left/right? {{{ -" When opening a new -MiniBufExplorer- window, split the new windows below or -" above the current window? 1 = below, 0 = above. -" -if !exists('g:miniBufExplBRSplit') - let g:miniBufExplBRSplit = g:miniBufExplVSplit ? &splitright : &splitbelow -endif - -" }}} -" Split to edge? {{{ -" When opening a new -MiniBufExplorer- window, split the new windows to the -" full edge? 1 = yes, 0 = no. -" -if !exists('g:miniBufExplSplitToEdge') - let g:miniBufExplSplitToEdge = 1 -endif - -" }}} -" MaxSize {{{ -" Same as MaxHeight but also works for vertical splits if specified with a -" vertical split then vertical resizing will be performed. If left at 0 -" then the number of columns in g:miniBufExplVSplit will be used as a -" static window width. -if !exists('g:miniBufExplMaxSize') - let g:miniBufExplMaxSize = 0 -endif - -" }}} -" MinSize {{{ -" Same as MinHeight but also works for vertical splits. For vertical splits, -" this is ignored unless g:miniBufExplMax(Size|Height) are specified. -if !exists('g:miniBufExplMinSize') - let g:miniBufExplMinSize = 1 -endif - -" }}} -" TabWrap? {{{ -" By default line wrap is used (possibly breaking a tab name between two -" lines.) Turning this option on (setting it to 1) can take more screen -" space, but will make sure that each tab is on one and only one line. -" -if !exists('g:miniBufExplTabWrap') - let g:miniBufExplTabWrap = 0 -endif - -" }}} -" ShowBufNumber? {{{ -" By default buffers' numbers are shown in MiniBufExplorer. You can turn it off -" by setting this option to 0. -" -if !exists('g:miniBufExplShowBufNumbers') - let g:miniBufExplShowBufNumbers = 1 -endif - -" }}} -" Single/Double Click? {{{ -" flag that can be set to 1 in a users .vimrc to allow -" single click switching of tabs. By default we use -" double click for tab selection. -" -if !exists('g:miniBufExplUseSingleClick') - let g:miniBufExplUseSingleClick = 0 -endif - -" }}} -" Close on Select? {{{ -" Flag that can be set to 1 in a users .vimrc to hide -" the explorer when a user selects a buffer. -" -if !exists('g:miniBufExplCloseOnSelect') - let g:miniBufExplCloseOnSelect = 0 -endif - -" }}} -" Status Line Text for MBE window {{{ -" -if !exists('g:miniBufExplStatusLineText') - let g:miniBufExplStatusLineText = "-MiniBufExplorer-" -endif - -" }}} -" How to sort the buffers in MBE window {{{ -" -if !exists('g:miniBufExplSortBy') - let g:miniBufExplSortBy = "number" -endif - -" }}} -" Should buffer be cycled arround if hits the begining or the end while {{{ -" using MBE's buffer movement commands. -" -if !exists('g:miniBufExplCycleArround') - let g:miniBufExplCycleArround = 0 -endif - -" }}} -" -" Variables used internally -" -" Script/Global variables {{{ -" In debug mode 3 this variable will hold the debug output -let g:miniBufExplDebugOutput = '' - -" check to see what platform we are in -if (has('unix')) - let s:PathSeparator = '/' -else - let s:PathSeparator = '\' -endif - -" Variable used to count debug output lines -let s:debugIndex = 0 - -" Variable used to pass maxTabWidth info between functions -let s:maxTabWidth = 0 - -" Variable used as a mutex to indicate the current state of MBEToggleAll -let s:TabsMBEState = 0 - -" List for all eligible buffers -let s:BufList = [] - -" List for tracking order of the buffer entering -let s:MRUList = [] - -" Whether MRU List should be updated. -let s:MRUEnable = 1 - -" Dictionary used to keep track of the modification state of buffers -let s:bufStateDict = {} - -" Global used to store the buffer list so that we don't update the MBE -" unless the list has changed. -let s:miniBufExplBufList = '' - -" Variable used as a mutex so that AutoUpdates would not get nested. -let s:miniBufExplInAutoUpdate = 0 - -" Dictionary used to keep track of the names we have seen. -let s:bufNameDict = {} - -" Dictionary used to map buffer numbers to names when the buffer -" names are not unique. -let s:bufUniqNameDict = {} - -" Dictionary used to hold the path parts for each buffer -let s:bufPathDict = {} - -" Dictionary used to hold the path signature index for each buffer -let s:bufPathSignDict = {} - -" We start out with this off for startup, but once vim is running we -" turn this on. This prevent any BufEnter event from being triggered -" before VimEnter event. -let t:miniBufExplAutoUpdate = 0 - -" If MBE was opened manually, then we should skip eligible buffers checking, -" open MBE window no matter what value 'g:miniBufExplBuffersNeeded' is set. -let t:skipEligibleBuffersCheck = 0 - -" The order of buffer listing in MBE window is tab dependently. -let t:miniBufExplSortBy = g:miniBufExplSortBy - -" }}} -" -" Auto Commands -" -" Setup an autocommand group and some autocommands {{{ -" that keep our explorer updated automatically. -" - -" Set a lower value to 'updatetime' for the CursorHold/CursorHoldI event, so -" that the MBE could be updated in time. It can not be set too low, otherwise -" might breaks many things, 1500ms should be a reasonable value. -" We only change it if we are allowed to and it has not been changed yet. -if g:miniBufExplSetUT && &ut == 4000 - set updatetime=1500 -endif - -augroup MiniBufExpl - autocmd! - autocmd VimEnter * nested call <SID>VimEnterHandler() - autocmd TabEnter * nested call <SID>TabEnterHandler() - autocmd BufAdd * call <SID>BufAddHandler() - autocmd BufEnter * nested call <SID>BufEnterHandler() - autocmd BufDelete * call <SID>BufDeleteHandler() - autocmd CursorHold,CursorHoldI,BufWritePost * - \ call <SID>DEBUG('Entering UpdateBufferStateDict AutoCmd', 10) | - \ call <SID>UpdateBufferStateDict(bufnr("%"),0) | - \ call <SID>DEBUG('Leaving UpdateBufferStateDict AutoCmd', 10) -if exists('##QuitPre') - autocmd QuitPre * - \ if <SID>NextNormalWindow() == -1 | call <SID>StopExplorer(0) | endif -else - autocmd BufEnter * nested call <SID>QuitIfLastOpen() -endif - autocmd FileType minibufexpl call <SID>RenderSyntax() -augroup END - -function! <SID>VimEnterHandler() - call <SID>DEBUG('Entering VimEnter Handler', 10) - - " Build initial MRUList. - " This makes sure all the files specified on the command - " line are picked up correctly. - let s:BufList = range(1, bufnr('$')) - let s:MRUList = range(1, bufnr('$')) - - for l:i in s:BufList - if <SID>IsBufferIgnored(l:i) - call <SID>ListPop(s:BufList,l:i) - endif - endfor - - for l:i in s:MRUList - if <SID>IsBufferIgnored(l:i) - call <SID>ListPop(s:MRUList,l:i) - endif - endfor - - if g:miniBufExplHideWhenDiff!=1 || !&diff - let t:miniBufExplAutoUpdate = 1 - endif - - if g:miniBufExplAutoStart && t:miniBufExplAutoUpdate == 1 - \ && (t:skipEligibleBuffersCheck == 1 || <SID>HasEligibleBuffers() == 1) - call <SID>StartExplorer(bufnr("%")) - - " Let the MBE open in the new tab - let s:TabsMBEState = 1 - endif - - call <SID>DEBUG('Leaving VimEnter Handler', 10) -endfunction - -function! <SID>TabEnterHandler() - call <SID>DEBUG('Entering TabEnter Handler', 10) - - if !exists('t:miniBufExplSortBy') - let t:miniBufExplSortBy = g:miniBufExplSortBy - endif - - if !exists('t:miniBufExplAutoUpdate') - let t:miniBufExplAutoUpdate = s:TabsMBEState - endif - - if !exists('t:skipEligibleBuffersCheck') - let t:skipEligibleBuffersCheck = 0 - endif - - if g:miniBufExplAutoStart && t:miniBufExplAutoUpdate == 1 - \ && (t:skipEligibleBuffersCheck == 1 || <SID>HasEligibleBuffers() == 1) - call <SID>StartExplorer(bufnr("%")) - endif - - call <SID>DEBUG('Leaving TabEnter Handler', 10) -endfunction - -function! <SID>BufAddHandler() - call <SID>DEBUG('Entering BufAdd Handler', 10) - - call <SID>ListAdd(s:BufList,str2nr(expand("<abuf>"))) - call <SID>ListAdd(s:MRUList,str2nr(expand("<abuf>"))) - - call <SID>UpdateAllBufferDicts(expand("<abuf>"),0) - - call <SID>AutoUpdate(bufnr("%"),0) - - call <SID>DEBUG('Leaving BufAdd Handler', 10) -endfunction - -function! <SID>BufEnterHandler() abort - call <SID>DEBUG('Entering BufEnter Handler', 10) - - for l:i in s:BufList - if <SID>IsBufferIgnored(l:i) - call <SID>ListPop(s:BufList,l:i) - endif - endfor - - for l:i in s:MRUList - if <SID>IsBufferIgnored(l:i) - call <SID>ListPop(s:MRUList,l:i) - endif - endfor - - call <SID>AutoUpdate(bufnr("%"),0) - - call <SID>DEBUG('Leaving BufEnter Handler', 10) -endfunction - -function! <SID>BufDeleteHandler() - call <SID>DEBUG('Entering BufDelete Handler', 10) - - call <SID>ListPop(s:BufList,str2nr(expand("<abuf>"))) - call <SID>ListPop(s:MRUList,str2nr(expand("<abuf>"))) - - call <SID>UpdateAllBufferDicts(expand("<abuf>"),1) - - " Handle ':bd' command correctly - if (bufname('%') == '-MiniBufExplorer-' && <SID>NextNormalWindow() == -1 && len(s:BufList) > 0) - if(tabpagenr('$') == 1) - setlocal modifiable - resize - exec 'noautocmd sb'.s:BufList[0] - call <SID>StopExplorer(0) - call <SID>StartExplorer(bufnr("%")) - else - close - endif - endif - - call <SID>AutoUpdate(bufnr("%"),1) - - call <SID>DEBUG('Leaving BufDelete Handler', 10) -endfunction -" }}} -" -" Functions -" -" RenderSyntax {{{ -" -function! <SID>RenderSyntax() - if has("syntax") - syn clear - syn match MBENormal '\[[^\]]*\]' - syn match MBEChanged '\[[^\]]*\]+' - syn match MBEVisibleNormal '\[[^\]]*\]\*' - syn match MBEVisibleChanged '\[[^\]]*\]\*+' - syn match MBEVisibleActiveNormal '\[[^\]]*\]\*!' - syn match MBEVisibleActiveChanged '\[[^\]]*\]\*+!' - - "MiniBufExpl Color Examples - " hi MBENormal guifg=#808080 guibg=fg - " hi MBEChanged guifg=#CD5907 guibg=fg - " hi MBEVisibleNormal guifg=#5DC2D6 guibg=fg - " hi MBEVisibleChanged guifg=#F1266F guibg=fg - " hi MBEVisibleActiveNormal guifg=#A6DB29 guibg=fg - " hi MBEVisibleActiveChanged guifg=#F1266F guibg=fg - - if !exists("g:did_minibufexplorer_syntax_inits") - let g:did_minibufexplorer_syntax_inits = 1 - hi def link MBENormal Comment - hi def link MBEChanged String - hi def link MBEVisibleNormal Special - hi def link MBEVisibleChanged Special - hi def link MBEVisibleActiveNormal Underlined - hi def link MBEVisibleActiveChanged Error - endif - - let b:current_syntax = "minibufexpl" - endif -endfunction - -" }}} -" StartExplorer - Sets up our explorer and causes it to be displayed {{{ -" -function! <SID>StartExplorer(curBufNum) - call <SID>DEBUG('Entering StartExplorer('.a:curBufNum.')',10) - - call <SID>DEBUG('Current state: '.winnr().' : '.bufnr('%').' : '.bufname('%'),10) - - call <SID>BuildAllBufferDicts() - - let t:miniBufExplAutoUpdate = 1 - - let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1) - - if l:winNum != -1 - call <SID>DEBUG('There is already a MBE window, aborting...',1) - call <SID>DEBUG('Leaving StartExplorer()',10) - return - endif - - call <SID>CreateWindow('-MiniBufExplorer-', g:miniBufExplVSplit, g:miniBufExplBRSplit, g:miniBufExplSplitToEdge, 1, 1) - - let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1) - - if l:winNum == -1 - call <SID>DEBUG('Failed to create the MBE window, aborting...',1) - call <SID>DEBUG('Leaving StartExplorer()',10) - return - endif - - " Save current window number and switch to previous - " window before entering MBE window so that the later - " `wincmd p` command will get into this window, then - " we can preserve a one level window movement history. - let l:currWin = winnr() - call s:SwitchWindow('p',1) - - " Switch into MBE allowing autocmd to run will - " make the syntax highlight in MBE window working - call s:SwitchWindow('w',0,l:winNum) - - " Make sure we are in our window - if bufname('%') != '-MiniBufExplorer-' - call <SID>DEBUG('StartExplorer called in invalid window',1) - call <SID>DEBUG('Leaving StartExplorer()',10) - return - endif - - " Set filetype for MBE buffer - set filetype=minibufexpl - - " !!! We may want to make the following optional -- Bindu - " New windows don't cause all windows to be resized to equal sizes - set noequalalways - - " !!! We may want to make the following optional -- Bindu - " We don't want the mouse to change focus without a click - set nomousefocus - - if g:miniBufExplVSplit == 0 - setlocal wrap - else - setlocal nowrap - exec 'setlocal winwidth='.g:miniBufExplMinSize - endif - - " If folks turn numbering and columns on by default we will turn - " them off for the MBE window - setlocal foldcolumn=0 - setlocal nonumber - if exists("&norelativenumber") - " relativenumber was introduced in Vim 7.3 - this provides compatibility - " for older versions of Vim - setlocal norelativenumber - endif - "don't highlight matching parentheses, etc. - setlocal matchpairs= - "Depending on what type of split, make sure the MBE buffer is not - "automatically rezised by CTRL + W =, etc... - setlocal winfixheight - setlocal winfixwidth - - " Set the text of the statusline for the MBE buffer. See help:stl for - " many options - exec 'setlocal statusline='.g:miniBufExplStatusLineText - - " No spell check - setlocal nospell - - " Restore colorcolumn for VIM >= 7.3 - if exists("+colorcolumn") - setlocal colorcolumn& - end - - " If you press return, o or e in the -MiniBufExplorer- then try - " to open the selected buffer in the previous window. - nnoremap <buffer> o :call <SID>MBESelectBuffer(0)<CR>:<BS> - nnoremap <buffer> e :call <SID>MBESelectBuffer(0)<CR>:<BS> - nnoremap <buffer> <CR> :call <SID>MBESelectBuffer(0)<CR>:<BS> - " If you press s in the -MiniBufExplorer- then try - " to open the selected buffer in a split in the previous window. - nnoremap <buffer> s :call <SID>MBESelectBuffer(1)<CR>:<BS> - " If you press j in the -MiniBufExplorer- then try - " to open the selected buffer in a vertical split in the previous window. - nnoremap <buffer> v :call <SID>MBESelectBuffer(2)<CR>:<BS> - " If you press d in the -MiniBufExplorer- then try to - " delete the selected buffer. - nnoremap <buffer> d :call <SID>MBEDeleteBuffer()<CR>:<BS> - " The following allow us to use regular movement keys to - " scroll in a wrapped single line buffer - nnoremap <buffer> k gk - nnoremap <buffer> j gj - nnoremap <buffer> <up> gk - nnoremap <buffer> <down> gj - " The following allows for quicker moving between buffer - " names in the [MBE] window it also saves the last-pattern - " and restores it. - if !g:miniBufExplShowBufNumbers - nnoremap <buffer> l :call search('\[[^\]]*\]')<CR>:<BS> - nnoremap <buffer> h :call search('\[[^\]]*\]','b')<CR>:<BS> - nnoremap <buffer> <right> :call search('\[[^\]]*\]')<CR>:<BS> - nnoremap <buffer> <left> :call search('\[[^\]]*\]','b')<CR>:<BS> - else - nnoremap <buffer> l :call search('\[[0-9]*:[^\]]*\]')<CR>:<BS> - nnoremap <buffer> h :call search('\[[0-9]*:[^\]]*\]','b')<CR>:<BS> - nnoremap <buffer> <right> :call search('\[[0-9]*:[^\]]*\]')<CR>:<BS> - nnoremap <buffer> <left> :call search('\[[0-9]*:[^\]]*\]','b')<CR>:<BS> - endif - - " Attempt to perform single click mapping - " It would be much nicer if we could 'nnoremap <buffer> ...', however - " vim does not fire the '<buffer> <leftmouse>' when you use the mouse - " to enter a buffer. - if g:miniBufExplUseSingleClick == 1 - let l:mapcmd = ':nnoremap <silent> <LEFTMOUSE> <LEFTMOUSE>' - let l:clickcmd = ':if bufname("%") == "-MiniBufExplorer-" <bar> call <SID>MBESelectBuffer(0) <bar> endif <CR>' - " no mapping for leftmouse - if maparg('<LEFTMOUSE>', 'n') == '' - exec l:mapcmd . l:clickcmd - " we have a mapping - else - let l:mapcmd = l:mapcmd . substitute(substitute(maparg('<LEFTMOUSE>', 'n'), '|', '<bar>', 'g'), '\c^<LEFTMOUSE>', '', '') - let l:mapcmd = l:mapcmd . l:clickcmd - exec l:mapcmd - endif - " If you DoubleClick in the MBE window then try to open the selected - " buffer in the previous window. - else - nnoremap <buffer> <2-LEFTMOUSE> :call <SID>MBESelectBuffer(0)<CR>:<BS> - endif - - call <SID>BuildBufferList(a:curBufNum) - - call <SID>DisplayBuffers(a:curBufNum) - - " Switch away from MBE allowing autocmd to run which will - " trigger PowerLine's BufLeave event handler - call s:SwitchWindow('p',0) - - " Now we are in the previous window, let's enter - " the window current window, this will preserve - " one-level backwards window movement history. - call s:SwitchWindow('w',1,l:currWin) - - call <SID>DEBUG('Leaving StartExplorer()',10) -endfunction - -" }}} -" StopExplorer - Looks for our explorer and closes the window if it is open {{{ -" -function! <SID>StopExplorer(force) - call <SID>DEBUG('Entering StopExplorer()',10) - - if a:force || <SID>HasEligibleBuffers() - let t:miniBufExplAutoUpdate = 0 - endif - - let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1) - - if l:winNum == -1 - call <SID>DEBUG('There is no MBE window, aborting...',1) - call <SID>DEBUG('Leaving StopExplorer()',10) - return - endif - - call s:SwitchWindow('w',1,l:winNum) - silent! close - call s:SwitchWindow('p',1) - - " Work around a redraw bug in gVim (Confirmed present in 7.3.50) - if has('gui_gtk') && has('gui_running') - redraw! - endif - - call <SID>DEBUG('Leaving StopExplorer()',10) -endfunction - -" }}} -" FocusExplorer {{{ -" -function! <SID>FocusExplorer() - call <SID>DEBUG('Entering FocusExplorer()',10) - - let t:miniBufExplAutoUpdate = 1 - - let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1) - - if l:winNum == -1 - call <SID>DEBUG('There is no MBE window, aborting...',1) - call <SID>DEBUG('Leaving FocusExplorer()',10) - return - endif - - call s:SwitchWindow('w',0,l:winNum) - - call <SID>DEBUG('Leaving FocusExplorer()',10) -endfunction - -" }}} -" ToggleMRU - Switch the order of buffer listing in MBE window {{{ -" between its default and most recently used. -" -function! <SID>ToggleMRU() - call <SID>DEBUG('Entering ToggleMRU()',10) - - if t:miniBufExplSortBy == 'number' - let t:miniBufExplSortBy = 'mru' - else - let t:miniBufExplSortBy = 'number' - endif - - let l:winnr = <SID>FindWindow('-MiniBufExplorer-', 1) - - if (l:winnr == -1) - call <SID>DEBUG('MiniBufExplorer was not running, starting...', 9) - call <SID>StartExplorer(bufnr('%')) - else - call <SID>DEBUG('Updating MiniBufExplorer...', 9) - call <SID>UpdateExplorer(bufnr('%')) - endif - - call <SID>DEBUG('Leaving ToggleMRU()',10) -endfunction - -" }}} -" ToggleExplorer - Looks for our explorer and opens/closes the window {{{ -" -" a:tabs, 0 no, 1 yes -" toggle MBE in all tabs -" a:force, 0 no, 1 yes -" reopen MBE when it is already open -" close MBE with auto-updating disabled -" -function! <SID>ToggleExplorer(tabs,force) - call <SID>DEBUG('Entering ToggleExplorer()',10) - - if a:tabs - if s:TabsMBEState - tabdo let t:skipEligibleBuffersCheck = 0 | call <SID>StopExplorer(a:force) - else - tabdo let t:skipEligibleBuffersCheck = 1 | if a:force | call <SID>StopExplorer(0) | endif | call <SID>StartExplorer(bufnr("%")) - endif - let s:TabsMBEState = !s:TabsMBEState - else - let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1) - - if l:winNum != -1 - let t:skipEligibleBuffersCheck = 0 - call <SID>StopExplorer(a:force) - else - let t:skipEligibleBuffersCheck = 1 - call <SID>StartExplorer(bufnr("%")) - endif - endif - - call <SID>DEBUG('Leaving ToggleExplorer()',10) -endfunction - -" }}} -" UpdateExplorer {{{ -" -function! <SID>UpdateExplorer(curBufNum) - call <SID>DEBUG('Entering UpdateExplorer('.a:curBufNum.')',10) - - call <SID>DEBUG('Current state: '.winnr().' : '.bufnr('%').' : '.bufname('%'),10) - - if !<SID>BuildBufferList(a:curBufNum) - call <SID>DEBUG('Buffer List have not changed, aborting...',10) - call <SID>DEBUG('Leaving UpdateExplorer()',10) - return - endif - - let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1) - - if l:winNum == -1 - call <SID>DEBUG('Found no MBE window, aborting...',1) - call <SID>DEBUG('Leaving UpdateExplorer()',10) - return - endif - - if l:winNum != winnr() - let l:winChanged = 1 - - " Save current window number and switch to previous - " window before entering MBE window so that the later - " `wincmd p` command will get into this window, then - " we can preserve a one level window movement history. - let l:currWin = winnr() - call s:SwitchWindow('p',1) - - " Switch into MBE allowing autocmd to run will - " make the syntax highlight in MBE window working - call s:SwitchWindow('w',0,l:winNum) - endif - - call <SID>DisplayBuffers(a:curBufNum) - - if exists('l:winChanged') - " Switch away from MBE allowing autocmd to run which will - " trigger PowerLine's BufLeave event handler - call s:SwitchWindow('p',0) - - " Now we are in the previous window, let's enter - " the window current window, this will preserve - " one-level backwards window movement history. - call s:SwitchWindow('w',1,l:currWin) - endif - - call <SID>DEBUG('Leaving UpdateExplorer()',10) -endfunction - -" }}} -" FindWindow - Return the window number of a named buffer {{{ -" If none is found then returns -1. -" -function! <SID>FindWindow(bufName, doDebug) - if a:doDebug - call <SID>DEBUG('Entering FindWindow('.a:bufName.','.a:doDebug.')',10) - endif - - " Try to find an existing window that contains - " our buffer. - let l:winnr = bufwinnr(a:bufName) - - if l:winnr != -1 - if a:doDebug - call <SID>DEBUG('Found window '.l:winnr.' with buffer ('.winbufnr(l:winnr).' : '.bufname(winbufnr(l:winnr)).')',9) - endif - else - if a:doDebug - call <SID>DEBUG('Can not find window with buffer ('.a:bufName.')',9) - endif - endif - - if a:doDebug - call <SID>DEBUG('Leaving FindWindow()',10) - endif - - return l:winnr -endfunction - -" }}} -" CreateWindow {{{ -" -" vSplit, 0 no, 1 yes -" split vertically or horizontally -" brSplit, 0 no, 1 yes -" split the window below/right to current window -" forceEdge, 0 no, 1 yes -" split the window at the edege of the editor -" isPluginWindow, 0 no, 1 yes -" if it is a plugin window -" doDebug, 0 no, 1 yes -" show debugging message or not -" -function! <SID>CreateWindow(bufName, vSplit, brSplit, forceEdge, isPluginWindow, doDebug) - if a:doDebug - call <SID>DEBUG('Entering CreateWindow('.a:bufName.','.a:vSplit.','.a:brSplit.','.a:forceEdge.','.a:isPluginWindow.','.a:doDebug.')',10) - endif - - " Window number will change after creating a new window, - " we need to save both current and previous window number - " so that we can canculate theire correct window number - " after the new window creating. - let l:currWin = winnr() - call s:SwitchWindow('p',1) - let l:prevWin = winnr() - call s:SwitchWindow('p',1) - - " Save the user's split setting. - let l:saveSplitBelow = &splitbelow - let l:saveSplitRight = &splitright - - " Set to our new values. - let &splitbelow = a:brSplit - let &splitright = a:brSplit - - let l:bufNum = bufnr(a:bufName) - - if l:bufNum == -1 - let l:spCmd = 'sp' - else - let l:spCmd = 'sb' - endif - - if a:forceEdge == 1 - let l:edge = a:vSplit ? &splitright : &splitbelow - - if l:edge - if a:vSplit == 0 - silent exec 'noautocmd bo '.l:spCmd.' '.a:bufName - else - silent exec 'noautocmd bo vert '.l:spCmd.' '.a:bufName - endif - else - if a:vSplit == 0 - silent exec 'noautocmd to '.l:spCmd.' '.a:bufName - else - silent exec 'noautocmd to vert '.l:spCmd.' '.a:bufName - endif - endif - else - if a:vSplit == 0 - silent exec 'noautocmd '.l:spCmd.' '.a:bufName - else - silent exec 'noautocmd vert '.l:spCmd.' '.a:bufName - endif - endif - - " Restore the user's split setting. - let &splitbelow = l:saveSplitBelow - let &splitright = l:saveSplitRight - - " Turn off the swapfile, set the buftype and bufhidden option, so that it - " won't get written and will be deleted when it gets hidden. - if a:isPluginWindow - setlocal noswapfile - setlocal nobuflisted - setlocal buftype=nofile - setlocal bufhidden=delete - endif - - " Canculate the correct window number, for those whose window - " number before the creating is greater than or equal to the - " number of the newly created window, their window number should - " increase by one. - let l:prevWin = l:prevWin >= winnr() ? l:prevWin + 1 : l:prevWin - let l:currWin = l:currWin >= winnr() ? l:currWin + 1 : l:currWin - " This will preserve one-level backwards window movement history. - call s:SwitchWindow('w',1,l:prevWin) - call s:SwitchWindow('w',1,l:currWin) - - if a:doDebug - call <SID>DEBUG('Leaving CreateWindow()',10) - endif -endfunction - -" }}} -" FindCreateWindow - Attempts to find a window for a named buffer. {{{ -" -" If it is found then moves there. Otherwise creates a new window and -" configures it and moves there. -" -" vSplit, 0 no, 1 yes -" split vertically or horizontally -" brSplit, 0 no, 1 yes -" split the window below/right to current window -" forceEdge, 0 no, 1 yes -" split the window at the edege of the editor -" isPluginWindow, 0 no, 1 yes -" if it is a plugin window -" doDebug, 0 no, 1 yes -" show debugging message or not -" -function! <SID>FindCreateWindow(bufName, vSplit, brSplit, forceEdge, isPluginWindow, doDebug) - if a:doDebug - call <SID>DEBUG('Entering FindCreateWindow('.a:bufName.','.a:vSplit.','.a:brSplit.','.a:forceEdge.','.a:isPluginWindow.','.a:doDebug.')',10) - endif - - " Try to find an existing explorer window - let l:winNum = <SID>FindWindow(a:bufName, a:doDebug) - - " If found goto the existing window, otherwise - " split open a new window. - if l:winNum == -1 - if a:doDebug - call <SID>DEBUG('Creating a new window with buffer ('.a:bufName.')',9) - endif - - call <SID>CreateWindow(a:bufName, a:vSplit, a:brSplit, a:forceEdge, a:isPluginWindow, a:doDebug) - - " Try to find an existing explorer window - let l:winNum = <SID>FindWindow(a:bufName, 0) - - if l:winNum != -1 - if a:doDebug - call <SID>DEBUG('Created window '.l:winNum.' with buffer ('.a:bufName.')',9) - endif - else - if a:doDebug - call <SID>DEBUG('Failed to create window with buffer ('.a:bufName.').',1) - endif - endif - endif - - if a:doDebug - call <SID>DEBUG('Leaving FindCreateWindow()',10) - endif - - return l:winNum -endfunction - -" }}} -" DisplayBuffers - Wrapper for getting MBE window shown {{{ -" -" Makes sure we are in our explorer, then erases the current buffer and turns -" it into a mini buffer explorer window. -" -function! <SID>DisplayBuffers(curBufNum) - call <SID>DEBUG('Entering DisplayExplorer('.a:curBufNum.')',10) - - " Make sure we are in our window - if bufname('%') != '-MiniBufExplorer-' - call <SID>DEBUG('DisplayBuffers called in invalid window',1) - return - endif - - call <SID>ShowBuffers() - call <SID>ResizeWindow() - - " Place cursor at current buffer in MBE - if !<SID>IsBufferIgnored(a:curBufNum) - if !g:miniBufExplShowBufNumbers - call search('\V['.s:bufUniqNameDict[a:curBufNum].']', 'w') - else - call search('\V['.a:curBufNum.':'.s:bufUniqNameDict[a:curBufNum].']', 'w') - endif - endif - - call <SID>DEBUG('Leaving DisplayExplorer()',10) -endfunction - -" }}} -" Resize Window - Set width/height of MBE window {{{ -" -" Makes sure we are in our explorer, then sets the height/width for our explorer -" window so that we can fit all of our information without taking extra lines. -" -function! <SID>ResizeWindow() - call <SID>DEBUG('Entering ResizeWindow()',10) - - " Make sure we are in our window - if bufname('%') != '-MiniBufExplorer-' - call <SID>DEBUG('ResizeWindow called in invalid window',1) - call <SID>DEBUG('Leaving ResizeWindow()',10) - return - endif - - " Prevent a report of our actions from showing up. - let l:save_rep = &report - let l:save_sc = &showcmd - let &report = 10000 - set noshowcmd - - let l:width = winwidth('.') - - " Horizontal Resize - if g:miniBufExplVSplit == 0 - - if g:miniBufExplTabWrap == 0 - let l:length = strlen(getline('.')) - let l:height = 0 - if (l:width == 0) - let l:height = winheight('.') - else - let l:height = (l:length / l:width) - " handle truncation from div - if (l:length % l:width) != 0 - let l:height = l:height + 1 - endif - endif - else - " We need to be able to modify the buffer - setlocal modifiable - - exec "setlocal textwidth=".l:width - normal gg - normal gq} - normal G - let l:height = line('.') - normal gg - - " Prevent the buffer from being modified. - setlocal nomodifiable - endif - - " enforce max window height - if g:miniBufExplMaxSize != 0 - if g:miniBufExplMaxSize < l:height - let l:height = g:miniBufExplMaxSize - endif - endif - - " enfore min window height - if l:height < g:miniBufExplMinSize || l:height == 0 - let l:height = g:miniBufExplMinSize - endif - - call <SID>DEBUG('ResizeWindow to '.l:height.' lines',9) - - if &winminheight > l:height - let l:saved_winminheight = &winminheight - let &winminheight = 1 - exec 'resize '.l:height - let &winminheight = l:saved_winminheight - else - exec 'resize '.l:height - endif - - let saved_ead = &ead - let &ead = 'ver' - set equalalways - let &ead = saved_ead - set noequalalways - - " Vertical Resize - else - - if g:miniBufExplMaxSize != 0 - let l:newWidth = s:maxTabWidth - if l:newWidth > g:miniBufExplMaxSize - let l:newWidth = g:miniBufExplMaxSize - endif - if l:newWidth < g:miniBufExplMinSize - let l:newWidth = g:miniBufExplMinSize - endif - else - let l:newWidth = g:miniBufExplVSplit - endif - - if l:width != l:newWidth - call <SID>DEBUG('ResizeWindow to '.l:newWidth.' columns',9) - exec 'vertical resize '.l:newWidth - endif - - let saved_ead = &ead - let &ead = 'hor' - set equalalways - let &ead = saved_ead - set noequalalways - - endif - - normal! zz - - let &report = l:save_rep - let &showcmd = l:save_sc - - call <SID>DEBUG('Leaving ResizeWindow()',10) -endfunction - -" }}} -" ShowBuffers - Clear current buffer and put the MBE text into it {{{ -" -" Makes sure we are in our explorer, then adds a list of all modifiable -" buffers to the current buffer. Special marks are added for buffers that -" are in one or more windows (*) and buffers that have been modified (+) -" -function! <SID>ShowBuffers() - call <SID>DEBUG('Entering ShowExplorer()',10) - - " Make sure we are in our window - if bufname('%') != '-MiniBufExplorer-' - call <SID>DEBUG('ShowBuffers called in invalid window',1) - call <SID>DEBUG('Leaving ShowBuffers()',10) - return - endif - - let l:save_rep = &report - let l:save_sc = &showcmd - let &report = 10000 - set noshowcmd - - " We need to be able to modify the buffer - setlocal modifiable - - " Delete all lines in buffer. - silent 1,$d _ - - " Goto the end of the buffer put the buffer list - " and then delete the extra trailing blank line - $ - put! =s:miniBufExplBufList - silent $ d _ - - " Prevent the buffer from being modified. - setlocal nomodifiable - - let &report = l:save_rep - let &showcmd = l:save_sc - - call <SID>DEBUG('Leaving ShowBuffers()',10) -endfunction - -" }}} -" CycleBuffer - Cycle Through Buffers {{{ -" -" Move to next or previous buffer in the current window. If there -" are no more modifiable buffers then stay on the current buffer. -" can be called with no parameters in which case the buffers are -" cycled forward. Otherwise a single argument is accepted, if -" it's 0 then the buffers are cycled backwards, otherwise they -" are cycled forward. -" -function! <SID>CycleBuffer(forward,...) - if <SID>IsBufferIgnored(bufnr('%')) == 1 - return - endif - - let curBufNum = bufnr('%') - - if exists('a:1') && a:1 == 1 - call <SID>DEBUG('MRUList is '.string(s:MRUList),1) - let curBufIndex = index(s:MRUList, l:curBufNum) - call <SID>DEBUG('curBufIndex is '.l:curBufIndex,1) - let forBufIndex = l:curBufIndex - 1 < 0 ? len(s:MRUList) - 1 : l:curBufIndex - 1 - call <SID>DEBUG('forBufIndex is '.l:forBufIndex,1) - let bacBufIndex = l:curBufIndex + 1 >= len(s:MRUList) ? 0 : l:curBufIndex + 1 - call <SID>DEBUG('bacBufIndex is '.l:bacBufIndex,1) - - if a:forward - if !g:miniBufExplCycleArround && l:curBufIndex < l:forBufIndex - echo "You have reached the most recent buffer!" - return - endif - let l:moveCmd = 'b! '.s:MRUList[l:forBufIndex] - else - if !g:miniBufExplCycleArround && l:curBufIndex > l:bacBufIndex - echo "You have reached the least recent buffer!" - return - endif - let l:moveCmd = 'b! '.s:MRUList[l:bacBufIndex] - endif - - let s:MRUEnable = 0 - else - call <SID>DEBUG('BufList is '.string(s:BufList),1) - let curBufIndex = index(s:BufList, l:curBufNum) - call <SID>DEBUG('curBufIndex is '.l:curBufIndex,1) - let forBufIndex = l:curBufIndex + 1 >= len(s:BufList) ? 0 : l:curBufIndex + 1 - call <SID>DEBUG('forBufIndex is '.l:forBufIndex,1) - let bacBufIndex = l:curBufIndex - 1 < 0 ? len(s:BufList) - 1 : l:curBufIndex - 1 - call <SID>DEBUG('bacBufIndex is '.l:bacBufIndex,1) - - if a:forward - if !g:miniBufExplCycleArround && l:curBufIndex > l:forBufIndex - echo "You have reached the last buffer!" - return - endif - let l:moveCmd = 'b! '.s:BufList[l:forBufIndex] - else - if !g:miniBufExplCycleArround && l:curBufIndex < l:bacBufIndex - echo "You have reached the first buffer!" - return - endif - let l:moveCmd = 'b! '.s:BufList[l:bacBufIndex] - endif - - let s:MRUEnable = 1 - endif - - call <SID>DEBUG('===============move cmd is '.l:moveCmd,1) - - " Change buffer (keeping track of before and after buffers) - exec l:moveCmd - - let s:MRUEnable = 1 -endfunction - -" }}} -" DeleteBuffer {{{ -" -" Delete/Unload/Wipeout a buffer but preserve the window it was in -" -" a:action 0 bd, 1 bw, 2 bun -" delete/wipeout/unload a buffer -" a:bufNum -" number of the buffer to be deleted -" -function! <SID>DeleteBuffer(action,bang,...) - call <SID>DEBUG('Entering DeleteBuffer('.a:action.','.a:bang.')',10) - - if a:0 == 0 - call <SID>DEBUG('No buffer is given, use current buffer',5) - let l:bufNums = [ bufnr('%') ] - else - call <SID>DEBUG('Given buffers are '.string(a:000),5) - let l:bufNums = map(copy(a:000),'v:val =~ ''\d\+'' ? bufnr(v:val + 0) : bufnr(v:val)') - endif - - call <SID>DEBUG('Buffers to be deleted are '.string(l:bufNums),5) - - for l:bufNum in l:bufNums - if <SID>IsBufferIgnored(l:bufNum) - call <SID>DEBUG('Buffer '.l:bufNum.'is not a normal buffer, skip it',5) - continue - endif - - let l:bufName = bufname(l:bufNum) - call <SID>DEBUG('Buffer to be deleted is <'.l:bufName.'>['.l:bufNum.']',5) - - " Don't want auto updates while we are processing a delete - " request. - let l:saveAutoUpdate = t:miniBufExplAutoUpdate - let t:miniBufExplAutoUpdate = 0 - - " Get the currently active buffer, so we can update the MBE - " correctly. If that is the buffer to be deleted, then get - " the window for that buffer, so we can find which buffer - " is in that window after the detaching. - let l:actBuf = <SID>GetActiveBuffer() - if l:actBuf == l:bufNum - let l:actBufWin = bufwinnr(l:actBuf) - endif - - " Detach the buffer from all the windows that holding it - " in every tab page. - tabdo call <SID>DetachBuffer(l:bufNum) - - " Find which buffer is in the active window now - if l:actBuf == l:bufNum - let l:actBuf = winbufnr(l:actBufWin) - endif - - " Delete the buffer selected. - call <SID>DEBUG('About to delete buffer: '.l:bufNum,5) - - if a:action == 2 - let l:cmd = 'bun' - elseif a:action == 1 - let l:cmd = 'bw' - else - let l:cmd = 'bd' - endif - - if a:bang - let l:cmd = l:cmd.'!' - endif - - let l:cmd = 'silent! '.l:cmd.' '.l:bufNum - call <SID>DEBUG('About to execute the command "'.l:cmd.'"',5) - - exec l:cmd - - let t:miniBufExplAutoUpdate = l:saveAutoUpdate - - call <SID>UpdateExplorer(l:actBuf) - endfor - - call <SID>DEBUG('Leaving DeleteBuffer()',10) -endfunction - -" }}} -" DetachBuffer {{{ -" -" Detach a buffer from all the windows in which it is displayed. -" -function! <SID>DetachBuffer(bufNum) - call <SID>DEBUG('Entering DetachBuffer('.a:bufNum.')',10) - - call <SID>DEBUG('We are currently in tab page '.tabpagenr(),10) - - let l:bufNum = a:bufNum + 0 - - let l:winNum = bufwinnr(l:bufNum) - " while we have windows that contain our buffer - while l:winNum != -1 - call <SID>DEBUG('Buffer '.l:bufNum.' is being displayed in window: '.l:winNum,5) - - " move to window that contains our selected buffer - call s:SwitchWindow('w',1,l:winNum) - - call <SID>DEBUG('We are now in window: '.winnr(),5) - - call <SID>DEBUG('Window contains buffer: '.bufnr('%').' which should be: '.l:bufNum,5) - let l:origBuf = bufnr('%') - call <SID>CycleBuffer(0,1) - let l:currBuf = bufnr('%') - call <SID>DEBUG('Window now contains buffer: '.bufnr('%').' which should not be: '.l:bufNum,5) - - if l:origBuf == l:currBuf - " we wrapped so we are going to have to delete a buffer - " that is in an open window. - let l:winNum = -1 - else - " see if we have anymore windows with our selected buffer - let l:winNum = bufwinnr(l:bufNum) - endif - endwhile - - call <SID>DEBUG('Leaving DetachBuffer()',10) -endfunction - -" }}} -" IsBufferIgnored - check to see if buffer should be ignored {{{ -" -" Returns 0 if this buffer should be displayed in the list, 1 otherwise. -" -function! <SID>IsBufferIgnored(buf) - call <SID>DEBUG('Entering IsBufferIgnored('.a:buf.')',10) - - " Skip unlisted buffers. - if buflisted(a:buf) == 0 || index(s:BufList,a:buf) == -1 - call <SID>DEBUG('Buffer '.a:buf.' is unlisted, ignoring...',5) - call <SID>DEBUG('Leaving IsBufferIgnored()',10) - return 1 - endif - - " Skip non normal buffers. - if getbufvar(a:buf, "&buftype") != '' - call <SID>DEBUG('Buffer '.a:buf.' is not normal, ignoring...',5) - call <SID>DEBUG('Leaving IsBufferIgnored()',10) - return 1 - endif - - call <SID>DEBUG('Leaving IsBufferIgnored()',10) - return 0 -endfunction - -" }}} -" BuildBufferList - Build the text for the MBE window {{{ -" -" Creates the buffer list string and returns 1 if it is different than -" last time this was called and 0 otherwise. -" -function! <SID>BuildBufferList(curBufNum) - call <SID>DEBUG('Entering BuildBufferList('.a:curBufNum.')',10) - - let l:CurBufNum = a:curBufNum - - " Get the number of the last buffer. - let l:NBuffers = bufnr('$') - - let l:tabList = [] - let l:maxTabWidth = 0 - - " Loop through every buffer less than the total number of buffers. - for l:i in s:BufList - let l:BufName = expand( "#" . l:i . ":p:t") - - " Establish the tab's content, including the differentiating root - " dir if neccessary - let l:tab = '[' - if g:miniBufExplShowBufNumbers == 1 - let l:tab .= l:i.':' - endif - let l:tab .= s:bufUniqNameDict[l:i] - let l:tab .= ']' - - " If the buffer is open in a window mark it - if bufwinnr(l:i) != -1 - let l:tab .= '*' - endif - - " If the buffer is modified then mark it - if(getbufvar(l:i, '&modified') == 1) - let l:tab .= '+' - endif - - " If the buffer matches the)current buffer name, then mark it - call <SID>DEBUG('l:i is '.l:i.' and l:CurBufNum is '.l:CurBufNum,10) - if(l:i == l:CurBufNum) - let l:tab .= '!' - endif - - let l:maxTabWidth = strlen(l:tab) > l:maxTabWidth ? strlen(l:tab) : l:maxTabWidth - - call add(l:tabList, l:tab) - endfor - - if t:miniBufExplSortBy == "name" - call sort(l:tabList, "<SID>NameCmp") - elseif t:miniBufExplSortBy == "mru" - call sort(l:tabList, "<SID>MRUCmp") - endif - - let l:miniBufExplBufList = '' - for l:tab in l:tabList - let l:miniBufExplBufList = l:miniBufExplBufList.l:tab - - " If horizontal and tab wrap is turned on we need to add spaces - if g:miniBufExplVSplit == 0 - if g:miniBufExplTabWrap != 0 - let l:miniBufExplBufList = l:miniBufExplBufList.' ' - endif - " If not horizontal we need a newline - else - let l:miniBufExplBufList = l:miniBufExplBufList . "\n" - endif - endfor - - if (s:miniBufExplBufList != l:miniBufExplBufList) - let s:maxTabWidth = l:maxTabWidth - let s:miniBufExplBufList = l:miniBufExplBufList - call <SID>DEBUG('Leaving BuildBufferList()',10) - return 1 - else - call <SID>DEBUG('Leaving BuildBufferList()',10) - return 0 - endif -endfunction - -" }}} -" CreateBufferUniqName {{{ -" -" Construct a unique buffer name using the parts from the signature index of -" the path. -" -function! <SID>CreateBufferUniqName(bufNum) - call <SID>DEBUG('Entering CreateBufferUniqName('.a:bufNum.')',10) - - let l:bufNum = 0 + a:bufNum - let l:bufName = expand( "#" . l:bufNum . ":p:t") - " Remove []'s & ()'s, these chars are preserved for buffer name locating - let l:bufName = substitute(l:bufName, '[][()]', '', 'g') - - " Create a unique name for unamed buffer - if empty(l:bufName) - call <SID>DEBUG('Leaving CreateBufferUniqName()',10) - return '--NO NAME--'.localtime() - endif - - let l:bufPathPrefix = "" - - if(!has_key(s:bufPathSignDict, l:bufNum)) - call <SID>DEBUG(l:bufNum . ' is not in s:bufPathSignDict, aborting...',5) - call <SID>DEBUG('Leaving CreateBufferUniqName()',10) - return l:bufName - endif - - let l:signs = s:bufPathSignDict[l:bufNum] - if(empty(l:signs)) - call <SID>DEBUG('Signs for ' . l:bufNum . ' is empty, aborting...',5) - call <SID>DEBUG('Leaving CreateBufferUniqName()',10) - return l:bufName - endif - - for l:sign in l:signs - call <SID>DEBUG('l:sign is ' . l:sign,5) - if empty(get(s:bufPathDict[l:bufNum],l:sign)) - continue - endif - let l:bufPathSignPart = get(s:bufPathDict[l:bufNum],l:sign).'/' - " If the index is not right after the previous one and it is also not the - " last one, then put a '-' before it - if exists('l:last') && l:last + 1 != l:sign - let l:bufPathSignPart = '-/'.l:bufPathSignPart - endif - let l:bufPathPrefix = l:bufPathPrefix.l:bufPathSignPart - let l:last = l:sign - endfor - " If the last signature index is not the last index of the path, then put - " a '-' after it - if l:sign < len(s:bufPathDict[l:bufNum]) - 1 - let l:bufPathPrefix = l:bufPathPrefix.'-/' - endif - - call <SID>DEBUG('Uniq name for ' . l:bufNum . ' is ' . l:bufPathPrefix.l:bufName,5) - - call <SID>DEBUG('Leaving CreateBufferUniqName()',10) - - return l:bufPathPrefix.l:bufName -endfunction - -" }}} -" UpdateBufferNameDict {{{ -" -function! <SID>UpdateBufferNameDict(bufNum,deleted) - call <SID>DEBUG('Entering UpdateBufferNameDict('.a:bufNum.','.a:deleted.')',10) - - let l:bufNum = 0 + a:bufNum - - let l:bufName = expand( "#" . l:bufNum . ":p:t") - - " Identify buffers with no name - if empty(l:bufName) - let l:bufName = '--NO NAME--' - endif - - " Remove a deleted buffer from the buffer name dictionary - if a:deleted - if has_key(s:bufNameDict, l:bufName) - call <SID>DEBUG('Found entry for deleted buffer '.l:bufNum,5) - let l:bufnrs = s:bufNameDict[l:bufName] - call filter(l:bufnrs, 'v:val != '.l:bufNum) - let s:bufNameDict[l:bufName] = l:bufnrs - call <SID>DEBUG('Delete entry for deleted buffer '.l:bufNum,5) - endif - call <SID>DEBUG('Leaving UpdateBufferNameDict()',10) - return - endif - - if(!has_key(s:bufNameDict, l:bufName)) - call <SID>DEBUG('Adding empty list for ' . l:bufName,5) - let s:bufNameDict[l:bufName] = [] - endif - - if index(s:bufNameDict[l:bufName],l:bufNum) == -1 - call add(s:bufNameDict[l:bufName], l:bufNum) - endif - - call <SID>DEBUG('Leaving UpdateBufferNameDict()',10) -endfunction - -" }}} -" UpdateBufferPathDict {{{ -" -function! <SID>UpdateBufferPathDict(bufNum,deleted) - call <SID>DEBUG('Entering UpdateBufferPathDict('.a:bufNum.','.a:deleted.')',10) - - let l:bufNum = 0 + a:bufNum - let l:bufPath = expand( "#" . l:bufNum . ":p:h") - let l:bufName = expand( "#" . l:bufNum . ":p:t") - - " Identify buffers with no name - if empty(l:bufName) - let l:bufName = '--NO NAME--' - endif - - " Remove a deleted buffer from the buffer path dictionary - if a:deleted - if has_key(s:bufNameDict, l:bufName) - call <SID>DEBUG('Found entry for deleted buffer '.l:bufNum,5) - let l:bufnrs = s:bufNameDict[l:bufName] - call filter(s:bufPathDict, 'v:key != '.l:bufNum) - call <SID>DEBUG('Delete entry for deleted buffer '.l:bufNum,5) - endif - call <SID>DEBUG('Leaving UpdateBufferPathDict()',10) - return - endif - - let s:bufPathDict[l:bufNum] = split(l:bufPath,s:PathSeparator,0) - - call <SID>DEBUG('Leaving UpdateBufferPathDict()',10) -endfunction - -" }}} -" BuildBufferPathSignDict {{{ -" -" Compare the parts from the same index of all the buffer's paths, if there -" are differences, it means this index is a signature index for all the -" buffer's paths, mark it. At this point, the buffers are splited into several -" subsets. Then, doing the same check for each subset on the next index. We -" should finally get a set of signature locations which will uniquely identify -" the path. We could then construct a string with these locaitons using as -" less characters as possible. -" -function! <SID>BuildBufferPathSignDict(bufnrs, ...) - if a:0 == 0 - let index = 0 - else - let index = a:1 - endif - - call <SID>DEBUG('Entering BuildBufferPathSignDict('.string(a:bufnrs).','.index.')',10) - - let bufnrs = a:bufnrs - - " Temporary dictionary to see if there is any different part - let partDict = {} - - " Marker to see if there are more avaliable parts - let moreParts = 0 - - " Group the buffers by this part of the buffer's path - for bufnr in bufnrs - " Make sure each buffer has an entry in 's:bufPathSignDict' - " If index is zero, we force re-initialize the entry - if index == 0 || !has_key(s:bufPathSignDict, bufnr) - let s:bufPathSignDict[bufnr] = [] - endif - - " If some buffers' path does not have this index, we skip it - if len(s:bufPathDict[bufnr]) < index - continue - endif - - " Mark that there are still available paths - let moreParts = 1 - - " Get requested part of the path - let part = get(s:bufPathDict[bufnr],index) - - if empty(part) - let part = '--EMPTY--' - endif - - " Group the buffers using dictionary by this part - if(!has_key(partDict, part)) - let partDict[part] = [] - endif - call add(partDict[part],bufnr) - endfor - - " All the paths have been walked to the end - if !moreParts - call <SID>DEBUG('Leaving BuildBufferPathSignDict() '.index,10) - return - endif - - " We only need the buffer subsets from now on - let subsets = values(partDict) - - " If the buffers have been splited into more than one subset, or all the - " remaining buffers are still in the same subset but some buffers' path - " have hit the end, then mark this index as signature index. - if len(partDict) > 1 || ( len(partDict) == 1 && len(subsets[0]) < len(bufnrs) ) - " Store the signature index in the 's:bufPathSignDict' variable - for bufnr in bufnrs - call add(s:bufPathSignDict[bufnr],index) - endfor - " For all buffer subsets, increase the index by one, run again. - for subset in subsets - " If we only have one buffer left in the subset, it means there are - " already enough signature index sufficient to identify the buffer - if len(subset) <= 1 - continue - endif - call <SID>BuildBufferPathSignDict(subset, index + 1) - endfor - " If all the buffers are in the same subset, then this index is not a - " signature index, increase the index by one, run again. - else - call <SID>BuildBufferPathSignDict(bufnrs, index + 1) - endif - - call <SID>DEBUG('Leaving BuildBufferPathSignDict() '.index,10) -endfunction - -" }}} -" UpdateBufferPathSignDict {{{ -" -function! <SID>UpdateBufferPathSignDict(bufNum,deleted) - call <SID>DEBUG('Entering UpdateBufferPathSignDict('.a:bufNum.','.a:deleted.')',10) - - let l:bufNum = 0 + a:bufNum - - " Remove a deleted buffer from the buffer path signature dictionary - if a:deleted - if has_key(s:bufPathSignDict, l:bufNum) - call <SID>DEBUG('Found entry for deleted buffer '.l:bufNum,5) - call filter(s:bufPathSignDict, 'v:key != '.l:bufNum) - call <SID>DEBUG('Delete entry for deleted buffer '.l:bufNum,5) - endif - call <SID>DEBUG('Leaving UpdateBufferPathSignDict()',10) - return - endif - - call <SID>DEBUG('Leaving UpdateBufferPathSignDict()',10) -endfunction - -" }}} -" BuildBufferFinalDict {{{ -" -function! <SID>BuildBufferFinalDict(arg,deleted) - call <SID>DEBUG('Entering BuildBufferFinalDict('.string(a:arg).','.a:deleted.')',10) - - if type(a:arg) == 3 - let l:bufnrs = a:arg - else - let l:bufNum = 0 + a:arg - let l:bufName = expand( "#" . l:bufNum . ":p:t") - - " Identify buffers with no name - if empty(l:bufName) - let l:bufName = '--NO NAME--' - endif - - if(!has_key(s:bufNameDict, l:bufName)) - call <SID>DEBUG(l:bufName . ' is not in s:bufNameDict, aborting...',5) - call <SID>DEBUG('Leaving BuildBufferFinalDict()',10) - return - endif - - let l:bufnrs = s:bufNameDict[l:bufName] - - " Remove a deleted buffer from the buffer unique name dictionary - if a:deleted - call <SID>UpdateBufferPathSignDict(l:bufNum, a:deleted) - call <SID>UpdateBufferUniqNameDict(l:bufNum, a:deleted) - endif - endif - - call <SID>BuildBufferPathSignDict(l:bufnrs) - - call <SID>BuildBufferUniqNameDict(l:bufnrs) - - call <SID>DEBUG('Leaving BuildBufferFinalDict()',10) -endfunction - -" }}} -" BuildBufferUniqNameDict {{{ -" -function! <SID>BuildBufferUniqNameDict(bufnrs) - call <SID>DEBUG('Entering BuildBufferUniqNameDict('.string(a:bufnrs).')',10) - - let l:bufnrs = a:bufnrs - - for bufnr in l:bufnrs - call <SID>UpdateBufferUniqNameDict(bufnr,0) - endfor - - call <SID>DEBUG('Leaving BuildBufferUniqNameDict()',10) -endfunction - -" }}} -" UpdateBufferUniqNameDict {{{ -" -function! <SID>UpdateBufferUniqNameDict(bufNum,deleted) - call <SID>DEBUG('Entering UpdateBufferUniqNameDict('.a:bufNum.','.a:deleted.')',10) - - let l:bufNum = 0 + a:bufNum - - " Remove a deleted buffer from the buffer path dictionary - if a:deleted - if has_key(s:bufUniqNameDict, l:bufNum) - call <SID>DEBUG('Found entry for deleted buffer '.l:bufNum,5) - call filter(s:bufUniqNameDict, 'v:key != '.l:bufNum) - call <SID>DEBUG('Delete entry for deleted buffer '.l:bufNum,5) - endif - call <SID>DEBUG('Leaving UpdateBufferUniqNameDict()',10) - return - endif - - call <SID>DEBUG('Creating buffer name for ' . l:bufNum,5) - let l:bufUniqName = <SID>CreateBufferUniqName(l:bufNum) - - call <SID>DEBUG('Setting ' . l:bufNum . ' to ' . l:bufUniqName,5) - let s:bufUniqNameDict[l:bufNum] = l:bufUniqName - - call <SID>DEBUG('Leaving UpdateBufferUniqNameDict()',10) -endfunction - -" }}} -" BuildAllBufferDicts {{{ -" -function! <SID>BuildAllBufferDicts() - call <SID>DEBUG('Entering BuildAllBuffersDicts()',10) - - " Get the number of the last buffer. - let l:NBuffers = bufnr('$') - - " Loop through every buffer less than the total number of buffers. - let l:i = 0 - while(l:i <= l:NBuffers) - if <SID>IsBufferIgnored(l:i) - let l:i = l:i + 1 - continue - endif - - call <SID>UpdateBufferNameDict(l:i,0) - call <SID>UpdateBufferPathDict(l:i,0) - call <SID>UpdateBufferStateDict(l:i,0) - - let l:i = l:i + 1 - endwhile - - for bufnrs in values(s:bufNameDict) - call <SID>BuildBufferFinalDict(bufnrs,0) - endfor - - call <SID>DEBUG('Leaving BuildAllBuffersDicts()',10) -endfunction - -" }}} -" UpdateAllBufferDicts {{{ -" -function! <SID>UpdateAllBufferDicts(bufNum,deleted) - call <SID>DEBUG('Entering UpdateAllBuffersDicts('.a:bufNum.','.a:deleted.')',10) - - call <SID>UpdateBufferNameDict(a:bufNum,a:deleted) - call <SID>UpdateBufferPathDict(a:bufNum,a:deleted) - call <SID>UpdateBufferStateDict(a:bufNum,a:deleted) - - call <SID>BuildBufferFinalDict(a:bufNum,a:deleted) - - call <SID>DEBUG('Leaving UpdateAllBuffersDicts()',10) -endfunction - -" }}} -" UpdateBufferStateDict {{{ -function! <SID>UpdateBufferStateDict(bufNum,deleted) - call <SID>DEBUG('Entering UpdateBufferStateDict('.a:bufNum.','.a:deleted.')',10) - - let l:bufNum = 0 + a:bufNum - - if a:deleted && has_key(s:bufStateDict, l:bufNum) - call filter(s:bufStateDict, 'v:key != '.l:bufNum) - call <SID>DEBUG('Leaving UpdateBufferStateDict()',10) - return - endif - - if has_key(s:bufStateDict, l:bufNum) - if s:bufStateDict[l:bufNum] != getbufvar(a:bufNum, '&modified') - let s:bufStateDict[l:bufNum] = getbufvar(a:bufNum, '&modified') - call <SID>AutoUpdate(bufnr(a:bufNum),0) - endif - else - let s:bufStateDict[l:bufNum] = getbufvar(a:bufNum, '&modified') - endif - - call <SID>DEBUG('Leaving UpdateBufferStateDict()',10) -endfunction - -" }}} -" NameCmp - compares tabs based on filename {{{ -" -function! <SID>NameCmp(tab1, tab2) - let l:name1 = matchstr(a:tab1, ":.*") - let l:name2 = matchstr(a:tab2, ":.*") - if l:name1 < l:name2 - return -1 - elseif l:name1 > l:name2 - return 1 - else - return 0 - endif -endfunction - -" }}} -" MRUCmp - compares tabs based on MRU order {{{ -" -function! <SID>MRUCmp(tab1, tab2) - let l:buf1 = str2nr(matchstr(a:tab1, '[0-9]\+')) - let l:buf2 = str2nr(matchstr(a:tab2, '[0-9]\+')) - return index(s:MRUList, l:buf1) - index(s:MRUList, l:buf2) -endfunction - -" }}} -" HasEligibleBuffers - Are there enough MBE eligible buffers to open the MBE window? {{{ -" -" Returns 1 if there are any buffers that can be displayed in a -" mini buffer explorer. Otherwise returns 0. -" -function! <SID>HasEligibleBuffers() - call <SID>DEBUG('Entering HasEligibleBuffers()',10) - - let l:found = len(s:BufList) - let l:needed = g:miniBufExplBuffersNeeded - - call <SID>DEBUG('Eligible buffers are '.string(s:BufList),6) - call <SID>DEBUG('Found '.l:found.' eligible buffers of '.l:needed.' needed',6) - - call <SID>DEBUG('Leaving HasEligibleBuffers()',10) - return (l:found >= l:needed) -endfunction - -" }}} -" Auto Update - Function called by auto commands for auto updating the MBE {{{ -" -" IF auto update is turned on AND -" we are in a real buffer AND -" we have enough eligible buffers THEN -" Update our explorer and get back to the current window -" -" If we get a buffer number for a buffer that -" is being deleted, we need to make sure and -" remove the buffer from the list of eligible -" buffers in case we are down to one eligible -" buffer, in which case we will want to close -" the MBE window. -" -function! <SID>AutoUpdate(curBufNum,force) - call <SID>DEBUG('Entering AutoUpdate('.a:curBufNum.')',10) - - call <SID>DEBUG('Current state: '.winnr().' : '.bufnr('%').' : '.bufname('%'),10) - - if (s:miniBufExplInAutoUpdate == 1) - call <SID>DEBUG('AutoUpdate recursion stopped',9) - call <SID>DEBUG('Leaving AutoUpdate()',10) - return - else - let s:miniBufExplInAutoUpdate = 1 - endif - - " Skip windows holding ignored buffer - if !a:force && <SID>IsBufferIgnored(a:curBufNum) == 1 - call <SID>DEBUG('Leaving AutoUpdate()',10) - - let s:miniBufExplInAutoUpdate = 0 - return - endif - - if s:MRUEnable == 1 - call <SID>ListPush(s:MRUList,a:curBufNum) - endif - - " Only allow updates when the AutoUpdate flag is set - " this allows us to stop updates on startup. - if exists('t:miniBufExplAutoUpdate') && t:miniBufExplAutoUpdate == 1 - " if we don't have a window then create one - let l:winnr = <SID>FindWindow('-MiniBufExplorer-', 1) - - if (exists('t:skipEligibleBuffersCheck') && t:skipEligibleBuffersCheck == 1) || <SID>HasEligibleBuffers() == 1 - if (l:winnr == -1) - if g:miniBufExplAutoStart == 1 - call <SID>DEBUG('MiniBufExplorer was not running, starting...', 9) - call <SID>StartExplorer(a:curBufNum) - else - call <SID>DEBUG('MiniBufExplorer was not running, aborting...', 9) - call <SID>DEBUG('Leaving AutoUpdate()',10) - let s:miniBufExplInAutoUpdate = 0 - return - endif - else - call <SID>DEBUG('Updating MiniBufExplorer...', 9) - call <SID>UpdateExplorer(a:curBufNum) - endif - else - if (l:winnr == -1) - call <SID>DEBUG('MiniBufExplorer was not running, aborting...', 9) - call <SID>DEBUG('Leaving AutoUpdate()',10) - let s:miniBufExplInAutoUpdate = 0 - return - else - call <SID>DEBUG('Failed in eligible check', 9) - call <SID>StopExplorer(0) - " we do not want to turn auto-updating off - let t:miniBufExplAutoUpdate = 1 - endif - endif - else - call <SID>DEBUG('AutoUpdates are turned off, terminating',9) - endif - - call <SID>DEBUG('Leaving AutoUpdate()',10) - - let s:miniBufExplInAutoUpdate = 0 -endfunction - -" }}} -" QuitIfLastOpen {{{ -" -function! <SID>QuitIfLastOpen() abort - " Quit MBE if no more mormal window left - if (bufname('%') == '-MiniBufExplorer-') && (<SID>NextNormalWindow() == -1) - call <SID>DEBUG('MBE is the last open window, quit it', 9) - if tabpagenr('$') == 1 - " Before quitting Vim, delete the MBE buffer so that - " the '0 mark is correctly set to the previous buffer. - " Also disable autocmd on this command to avoid unnecessary - " autocmd nesting. - if winnr('$') == 1 - noautocmd bdelete - endif - quit - else - close - endif - endif -endfunction - -" }}} -" GetActiveBuffer {{{ -" -function! <SID>GetActiveBuffer() - call <SID>DEBUG('Entering GetActiveBuffer()',10) - let l:bufNum = substitute(s:miniBufExplBufList,'\[\([0-9]*\):[^\]]*\][^\!]*!', '\1', '') + 0 - call <SID>DEBUG('Currently active buffer is '.l:bufNum,10) - call <SID>DEBUG('Leaving GetActiveBuffer()',10) - return l:bufNum -endfunction - -" }}} -" GetSelectedBuffer - From the MBE window, return the bufnum for buf under cursor {{{ -" -" If we are in our explorer window then return the buffer number -" for the buffer under the cursor. -" -function! <SID>GetSelectedBuffer() - call <SID>DEBUG('Entering GetSelectedBuffer()',10) - - " Make sure we are in our window - if bufname('%') != '-MiniBufExplorer-' - call <SID>DEBUG('GetSelectedBuffer called in invalid window',1) - call <SID>DEBUG('Leaving GetSelectedBuffer()',10) - return -1 - endif - - let l:save_rep = &report - let l:save_sc = &showcmd - let &report = 10000 - set noshowcmd - - let l:save_reg = @" - let @" = "" - normal ""yi[ - if @" != "" - if !g:miniBufExplShowBufNumbers - " This is a bit ugly, but it works, unless we come up with a - " better way to get the key for a dictionary by its value. - let l:bufUniqNameDictKeys = keys(s:bufUniqNameDict) - let l:bufUniqNameDictValues = values(s:bufUniqNameDict) - let l:retv = l:bufUniqNameDictKeys[match(l:bufUniqNameDictValues,substitute(@",'[0-9]*:\(.*\)', '\1', ''))] - else - let l:retv = substitute(@",'\([0-9]*\):.*', '\1', '') + 0 - endif - let @" = l:save_reg - call <SID>DEBUG('Leaving GetSelectedBuffer()',10) - return l:retv - else - let @" = l:save_reg - call <SID>DEBUG('Leaving GetSelectedBuffer()',10) - return -1 - endif - - let &report = l:save_rep - let &showcmd = l:save_sc -endfunction - -" }}} -" MBESelectBuffer - From the MBE window, open buffer under the cursor {{{ -" -" If we are in our explorer, then we attempt to open the buffer under the -" cursor in the previous window. -" -" Split indicates whether to open with split, 0 no split, 1 split horizontally -" -function! <SID>MBESelectBuffer(split) - call <SID>DEBUG('Entering MBESelectBuffer()',10) - - " Make sure we are in our window - if bufname('%') != '-MiniBufExplorer-' - call <SID>DEBUG('MBESelectBuffer called in invalid window',1) - call <SID>DEBUG('Leaving MBESelectBuffer()',10) - return - endif - - let l:bufnr = <SID>GetSelectedBuffer() - - if(l:bufnr != -1) " If the buffer exists. - let l:saveAutoUpdate = t:miniBufExplAutoUpdate - let t:miniBufExplAutoUpdate = 0 - - call s:SwitchWindow('p',1) - - if <SID>IsBufferIgnored(bufnr('%')) - let l:winNum = <SID>NextNormalWindow() - if l:winNum != -1 - call s:SwitchWindow('w',1,l:winNum) - else - call <SID>DEBUG('No elegible window avaliable',1) - call <SID>DEBUG('Leaving MBESelectBuffer()',10) - return - endif - endif - - if a:split == 0 - exec 'b! '.l:bufnr - elseif a:split == 1 - exec 'sb! '.l:bufnr - elseif a:split == 2 - exec 'vertical sb! '.l:bufnr - endif - - let t:miniBufExplAutoUpdate = l:saveAutoUpdate - - call <SID>AutoUpdate(bufnr("%"),0) - endif - - if g:miniBufExplCloseOnSelect == 1 - call <SID>StopExplorer(0) - endif - - call <SID>DEBUG('Leaving MBESelectBuffer()',10) -endfunction - -" }}} -" MBEDeleteBuffer - From the MBE window, delete selected buffer from list {{{ -" -" After making sure that we are in our explorer, This will delete the buffer -" under the cursor. If the buffer under the cursor is being displayed in a -" window, this routine will attempt to get different buffers into the -" windows that will be affected so that windows don't get removed. -" -function! <SID>MBEDeleteBuffer() - call <SID>DEBUG('Entering MBEDeleteBuffer()',10) - - " Make sure we are in our window - if bufname('%') != '-MiniBufExplorer-' - call <SID>DEBUG('MBEDeleteBuffer called in invalid window',1) - call <SID>DEBUG('Leaving MBEDeleteBuffer()',10) - return - endif - - let l:selBuf = <SID>GetSelectedBuffer() - - if l:selBuf != -1 - call <SID>DeleteBuffer(0,0,l:selBuf) - endif - - call <SID>DEBUG('Leaving MBEDeleteBuffer()',10) -endfunction - -" }}} -" NextNormalWindow {{{ -" -function! <SID>NextNormalWindow() - call <SID>DEBUG('Entering NextNormalWindow()',10) - - let l:winSum = winnr('$') - call <SID>DEBUG('Total number of open windows are '.l:winSum,9) - - let l:i = 1 - while(l:i <= l:winSum) - call <SID>DEBUG('window: '.l:i.', buffer: ('.winbufnr(l:i).':'.bufname(winbufnr(l:i)).')',9) - if !<SID>IsBufferIgnored(winbufnr(l:i)) && l:i != winnr() - call <SID>DEBUG('Found window '.l:i,8) - call <SID>DEBUG('Leaving NextNormalWindow()',10) - return l:i - endif - let l:i = l:i + 1 - endwhile - - call <SID>DEBUG('Found no window',8) - call <SID>DEBUG('Leaving NextNormalWindow()',10) - return -1 -endfunction - -" }}} -" ListAdd {{{ -" -function! <SID>ListAdd(list,val) - call <SID>DEBUG('Entering ListAdd('.string(a:list).','.a:val.')',10) - call add(a:list, a:val) - call <SID>DEBUG('Leaving ListAdd()',10) -endfunction - -" }}} -" ListPop {{{ -" -function! <SID>ListPop(list,val) - call <SID>DEBUG('Entering ListPop('.string(a:list).','.a:val.')',10) - call filter(a:list, 'v:val != '.a:val) - call <SID>DEBUG('Leaving ListPop()',10) -endfunction - -" }}} -" ListPush {{{ -" -function! <SID>ListPush(list,val) - call <SID>DEBUG('Entering ListPush('.string(a:list).','.a:val.')',10) - " Remove the buffer number from the list if it already exists. - call <SID>ListPop(a:list,a:val) - - " Add the buffer number to the head of the list. - call insert(a:list,a:val) - call <SID>DEBUG('Leaving ListPush()',10) -endfunction - -" }}} -" DEBUG - Display debug output when debugging is turned on {{{ -" -" Thanks to Charles E. Campbell, Jr. PhD <cec@NgrOyphSon.gPsfAc.nMasa.gov> -" for Decho.vim which was the inspiration for this enhanced debugging -" capability. -" -let g:miniBufExplFuncCallDepth = 0 -function! <SID>DEBUG(msg, level) - if g:miniBufExplDebugLevel >= a:level - - if a:level == 10 && a:msg =~ '^Entering' - let g:miniBufExplFuncCallDepth += 1 - endif - - if a:msg =~ '^Entering' - let l:msg = repeat('│ ',g:miniBufExplFuncCallDepth - 1).'┌ '.a:msg - elseif a:msg =~ '^Leaving' - let l:msg = repeat('│ ',g:miniBufExplFuncCallDepth - 1).'└ '.a:msg - else - let l:msg = repeat('│ ',g:miniBufExplFuncCallDepth).a:msg - endif - - " Prevent a report of our actions from showing up. - let l:save_rep = &report - let l:save_sc = &showcmd - let &report = 10000 - set noshowcmd - - " Debug output to a buffer - if g:miniBufExplDebugMode == 0 - if bufname('%') == 'MiniBufExplorer.DBG' - return - endif - - " Get into the debug window or create it if needed - let l:winNum = <SID>FindCreateWindow('MiniBufExplorer.DBG', 0, 1, 1, 1, 0) - - if l:winNum == -1 - let g:miniBufExplDebugMode == 3 - call <SID>DEBUG('Failed to get the MBE debugging window, reset debugging mode to 3.',1) - call <SID>DEBUG('Forwarding message...',1) - call <SID>DEBUG(a:msg,1) - call <SID>DEBUG('Forwarding message end.',1) - return - endif - - " Save the current window number so we can come back here - let l:currWin = winnr() - call s:SwitchWindow('p',1) - - " Change to debug window - call s:SwitchWindow('w',1,l:winNum) - - " Make sure we really got to our window, if not we - " will display a confirm dialog and turn debugging - " off so that we won't break things even more. - if bufname('%') != 'MiniBufExplorer.DBG' - call confirm('Error in window debugging code. Dissabling MiniBufExplorer debugging.', 'OK') - let g:miniBufExplDebugLevel = 0 - return - endif - - set modified - - " Write Message to DBG buffer - let res=append("$",s:debugIndex.':'.a:level.':'.a:msg) - - set nomodified - - norm G - - " Return to original window - call s:SwitchWindow('p',1) - call s:SwitchWindow('w',1,l:currWin) - " Debug output using VIM's echo facility - elseif g:miniBufExplDebugMode == 1 - echo s:debugIndex.':'.a:level.':'.a:msg - " Debug output to a file -- VERY SLOW!!! - " should be OK on UNIX and Win32 (not the 95/98 variants) - elseif g:miniBufExplDebugMode == 2 - if has('system') || has('fork') - if has('win32') && !has('win95') - let l:result = system("cmd /c 'echo ".s:debugIndex.':'.a:level.':'.a:msg." >> MiniBufExplorer.DBG'") - endif - if has('unix') - let l:result = system("echo '".s:debugIndex.':'.a:level.':'.a:msg." >> MiniBufExplorer.DBG'") - endif - else - call confirm('Error in file writing version of the debugging code, vim not compiled with system or fork. Dissabling MiniBufExplorer debugging.', 'OK') - let g:miniBufExplDebugLevel = 0 - endif - elseif g:miniBufExplDebugMode == 3 - let g:miniBufExplDebugOutput = g:miniBufExplDebugOutput."\n".s:debugIndex."\t".':'.a:level."\t".':'.l:msg - endif - - let s:debugIndex = s:debugIndex + 1 - - if a:level == 10 && a:msg =~ '^Leaving' - let g:miniBufExplFuncCallDepth -= 1 - endif - - let &report = l:save_rep - let &showcmd = l:save_sc - endif -endfunc - -" }}} -" SwitchWindow {{{ -" -function! s:SwitchWindow(action, ...) - call <SID>DEBUG('Entering SwitchWindow('.a:action.','.string(a:000).')',10) - - if a:action !~ '[hjkltbwWpP]' - call <SID>DEBUG('invalid window action : '.a:action,10) - call <SID>DEBUG('Leaving SwitchWindow()',10) - return - endif - - if exists('a:1') && a:1 == 1 - let l:aucmd = 'noautocmd ' - else - let l:aucmd = '' - endif - - if exists('a:2') - let l:winnr = a:2 - else - let l:winnr = '' - endif - - call <SID>DEBUG('previous window is: '.winnr(),10) - let l:wincmd = l:aucmd.l:winnr.'wincmd '.a:action - call <SID>DEBUG('window switching command is: '.l:wincmd,10) - exec l:wincmd - call <SID>DEBUG('current window is: '.winnr(),10) - - call <SID>DEBUG('Leaving SwitchWindow()',10) -endfunction - -" }}} - -" vim:ft=vim:fdm=marker:ff=unix:nowrap:tabstop=2:shiftwidth=2:softtabstop=2:smarttab:shiftround:expandtab |