Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Add placeholders for new plugins.

  • Loading branch information...
commit bdff7bee709d3d78b4e11b2325f933004e68d9a1 1 parent f22b338
@utopiazh authored
1  vimrc/.vim/bundle/AutoComplPop
@@ -0,0 +1 @@
+Subproject commit 0b075cf5e6ef05584ef6377e116e8d0fe1f8f788
1  vimrc/.vim/bundle/Tagbar
@@ -0,0 +1 @@
+Subproject commit 997a2a8173f0ed2e0176bdc17ad2551dad457509
1  vimrc/.vim/bundle/supertab
@@ -0,0 +1 @@
+Subproject commit a2268b61edc4ba38d152ecfa7c853a7f1bc71370
View
568 vimrc/.vim/doc/javacomplete.txt
@@ -0,0 +1,568 @@
+*javacomplete.txt* For Vim version 7.0 and above. Last change: 2011-01-30
+
+ JAVACOMPLETE REFERENCE MANUAL by cheng fang~
+ fangread@yahoo.com.cn~
+
+
+1. Overview |javacomplete-overview|
+ 1.1 Features |javacomplete-features|
+ 1.2 Requirements |javacomplete-requirements|
+ 1.3 Download |javacomplete-download|
+ 1.4 Install |javacomplete-install|
+2. Usage |javacomplete-usage|
+ 2.1 Input contexts |javacomplete-contexts|
+ 2.2 Kind letter |javacomplete-kindletter|
+ 2.3 Options |javacomplete-options|
+ 2.4 Commands |javacomplete-commands|
+3. Java parser in Vim |javacomplete-parser|
+ 3.1 Abstract Syntax Tree |javacomplete-ast|
+ 3.2 Global Constants |javacomplete-constants|
+ 3.3 Parsing Functions |javacomplete-functions|
+ 3.4 Sample |javacomplete-sample|
+4. FAQ |javacomplete-faq|
+5. Limitations |javacomplete-limitations|
+6. History
+ 6.1 javacomplete |javacomplete-history|
+ 6.2 Parser |java-parser-history|
+ 6.2 Reflection.java |javacomplete-reflection|
+7. Todo |javacomplete-todo|
+8. Thanks |javacomplete-thanks|
+
+==============================================================================
+1. Overview *javacomplete-overview*
+
+This is javacomplete, an omni-completion script of JAVA language for vim 7 and
+above. It includes javacomplete.vim, java_parser.vim, Reflection.java, and
+javacomplete.txt.
+
+1.1 Features *javacomplete-features*
+
+- List members of a class, including (static) fields, (static) methods and ctors.
+- List classes or subpackages of a package.
+- Provide parameters information of a method, list all overload methods.
+- Complete an incomplete word.
+- Provide a complete JAVA parser written in Vim script language.
+- Use the JVM to obtain most information.
+- Use the embedded parser to obtain the class information from source files.
+- Tags generated by ctags can also be used.
+- JSP is supported, Builtin objects such as request, session can be recognized.
+ The classes and jar files in the WEB-INF will be appended automatically to the classpath.
+
+1.2 Requirements *javacomplete-requirements*
+
+It works on all the platforms wherever
+- Vim version 7.0 and above,
+- JDK version 1.1 and above,
+exists.
+
+1.3 Download *javacomplete-download*
+
+You can download the lastest version from this url:
+ http://www.vim.org/scripts/script.php?script_id=1785
+
+1.4 Install *javacomplete-install*
+
+1. Unzip javacomplete.zip to a directory of 'runtimepath', e.g.
+$HOME/.vim (unix/linux), $VIM/vimfiles (windows). >
+ > unzip javacomplete.zip -d ~/.vim
+
+< To update Vim help tags, run vim and run command: >
+ :helptags $HOME/.vim/doc
+< or >
+ :helptags $VIM/vimfiles/doc
+
+NOTE: javacomplete.vim, java_parser.vim and Reflection.java should be in one
+autoload directory of 'runtimepath'.
+javacomplete.txt should be in one doc directory of 'runtimepath'.
+
+2. Set 'omnifunc' option. e.g. >
+ :setlocal omnifunc=javacomplete#Complete
+< Or, use autocmd: >
+ :" Only do this part when compiled with support for autocommands.
+ :if has("autocmd")
+ : autocmd Filetype java setlocal omnifunc=javacomplete#Complete
+ :endif
+You can add this command to your .vimrc or _vimrc.
+
+3. Set 'completefunc' option to show parameters information IF YOU LIKE. e.g. >
+ :setlocal completefunc=javacomplete#CompleteParamsInfo
+You can map as follows for better display: >
+ :inoremap <buffer> <C-X><C-U> <C-X><C-U><C-P>
+ :inoremap <buffer> <C-S-Space> <C-X><C-U><C-P>
+
+4. Reflection.java will be automatcally compiled and placed to $HOME when you
+use first time. Assure that Reflection.java is in the same directory with
+javacomplete.vim to be searched in autoload subdirectory of &rtp.
+If no Reflection.class is generated, check that you have the write permission
+in $HOME directory.
+If a previous Reflection.java is not compatible with the new version
+javacomplete.vim, please compile Reflection.java manually.
+
+==============================================================================
+2. Usage *javacomplete-usage*
+
+You can use it like other omni-completion script. Many samples of input context
+are gived in the following section.
+
+Make sure a JVM launcher (default 'java') can be searched in the PATH enviroment
+variable, otherwise Use javacomplete#SetJVMLauncher() to specify one. See option
+`javacomplete-launcher`.
+
+See FAQ in time if some problem occurs. When meeting other problems not
+described in FAQ, you can contact with the auther by the following e-mail:
+fangread@yahoo.com.cn
+
+2.1 Input contexts |javacomplete-contexts|
+It recognize nearly all kinds of Primary Expressions (see langspec-3.0)
+except for "Primary.new Indentifier". Casting conversion is also supported.
+
+Samples of input contexts are as following: (Note that '|' indicates cursor)
+ (1). after '.', list members of a class or a package
+ - package.| subpackages and classes of a package
+ - Type.| static members of the 'Type' class and "class"
+ - var.| or field.| members of a variable or a field
+ - method().| members of result of method()
+ - this.| members of the current class
+ - ClassName.this.| members of the qualified class
+ - super.| members of the super class
+ - array.| members of an array object
+ - array[i].| array access, return members of the element of array
+ - "String".| String literal, return members of java.lang.String
+ - int.| or void.| primitive type or pseudo-type, return "class"
+ - int[].| array type, return members of a array type and "class"
+ - java.lang.String[].|
+ - new int[].| members of the new array instance
+ - new java.lang.String[i=1][].|
+ - new Type().| members of the new class instance
+ - Type.class.| class literal, return members of java.lang.Class
+ - void.class.| or int.class.|
+ - ((Type)var).| cast var as Type, return members of Type.
+ - (var.method()).| same with "var.|"
+ - (new Class()).| same with "new Class().|"
+
+ (2). after '(', list matching methods with parameters information.
+ - method(|) methods matched
+ - var.method(|) methods matched
+ - new ClassName(|) constructors matched
+ - this(|) constructors of current class matched
+ - super(|) constructors of super class matched
+ Any place between '(' and ')' will be supported soon.
+ Help information of javadoc is not supported yet.
+
+ (3). after an incomplete word, list all the matched beginning with it.
+ - var.ab| subset of members of var beginning with `ab`
+ - ab| list of all maybes
+
+ (4). import statement
+ - " import java.util.|"
+ - " import java.ut|"
+ - " import ja|"
+ - " import java.lang.Character.|" e.g. "Subset"
+ - " import static java.lang.Math.|" e.g. "PI, abs"
+
+ (5). package declaration
+ - " package com.|"
+
+ The above are in simple expression.
+ (6). after compound expression:
+ - PrimaryExpr.var.|
+ - PrimaryExpr.method().|
+ - PrimaryExpr.method(|)
+ - PrimaryExpr.var.ab|
+ e.g.
+ - "java.lang . System.in .|"
+ - "java.lang.System.getenv().|"
+ - "int.class.toString().|"
+ - "list.toArray().|"
+ - "new ZipFile(path).|"
+ - "new ZipFile(path).entries().|"
+
+ (7). Nested expression:
+ - "System.out.println( str.| )"
+ - "System.out.println(str.charAt(| )"
+ - "for (int i = 0; i < str.|; i++)"
+ - "for ( Object o : a.getCollect| )"
+
+
+2.2 Kind letter *javacomplete-kindletter*
+
+A single letter indicates the kind of compeltion item. These kinds are:
+ + ctor
+ v local variable or parameter
+ f nonstatic field
+ F static field
+ m nonstatic method
+ M static method
+ P package
+ C class type
+ I interface type
+
+2.3 Options *javacomplete-options*
+
+1. Set java compiler (default 'javac') using the following function:
+ javacomplete#SetCompiler('javac') *javacomplete-compiler*
+
+2. Set java launcher (default 'java') using the following function:
+ javacomplete#SetJVMLauncher('java') *javacomplete-launcher*
+
+3. Set classpath using the following function: >
+ javacomplete#AddClassPath('jarfile_or_classes_path')
+ javacomplete#DelClassPath('jarfile_or_classes_path')
+ javacomplete#SetClassPath('semicolon_separated_string')
+<
+ Another two variables will be used if they are existing:
+ |g:java_classpath| global classpath
+ |b:classpath| associated with current buffer
+ In one sense, s:classpath is like a classpath option for a PROJECT.
+ If some of them are body set, the priority of these variables is:
+ first, b:classpath first,
+ second, s:classpath
+ third, g:java_classpath
+ last, $CLASSPATH
+
+4. Set sourcepath using the following function: >
+ javacomplete#AddSourcePath('sources_file_path')
+ javacomplete#DelSourcePath('sources_file_path')
+ javacomplete#SetSourcePath('sources_file_path')
+
+5. Set option for using JDK1.1 if you meet the problem described in FAQ 3: >
+ javacomplete#UseJDK11()
+
+6. Set methods to search declaration: >
+ " 1 - by builtin searchdecl(), quickest but inaccurate in many cases.
+ " 2 - by special Searchdecl(), work NOT WELL YET.
+ " 4 - by java_parser, slowest but accurate in most cases. Not for JSP.
+ javacomplete#SetSearchdeclMethod()
+
+2.4 Commands *javacomplete-commands*
+
+==============================================================================
+3. Java parser in Vim *javacomplete-parser*
+
+3.1 Abstract Syntax Tree *javacomplete-ast*
+
+3.2 Global Constants *javacomplete-constants*
+
+3.3 Parsing Functions *javacomplete-functions*
+
+3.4 Sample Codes *javacomplete-sample*
+This parser can be a good candidate for anyone who needs a java parser to get
+a abstract syntax tree for many use. The following are sample codes: >
+
+ " NOTE: The script contains a single parser instance. You cannot create
+ " another parser! The only way to parse another JAVA code is reset the
+ " parser by calling java_parser#InitParser().
+
+ " 1. Initialize the parser
+ " for a code snippet,
+ call java_parser#InitParser(['for (int i = 0; i < N; i++) {', '', '}'])
+ " or for the current buffer,
+ call java_parser#InitParser(getline('^', '$'))
+ " or for a whole source file
+ call java_parser#InitParser(readfile('java/util/Arrays.java'))
+
+ " 2. Get the result tree
+ call java_parser#compilationUnit()
+ " or others according to the input code
+ call java_parser#expression()
+ call java_parser#block()
+ call java_parser#statement()
+
+ " 3. Use the tree as you like
+
+ " 4. The default scan strategy is scanning only sklenton.
+ " You can change it by set the option 'scanStrategy'.
+ " The values for 'scanStrategy' option are:
+ " 0 - only class members when parse full file;
+ " 1 - keep statement as a whole string;
+ " 2 - all
+ call java_parser#InitParser(getline('^', '$'), {'scanStrategy': 2})
+
+ " 5. I recommend that keeping scanStrategy as default.
+ " If you want to parse a code snippet such as a method body of the whole
+ " file, you can call java_parser#GotoPosition() to go to what you are going
+ " to start parsing.
+ " Then, call java_parser#block(), java_parser#statement() or
+ " java_parser#expression() to parse the smaller snippet.
+ " NOTE: This way will keep the result tree reserved.
+ call java_parser#GotoPosition(def.body.pos)
+ call java_parser#block()
+
+==============================================================================
+4. FAQ *javacomplete-faq*
+
+(1). When you meets the following problem: >
+ omni-completion error: Exception in thread "main"
+ java.lang.NoClassDefFoundError: Reflection
+It is Reflection.class not found in autoload directory or $HOME that cause
+this problem.
+There are several reasons causing this problem:
+ o No compiler. Use javacomplete#SetCompiler() to specify one.
+ o No write permission for $HOME directory.
+
+(2). Reflection.java should be searched in autoload subdirectory of &rtp.
+Reflection.class should be searched in $HOME or autoload subdirectory of &rtp.
+If not found, javacomplete try to compile it and place the generated class
+file in $HOME.
+
+(3). A error when using JDK1.1:
+ Unable to initialize threads: cannot find class java/lang/Thread
+When I tested JDK1.1.8 on Windows XP, I found -classpath options cause it.
+There are two way to avoid it is:
+ o Add the runtime classes to classpath, like
+ "${JDK118}\classes;${JDK118}\lib\classes.zip;${JDK118}\lib\classes.jar;"
+ o Add Reflection.class and others to the CLASSPATH enviroment variable.
+ And call javacomplete#UseJDK11() to set option.
+
+==============================================================================
+5. Limitations *javacomplete-limitations*
+
+The embedded parser works a bit slower than expected.
+
+==============================================================================
+6. History
+
+6.1 javacomplete *javacomplete-history*
+
+v0.77.1.2
+ 2011-01-30 Fixed to adapt globpath() (vim < 7.2). Patched by Sam Lidder.
+
+v0.77.1.1
+ 2010-11-12 Fixed to ignore the 'suffixes' and 'wildignore' options which
+ make Reflection.class can not be found.
+
+v0.77.1
+ 2007-09-19 Supported showing method parameters information in any place
+ between parenthesises.
+
+v0.77
+ 2007-09-19 bug fix
+ 2007-09-18 Added GetCurrentFileKey() avoid empty key of s:files for current buffer.
+ 2007-09-16 Use a new strategy for searching inherited members.
+ 2007-09-11
+ - Supported new contexts "jav|", "var|", just after an incomplete word.
+ - Supported new context "abs(|)", a imported static method.
+ 2007-09-10
+ - Improved FoundClassDeclaration()
+ - Fixed bug calling cursor(0, 0)
+ 2007-09-09 Rewrote DoGetClassInfo(), GetFQN() and IsFQN()¡£
+ 2007-09-08 Fixed a bug when merging superclass's members
+ 2007-09-05 -- 07
+ - Improved s:MergeLines() and s:ExtractCleanExpr().
+ - Rewrote CompleteAfterDot(). Added ParseExpr(). Removed s:GetNextSubexprType()
+ - Supported accessible static imported members.
+ - Supported accessible inherited members.
+
+ 2007-09-04 Used b:changedtick and getftime() to check buffer (or other file) for changing.
+ 2007-09-01 Supported not-file-name toplevel or static member class in source files.
+
+v0.76.8
+ 2007-08-30
+ - Created the s:TreeVisitor to search type or symbol names.
+ - Supported local and anonymous class.
+
+ 2007-08-29
+ - Supported appending automatically classpath under WEB-INF for jsp files.
+
+v0.76.7
+ 2007-08-28
+ - Fixed case of "new java.util.zip.ZipFile().|"
+ - Improved process of type arguments and method parameters. JAVA5+
+ - Reorganize codes in javacomplete#Complete()
+ - Added CONTEXT_NEED_TYPE, removed CONTEXT_INCOMPLETE_WORD
+
+ 2007-08-24 Add Context types for type declaration: CONTEXT_NEED_TYPE
+
+v0.76.6
+ 2007-08-23 Improved GetStatement() and related. Bug fixed.
+
+v0.76.5
+ 2007-08-21
+ - Fixed bug: "foo().|", "getFoo().foo().|",
+ "for (Enumeration entries = ; entries.|; )".
+ - Supported input contexts: "((Object)o).|", "((Object)o).getClass().|",
+ "new ZipFile(path).|", "(new String().)|".
+
+v0.76.4
+ 2007-08-17
+ - Improved input contexts: "int.class.toString().|", "list.toArray().|".
+ - Fixed recognizing "this(|)", "method1(|)"
+ - Added the 'kind' letter to distinguish between classes and packages.
+ 2007-08-14
+ - Support accessible nested classes.
+ - Support import static members and import accessible nested classes.
+ 2007-08-11
+ - Fixed a bug when Reflection.java is in the path which contains space.
+ - Improved process of this and super in JSP.
+ - Fixed an severe bug parsing current jsp file.
+
+v0.76.3
+ 2007-08-10
+ - Add an option 'searchdecl' set by javacomplete#SetSearchdeclMethod().
+ - Make an improvement for jsp file.
+ - Clear cache when set options affecting classpath.
+ - Improved DoGetPackageList() and s:GenerateImports().
+ - Replace codes searching list of string with index().
+
+v0.76.2
+ 2007-08-08
+ - Fix failing to list members of nested class.
+ - Combine members of local packages and loadable packages.
+ - Add quick recognition of package or import.
+ 2007-08-06 Add inherited fields and methods to local class.
+
+v0.76.1
+ 2007-08-04
+ - Fix using a: in javacomplete#SetClassPath()
+ - Fix a bug in javacomplete#GetClassPath()
+
+v0.76 2007-08-04
+ 2007-08-04
+ - Fix a infinite loop bug in s:GetMatchedIndexEx()
+ - Fix that array type not recognised in compound expression.
+ - Add a option for JDK1.1. See FAQ 3.
+ 2007-08-03
+ - Improve for 'this' or 'super'.
+ - Support searching toplevel class in sourcepath.
+ - Clean
+ 2007-08-02
+ - Improve the process of checking a class in one of packages.
+ 2007-08-01
+ - Add Searchdecl() using java_parser.vim to provide quick information.
+ - Supports input context: "StringLiteral".|, "int.|", "void.|"
+ 2007-07-28
+ - Automatcally compile Reflection.java and place it to $HOME.
+ - Add option 'javacompiler', default 'javac'
+ - Add option 'java', default 'java'
+
+v0.75 2007-02-13
+ - Add java_parser.vim.
+ - Add b:sourcepath option.
+ - Improve recognition of classes defined in current buffer or in source path.
+ - Support generating class information from tags instead of returning list directly.
+
+v0.74 2007-02-03
+ - Support jre1.2 (and above).
+ - Support input context like "boolean.class.|"
+ - Handle java primitive types like 'int'.
+
+v0.73 2007-02-01
+ - Fix bug that CLASSPATH not used when b:classpath or g:java_classpath not set.
+ - Fix bug that call filter() without making a copy for incomplete.
+ - Improve recognition of declaration of this class
+
+v0.72 2007-01-31 Handle nested expression.
+v0.71 2007-01-28 Add Basic support for class in current folder.
+v0.70 2007-01-27 Complete the reflection part.
+v0.60 2007-01-25 Design TClassInfo, etc.
+v0.50 2007-01-21 Use java and Reflection.class directly.
+
+
+6.2 Parser *java-parser-history*
+
+v0.67
+ 2007-09-11 Append a error string to imported qid when error occurs.
+ 2007-09-10 Improved regexp constants.
+ 2007-09-07 Fixed type2Str(). Removed qualident2Str().
+
+v0.66.1 08-30 Changed classCreatorRest().
+v0.66 08-27 Minor changes
+
+v0.65
+ 2007-08-23
+ - Improved s:scanComment(), s:Strpart(), s:String2Flags().
+ - Improved recognizing methods, ctors, and variable declarators declared in most common form.
+ - Added s:optFinalParameter(), s:methodDeclaratorRest_opt().
+ - Removed s:GetLine() and s:GetCol().
+ - Rewrote binary functions.
+
+v0.64
+ 2007-08-21
+ - Added quick recognizing fields or methods declared in most common form.
+ - Optimized code: s:modeAndEXPR(), formalParameter(), and others.
+
+v0.63
+ 2007-08-10
+ - Removed the unclear s:tokens and s:modifier_keywords.
+ - Add java_parser#GetSnapshot() and java_parser#Restore().
+ 2007-08-09 Fixed a bug when no top level class defined
+
+v0.62 2007-08-08
+ 2007-08-08 Fix values in s:Flags and s:modifiersOpt() and the related.
+ 2007-08-07 Optimize code of scanDoubleQuote() and importDeclaration().
+
+v0.61 2007-08-04
+ 2007-08-01 Fix a bug typetag(). return a:token -> return tolower(a:token)
+ 2007-07-31
+ - Rename all script functions matching "s:Java_\(\i\+\)" to "s:\1".
+ - Change s:EOI = ''
+ - Use get() instead of s:GetOption(). Remove it.
+ - Use repeat() instead of s:PrependChar(). Remove it.
+ - Improve scanChar()
+
+v0.60 2007-07-31 Now it nearly is a complete parser and support Java5,6.
+ And tested correctly on all java files in jdk6 src.zip.
+ 2007-07-19 Support new language features in java 5 and above.
+ 2007-07-25 Add supports for parsing statement, block or expression
+ 2007-07-28 Place it to autoload directory.
+ 2007-07-30 Clean this script.
+
+v0.51 2007-02-13 Optimize several scan function.
+v0.50 2007-02-10 Complete the skeleton.
+
+
+6.3 Reflection.java *javacomplete-reflection*
+
+v0.77
+ 2007-09-14 Improved generating information of all packages in jar files.
+ 2007-09-06
+ - Improved getting paths of all system jar files for different JDKs
+ in different platforms.
+ 2007-08-14 Major improvement. Support nontoplevel classes.
+
+v0.76.3
+ 2007-08-09 Redefined '-P' option for returning all packages and subpackages info in one time.
+
+v0.76.2
+ 2007-08-06 Return a modifier value as a string because it more than 32bit.
+
+v0.76
+ 2007-08-04 Support checking and reading package members for '-E'.
+ 2007-08-02
+ - Add an option '-E'.
+ - Use ZipFile and ZipEntry instead of JarFile and JarEntry,
+ so that it can be compiled by and run on JDK1.1 and above.
+v0.7 2007-02-17
+
+==============================================================================
+7. Todo *javacomplete-todo*
+
+- Improve performance of the embedded parser. Incremental parser.
+- Add quick information using balloonexpr, ballooneval, balloondelay.
+- Add javadoc
+- Give a hint for class name conflict in different packages.
+- Support parameter information for template
+
+==============================================================================
+8. Thanks *javacomplete-thanks*
+ * Bram Moolenaar and all Vim contributors for Vim
+ * The insenvim project
+ * The javac and gjc sources
+ * All of you for using this script :)
+
+ * For help, documentation, bug report :
+ Martin Stubenschrott author of IComplete
+ Vissale NEANG author of OmniCppComplete
+ David Fishburn author of SQLComplete and others
+ Nico Weber testing on the Mac
+ Thomas Link testing on cygwin+bash
+ Zhixing Yu
+ * For the bug of 'wildignore' options
+ Rodrigo Rosenfeld Rosas
+ Alexandru Mo?oi
+
+FeedBack:
+Any problem, bug or suggest are welcome to send to fangread@yahoo.com.cn
+
+==============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
View
721 vimrc/.vim/doc/minibufexpl.txt
@@ -0,0 +1,721 @@
+*minibufexpl.txt* Mini Buffer Explorer
+
+==============================================================================
+CONTENTS *MiniBufExpl-contents*
+ *MiniBufExpl*
+
+ 1. Install................................|MiniBufExplInstall|
+ 2. Key Mappings...........................|MiniBufExplKeymap|
+ 3. Commands...............................|MiniBufExplCommands|
+ 4. Options................................|MiniBufExplOptions|
+ 4.1 Splits.............................|MiniBufExplSplits|
+ 4.2 Horizontal 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*
+
+You may use the default keymappings of
+
+ <Leader>mbe - Opens MiniBufExplorer
+
+or you may want to add something like the following key mapping to your
+_vimrc/.vimrc file.
+
+ map <Leader>b :MiniBufExplorer<cr>
+
+However, in most cases you won't need any key-bindings at all.
+
+<Leader> is usually backslash so type "\mbe" (quickly) to open the
+-MiniBufExplorer- window.
+
+Other keymappings include: <Leader>mbc to close the Explorer window,
+<Leader>mbu to force the Explorer to Update and <Leader>mbt to toggle the
+Explorer window; it will open if closed or close if open. Each of these key
+bindings can be overridden (see the notes on <Leader>mbe above.)
+
+==============================================================================
+3. Commands *MiniBufExplCommands*
+
+You can map these additional commands as follows:
+
+ map <Leader>c :CMiniBufExplorer<cr>
+ map <Leader>u :UMiniBufExplorer<cr>
+ map <Leader>t :TMiniBufExplorer<cr>
+
+NOTE: you can change the key binding used in these mappings
+so that they fit with your configuration of vim.
+
+You can also call each of these features by typing the following in command
+mode:
+
+:MiniBufExplorer *:MiniBufExplorer*
+ Open and/or goto Explorer
+
+:CMiniBufExplorer *:CMiniBufExplorer*
+ Close the Explorer if it's open
+
+:UMiniBufExplorer *:UMiniBufExplorer*
+ Update Explorer without navigating
+
+:TMiniBufExplorer *:TMiniBufExplorer*
+ Toggle the Explorer window open and closed.
+
+==============================================================================
+4. Options *MiniBufExplOptions*
+
+------------------------------------------------------------------------------
+4.1 Splits *MiniBufExplSplits*
+
+ *'g:miniBufExplSplitBelow'*
+To control where the new split window goes relative to the current window, use
+the setting:
+
+ let g:miniBufExplSplitBelow=0 " Put new window above
+ " current or on the
+ " left for vertical split
+ let g:miniBufExplSplitBelow=1 " Put new window below
+ " current or on the
+ " right for vertical split
+
+The default for this is read from the 'splitbelow' VIM option.
+
+ *'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
+
+ *'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
+
+
+------------------------------------------------------------------------------
+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: defualt 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:miniBufExplorerMoreThanOne'*
+By default we are now (as of 6.0.1) turning on the MoreThanOne option. This
+stops the -MiniBufExplorer- from opening automatically until more than one
+eligible buffer is available. You can turn this feature off by setting the
+following variable in your .vimrc:
+
+ let g:miniBufExplorerMoreThanOne=1
+
+(The following enhancement is as of 6.2.2) Setting this to 0 will cause the
+MBE window to be loaded even if no buffers are available. Setting it to 1
+causes the MBE window to be loaded as soon as an eligible buffer is read. You
+can also set it to larger numbers. So if you set it to 4 for example the MBE
+window wouldn't auto-open until 4 eligibles buffers had been loaded. This is
+nice for folks that don't want an MBE window unless they are editing more than
+two or three buffers.
+
+------------------------------------------------------------------------------
+4.4 Keyboard Control *MiniBufExplKeyboard*
+
+ *'g:miniBufExplMapWindowNavVim'*
+To enable the optional mapping of Control + Vim Direction Keys [hjkl] to
+window movement commands, you can put the following into your .vimrc:
+
+ let g:miniBufExplMapWindowNavVim = 1
+
+ *'g:miniBufExplMapWindowNavArrows'*
+To enable the optional mapping of Control + Arrow Keys to window movement
+commands, you can put the following into your .vimrc:
+
+ let g:miniBufExplMapWindowNavArrows = 1
+
+ *'g:miniBufExplMapCTabSwitchBufs'*
+To enable the optional mapping of <C-TAB> and <C-S-TAB> to a function that
+will bring up the next or previous buffer in the current window, you can put
+the following into your .vimrc:
+
+ let g:miniBufExplMapCTabSwitchBufs = 1
+
+ *'g:miniBufExplMapCTabSwitchWindows'*
+To enable the optional mapping of <C-TAB> and <C-S-TAB> to mappings that will
+move to the next and previous (respectively) window, you can put the following
+into your .vimrc:
+
+ let g:miniBufExplMapCTabSwitchWindows = 1
+
+
+NOTE: If you set the ...TabSwitchBufs AND ...TabSwitchWindows,
+ ...TabSwitchBufs will be enabled and ...TabSwitchWindows
+ will not.
+
+------------------------------------------------------------------------------
+4.5 Misc *MiniBufExplMisc*
+
+ *'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.
+
+NOTE: If you use the single click option in taglist.vim you may
+ need to get an updated version that includes a patch I
+ provided to allow both explorers to provide single click
+ buffer selection.
+
+ *'g:miniBufExplModSelTarget'*
+If you use other explorers like TagList you can (As of 6.2.8) put:
+
+ let g:miniBufExplModSelTarget = 1
+
+ *'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:miniBufExplCheckDupeBufs'*
+If you use Vim with many open buffers simultaneously (>15) and you notice that
+switching buffers takes longer than usual, it is because of MBE's duplicate
+buffer name checking feature. To turn it off, you can add the following to
+your .vimrc:
+
+ let g:miniBufExplCheckDupeBufs = 0
+
+We are working on a fix so that we can all enjoy the feature if you want!
+
+ *'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
+
+ *'g:miniBufExplForceSyntaxEnable'*
+There is a VIM bug that can cause buffers to show up without their
+highlighting. The following setting will cause MBE to try and turn
+highlighting back on (introduced in 6.3.1):
+
+ let g:miniBufExplForceSyntaxEnable = 1
+
+------------------------------------------------------------------------------
+4.6 Debugging *MiniBufExplDebugging*
+
+ *'g:miniBufExplorerDebugLevel'*
+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:miniBufExplorerDebugLevel = 0 " MBE serious errors output
+ let g:miniBufExplorerDebugLevel = 4 " MBE all errors output
+ let g:miniBufExplorerDebugLevel = 10 " MBE reports everything
+
+ *'g:miniBufExplorerDebugMode'*
+You can also set a DebugMode to cause output to be target as follows (default
+is mode 3):
+
+ let g:miniBufExplorerDebugMode = 0 " Errors will show up in
+ " a vim window
+ let g:miniBufExplorerDebugMode = 1 " Uses VIM's echo function
+ " to display on the screen
+ let g:miniBufExplorerDebugMode = 2 " Writes to a file
+ " MiniBufExplorer.DBG
+ let g:miniBufExplorerDebugMode = 3 " Store output in global:
+ " g:miniBufExplorerDebugOutput
+
+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 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 - buffers that have NOT CHANGED and are
+ VISIBLE
+ MBEVisibleNormalActive - buffers that have NOT CHANGED and are
+ VISIBLE and is the active buffer
+ MBEVisibleChanged - for buffers that have CHANGED and are
+ VISIBLE
+ MBEVisibleChangedActive - 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
+
+
+NOTE: If you set a colorscheme in your .vimrc you should do it
+ BEFORE updating the MBE highlighting groups.
+
+==============================================================================
+6. Known Issues *MiniBufExplKnownIssues*
+
+When debugging is turned on and set to output to a window, there
+are some cases where the window is opened more than once, there
+are other cases where an old debug window can be lost.
+
+Several MBE commands can break the window history so <C-W>[pnw]
+might not take you to the expected window.
+
+==============================================================================
+6. Todo *MiniBufExplTodo*
+
+- Add context to tab titles so that multiple tabs show the
+ root folder names. Useful for working with MVC frameworks
+ where multiple files have the same name but are in different
+ locations.
+- 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
+ 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.
+
+ Description: Mini Buffer Explorer Vim Plugin
+ Maintainer: Federico Holgado <fholgado@gmail.com>
+ Last Updated: Federico Holgado <fholgado@gmail.com>
+ URL: http://vim.sourceforge.net/scripts/script.php?script_id=159
+ GitHub URL: https://github.com/fholgado/minibufexpl.vim
+ Last Change: Sunday, February 26, 2012
+ Version: 6.4.4
+ Derived from Jeff Lanzarotta's bufexplorer.vim version 6.0.7
+ Jeff can be reached at (jefflanzarotta@yahoo.com) and the
+ original plugin can be found at:
+ http://lanzarotta.tripod.com/vim/plugin/6/bufexplorer.vim.zip
+ [NO LONGER AVAILABLE]
+
+
+==============================================================================
+8. Changelog *MiniBufExplChangelog*
+
+
+6.4.4
+ - Set up proper documentation. Thanks to Claytron :)
+ - Fix colorcolum 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 exporer
+ 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 synatx highlighitng 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:miniBufExplorerDebugOutput)
+ - 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 noone
+ outthere 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 cliboard
+ 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 usefull 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 cluter 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
1  vimrc/.vim/minibufexpl.vim
@@ -0,0 +1 @@
+Subproject commit d92c8b01248d612444829001b3e081629d37a1aa
View
1,807 vimrc/.vim/plugin/minibufexpl.vim
@@ -0,0 +1,1807 @@
+" 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 Keyboard Mappings {{{
+" If we don't already have keyboard mappings for MBE then create them
+"
+if !hasmapto('<Plug>MiniBufExplorer')
+ map <unique> <Leader>mbe <Plug>MiniBufExplorer
+endif
+if !hasmapto('<Plug>CMiniBufExplorer')
+ map <unique> <Leader>mbc <Plug>CMiniBufExplorer
+endif
+if !hasmapto('<Plug>UMiniBufExplorer')
+ map <unique> <Leader>mbu <Plug>UMiniBufExplorer
+endif
+if !hasmapto('<Plug>TMiniBufExplorer')
+ map <unique> <Leader>mbt <Plug>TMiniBufExplorer
+endif
+if !hasmapto('<Plug>MBEMarkCurrent')
+ map <unique> <Leader>mq <Plug>MBEMarkCurrent
+endif
+" }}}
+" MBE <Script> internal map {{{
+"
+noremap <unique> <script> <Plug>MiniBufExplorer :call <SID>StartExplorer(1, -1, bufnr("%"))<CR>:<BS>
+noremap <unique> <script> <Plug>CMiniBufExplorer :call <SID>StopExplorer(1)<CR>:<BS>
+noremap <unique> <script> <Plug>UMiniBufExplorer :call <SID>AutoUpdate(-1,bufnr("%"))<CR>:<BS>
+noremap <unique> <script> <Plug>TMiniBufExplorer :call <SID>ToggleExplorer()<CR>:<BS>
+noremap <unique> <script> <Plug>MBEMarkCurrent :call <SID>MarkCurrentBuffer(bufname("%"),1)<CR>:<BS>
+
+" }}}
+" MBE commands {{{
+"
+if !exists(':MiniBufExplorer')
+ command! MiniBufExplorer call <SID>StartExplorer(1, -1, bufnr("%"))
+endif
+if !exists(':CMiniBufExplorer')
+ command! CMiniBufExplorer call <SID>StopExplorer(1)
+endif
+if !exists(':UMiniBufExplorer')
+ command! UMiniBufExplorer call <SID>AutoUpdate(-1,bufnr("%"))
+endif
+if !exists(':TMiniBufExplorer')
+ command! TMiniBufExplorer call <SID>ToggleExplorer()
+endif
+if !exists(':MBEbn')
+ command! MBEbn call <SID>CycleBuffer(1)
+endif
+if !exists(':MBEbp')
+ command! MBEbp call <SID>CycleBuffer(0)
+endif " }}}
+
+" Global Configuration Variables
+"
+" 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:miniBufExplorerDebugLevel')
+ let g:miniBufExplorerDebugLevel = 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:miniBufExplorerDebugOutput
+" global variable [This is the default]
+if !exists('g:miniBufExplorerDebugMode')
+ let g:miniBufExplorerDebugMode = 3
+endif
+
+" }}}
+" Allow auto update? {{{
+"
+" We start out with this off for startup, but once vim is running we
+" turn this on.
+if !exists('g:miniBufExplorerAutoUpdate')
+ let g:miniBufExplorerAutoUpdate = 0
+endif
+
+" }}}
+" MoreThanOne? {{{
+" Display Mini Buf Explorer when there are 'More Than One' eligible buffers
+"
+if !exists('g:miniBufExplorerMoreThanOne')
+ let g:miniBufExplorerMoreThanOne = 2
+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:miniBufExplSplitBelow')
+ let g:miniBufExplSplitBelow = &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
+
+" }}}
+" MaxHeight (depreciated) {{{
+" When sizing the -MiniBufExplorer- window, assign a maximum window height.
+" 0 = size to fit all buffers, otherwise the value is number of lines for
+" buffer. [Depreciated use g:miniBufExplMaxSize]
+"
+if !exists('g:miniBufExplMaxHeight')
+ let g:miniBufExplMaxHeight = 0
+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 = g:miniBufExplMaxHeight
+endif
+
+" }}}
+" MinHeight (depreciated) {{{
+" When sizing the -MiniBufExplorer- window, assign a minumum window height.
+" the value is minimum number of lines for buffer. Setting this to zero can
+" cause strange height behavior. The default value is 1 [Depreciated use
+" g:miniBufExplMinSize]
+"
+if !exists('g:miniBufExplMinHeight')
+ let g:miniBufExplMinHeight = 1
+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 = g:miniBufExplMinHeight
+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
+
+" }}}
+" 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
+
+" }}}
+" Extended window navigation commands? {{{
+" Global flag to turn extended window navigation commands on or off
+" enabled = 1, dissabled = 0
+"
+if !exists('g:miniBufExplMapWindowNav')
+ " This is for backwards compatibility and may be removed in a
+ " later release, please use the ...NavVim and/or ...NavArrows
+ " settings.
+ let g:miniBufExplMapWindowNav = 0
+endif
+if !exists('g:miniBufExplMapWindowNavVim')
+ let g:miniBufExplMapWindowNavVim = 0
+endif
+if !exists('g:miniBufExplMapWindowNavArrows')
+ let g:miniBufExplMapWindowNavArrows = 0
+endif
+if !exists('g:miniBufExplMapCTabSwitchBufs')
+ let g:miniBufExplMapCTabSwitchBufs = 0
+endif
+" Notice: that if CTabSwitchBufs is turned on then
+" we turn off CTabSwitchWindows.
+if g:miniBufExplMapCTabSwitchBufs == 1 || !exists('g:miniBufExplMapCTabSwitchWindows')
+ let g:miniBufExplMapCTabSwitchWindows = 0
+endif
+
+"
+" If we have enabled control + vim direction key remapping
+" then perform the remapping
+"
+" Notice: I left g:miniBufExplMapWindowNav in for backward
+" compatibility. Eventually this mapping will be removed so
+" please use the newer g:miniBufExplMapWindowNavVim setting.
+if g:miniBufExplMapWindowNavVim || g:miniBufExplMapWindowNav
+ noremap <C-J> <C-W>j
+ noremap <C-K> <C-W>k
+ noremap <C-H> <C-W>h
+ noremap <C-L> <C-W>l
+endif
+
+"
+" If we have enabled control + arrow key remapping
+" then perform the remapping
+"
+if g:miniBufExplMapWindowNavArrows
+ noremap <C-Down> <C-W>j
+ noremap <C-Up> <C-W>k
+ noremap <C-Left> <C-W>h
+ noremap <C-Right> <C-W>l
+endif
+
+" If we have enabled <C-TAB> and <C-S-TAB> to switch buffers
+" in the current window then perform the remapping
+"
+if g:miniBufExplMapCTabSwitchBufs
+ noremap <C-TAB> :call <SID>CycleBuffer(1)<CR>:<BS>
+ noremap <C-S-TAB> :call <SID>CycleBuffer(0)<CR>:<BS>
+endif
+
+"
+" If we have enabled <C-TAB> and <C-S-TAB> to switch windows
+" then perform the remapping
+"
+if g:miniBufExplMapCTabSwitchWindows
+ noremap <C-TAB> <C-W>w
+ noremap <C-S-TAB> <C-W>W
+endif
+
+" }}}
+" Modifiable Select Target {{{
+"
+if !exists('g:miniBufExplModSelTarget')
+ let g:miniBufExplModSelTarget = 0
+endif
+
+"}}}
+" Force Syntax Enable {{{
+"
+if !exists('g:miniBufExplForceSyntaxEnable')
+ let g:miniBufExplForceSyntaxEnable = 0
+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
+
+"
+" 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 s:clickmap = ':if bufname("%") == "-MiniBufExplorer-" <bar> call <SID>MBEClick() <bar> endif <CR>'
+ if maparg('<LEFTMOUSE>', 'n') == ''
+ " no mapping for leftmouse
+ exec ':nnoremap <silent> <LEFTMOUSE> <LEFTMOUSE>' . s:clickmap
+ else
+ " we have a mapping
+ let g:miniBufExplDoneClickSave = 1
+ let s:m = ':nnoremap <silent> <LEFTMOUSE> <LEFTMOUSE>'
+ let s:m = s:m . substitute(substitute(maparg('<LEFTMOUSE>', 'n'), '|', '<bar>', 'g'), '\c^<LEFTMOUSE>', '', '')
+ let s:m = s:m . s:clickmap
+ exec s:m
+ endif
+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 " }}}
+" Check for duplicate buffer names? {{{
+" Flag that can be set to 0 in a users .vimrc to turn off
+" the explorer's feature that differentiates similar buffer names by
+" displaying the parent directory names. This feature should be turned off
+" if you work with a large number of buffers (>15) simultaneously.
+"
+if !exists('g:miniBufExplCheckDupeBufs')
+ let g:miniBufExplCheckDupeBufs = 1
+endif " }}}
+
+" Variables used internally
+"
+" Script/Global variables {{{
+" Global used to store the buffer list so we don't update the
+" UI unless the list has changed.
+if !exists('g:miniBufExplBufList')
+ let g:miniBufExplBufList = ''
+endif
+
+" Variable used as a mutex so that we don't do lots
+" of AutoUpdates at the same time.
+if !exists('g:miniBufExplInAutoUpdate')
+ let g:miniBufExplInAutoUpdate = 0
+endif
+
+" In debug mode 3 this variable will hold the debug output
+if !exists('g:miniBufExplorerDebugOutput')
+ let g:miniBufExplorerDebugOutput = ''
+endif
+
+" In debug mode 3 this variable will hold the debug output
+if !exists('g:miniBufExplForceDisplay')
+ let g:miniBufExplForceDisplay = 0
+endif
+
+if !exists('g:miniBufExplSortBy')
+ let g:miniBufExplSortBy = "number"
+endif
+
+if !exists('g:statusLineText')
+ let g:statusLineText = "-MiniBufExplorer-"
+endif
+
+" Variable used to pass maxTabWidth info between functions
+let s:maxTabWidth = 0
+
+" Variable used to count debug output lines
+let s:debugIndex = 0
+
+" Build initial MRUList. This makes sure all the files specified on the
+" command line are picked up correctly.
+let s:MRUList = range(1, bufnr('$'))
+
+" }}}
+" Setup an autocommand group and some autocommands {{{
+" that keep our explorer updated automatically.
+"
+
+"set update time for the CursorHold function so that it is called 100ms after
+"a key is pressed
+setlocal updatetime=300
+
+augroup MiniBufExplorer
+autocmd MiniBufExplorer BufDelete * call <SID>DEBUG('-=> BufDelete AutoCmd', 10) |call <SID>AutoUpdate(expand('<abuf>'),bufnr("%"))
+autocmd MiniBufExplorer BufDelete * call <SID>DEBUG('-=> BufDelete ModTrackingListClean AutoCmd for buffer '.bufnr("%"), 10) |call <SID>CleanModTrackingList(bufnr("%"))
+autocmd MiniBufExplorer BufEnter * call <SID>DEBUG('-=> BufEnter AutoCmd', 10) |call <SID>AutoUpdate(-1,bufnr("%"))
+autocmd MiniBufExplorer BufEnter * call <SID>DEBUG('-=> BufEnter Checking for Last window', 10) |call <SID>CheckForLastWindow()
+autocmd MiniBufExplorer BufWritePost * call <SID>DEBUG('-=> BufWritePost AutoCmd', 10) |call <SID>AutoUpdate(-1,bufnr("%"))
+autocmd MiniBufExplorer CursorHold * call <SID>DEBUG('-=> CursroHold AutoCmd', 10) |call <SID>AutoUpdateCheck(bufnr("%"))
+autocmd MiniBufExplorer CursorHoldI * call <SID>DEBUG('-=> CursorHoldI AutoCmd', 10) |call <SID>AutoUpdateCheck(bufnr("%"))
+autocmd MiniBufExplorer VimEnter * call <SID>DEBUG('-=> VimEnter AutoCmd', 10) |let g:miniBufExplorerAutoUpdate = 1 |call <SID>AutoUpdate(-1,bufnr("%"))
+augroup NONE
+" }}}
+
+" Functions
+" EscapeTilde - escapes "~" {{{
+function! <SID>EscapeTilde(str)
+ return substitute(a:str, "\\\~","\\\\\~","g")
+endfunction
+" }}}
+"
+" StartExplorer - Sets up our explorer and causes it to be displayed {{{
+"
+function! <SID>StartExplorer(sticky,delBufNum,currBufName)
+ call <SID>DEBUG('===========================',10)
+ call <SID>DEBUG('Entering StartExplorer()' ,10)
+ call <SID>DEBUG('===========================',10)
+
+ if a:sticky == 1
+ let g:miniBufExplorerAutoUpdate = 1
+ endif
+
+ " Store the current buffer
+ let l:curBuf = bufnr('%')
+
+ " Prevent a report of our actions from showing up.
+ let l:save_rep = &report
+ let l:save_sc = &showcmd
+ let &report = 10000
+ set noshowcmd
+
+ call <SID>FindCreateWindow('-MiniBufExplorer-', -1, 1, 1)
+
+ " Make sure we are in our window
+ if bufname('%') != '-MiniBufExplorer-'
+ call <SID>DEBUG('StartExplorer called in invalid window',1)
+ let &report = l:save_rep
+ let &showcmd = l:save_sc
+ return
+ endif
+
+ " !!! 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 folks turn numbering and columns on by default we will turn
+ " them off for the MBE window
+ setlocal foldcolumn=0
+ setlocal nonumber
+ "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 shellslash for Windows/DOS Vim for dupeBufName checking to Work
+ if (has("win32") || has("win64"))
+ set shellslash
+ endif
+
+ " Set the text of the statusline for the MBE buffer. See help:stl for
+ " many options
+ setlocal stl=%!g:statusLineText
+
+ " No spell check
+ setlocal nospell
+ " Restore colorcolumn for VIM >= 7.3
+ if exists("+colorcolumn")
+ setlocal colorcolumn&
+ end
+
+ if has("syntax")
+ syn clear
+ syn match MBENormal '\[[^\]]*\]'
+ syn match MBEChanged '\[[^\]]*\]+'
+ syn match MBEVisibleNormal '\[[^\]]*\]\*+\='
+ syn match MBEVisibleChanged '\[[^\]]*\]\*+'
+ syn match MBEVisibleActive '\[[^\]]*\]\*!'
+ syn match MBEVisibleChangedActive '\[[^\]]*\]\*+!'
+
+ "MiniBufExpl Color Examples
+ " hi MBEVisibleActive guifg=#A6DB29 guibg=fg
+ " hi MBEVisibleChangedActive guifg=#F1266F guibg=fg
+ " hi MBEVisibleChanged guifg=#F1266F guibg=fg
+ " hi MBEVisibleNormal guifg=#5DC2D6 guibg=fg
+ " hi MBEChanged guifg=#CD5907 guibg=fg
+ " hi MBENormal guifg=#808080 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 MBEVisibleActive Boolean
+ hi def link MBEVisibleChanged Special
+ hi def link MBEVisibleChangedActive Error
+ endif
+ endif
+
+ " If you press return, o or e in the -MiniBufExplorer- then try
+ " to open the selected buffer in the previous window.
+ nnoremap <buffer> <CR> :call <SID>MBESelectBuffer(0)<CR>:<BS>
+ nnoremap <buffer> o :call <SID>MBESelectBuffer(0)<CR>:<BS>
+ nnoremap <buffer> e :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 DoubleClick in the -MiniBufExplorer- then try
+ " to open the selected buffer in the previous window.
+ nnoremap <buffer> <2-LEFTMOUSE> :call <SID>MBEDoubleClick()<CR>:<BS>
+ " If you press d in the -MiniBufExplorer- then try to
+ " delete the selected buffer.
+ nnoremap <buffer> d :call <SID>MBEDeleteBuffer(bufname("#"))<CR>:<BS>
+ " If you press w in the -MiniBufExplorer- then switch back
+ " to the previous window.
+ nnoremap <buffer> p :wincmd p<CR>:<BS>
+ " The following allow us to use regular movement keys to
+ " scroll in a wrapped single line buffer
+ nnoremap <buffer> j gj
+ nnoremap <buffer> k gk
+ nnoremap <buffer> <down> gj
+ nnoremap <buffer> <up> gk
+ " The following allows for quicker moving between buffer
+ " names in the [MBE] window it also saves the last-pattern
+ " and restores it.
+ nnoremap <buffer> <TAB> :call search('\[[0-9]*:[^\]]*\]')<CR>:<BS>
+ nnoremap <buffer> <S-TAB> :call search('\[[0-9]*:[^\]]*\]','b')<CR>:<BS>
+ nnoremap <buffer> l :call search('\[[0-9]*:[^\]]*\]')<CR>:<BS>
+ nnoremap <buffer> h :call search('\[[0-9]*:[^\]]*\]','b')<CR>:<BS>
+
+ call <SID>DisplayBuffers(a:delBufNum,a:currBufName)
+
+ if (l:curBuf != -1)
+ let l:bname = <SID>EscapeTilde(expand('#'.l:curBuf.':t'))
+ call search('\['.l:curBuf.':'.l:bname.'\]')
+ else
+ call <SID>DEBUG('No current buffer to search for',9)
+ endif
+
+ let &report = l:save_rep
+ let &showcmd = l:save_sc
+
+ call <SID>DEBUG('===========================',10)
+ call <SID>DEBUG('Completed StartExplorer()' ,10)
+ call <SID>DEBUG('===========================',10)
+
+endfunction
+
+" }}}
+" StopExplorer - Looks for our explorer and closes the window if it is open {{{
+"
+function! <SID>StopExplorer(sticky)
+ call <SID>DEBUG('===========================',10)
+ call <SID>DEBUG('Entering StopExplorer()' ,10)
+ call <SID>DEBUG('===========================',10)
+
+ if a:sticky == 1
+ let g:miniBufExplorerAutoUpdate = 0
+ endif
+
+ let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1)
+
+ if l:winNum != -1
+ exec l:winNum.' wincmd w'
+ silent! close
+ wincmd p
+
+ " Work around a redraw bug in gVim (Confirmed present in 7.3.50)
+ if has('gui_gtk') && has('gui_running')
+ redraw!
+ endif
+ endif
+
+ call <SID>DEBUG('===========================',10)
+ call <SID>DEBUG('Completed StopExplorer()' ,10)
+ call <SID>DEBUG('===========================',10)
+
+endfunction
+
+" }}}
+" ToggleExplorer - Looks for our explorer and opens/closes the window {{{
+"
+function! <SID>ToggleExplorer()
+ call <SID>DEBUG('===========================',10)
+ call <SID>DEBUG('Entering ToggleExplorer()' ,10)
+ call <SID>DEBUG('===========================',10)
+
+ let g:miniBufExplorerAutoUpdate = 0
+
+ let l:winNum = <SID>FindWindow('-MiniBufExplorer-', 1)
+
+ if l:winNum != -1
+ call <SID>StopExplorer(1)
+ else
+ call <SID>StartExplorer(1, -1, bufnr("%"))
+ wincmd p
+ endif
+
+ call <SID>DEBUG('===========================',10)
+ call <SID>DEBUG('Completed ToggleExplorer()' ,10)
+ call <SID>DEBUG('===========================',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()',10)
+ endif
+
+ " Try to find an existing window that contains
+ " our buffer.
+ let l:bufNum = bufnr(a:bufName)
+ if l:bufNum != -1
+ if a:doDebug
+ call <SID>DEBUG('Found buffer ('.a:bufName.'): '.l:bufNum,9)
+ endif
+ let l:winNum = bufwinnr(l:bufNum)
+ else
+ let l:winNum = -1
+ endif
+
+ return l:winNum
+
+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.
+"
+" forceEdge, -1 use defaults, 0 below, 1 above
+" isExplorer, 0 no, 1 yes
+" doDebug, 0 no, 1 yes
+"
+function! <SID>FindCreateWindow(bufName, forceEdge, isExplorer, doDebug)
+ if a:doDebug
+ call <SID>DEBUG('Entering FindCreateWindow('.a:bufName.')',10)
+ endif
+
+ " Save the user's split setting.
+ let l:saveSplitBelow = &splitbelow
+
+ " Set to our new values.
+ let &splitbelow = g:miniBufExplSplitBelow
+
+ " 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('Found window ('.a:bufName.'): '.l:winNum,9)
+ endif
+ exec l:winNum.' wincmd w'
+ let l:winFound = 1
+ else
+
+ if g:miniBufExplSplitToEdge == 1 || a:forceEdge >= 0
+
+ let l:edge = &splitbelow
+ if a:forceEdge >= 0
+ let l:edge = a:forceEdge
+ endif
+
+ if l:edge
+ if g:miniBufExplVSplit == 0
+ exec 'bo sp '.a:bufName
+ else
+ exec 'bo vsp '.a:bufName
+ endif
+ else
+ if g:miniBufExplVSplit == 0
+ exec 'to sp '.a:bufName
+ else
+ exec 'to vsp '.a:bufName
+ endif
+ endif
+ else
+ if g:miniBufExplVSplit == 0
+ exec 'sp '.a:bufName
+ else
+ " &splitbelow doesn't affect vertical splits
+ " so we have to do this explicitly.. ugh.
+ if &splitbelow
+ exec 'rightb vsp '.a:bufName
+ else
+ exec 'vsp '.a:bufName
+ endif
+ endif
+ endif
+
+ let g:miniBufExplForceDisplay = 1
+
+ " Try to find an existing explorer window
+ let l:winNum = <SID>FindWindow(a:bufName, a:doDebug)
+ if l:winNum != -1
+ if a:doDebug
+ call <SID>DEBUG('Created and then found window ('.a:bufName.'): '.l:winNum,9)
+ endif
+ exec l:winNum.' wincmd w'
+ else
+ if a:doDebug
+ call <SID>DEBUG('FindCreateWindow failed to create window ('.a:bufName.').',1)
+ endif
+ return
+ endif
+
+ if a:isExplorer
+ " Turn off the swapfile, set the buffer type so that it won't get written,
+ " and so that it will get deleted when it gets hidden and turn on word wrap.
+ setlocal noswapfile
+ setlocal buftype=nofile
+ setlocal bufhidden=delete
+ if g:miniBufExplVSplit == 0
+ setlocal wrap
+ else
+ setlocal nowrap
+ exec('setlocal winwidth='.g:miniBufExplMinSize)
+ endif
+ endif
+
+ if a:doDebug
+ call <SID>DEBUG('Window ('.a:bufName.') created: '.winnr(),9)
+ endif
+
+ endif
+
+ " Restore the user's split setting.
+ let &splitbelow = l:saveSplitBelow
+
+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(delBufNum,currBufName)
+ call <SID>DEBUG('Entering DisplayBuffers()',10)
+
+ " Make sure we are in our window
+ if bufname('%') != '-MiniBufExplorer-'
+ call <SID>DEBUG('DisplayBuffers called in invalid window',1)
+ return
+ endif
+
+ " We need to be able to modify the buffer
+ setlocal modifiable
+
+ call <SID>ShowBuffers(a:delBufNum,a:currBufName)
+ call <SID>ResizeWindow()
+
+ normal! zz
+
+ " Prevent the buffer from being modified.
+ setlocal nomodifiable
+ set nobuflisted
+
+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)
+ return
+ endif
+
+ 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
+ exec("setlocal textwidth=".l:width)
+ normal gg
+ normal gq}
+ normal G
+ let l:height = line('.')
+ normal gg
+ 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)
+
+ exec('resize '.l:height)
+
+ " 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
+
+ endif
+
+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(delBufNum,currBufName)
+ call <SID>DEBUG('Entering ShowBuffers()',10)
+
+ let l:ListChanged = <SID>BuildBufferList(a:delBufNum, 1, a:currBufName)
+
+ if (l:ListChanged == 1 || g:miniBufExplForceDisplay)
+ let l:save_rep = &report
+ let l:save_sc = &showcmd
+ let &report = 10000
+ set noshowcmd
+
+ " Delete all lines in buffer.
+ 1,$d _
+
+ " Goto the end of the buffer put the buffer list
+ " and then delete the extra trailing blank line
+ $
+ put! =g:miniBufExplBufList
+ $ d _
+
+ let g:miniBufExplForceDisplay = 0
+
+ let &report = l:save_rep
+ let &showcmd = l:save_sc
+ else
+ call <SID>DEBUG('Buffer list not update since there was no change',9)
+ endif
+
+endfunction
+
+" }}}
+" Max - Returns the max of two numbers {{{
+"
+function! <SID>Max(argOne, argTwo)
+ if a:argOne > a:argTwo
+ return a:argOne
+ else
+ return a:argTwo
+ endif
+endfunction
+
+" }}}
+" CheckRootDirForDupes - Checks if the buffer parent dirs are the same {{{
+"
+" Compares 2 buffers with the same filename and returns the directory of
+" buffer 1's path at the point where it is different from buffer 2's path
+"
+function! CheckRootDirForDupes(level,path1,path2)
+ call <SID>DEBUG('Entering Dupe Dir Checking Function for at level '.a:level.' for '.join(a:path1).' vs '.join(a:path2),10)
+ if(len(a:path1) >= abs(a:level))
+ call <SID>DEBUG('Path level1 is '.get(a:path1,a:level),10)
+ call <SID>DEBUG('Path level2 is '.get(a:path2,a:level),10)
+ if(get(a:path1,a:level) == get(a:path2,a:level))
+ let s:bufPathPosition = a:level - 1
+ call CheckRootDirForDupes(s:bufPathPosition,a:path1,a:path2)
+ call <SID>DEBUG('Match in directory name at level '.a:level,10)
+ call <SID>DEBUG('Calling CheckRootForDupes again',10)
+ else
+ call <SID>DEBUG('Final path Position is '.s:bufPathPosition,10)
+ let s:bufPathPrefix = a:path1[s:bufPathPosition].'/'
+ call <SID>DEBUG('Found non-matching root dir and it is '.s:bufPathPrefix,10)
+ endif
+ endif
+endfunction
+
+" }}}
+" IgnoreBuffer - check to see if buffer should be ignored {{{
+"
+" Returns 0 if this buffer should be displayed in the list, 1 otherwise.
+"
+function! <SID>IgnoreBuffer(buf)
+ " Skip temporary buffers with buftype set.
+ if empty(getbufvar(a:buf, "&buftype") == 0)
+ return 1
+ endif
+
+ " Skip unlisted buffers.
+ if buflisted(a:buf) == 0
+ return 1
+ endif
+
+ " Skip buffers with no name.
+ let l:BufName = bufname(a:buf)
+ if empty(l:BufName) == 1
+ return 1
+ endif
+
+ " Only show modifiable buffers (The idea is that we don't
+ " want to show Explorers)
+ if (getbufvar(a:buf, '&modifiable') != 1 || l:BufName == '-MiniBufExplorer-')
+ return 1
+ endif
+
+ 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(delBufNum, updateBufList, currBufName)
+ call <SID>DEBUG('Entering BuildBufferList()',10)
+
+
+ let l:CurrBufName = a:currBufName
+ let l:NBuffers = bufnr('$') " Get the number of the last buffer.
+ let l:i = 0 " Set the buffer index to zero.
+
+ let l:fileNames = ''
+ let l:tabList = []
+ let l:maxTabWidth = 0
+ " default separator for *nix file systems
+ let s:PathSeparator = '/'
+ " counter to see what platform we may be in
+ let l:nixPlatform = 0
+ let l:winPlatform = 0
+
+ " Loop through every buffer less than the total number of buffers.
+ while(l:i <= l:NBuffers)
+ let l:i = l:i + 1
+
+ " If we have a delBufNum and it is the current
+ " buffer then ignore the current buffer.
+ " Otherwise, continue.
+
+ if (a:delBufNum == l:i)
+ " check to see what platform we are in
+ if (has('unix'))
+ let s:PathSeparator = '/'
+ call <SID>DEBUG('separator set to '.s:PathSeparator,10)
+ else
+ let s:PathSeparator = '\'
+ call <SID>DEBUG('separator set to '.s:PathSeparator,10)
+ endif
+
+ call <SID>DEBUG('Separator is '.s:PathSeparator,10)
+
+ continue
+ endif
+
+ if (<SID>IgnoreBuffer(l:i))
+ continue
+ endif
+
+ if g:miniBufExplSortBy == "mru"
+ let l:mruIdx = index(s:MRUList, l:i)
+ if l:mruIdx == -1
+ call add(s:MRUList, l:i)
+ endif
+ endif
+
+ let l:BufName = expand( "#" . l:i . ":p:t")
+
+ " See if buffer names are duplicate
+ let l:dupeBufName = 0
+ let l:i2 = 0
+ " Establish initial parent directory position
+ let s:bufPathPosition = -2
+ let s:bufPathPrefix = ""
+ let l:pathList = []
+
+ " While in current buffer from first loop, loop through all buffers
+ " again!
+ if (g:miniBufExplCheckDupeBufs == 1)
+ while(l:i2 <= l:NBuffers)
+ " Get the full path of the current buffer in the loop and the
+ " current buffer in the new loop
+ let l:i2 = l:i2 + 1
+ let l:bufPath = expand( "#" . l:i . ":p")
+ let l:bufPath2 = expand( "#" . l:i2 . ":p")
+ let l:BufName2 = expand( "#" . l:i2 . ":p:t")
+
+ call <SID>DEBUG('BUFFER PATHS ---> bufPath is '.l:bufPath.' and bufPath2 is '.l:bufPath2,10)
+ call <SID>DEBUG('BUFFER NAMES ---> bufName is '.l:BufName.' and BufName2 is '.l:BufName2,10)
+
+ " Split the path string by delimiters
+ let l:bufSplitPath = split(l:bufPath,s:PathSeparator,0)
+ let l:bufSplitPath2 = split(l:bufPath2,s:PathSeparator,0)
+
+ if((l:BufName2 != '') && (l:bufPath != l:bufPath2))
+ call <SID>DEBUG('bufPath2 is not empty and not comparing the same file, going to check for dupes!',10)
+
+ " Get the filename from each buffer to compare them
+ let l:bufFileNameFromPath = 'No Name'
+ if(strlen(l:BufName))
+ let l:bufFileNameFromPath = l:bufSplitPath[-1]
+ call <SID>DEBUG('Setting bufFileNameFromPath as '.l:bufSplitPath[-1],10)
+ endif
+
+ " Make sure to take into account empty buffers
+ let l:bufFileNameFromPath2 = 'No Name'
+ if(strlen(l:BufName2))
+ let l:bufFileNameFromPath2 = l:bufSplitPath2[-1]
+ call <SID>DEBUG('Setting bufFileNameFromPath2 as '.l:bufSplitPath2[-1],10)
+ endif
+
+ call <SID>DEBUG('Comparing '.l:bufPath.' vs '.l:bufPath2,10)
+
+ " If there is a match for buffer names, increase a variable
+ " that we'll check later
+
+ if (l:bufFileNameFromPath == l:bufFileNameFromPath2)
+ let l:dupeBufName = l:dupeBufName + 1
+ call <SID>DEBUG('dupeBufName equals '.l:dupeBufName,10)
+ " Now check to see if the parent directory matches if there
+ " are 2 or more buffers with the same name
+ if (l:bufPath2 != 'No Name')
+ let l:bufPathToCompare2 = l:bufPath2
+ let l:pathList = add(l:pathList,l:bufPath2)
+ call <SID>DEBUG('Adding '.l:bufPath2.' to pathList',10)
+ endif
+ endif
+ endif
+ endwhile
+
+ " If there are 2 or more buffers with the same name, let's call a
+ " function that show a differentiating parent directory so that the name is unique.
+ if l:dupeBufName >= 1
+ for item in l:pathList
+ call <SID>DEBUG('Item in pathList loop is '.item,10)
+ if ((!empty(item)) && (item != l:bufPath))
+ call <SID>DEBUG('2 or more duplicate buffer names, calling dir check function with '.l:bufPath.' vs '.item,10)
+ call CheckRootDirForDupes(s:bufPathPosition,split(l:bufPath,s:PathSeparator,0),split(item,s:PathSeparator,0))
+ endif
+ endfor
+ endif
+ endif
+
+ " 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
+
+ if (g:miniBufExplCheckDupeBufs == 0)
+ " Get filename & Remove []'s & ()'s
+ let l:shortBufName = fnamemodify(l:BufName, ":t")
+ let l:shortBufName = substitute(l:shortBufName, '[][()]', '', 'g')
+ let l:tab .= l:shortBufName.']'
+ else
+
+ let l:tab .= s:bufPathPrefix.l:bufSplitPath[-1].']'
+ endif
+
+ " 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:CurrBufName is '.l:CurrBufName,10)
+ if(l:i == l:CurrBufName)
+ let l:tab .= '!'
+ endif
+
+ let l:maxTabWidth = <SID>Max(strlen(l:tab), l:maxTabWidth)
+ call add(l:tabList, l:tab)
+
+ if g:miniBufExplSortBy == "name"
+ call sort(l:tabList, "<SID>NameCmp")
+ elseif g:miniBufExplSortBy == "mru"
+ call sort(l:tabList, "<SID>MRUCmp")
+ endif
+
+ let l:fileNames = ''
+ for l:tab in l:tabList
+ let l:fileNames = l:fileNames.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:fileNames = l:fileNames.' '
+ endif
+ " If not horizontal we need a newline
+ else
+ let l:fileNames = l:fileNames . "\n"
+ endif
+ endfor
+ endwhile
+
+
+ if (g:miniBufExplBufList != l:fileNames)
+ if (a:updateBufList)
+ let g:miniBufExplBufList = l:fileNames
+ let s:maxTabWidth = l:maxTabWidth
+ endif
+ return 1
+ else
+ return 0
+ endif
+
+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. If delBufNum is
+" any non -1 value then don't include that buffer in the list
+" of eligible buffers.
+"
+function! <SID>HasEligibleBuffers(delBufNum)
+ call <SID>DEBUG('Entering HasEligibleBuffers()',10)
+
+ let l:save_rep = &report
+ let l:save_sc = &showcmd
+ let &report = 10000
+ set noshowcmd
+
+ let l:NBuffers = bufnr('$') " Get the number of the last buffer.
+ let l:i = 0 " Set the buffer index to zero.
+ let l:found = 0 " No buffer found
+
+ if (g:miniBufExplorerMoreThanOne > 1)
+ call <SID>DEBUG('More Than One mode turned on',6)
+ endif
+ let l:needed = g:miniBufExplorerMoreThanOne
+
+ " Loop through every buffer less than the total number of buffers.
+ while(l:i <= l:NBuffers && l:found < l:needed)
+ let l:i = l:i + 1
+
+ " If we have a delBufNum and it is the current
+ " buffer then ignore the current buffer.
+ " Otherwise, continue.
+ if (a:delBufNum == -1 || l:i != a:delBufNum)
+ " Make sure the buffer in question is listed.
+ if (getbufvar(l:i, '&buflisted') == 1)
+ " Get the name of the buffer.
+ let l:BufName = bufname(l:i)
+ " Check to see if the buffer is a blank or not. If the buffer does have
+ " a name, process it.
+ if (strlen(l:BufName))
+ " Only show modifiable buffers (The idea is that we don't
+ " want to show Explorers)
+ if ((getbufvar(l:i, '&modifiable') == 1) && (BufName != '-MiniBufExplorer-'))
+
+ let l:found = l:found + 1
+
+ endif
+ endif
+ endif
+ endif
+ endwhile
+
+ let &report = l:save_rep
+ let &showcmd = l:save_sc
+
+ call <SID>DEBUG('HasEligibleBuffers found '.l:found.' eligible buffers of '.l:needed.' needed',6)
+
+ return (l:found >= l:needed)
+
+endfunction
+
+" }}}
+" Auto Update Check - Function called by auto commands to see if MBE needs to
+" be updated {{{
+" If current buffer's modified flag has changed THEN
+" call the auto update function. ELSE
+" Don't do anything
+" This is implemented to save resources so that MBE does not have to update
+" on every keypress to check if the buffer has been modified
+let g:modTrackingList = []
+function! <SID>AutoUpdateCheck(currBuf)
+ let l:bufAlreadyExists = 0
+ for item in