diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/.tmux.conf b/.tmux.conf index 1a4a135..9c56b69 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -41,3 +41,7 @@ set -g mouse-select-pane on #set -g terminal-overrides 'xterm*:smcup@:rmcup@' set-option -g status-right '' + +bind f run "tmux clock" +bind y run "tmux save-buffer - | reattach-to-user-namespace pbcopy" + diff --git a/.vim/.DS_Store b/.vim/.DS_Store new file mode 100644 index 0000000..774b478 Binary files /dev/null and b/.vim/.DS_Store differ diff --git a/.vim/.netrwhist b/.vim/.netrwhist new file mode 100644 index 0000000..610f620 --- /dev/null +++ b/.vim/.netrwhist @@ -0,0 +1,2 @@ +let g:netrw_dirhistmax =10 +let g:netrw_dirhist_cnt =4 diff --git a/.vim/bundle/.DS_Store b/.vim/bundle/.DS_Store new file mode 100644 index 0000000..941b95b Binary files /dev/null and b/.vim/bundle/.DS_Store differ diff --git a/.vim/bundle/.vundle/script-names.vim-scripts.org.json b/.vim/bundle/.vundle/script-names.vim-scripts.org.json new file mode 100644 index 0000000..c5a91ce --- /dev/null +++ b/.vim/bundle/.vundle/script-names.vim-scripts.org.json @@ -0,0 +1 @@ +["test.vim","test.zip","test_syntax.vim","ToggleCommentify.vim","DoxyGen-Syntax","keepcase.vim","ifdef-highlighting","vimbuddy.vim","buffoptions.vim","fortune.vim","drawing.vim","ctags.vim","closetag.vim","htmlcmd.vim","ccase.vim","compiler.tar.gz","ls.vim","calendar.vim","dl.vim","jcommenter.vim","info.vim","hunspchk.zip","EnhCommentify.vim","LoadHeaderFile.vim","mailbrowser.vim","vimmailr.zip","format.vim","vimxmms.tar.gz","sourceSafe.zip","python.vim","a.vim","vimrc.tcl","oravim.txt","javabean.vim","jbean.vim","vimvccmd.zip","dbhelper.tgz","matchit.zip","DrawIt","rcs-menu.vim","bufexplorer.zip","sccs-menu.vim","completeWord.py","Mail_Sig.set","Mail_mutt_alias.set","Mail_Re.set","Triggers.vim","Mail_cc.set","lh-brackets","cscope_macros.vim","calendar.vim","colorize.vim","ConvertBase.vim","TagsMenu.zip","perl.vim","oberon.vim","cvsmenu.vim","dtags","delphi.vim","Embperl_Syntax.zip","whatdomain.vim","emacs.vim","po.vim","CD.vim","_vim_wok_visualcpp01.zip","nqc.vim","vfp.vim","project.tar.gz","pt.vim.gz","dctl.vim.gz","foo.vim","word_complete.vim","aux2tags.vim","javaimp.vim","uri-ref","incfiles.vim","functags.vim","wordlist.vim","files2menu.pm","translate.vim","AppendComment.vim","let-modeline.vim","gdbvim.tar.gz","Mkcolorscheme.vim","brief.vim","plkeyb.vim","vimtips.zip","savevers.vim","vcscommand.vim","nsis.vim","borland.vim","tex.vim","express.vim","winmanager","methods.vim","sqlplus.vim","spec.vim","mail.tgz","TagsBase.zip","nlist.vim","DirDiff.vim","regview.vim","BlockHL","desert.vim","colorscheme_template.vim","SelectBuf","bufNwinUtils.vim","lightWeightArray.vim","golden.vim","torte.vim","borland.vim","idutils","MultiPrompt.vim","blue.vim","csharp.vim","cs.vim","Shell.vim","vim.vim","Decho","asu1dark.vim","Astronaut","sum.vim","quickhigh.tgz","selbuff.vim","ctx-1.15.vim","runscript.vim","random_vim_tip.tar.gz","PushPop.vim","usr2latex.pl","spellcheck.vim","PopupBuffer.vim","TableTab.vim","djgpp.vim","vim-spell.tar.gz","ada.vim","ada.vim","which.vim","VirMark.vim","oracle.vim","sql.vim","words_tools.vim","chcmdmod.vim","increment.vim","CmdlineCompl.vim","SearchCompl.vim","perl_io.vim","darkslategray.vim","undoins.vim","cisco-syntax.tar.gz","ShowMarks","EasyHtml.vim","ctags.vim","ant_menu.vim","increment.vim","autoload_cscope.vim","foldutil.vim","minibufexpl.vim","gtkvim.tgz","FavMenu.vim","auctex.vim","ruby-macros.vim","html-macros.vim","vimsh.tar.gz","libList.vim","perforce.vim","idevim.tgz","email.vim","mcant.vim","multvals.vim","TeTrIs.vim","boxdraw","tf.vim","CreateMenuPath.vim","Lineup--A-simple-text-aligner","Justify","A-better-tcl-indent","ViMail","remcmd.vim","prt_mgr.zip","SuperTab","treeexplorer","vtreeexplorer","bk-menu.vim","glib.vim","win-manager-Improved","ruby-menu.vim","renumber.vim","navajo.vim","wcd.vim","RExplorer","fortune.vim","MRU","Engspchk","vcal.vim","genutils","template-file-loader","charset.vim","ComplMenu.vim","bcbuf.vim","quickfonts.vim","DSP-Make","vimconfig","morse.vim","LaTeX-Help","MRU-Menu","ctx","Perldoc.vim","fine_blue.vim","sokoban.vim","linuxmag.vim","c.vim","lh-vim-lib","tagmenu.vim","xmms-play-and-enqueue","cmvc.vim","tex.vim","bccalc.vim","mkview.vim","VIlisp.vim","mu-template","xl_tiv.vim","night.vim","einstimer.vim","closeb","Brown","Expand-Template","search-in-runtime","Brace-Complete-for-CCpp","Smart-Tabs","spell.vim","print_bw.zip","std_c.zip","Naught-n-crosses","SourceSafe-Integration","Michaels-Standard-Settings","Hex-Output","Visual-Mapping-Maker","perforce","xul.vim","cream-capitalization","mu-marks","imaps.vim","JavaRun","Buffer-Menus","cream-ascii","vimRubyX","update_vim","bnf.vim","lid.vim","UserMenu.vim","midnight.vim","tmpl.vim","ihtml.vim","pascii","XSLT-syntax","htmlmap","lastchange.vim","manxome-foes-colorscheme","vimdoc","doc.vim","csc.vim","aspnet.vim","brief.vim","java.vim","Nsis-color","byteme.vim","scite-colors","Cool-colors","navajo-night","multi.vim","taglist.vim","User-Defined-Type-Highlighter","camo.vim","adrian.vim","PrintWithLNum","sybase.vim","Projmgr","netdict","ExecPerl","candy.vim","txt2pdf.vim","unilatex.vim","potts.vim","sessmgr","outlineMode.vim","aqua","serverlist.vim","ruby-matchit","autodate.vim","xian.vim","utl.vim","Align","bluegreen","showbrace","latextags","vimfortune","TabIndent","Vimacs","xmledit","AnsiEsc.vim","ftpluginruby.vim","pyimp.vim","sql_iabbr.vim","gnome-doc.vim","xemacs-colorscheme","fog-colorscheme","CSV-delimited-field-jumper","cream-sort","grep.vim","ipsec_conf.vim","EDIFACT-position-in-a-segment","tomatosoup.vim","xchat-log-syntax","broadcast.vim","vera.vim","f.vim","highlightline.vim","hungarian_to_english","Buffer-Search","srecord.vim","reformat.vim","multivim","JavaImp.vim","PHPcollection","JHTML-syntax-file","Nightshimmer","cfengine-syntax-file","code2html","prt_hdr","cream-progressbar","QuickAscii","bw.vim","lh-cpp","vtags","vtags_def","ASP-maps","tforge.vim","pf.vim","sand","fstab-syntax","MqlMenu.vim","lcscheck.vim","php.vim","textlink.vim","White-Dust","ruby.vim","Highlight-UnMatched-Brackets","localColorSchemes.vim","multipleRanges.vim","getVar.vim","variableSort.vim","vimrc_nopik","dbext.vim","openroad.vim","java_apidoc.vim","ABAP.vim","rcsdiff.vim","snippet.vim","opsplorer","cream-showinvisibles","bash-support.vim","ldraw.vim","DirDo.vim","oceandeep","atomcoder-vim","Expmod","timstamp.vim","Red-Black","ftpluginruby.vim","indentruby.vim","Denim","mof.vim","vim-game-of-life","ia64.vim","d.vim","PreviewTag.vim","ShowLine.vim","ShowBlockName.vim","SyntaxAttr.vim","DarkOcean.vim","ibmedit.vim","python_match.vim","rnc.vim","LbdbQuery.vim","scratch-utility","plp.vim","LaTeX-functions","ocean.vim","spectre.vim","bugfixes-to-vim-indent-for-verilog","gri.vim","scilab.vim","ShowFunc.vim","maxima.vim","ironman.vim","sean.vim","regRedir.vim","colormenu.vim","eruby.vim","getmail.vim","colour_flip.pl","blackdust.vim","CVSAnnotate.vim","beanshell.vim","svn.vim","muf.vim","tex.vim","cvopsefsa.vim","ActionScript","plsql.vim","Zenburn","Kent-Vim-Extensions","plsql.vim","Registryedit-win32","syslog-syntax-file","MySQL-script-runner","elinks.vim","eukleides.vim","jcl.vim","midnight2.vim","smlisp.vim","lustre","lustre-syntax","VimFootnotes","biogoo.vim","Get-Win32-Short-Name","Get-UNC-Path-Win32","pythonhelper","javaGetSet.vim","copycppdectoimp.vim","cppgetset.vim","titlecase.vim","stata.vim","localvimrc","lilac.vim","spacehi.vim","deldiff.vim","Syntax-for-the-BETA-programming-language","JavaDecompiler.vim","exim.vim","java_checkstyle.vim","gmt.vim","xhtml.vim","EasyAccents","draw.vim","HTML.zip","sql.vim","php_abb","xgen.vim","noweb.vim","PCP-header","vim-templates","rrd.vim","TTCoach","nw.vim","rainbow.zip","VB-Line-Number","vimspell","perl_h2xs","emodeline","VEC","fnaqevan","HTML-Photo-Board","cream-vimabbrev","mup.vim","BlockComment.vim","SearchComplete","LaTeX-Suite-aka-Vim-LaTeX","Transparent","python.vim","aj.vim","MultipleSearch","toothpik.vim","cscomment.vim","cuecat.vim","tagexplorer.vim","ddldbl.vim","markjump.vim","SAPDB_Pascal.vim","Posting","cream-keytest","ManPageView","java_getset.vim","debug.vim","SQLUtilities","Cpp-code-template-generator","ri-browser","sql.vim","poser.vim","waimea.vim","sql.vim","SpellChecker","foldlist","OO-code-completion","transvim.vim","Macromedia-Director-Lingo-Syntax","oz.vim","python_box.vim","greputil.vim","mercury.vim","ZoomWin","mailsig","Varrays","casejump.vim","Printer-Dialog","Indent-Finder","mrswin.vim","python_fold","sr.vim","TVO--The-Vim-Outliner","csv-color","CVS-conflict-highlight","PHPDoc-Script-PDocS","mru.vim","tar.vim","VimITunes.vim","Visual-Studio-.NET-compiler-file","cscope-menu","pdbvim","cppcomplete","mh","blockquote.vim","Mixed-sourceassembly-syntax-objdump","elvis-c-highlighting","colorer-color-scheme","ntservices","PHP-dictionary","tiger.vim","tiger.vim","tab-syntax","cream-email-munge","FavEx","apdl.vim","velocity.vim","russian-menu-translation","nuweb.vim","flyaccent.vim","ebnf.vim","IDLATL-Helper","as.vim","Mines","coffee.vim","adp.vim","mruex","HiCurLine","perl-support.vim","BOG","spreadsheet.vim","BufClose.vim","MPD-syntax-highlighting","help.vim","rd.vim","rcsvers.vim","ASPRecolor.vim","HTML--insert","ctrlax.vim","desc.vim","ntprocesses","caramel.vim","GTK","autolisp-help","wintersday.vim","darkdot","TEXT--fill-char","gnu-c","psp.vim","dawn","allfold","fgl.vim","autonumbering-in-vim","cg.vim","matlab.vim","comment.vim","pyljpost.vim","todolist.vim","northsky","fgl.c","JavaBrowser","seashell","BlackSea","PapayaWhip","ChocolateLiquor","guifontpp.vim","TaQua","HelpClose","colorpalette.vim","python-tools","execmap","cmake.vim","cmake.vim","vimwc.sh","vimbadword.sh","oceanblack.vim","php.vim-html-enhanced","cream-numberlines","asmMIPS","valgrind.vim","toc.vim","Qt.vim","ctags.vim","dante.vim","cpp.vim","gisdk","CRefVim","ruler.vim","Asciitable.vim","Adaryn.vim","BreakPts","brookstream","Russian-menu-for-gvimwin32","Conflict2Diff","tagsubmenu","m4pic.vim","nightwish.vim","Color-Sampler-Pack","ShowPairs","MarkShift","SeeTab","putty","resolv.conf-syntax","cf.vim","make-element","Reindent","otf.vim","sparc.vim","getdp","COMMENT.vim","WC.vim","gmsh.vim","SYN2HTML","tcsoft.vim","GetLatestVimScripts","WML-Wireless-Markup-Language-syntax","Color-Scheme-Test","greyblue.vim","colorize","DOS-Commands","fte.vim","chordpro.vim","vectorscript.vim","uniq.vim","stol.vim","ldap_schema.vim","ldif.vim","proc.vim","esperanto","epperl.vim","headers.vim","sip.vim","gpg.vim","gnupg","xml_cbks","VimDebug","scratch.vim","FeralToggleCommentify.vim","hexman.vim","Dotnet-Dictionaries","random.vim","matrix.vim","VisIncr","autumn.vim","listmaps.vim","Maxlen.vim","MakeDoxygenComment","VS-like-Class-Completion","GenerateMatlabFunctionComment","pgn.vim","genindent.vim","fluxbox.vim","ferallastchange.vim","blockhl2.vim","cschemerotate.vim","ftplugin-for-Calendar","Comment-Tools","incbufswitch.vim","feralalign.vim","VimTweak","calibre.vim","cleanphp","actionscript.vim","POD-Folder","VimSpeak","ample.vim","quancept.vim","po.vim","timecolor.vim","timecolor.vim","Visual-Cpp","NEdit","OIL.vim","cg.vim","parrot.vim","xmmsctrl.vim","isi2bib","sketch.vim","gdl.vim","msp.vim","brainfuck-syntax","sfl.vim","browser-like-scrolling-for-readonly-file","nuvola.vim","SideBar.vim","MSIL-Assembly","cygwin.vim","mupad.vim","trash.vim","wiki.vim","tagMenu","local_vimrc.vim","Hanoi-Tower","sudo.vim","co.vim","xmidas.vim","folddigest.vim","quicksession.vim","sql.vim","pam.vim","kickstart.vim","mdl.vim","gor.vim","yaml.vim","sbutils","movewin.vim","SwapHeader","svn.vim","dhcpd.vim","curcmdmode","cmdalias.vim","Intellisense-for-Vim","HelpExtractor","pic.vim","aiseered.vim","winhelp","opengl.vim","ttcn-syntax","ttcn-indent","VDLGBX.DLL","python_encoding.vim","showpairs-mutated","dusk","LogCVSCommit","peaksea","lpc.vim","hlcontext.vim","dont-click","gvim-with-tabs","VHDL-indent","ttcn-dict","mis.vim","table.vim","Source-Control","ocamlhelp.vim","umber-green","vgrep","lebrief.vim","vimcdoc","whereis.vim","highlight_cursor.vim","ntp.vim","php_console.vim","sessions.vim","pyfold","oasis.vim","gdm.vim","fluka.vim","vartabs.vim","delek.vim","qt2vimsyntax","tokens.vim","set_utf8.vim","python.vim","Relaxed-Green","simpleandfriendly.vim","ttcn-ftplugin","promela.vim","xterm16.vim","bmichaelsen","preview.vim","Walk.vim","FindMakefile","MixCase.vim","javaDoc.vim","gramadoir.vim","XQuery-syntax","expand.vim","zrf.vim","truegrid.vim","dks-il2-tex.vim","vimcommander","Smart-Diffsplit","robinhood.vim","darkblue2.vim","billw.vim","mail.vim","white.vim","HHCS_D","enumratingptn","HHCS","ephtml","rgbasm.vim","Mouse-Toggle","BlockWork","avrasm.vim","yum.vim","asmM68k.vim","find_in_files","mp.vim","Intellisense","VimNotes","gq","TT2-syntax","xmaslights.vim","smartmake","httpclog","RTF-1.6-Spec-in-Vim-Help-Format","systemc_syntax.tar.gz","selected-resizer","PureBasic-Syntax-file","macro.vim","python.vim","text.py","yo-speller","increment.vim","nasl.vim","ptl.vim","pyab","mars.vim","howto-ftplugin","SrchRplcHiGrp.vim","latex-mik.vim","Pydiction","Posting","Gothic","File-local-variables","less.vim","FX-HLSL","NSIS-2.0--Syntax","table_format.vim","LocateOpen","Destructive-Paste","inform.vim","VikiDeplate","cscope-quickfix","BlackBeauty","visual_studio.vim","unmswin.vim","Israelli-hebrew-shifted","phoneticvisual-hebrew-keyboard-mapphone","Redundant-phoneticvisual-Hebrew-keyboar","changesqlcase.vim","changeColorScheme.vim","allout.vim","Syntax-context-abbreviations","srec.vim","emacsmode","bufman.vim","automation.vim","GVColors","Posting","RegExpRef","passwd","buttercream.vim","fluxkeys.vim","ods.vim","AutoAlign","FormatBlock","FormatComment.vim","docbkhelper","armasm","EvalSelection.vim","edo_sea","pylint.vim","winpos.vim","gtags.vim","Viewing-Procmail-Log","Toggle","perl_synwrite.vim","ViewOutput","CharTab","nesC","Tower-of-Hanoi","sharp-Plugin-Added","ratfor.vim","fvl.vim","yiheb-il.vim","sql.vim","Editable-User-Interface-EUI-eui_vim","html_umlaute","nvi.vim","unicodeswitch.vim","pydoc.vim","nedit2","adam.vim","po.vim","sieve.vim","AsNeeded","Nibble","fdcc.vim","CSS-2.1-Specification","sqlldr.vim","tex_autoclose.vim","bufmenu2","svncommand.vim","timestamp.vim","html_portuquese","AutoFold.vim","russian-phonetic_utf-8.vim","colorsel.vim","XpMenu","timelog.vim","virata.vim","VimIRC.vim","TogFullscreen.vim","database-client","ftpsync","svg.vim","Karma-Decompiler","autosession.vim","newheader.vim","sccs.vim","screen.vim","edifact.vim","pqmagic.vim","ProjectBrowse","n3.vim","groovy.vim","StyleChecker--perl","2tex.vim","Scons-compiler-plugin","qf.vim","af.vim","aspnet.vim","psql.vim","multiselect","xml2latex","ToggleComment","php-doc","YAPosting","blugrine","latex_pt","replace","DumpStr.vim","RemoteSaveAll.vim","FTP-Completion","nexus.vim","uptime.vim","asmx86","php.vim-for-php5","autoit.vim","pic18fxxx","IncrediBuild.vim","folds.vim","chela_light","rest.vim","indentpython.vim","Siebel-VB-Script-SVB","Tibet","Maxscript","svn-diff.vim","idf.vim","ssa.vim","GtkFileChooser","Simple-templates","onsgmls.vim","mappinggroup.vim","metacosm.vim","ASPJScript","DoxygenToolkit.vim","VHT","pdftotext","rpl","rpl","rpl","aspvbs.vim","FiletypeRegisters","nant-compiler-script","tbf-vimfiles","Window-Sizes","menu_pt_br.vimfix","TransferChinese.vim","gtk-vim-syntax","2htmlj","glsl.vim","SearchInBuffers.vim","Docbook-XSL-compiler-file","Phrases","Olive","Lynx-Offline-Documentation-Browser","srec.vim","srec.vim","lingo.vim","buflist","lingodirector.vim","PLI-Tools","clipbrd","check-mutt-attachments.vim","corewars.vim","redcode.vim","potwiki.vim","updt.vim","revolutions.vim","feralstub.vim","Phoenity-discontinued","aftersyntax.vim","IndentHL","xmlwf.vim","Visual-Mark","errsign","log.vim","msvc2003","scalefont","uc.vim","commenter","OOP.vim","cream-iso639.vim","cream-iso3166-1","HTMLxC.vim","vimgrep.vim","array.vim","vimtabs.vim","CodeReviewer.vim","cube.vim","uc.vim","uc.vim","sf.vim","monday","ST20-compiler-plugin","R.vim","octave.vim","delete.py","groff-keymap","The-Mail-Suite-tms","browser.vim","InteractHL.vim","curBuf.vim","vsutil.vim","DavesVimPack","Menu-Autohide","pygtk_color","Vive.vim","actionscript.vim","greputils","HC12-syntax-highlighting","asp.vim","click.vim","cecutil","mingw.vim","abap.vim","vimsh","dsPIC30f","BufOnly.vim","ConfirmQuit.vim","fasm-compiler","python_calltips","netrw.vim","cscope_win","lindo.vim","VUT","replvim.sh","xmms.vim","HiColors","MS-Word-from-VIM","multiwin.vim","multiAPIsyntax","earth.vim","Black-Angus","tpp.vim","cfengine.vim","sas.vim","InsertTry.vim","VimRegEx.vim","blitzbasic.vim","Archive","cream-statusline-prototype","TabLaTeX","buffer-perlpython.pl","txt2tags-menu","hamster.vim","hamster.vim","clearsilver","hamster.vim","VB.NET-Syntax","VB.NET-Indent","ACScope","ptu","java_src_link.vim","AutumnLeaf","WhatsMissing.vim","bulgarian.vim","edifile.vim","rcs.vim","pydoc.vim","TWiki-Syntax","pmd.vim","BodySnatcher","MapleSyrup","ooosetup.vim","reverse.vim","mod_tcsoft.vim","PHP-correct-Indenting","anttestreport","lingo.vim","lpl.vim","UpdateModDate.vim","vimUnit","lxTrace","vim2ansi","synmark.vim","vim_faq.vim","jhlight.vim","javascript.vim","css.vim","scratch.vim","Japanese-Keymapping","vcbc.vim","scilab.tar.gz","scilab.tar.gz","tree","FileTree","Cisco-ACL-syntax-highlighting-rules","header.vim","inkpot","jhdark","C-fold","ccimpl.vim","bufkill.vim","perl-test-manage.vim","GetFDCText.vim","cygwin_utils.vim","globalreplace.vim","remote-PHP-debugger","xbl.vim","JavaKit","ledger.vim","ledger.vim","txt2tags","unhtml","pagemaker6","tSkeleton","foldcol.vim","jexplorer","html_danish","EditJava","tolerable.vim","Wiked","substitute.vim","sharp-Indent","GoboLinux-ColorScheme","Abc-Menu","DetectIndent","templates.vim","tComment","Rhythmbox-Control-Plugin","sharp-Syntax","oceanlight","OAL-Syntax","PVCS-access","context_complete.vim","fileaccess","avr.vim","tesei.vim","MultipleSearch2.vim","uniface.vim","turbo.vim","rotate.vim","cream-replacemulti","cleanswap","matrix.vim","hcc.vim","wc.vim","AutoUpload","expander.vim","vfp8.vim","vis","omlet.vim","ocaml.annot.pl","nodiff.vim","increment_new.vim","namazu.vim","c.vim","bsh.vim","WhereFrom","oo","Java-Syntax-and-Folding","ProvideX-Syntax","DNA-Tools","vimCU","cvsvimdiff","latexmenu","XML-Indent","AddIfndefGuard","Vim-JDE","cvsdiff.vim","Super-Shell-Indent","cool.vim","Perldoc-from-VIM","The-NERD-Commenter","darkblack.vim","OpenGLSL","monkeyd-configuration-syntax","OCaml-instructions-signature---parser","plist.vim","my-_vimrc-for-Windows-2000XP7-users","DotOutlineTree","Vim-klip-for-Serence-Klipfolio-Windows","explorer-reader.vim","recent.vim","crontab.freebsd.vim","Rainbow-Parenthesis","mom.vim","DoTagStuff","gentypes.py","YankRing.vim","mathml.vim","xhtml.vim","MS-SQL-Server-Syntax","Mark","autoit.vim","Guardian","octave.vim","Markdown-syntax","desert256.vim","Embedded-Vim-Preprocessor","cvsmenu.vim-updated","Omap.vim","swig","cccs.vim","vc_diff","Teradata-syntax","timekeeper","trt.vim","greens","VIMEN","pike.vim","aspvbs.vim","wood.vim","custom","sienna","tmda_filter.vim","cstol.vim","tex_umlaute","Quick-access-file-Menu","IComplete","Emacs-outline-mode","teol.vim","acsb","drcstubs","drc_indent","rubikscube.vim","php_check_syntax.vim","Mathematica-Syntax-File","Mathematica-Indent-File","SpotlightOpen","autoscroll","vsearch.vim","quantum.vim","ToggleOptions.vim","crontab.vim","tagselect","TinyBufferExplorer","TortoiseSVN.vim","nasl.vim","sadic.tgz","tabs.vim","otherfile.vim","otherfile.vim","LogiPat","luarefvim","keywords.vim","Pida","nightshade.vim","form.vim","rsl.vim","Color-Scheme-Explorer","Project-Browser-or-File-explorer-for-vim","Shortcut-functions-for-KeepCase-script-","maximize.dll","recycle.dll-and-recycle.vim","php_funcinfo.vim","T7ko","cguess","php_template","another-dark-scheme","java_fold","DataStage-Universe-Basic","vimplate","vimplate","bwftmenu.vim","asmM6502.vim","udvm.vim","bwHomeEndAdv.vim","bwUtility.vim","snippetsEmu","perlprove.vim","Dynamic-Keyword-Highlighting","CSVTK","ps2vsm","advantage","The-Stars-Color-Scheme","bufferlist.vim","Impact","Windows-PowerShell-Syntax-Plugin","xslt","verilogams.vim","XHTML-1.0-strict-help-file","sudoku","tidy","Pleasant-colorscheme","VST","A-soft-mellow-color-scheme","Professional-colorscheme-for-Vim","pluginfonts.vim","TabBar","Autoproject","last_change","last_change","AutoTag","switchtags.vim","dmd","VIM-Email-Client","cxxcomplete","The-Vim-Gardener","Colortest","Mud","Mud","Modelines-Bundle","syntaxada.vim","Night-Vision-Colorscheme","PDV--phpDocumentor-for-Vim","eraseSubword","larlet.vim","Cthulhian","SmartCase","HP-41-syntax-file","HP-41-file-type-plugin","Last-Modified","cloudy","xslhelper.vim","adobe.vim","Peppers","syntaxconkyrc.vim","bookmarks.vim","Zopedav","CVSconflict","TextMarker","ldap.vim","asmh8300","TailMinusF","QFixToggle","fpc.vim","Chars2HTML","cfengine-log-file-highlighting","syntaxuil.vim","cHeaderFinder","syntaxudev.vim","charon","SessionMgr","UniCycle","interfaces","gdbvim","build.vim","jay-syntax","d.vim","GreedyBackspace.vim","BuildWin","py_jump.vim","motus.vim","fish.vim","Processing-Syntax","range-search.vim","xml.vim","tagSetting.vim","javap.vim","desertedocean.vim","Zen-Color-Scheme","DarkZen-Color-Scheme","gnupg-symmetric.vim","desertedocean.vim","understated","impactG","DesertedOceanBurnt","Local-configuration","OMNeTpp-NED-syntax-file","Workspace-Manager","bwTemplate","vim_colors","brsccs.vim","bibFindIndex","Auto-debug-your-vim","shorewall.vim","carvedwood","avs.vim","jadl.vim","openvpn","softblue","bufmap.vim","corn","dtdmenu","iptables","CarvedWoodCool","darkerdesert","selection_eval.vim","cfname","checksyntax","textutil.vim","haml.zip","Dev-Cpp-Scheme","HiMtchBrkt","Compiler-Plugin-for-msbuild-csc","XML-Folding","compilerpython.vim","winmanager","xsl-fo","XML-Completion","telstar.vim","colors","AllBuffersToOneWindow.vim","MoveLine","Altair-OptiStruct-Syntax","Low-Contrast-Color-Schemes","vera.vim","VHDL-indent-93-syntax","svn_commit","cecscope","baycomb","VCard-syntax","copypath.vim","CycleColor","Grape-Color","moin.vim","glark.vim","syntaxm4.vim","dtd2vim","docbook44","moria","Ant","netrw.vim","far","bayQua","promela","lbnf.vim","watermark","Sift","vim7-install.sh","yellow","maude.vim","Modeliner","Surveyor","muttrc.vim","CmdlineCompl.vim","cvops-aut.vim","kid.vim","marklar.vim","spectro.vim","StickyCursor","fasm.vim","django.vim","ScrollColors","PluginKiller","jr.vim","JavaScript-syntax","pyte","Sudoku-Solver","Efficient-python-folding","derefined","initng","Align.vim","all-colors-pack","rfc2html","delins.vim","slr.vim","Vimball","Search-unFold","jbase.vim","jbase.vim","LargeFile","TabLineSet.vim","XHTML-1.0-Strict-vim7-xml-data-file","autohi","manuscript.vim","screenpaste.vim","VimVS6","SwitchExt","VhdlNav","smcl.vim","changelog","ClassTree","icalendar.vim","OmniCppComplete","maven2.vim","WinWalker.vim","cmaxx","magic.vim","vbnet.vim","javaimports.vim","habiLight","comments.vim","FlexWiki-syntax-highlighting","timing.vim","backburnerEdit_Visual_Block.vim","txt.vim","amarok.vim","vimproject","TagsParser","remind","pluginbackup.vim","colorsmartin_krischik.vim","Highlighter.vim","mousefunc-option-patch","GetChar-event-patch","pythoncomplete","Tabline-wrapping-patch","foxpro.vim","abolish.vim","perl_search_lib","compilergnat.vim","ftpluginada.vim","bluez","jVim","Simple-Color-Scheme","ScreenShot","autoproto.vim","autoloadadacomplete.vim","CD_Plus","xul.vim","Toggle-Window-Size","icansee.vim","KDE-GVIM-vimopen","Neverness-colour-scheme","Rainbow-Parenthsis-Bundle","patchreview.vim","forth.vim","ftdetectada.vim","gtd","rails.vim","abnf","montz.vim","redstring.vim","php.vim","SQLComplete.vim","systemverilog.vim","settlemyer.vim","findstr.vim","crt.vim","css.vim","tcl.vim","cr-bs-del-space-tab.vim","FlagIt","lookupfile","vim-addon-background-cmd","tobase","Erlang-plugin-package","actionscript.vim","verilog_systemverilog.vim","myghty.vim","ShowFunc","skk.vim","unimpaired.vim","octave.vim","crestore.vim","comment.vim","showhide.vim","warsow.vim","blacklight","color_toon","yanktmp.vim","highlight.vim","pop11.vim","Smooth-Scroll","developer","tcl.vim","colornames","gsl.vim","HelpWords","color_peruse","Chrome-syntax-script","Ada-Bundle","IncRoman.vim","Access-SQL-Syntax-file","vj","phps","Satori-Color-Scheme","SWIG-syntax","tdl.vim","afterimage.vim","cshelper","vimtips_with_comments","scvim","phpx","TIMEIT","phpfolding.vim","pastie.vim","x12-syntax","liquid.vim","doriath.vim","findfuncname.vim","XChat-IRC-Log","gnuchangelog","sh.vim","svncommand-tng","matlab_run.vim","candycode.vim","JDL-syntax-file","myfold.vim","SourceCodeObedience","MultiTabs","cpp.vim","AfterColors.vim","zzsplash","SuperTab-continued.","switch_headers.vim","tikiwiki.vim","str2numchar.vim","addexecmod.vim","ASL","scrollfix","asmx86_64","freya","highlight_current_line.vim","proe.vim","git.zip","cobol.zip","quilt","doxygenerator","The-NERD-tree","dw_colors","mint","redocommand","rubycomplete.vim","asm8051.vim","buftabs","tavi.vim","Alternate-workspace","campfire","blink","doorhinge.vim","darktango.vim","blueprint.vim","pdf.vim","Drupal-5.0-function-dictionary","toggle_words.vim","twilight","Tab-Name","tidy-compiler-script","Vexorian-color-scheme","ekvoli","IndexedSearch","Darcs","DNA-sequence-highlighter","plaintex.vim","Tango-colour-scheme","jdox","MakeInBuilddir","mail_indenter","IndentConsistencyCop","IndentConsistencyCopAutoCmds","tailtab.vim","desertEx","SnippetsMgr","StateExp","VPars","surround.vim","C_Epita","vimGTD","vimksh","Remove-Trailing-Spaces","edc-support","vdb.vim","vdb-duplicated","redcode.vim","Marks-Browser","php_getset.vim","FencView.vim","scons.vim","SWIFT-ATE-Syntax","Business-Objects-Syntax","Test.Base-syntax","darker-robin","Tail-Bundle","tcl_snit.vim","tcl_sqlite.vim","tcl.vim","tabula.vim","WLS-Mode","gvimext.dll--support-tabs-under-VIM-7","renamer.vim","cf.vim","vimpager","pyljvim","capslock.vim","ruby_imaps","Templeet","sal-syntax","exUtility","tAssert","perlcritic-compiler-script","rdark","aedit","vbugle","echofunc.vim","applescript.vim","gnuplot.vim","RunVim.applescript","Info.plist","filetype.vim","R-MacOSX","Utility","vst_with_syn","nightflight.vim","amifmt.vim","compilerflex.vim","javascript.vim","toggle_word.vim","GotoFileArg.vim","kib_darktango.vim","tGpg","kib_plastic","surrparen","TTrCodeAssistor","sparql.vim","BinarySearchMove","lbdbq","kate.vim","conlangs","lojban","surrogat","aspnetcs","lua-support","code_complete","tcl_itcl.vim","tcl_togl.vim","recent.vim","SnipSnap","lispcomplete.vim","etk-vim-syntax","woc","DAMOS-tools","Haml","Menu_SQL_Templates.vim","tcl_critcl.vim","Vimgrep-Replace","cvsdiff","Wombat","tcmdbar.vim","scala.vim","mlint.vim","polycl.vim","cscope-wrapper","apachestyle","javacomplete","hexsearch.vim","wikipedia.vim","Bexec","Audacious-Control","tagscan","erm.vim","fcsh-tools","vibrantink","autoloadTemplate.vim","SETL2","svnvimdiff","smarty.vim","polycfg.vim","IndentHL","c16gui","eclipse.vim","compview","brief2","SearchFold","MultiEnc.vim","calmar256-lightdark.vim","Vimplate-Enhanced","guicolorscheme.vim","Infobasic-Set-Syntax-FTDetect-FTPlugi","Random-Tip-Displayer","gotofile","greplace.vim","sqlvim.sh","Windows-PowerShell-Indent-File","Windows-PowerShell-File-Type-Plugin","buffers_search_and_replace","Yankcode","vimbuddy.vim","NAnt-completion","NAnt-syntax","incfilesearch.vim","NetSend.vim","Hints-for-C-Library-Functions","Hints-for-C-Library-Functions","smp","writebackup","writebackupVersionControl","html-improved-indentation","VimSpy","asciidoc.vim","des3.vim","st.vim","RDF-Namespace-complete","bufpos","BlitzBasic-syntax-and-indentation","tEchoPair","IndentAnything","Javascript-Indentation","nicotine.vim","screenplay","jman.vim","OceanBlack256","haproxy","gitdiff.vim","NesC-Syntax-Highlighting","arpalert","AutoClose","carrot.vim","SearchSyntaxError","clarity.vim","Twitter","Xdebugxs-dictionary-of-functions","textmate16.vim","Jinja","native.vim","mako.vim","eZVim","Directory-specific-settings","errormarker.vim","kpl.vim","tlib","tmru","tselectfiles","tselectbuffer","doctest-syntax","simplefold","genshi.vim","django.vim","fruity.vim","summerfruit.vim","projtags.vim","psql.vim","verilog_emacsauto.vim","securemodelines","voodu.vim","vimoutliner-colorscheme-fix","AutoComplPop","ck.vim","svndiff","Increment-and-Decrement-number","felix.vim","python_import.vim","scmCloseParens","nginx.vim","AnyPrinter","DiffGoFile","automated-rafb.net-uploader-plugin","LustyExplorer","vividchalk.vim","CimpTabulate.vim","vmake","Vim-Setup-system","gmcs.vim","ragtag.vim","synic.vim","vcsnursery","FindFile","ael.vim","freefem.vim","skill_comment.vim","REPL","ReloadScript","camelcasemotion","tmboxbrowser","snipper","creole.vim","QuickBuf","SuperPre","in.vim","perlhelp.vim","tbibtools","vdm.vim","mySqlGenQueryMenu.vim","Scheme-Mode","clibs.vim","cvsps-syntax","javalog.vim","ChocolatePapaya","vpp.vim","omniperl","context-complier-plugin","bbs.vim","syntaxalgol68.vim","Rename","DBGp-client","maxscript.vim","svndiff.vim","visSum.vim","html_french","git-commit","rectcut","OOP-javascript-indentation","Syntax-for-XUL","todo.vim","autofmt","drools.vim","fx.vim","stingray","JSON.vim","QuickFixFilterUtil","outline","Dictionary","VimExplorer","gvim-pdfsync","systemverilog.vim","Vimpress","yavdb","doxygen-support.vim","smart_cr","yasnippets","SmartX","CharSort","cimpl","Tabmerge","Simple256","vimscript-coding-aids","tie.vim","lodgeit.vim","Ruby-Snippets","gvim-extensions-for-TALpTAL","indenthaskell.vim","Highlight-and-Mark-Lines","deb.vim","trivial256","Parameter-Helpers","JET_toggle","pyconsole_vim.vim","lettuce.vim","rcscript","rcscript","Easy-alignment-to-column","Sass","vimremote.sh","halfmove","vimff","GtagsClient","FuzzyFinder","runtests.vim","mosalisp.vim","khaki.vim","two2tango","gitvimdiff","kwiki.vim","Shell-History","triangle.vim","NightVision","confluencewiki.vim","railscasts","bruce.vim","undo_tags","iast.vim","sas.vim","blinking_cursor","lookup.vim","python_ifold","gobgen","ColorSchemeMenuMaker","karma.vim","progressbar-widget","greplist.vim","buffer-status-menu.vim","AutoClose","sessionman.vim","dbext4rdb","openssl.vim","DrillCtg","ttoc","cheat.vim","no_quarter","tregisters","ttags","3DGlasses.vim","Gettext-PO-file-compiler","headerguard.vim","Tailf","erlang-indent-file","brew.vim","camlanot.vim","motion.vim","taskpaper.vim","MarkLines","4NT-Bundle","vimblog.vim","makeprgs","swap-parameters","trag","colorful256.vim","F6_Comment-old","F6_Comment","hookcursormoved","narrow_region","QuickComment","tcalc","AutoScrollMode","of.vim","VimPdb","myvim.vim","mips.vim","Flash-Live-Support-Agent-and-Chatroom","nosql.vim","BlockDiff","vimpp","LustyJuggler","enscript-highlight","idlang.vim","asmc54xx","TranslateIt","ttagecho","soso.vim","PropBank-Semantic-Role-Annotations","matchparenpp","winwkspaceexplorer","Warm-grey","haskell.vim","coq-syntax","xemacs-mouse-drag-copy","checksum.vim","executevimscript","newlisp","yate","ttagcomplete","bbcode","yet-another-svn-script","switch-files","rcg_gui","rcg_term","indenthtml.vim","setsyntax","phtml.vim","industrial","Coq-indent","autoresize.vim","mysqlquery","comments.vim","javascript.vim","gen_vimoptrc.vim","TI-Basic-Syntax","code-snippet","refactor","WuYe","Acpp","view_diff","verilog.vim","reloaded.vim","complval.vim","Puppet-Syntax-Highlighting","Smartput","Tab-Menu","narrow","fakeclip","xml_autons","textobj-user","textobj-datetime","EnvEdit.vim","kwbdi.vim","R.vim","oberon2","hiveminder.vim","scratch","csv-reader","BBCode","chords","robocom","autohotkey-ahk","pspad-colors-scheme","Torquescript-syntax-highlighting","Processing","Io-programming-language-syntax","GCov-plugin","gcov.vim","webpreview","speeddating.vim","HeaderCVS","bg.py","basic-colors","Twitter","SDL-library-syntax-for-C","accurev","Wikidoc-syntax-highlighting","symfony.vim","Noweb","XmlPretty","Socialtext-wiki-syntax-highlighting","byter","tintin.vim","tabpage_sort.vim","syntax-highlighting-for-tintinttpp","repeat.vim","Css-Pretty","PBwiki-syntax-highlighting","sgf.vim","xoria256.vim","undobranche_viewer.vim","showmarks","unibasic.vim","nice-vim","GOBject-Builder-gob2","prmths","VimTrac","quiltdiff","ncss.vim","css_color.vim","sessions.vim","snippets.vim","RecentFiles","marvim","greenvision","leo256","altfile","diffchanges.vim","timestamp","VFT--VIM-Form-Toolkit","DataStage-Server-and-Parallel","sharp-Syntax","GNU-R","renamec.vim","ukrainian-enhanced.vim","patran.vim","dakota.vim","Doxygen-via-Doxygen","jammy.vim","osx_like","PERLDOC2","head.vim","repmo.vim","Railscasts-Theme-GUIand256color","cwiki","rdhelp.txt","cqml.vim","Source-Explorer-srcexpl.vim","ColorSchemeEditor","reliable","vimlatex","smoothPageScroll.vim","file-line","git-file.vim","pig.vim","Latex-Text-Formatter","earendel","Luinnar","dtrace-syntax-file","MountainDew.vim","Syntax-for-Fasta","fpdf.vim","number-marks","Unicode-Macro-Table","antlr3.vim","beauty256","rastafari.vim","gauref.vim","northland.vim","SCMDiff","Boost-Build-v2-BBv2-syntax","vimgen","TwitVim","CoremoSearch","runzip","Relativize","Txtfmt-The-Vim-Highlighter","pyrex.vim","Shobogenzo","seoul","Obvious-Mode","VimTAP","Switch","darkspectrum","qfn","groovy.vim","debugger.py","Limp","bensday","Allegro-4.2-syntax-file","CmdlineComplete","tinymode.vim","STL-improved","sort-python-imports","vimwiki","browser.vim","autopreview","pacific.vim","beachcomber.vim","WriteRoom-for-Vim","h80","nc.vim","rtorrent-syntax-file","previewtag","WarzoneResourceFileSyntax","useful-optistruct-functions","StringComplete","darkrobot.vim","256-jungle","vcsbzr.vim","openser.vim","RemoveDups.VIM","less.bat","upf.vim","darkroom","FFeedVim","xml_taginsert","pac.vim","common_vimrc","journal.vim","publish.vim","railstab.vim","musicbox.vim","buffergrep","dark-ruby","bpel.vim","Git-Branch-Info","Named-Buffers","Contrasty","nagios-syntax","occur.vim","xtemplate","EZComment","vera.vim","silent.vim","colorful","apachelogs.vim","vim-rpcpaste","pygdb","AutoInclude","nightflight2.vim","gladecompletion.vim","flydiff","textobj-fold","textobj-jabraces","DevEiate-theme","jptemplate","cmdlinehelp","blackboard.vim","pink","brook.vim","huerotation.vim","cup.vim","vmv","Specky","fgl.vim","ctags.exe","loremipsum","smartchr","skeleton","linglang","Resolve","SwapIt","Glob-Edit","sipngrep","sipngrep-helper","codepad","fortran.vim","perl-mauke.vim","Gembase-dml-plugins","foldsearch","spring.vim","vimdb.vim","Textile-for-VIM","Text-Especially-LaTeX-Formatter","Clever-Tabs","portablemsys","GoogleSearchVIM","Indent-Highlight","softlight.vim","sofu.vim","QuickName","thegoodluck","auto_wc.vim","zoom.vim","zshr.vim","TextFormat","LaTeX-error-filter","batch.vim","catn.vim","nopaste.vim","Tumblr","log.vim","chlordane.vim","pathogen.vim","session.vim","backup.vim","metarw","metarw-git","ku","bundle","simple-pairs","molokai","postmail.vim","dictview.vim","ku-bundle","ku-metarw","Vimchant","bufmru.vim","trinity.vim","Chimp","indentgenie.vim","rootwater.vim","RltvNmbr.vim","stlrefvim","FastGrep","textobj-lastpat","Superior-Haskell-Interaction-Mode-SHIM","Nekthuth","tags-for-std-cpp-STL-streams-...","clue","louver.vim","diff_navigator","simplewhite.vim","vimxmms2","autoincludex.vim","ScopeVerilog","vcsc.py","darkbone.vim","CCTree","vimmp","Duplicated","sqloracle.vim","automatic-for-Verilog","ClosePairs","dokuwiki.vim","if_v8","vim-addon-sql","htmlspecialchars","mlint.vim","win9xblueback.vim","Verilog-constructs-plugin","RemoveIfdef","Note-Maker","winter.vim","buf2html.vim","sqlite_c","endwise.vim","cern_root.vim","conomode.vim","pdc.vim","CSApprox","MPC-syntax","Django-Projects","QuickTemplate","darkeclipse.vim","Fly-Between-Projects","Cutting-and-pasting-txt-file-in-middle","Fly-Between-Projects","hfile","cheat","sqlplsql","Russian-PLansliterated","advice","stackreg","Pit-Configuration","Robotbattle-Scripting-Language","Lissard-syntax","MatlabFilesEdition","Refactor-Color-Scheme","sql_iabbr-2","ku-args","Yow","lastchange","Miranda-syntax-highlighting","Tango2","textobj-diff","jQuery","Merb-and-Datamapper","Format-Helper","quickrun","gadgetxml.vim","PySmell","Wordnet.vim","Gist.vim","Transmit-FTP","arpeggio","nour.vim","code_complete-new-update","LineCommenter","autocorrect.vim","literal_tango.vim","commentToggle","corporation","W3AF-script-syntax-file","Side-C","Php-Doc","fuzzyjump.vim","shymenu","EasyGrep","Php-Doc","TagManager-BETA","pyflakes.vim","VimLocalHistory","Python-Documentation","Download-Vim-Scripts-as-Cron-Task","UpdateDNSSerial","narrow","Pago","PylonsCommand","sqlserver.vim","msdn_help.vim","nightsky","miko","eyapp","google","outputz","mtys-vimrc","unibox","enzyme.vim","AutoTmpl","AutoTmpl","Python-Syntax-Folding","kellys","session_dialog.vim","wombat256.vim","cdargs","submode","sandbox","translit","smartword","paintbox","Csound-compiler-plugin","python_open_module","Gentooish","ini-syntax-definition","cbackup.vim","Persistent-Abbreviations","ActionScript-3-Omnicomplete","grsecurity.vim","maroloccio","pygtk_syntax","Quagmire","Gorilla","textobj-indent","python_check_syntax.vim","proc.vim","fortran_codecomplete.vim","Rack.Builder-syntax","maroloccio2","eclm_wombat.vim","maroloccio3","ViBlip","pty.vim","Fruidle","Pimp","Changed","shellinsidevim.vim","blood","toggle_unit_tests","VimClojure","fly.vim","lightcolors","vanzan_color","tetragrammaton","VimIM","0scan","DBGp-Remote-Debugger-Interface","Spiderhawk","proton","RunView","guepardo.vim","charged-256.vim","ctxabbr","widower.vim","lilydjwg_green","norwaytoday","WOIM.vim","Dpaste.com-Plugin","reorder-tabs","searchfold.vim","wokmarks.vim","Jifty-syntax","Scratch","Thousand-separator","Perl-MooseX.Declare-Syntax","jpythonfold.vim","Thesaurus","IndentCommentPrefix","po.vim","slimv.vim","nxc.vim","muttaliasescomplete.vim","d.vim","cca.vim","Lucius","earthburn","ashen.vim","css-color-preview","snipMate","Mastermind-board-game","StarRange","SearchCols.vim","EditSimilar","Buffer-grep","repy.vim","xsltassistant.vim","php.vim","BusyBee","wps.vim","Vicle","jam.vim","irssilog.vim","CommentAnyWay","jellybeans.vim","myprojects","gitignore","Match-Bracket-for-Objective-C","gams.vim","numbertotext","NumberToEnglish","ansi_blows.vim","bufMenuToo","simple_comments.vim","runVimTests","utf8-math","Vim-Rspec","Blazer","LogMgr","vimdecdef","apidock.vim","ack.vim","Darkdevel","codeburn","std-includes","WinMove","summerfruit256.vim","lint.vim","Session-manager","spec.vim","Fdgrep","blogit.vim","popup_it","quickfixsigns","lilydjwg_dark","upAndDown","PDV-revised","glimpse","vylight","FSwitch","HTML-AutoCloseTag","Zmrok","LBufWin","tmarks","Skittles-Dark","gvimfullscreen_win32","lighttpd-syntax","reorder.vim","todolist.vim","Symfony","wargreycolorscheme","paster.vim","Haskell-Cuteness","svk","nextfile","vimuiex","TaskList.vim","send.vim","PA_translator","textobj-entire","xptemplate","Rubytest.vim","vimstall","sdticket","vimtemplate","graywh","SpamAssassin-syntax","ctk.vim","textobj-function","neocomplcache","up2picasaweb","ku-quickfix","TODO-List","ProtoDef","Cabal.vim","Vimya","exVim","Vim-R-plugin","explorer","compilerjsl.vim","dosbatch-indent","nimrod.vim","csindent.vim","SearchPosition","smartmatcheol.vim","google.vim","ScmFrontEnd-former-name--MinSCM","blogger","jlj.vim","tango-morning.vim","haskell.vim","PLI-Auto-Complete","python_coverage.vim","Erlang_detectVariable","bandit.vim","TagHighlight","Templates-for-Files-and-Function-Groups","darkburn","PBASIC-syntax","darkZ","fitnesse.vim","bblean.vim","cuteErrorMarker","Arduino-syntax-file","squirrel.vim","Simple-R-Omni-Completion","VOoM","Changing-color-script","g15vim","clips.vim","plumbing.vim","ywvim","mako.vim","HtmlHelper","Mark","setget","shell_it","fastlane","TuttiColori-Colorscheme","tango-desert.vim","Hoogle","smarttill","cocoa.vim","altercmd","supercat.vim","nature.vim","GoogleReader.vim","textobj-verticalbar","cursoroverdictionary","Colorzone","colorsupport.vim","FastLadder.vim","herald.vim","zOS-Enterprise-Compiler-PLI","cuteTodoList","iabassist","dual.vim","kalt.vim","kaltex.vim","fbc.vim","operator-user","ats-lang-vim","MediaWiki-folding-and-syntax-highlight","EnhancedJumps","elise.vim","elisex.vim","Dictionary-file-for-Luxology-Modo-Python","argtextobj.vim","PKGBUILD","editsrec","regreplop.vim","ReplaceWithRegister","mrpink","tiddlywiki","PA_ruby_ri","EnumToCase","commentop.vim","SudoEdit.vim","vimrc","Screen-vim---gnu-screentmux","sign-diff","nextCS","Tag-Signature-Balloons","UltiSnips","textobj-syntax","mutt-aliases","mutt-canned","Proj","arc.vim","AutoFenc.vim","cssvar","math","Rename2","translit_converter","Syntax-Highlighting-for-db2diag.log","jsbeautify","tkl.vim","jslint.vim","donbass.vim","sherlock.vim","Notes","Buffer-Reminder-Remake","PreviewDialog","Logcat-syntax-highlighter","Syntastic","bib_autocomp.vim","v2.vim","bclear","vimper","blue.vim","ruby.vim","greek_polytonic.vim","git-cheat","falcon.vim","nuweb-multi-language","d8g_01","d8g_02","d8g_03","d8g_04","vimdiff-vcs","falcon.vim","banned.vim","delimitMate.vim","evening_2","color-chooser.vim","forneus","Mustang2","Quich-Filter","Tortoise","qtmplsel.vim","falcon.vim","falcon.vim","dull","Better-Javascript-Indentation","Join.vim","emv","vimscript","pipe.vim","JumpInCode","Conque-Shell","Crazy-Home-Key","grex","whitebox.vim","logpad.vim","vilight.vim","tir_black","gui2term.py","moss","python-tag-import","Django-helper-utils","operator-replace","DumbBuf","template-init.vim","wwwsearch","cpan.vim","Melt-Vim","InsertList","rargs.vim","cmdline-increment.vim","popup_it","perdirvimrc--Autoload-vimrc-files-per-di","hybridevel","phpErrorMarker","Functionator","CheckAttach.vim","SoftTabStops","Pasto","tango.vim","Windows-PowerShell-indent-enhanced","NERD_tree-Project","JavaScript-syntax-add-E4X-support","php_localvarcheck.vim","chocolate.vim","assistant","md5.vim","Nmap-syntax-highlight","haxe_plugin","fontsize.vim","InsertChar","hlasm.vim","term.vim","MailApp","PyMol-syntax","hornet.vim","Execute-selection-in-Python-and-append","testname","Asneeded-2","smarty-syntax","DBGp-client","sqlplus.vim","unicode.vim","baan.vim","libperl.vim","filter","multisearch.vim","RTM.vim","Cobalt-Colour-scheme","roo.vim","csv.vim","mimicpak","xmms2ctrl","buf_it","template.vim","phpcodesniffer.vim","wikinotes","powershellCall","HiVim","QuickFixHighlight","noused","coldgreen.vim","vorg","FlipLR","simple-comment","ywchaos","haskellFold","pod-helper.vim","Script-Walker","color-codes-SQL-keywords-from-Oracle-11g","FindInNERDTree","Speedware","perlomni.vim","go.vim","go.vim","github-theme","vimmpc","exjumplist","textobj-fatpack","grey2","prettyprint.vim","JumpInCode-new-update","GNU-as-syntax","NSIS-syntax-highlighting","colqer","gemcolors","Go-Syntax","fortran_line_length","Ruby-Single-Test","OmniTags","FindMate","signature_block.vim","record-repeat.vim","php.vim","signal_dec_VHDL","HTML-menu-for-GVIM","spinner.vim","RDoc","XPstatusline","rc.vim","mib_translator","Markdown","growlnotify.vim","JavaAspect","gsession.vim","cgc.vim","manuscript","CodeOverview","bluechia.vim","slurper.vim","create_start_fold_marker.vim","doubleTap","filetype-completion.vim","vikitasks","PyPit","open-terminal-filemanager","Chrysoprase","circos.vim","TxtBrowser","gitolite.vim","ShowFunc.vim","AuthorInfo","Cfengine-3-ftplugin","Cfengine-version-3-syntax","vim-addon-manager","Vim-Condensed-Quick-Reference","hlint","Enhanced-Ex","Flex-Development-Support","restart.vim","selfdot","syntaxGemfile.vim","spidermonkey.vim","pep8","startup_profile","extended-help","tplugin","SpitVspit","Preamble","Mercury-compiler-support","FirstEffectiveLine.vim","vimomni","std.vim","tocterm","apt-complete.vim","SnippetComplete","Dictionary-List-Replacements","Vimrc-Version-Numbering","mark_tools","rfc-syntax","fontzoom.vim","histwin.vim","vim-addon-fcsh","vim-addon-actions","superSnipMate","bzr-commit","hexHighlight.vim","Multi-Replace","strawimodo","vim-addon-mw-utils","actionscript3id.vim","RubySinatra","ccvext.vim","visualstar.vim","AutomaticLaTeXPlugin","AGTD","bvemu.vim","GoogleSuggest-Complete","The-Max-Impact-Experiment","cflow-output-colorful","SaneCL","c-standard-functions-highlight","Wavefronts-obj","hypergit.vim","hex.vim","csp.vim","load_template","emoticon.vim","emoticon.vim","bisect","groovyindent","liftweb.vim","line-number-yank","neutron.vim","SyntaxMotion.vim","Doxia-APT","daemon_saver.vim","ikiwiki-nav","ucf.vim","ISBN-10-to-EAN-13-converter","sha1.vim","hmac.vim","cucumber.zip","mrkn256.vim","fugitive.vim","blowfish.vim","underwater","trogdor","Parameter-Text-Objects","php-doc-upgrade","ZenCoding.vim","jumphl.vim","qmake--syntax.vim","R-syntax-highlighting","BUGS-language","AddCppClass","loadtags","OpenCL-C-syntax-highlighting","pummode","stickykey","rcom","SaveSigns","ywtxt","Rackup","colorselector","TranslateEnToCn","utlx_interwiki.vim","BackgroundColor.vim","django-template-textobjects","html-advanced-text-objects","candyman.vim","tag_in_new_tab","indentpython","vxfold.vim","simplecommenter","CSSMinister","Twee-Integration-for-Vim","httplog","treemenu.vim","delete-surround-html","tumblr.vim","vspec","tcommand","ColorX","alex.vim","happy.vim","Cppcheck-compiler","vim-addon-completion","spin.vim","EasyOpts","Find-files","Bookmarking","tslime.vim","vimake","Command-T","PickAColor.vim","grsecurity","rename.vim","tex-turkce","motpat.vim","orange","Mahewincs","Vim-Title-Formatter","syntaxhaskell.vim","tesla","XTermEsc","vim-indent-object","noweb.vim","vimgdb","cmd.vim","RST-Tables","css3","clevercss.vim","compilerpython.vim","cmakeref","operator-camelize","scalacommenter.vim","vicom","acomment","smartmove.vim","vimform","changesPlugin","Maynard","Otter.vim","ciscoasa.vim","translit3","vimsizer","tex_mini.vim","lastpos.vim","Manuals","VxLib","256-grayvim","mdark.vim","aftersyntaxc.vim","mayansmoke","repeater.vim","ref.vim","recover.vim","Slidedown-Syntax","ShowMultiBase","reimin","self.vim","kiss.vim","Trac-Wikimarkup","NrrwRgn","ego.vim","Delphi-7-2010","CodeFactory","JavaScript-Indent","tagmaster","qiushibaike","dc.vim","tf2.vim","glyph.vim","OutlookVim","GetFile","vimtl","RTL","Sessions","autocomp.vim","TortoiseTyping","syntax-codecsconf","cvsdiff.vim","yaifa.vim","Silence","PNote","mflrename","nevfn","Tumble","vplinst","tony_light","pyref.vim","legiblelight","truebasic.vim","writebackupToAdjacentDir","GUI-Box","LaTeX-Box","mdx.vim","leglight2","RemoveFile.vim","formatvim","easytags.vim","SingleCompile","CFWheels-Dictionary","fu","skk.vim","tcbuild.vim","grails-vim","django_templates.vim","PySuite","shell.vim","vim-addon-sbt","PIV","xpcomplete","gams","Search-in-Addressbook","teraterm","CountJump","darkBlue","underwater-mod","open-browser.vim","rvm.vim","Vim-Script-Updater","beluga-syntax","tac-syntax","datascript.vim","phd","obsidian","ez_scroll","vim-snipplr","vim-haxe","hgrev","zetavim","quickrun.vim","wmgraphviz","reload.vim","Smooth-Center","session.vim","pytestator","sablecc.vim","CSS-one-line--multi-line-folding","vorax","slang_syntax","ikiwiki-syntax","opencl.vim","gitview","ekini-dark-colorscheme","pep8","pyflakes","tabops","endline","pythondo","obviously-insert","toggle_mouse","regbuf.vim","mojo.vim","luainspect.vim","pw","phpcomplete.vim","SyntaxComplete","vimgcwsyntax","JsLint-Helper","Haskell-Highlight-Enhanced","typeredeemer","BusierBee","Shapley-Values","help_movement","diff_movement","fortunes_movement","mail_movement","CSS3-Highlights","vimpluginloader","jsonvim","vimstuff","vimargumentchec","vimcompcrtr","vimoop","yamlvim","DokuVimKi","jade.vim","v4daemon","ovim","Starting-.vimrc","gedim","current-func-info.vim","undofile.vim","vim-addon-ocaml","Haskell-Conceal","trailing-whitespace","rdark-terminal","mantip","htip","python_showpydoc.vim","tangoshady","bundler","cHiTags","Quotes","Smart-Parentheses","operator-reverse","python_showpydoc","rslTools","presets","View-Ports","Replay.vim","qnamebuf","processing-snipmate","ProjectTag","Better-CSS-Syntax-for-Vim","indexer.tar.gz","285colors-with-az-menu","LanguageTool","VIM-Color-Picker","Flex-4","lodestone","Simple-Javascript-Indenter","porter-stem","stem-search","TeX-PDF","PyInteractive","HTML5-Syntax-File","VimgrepBuffer","ToggleLineNumberMode","showcolor.vim","html5.vim","blockinsert","LimitWindowSize","minibufexplorerpp","tdvim_FoldDigest","bufsurf","Open-associated-programs","aspnetide.vim","Timer-routine","Heliotrope","CaptureClipboard","Shades-of-Amber","Zephyr-Color-Scheme","Jasmine-snippets-for-snipMate","swap","RubyProxy","L9","makesd.vim","ora-workbench","sequence","phaver","Say-Time","pyunit","clang","Son-of-Obisidian","Selenitic","diff-fold.vim","Bird-Syntax","Vimtodo","cSyntaxAfter","Code.Blocks-Dark","omnetpp","command-list","open_file_from_clip_board","CommandWithMutableRange","RangeMacro","tchaba","kirikiri.vim","Liquid-Carbon","actionscript.vim","ProjectCTags","Python-2.x-Standard-Library-Reference","Python-3.x-Standard-Library-Reference","ProjectParse","Tabbi","run_python_tests","eregex.vim","OMNeTpp4.x-NED-Syntax-file","Quotes","looks","Lite-Tab-Page","Show-mandictperldocpydocphpdoc-use-K","newsprint.vim","pf_earth.vim","RevealExtends","openurl.vim","southernlights","numbered.vim","grass.vim","toggle_option","idp.vim","sjump.vim","vim_faq","Sorcerer","up.vim","TrimBlank","clang-complete","smartbd","Gundo","altera_sta.vim","altera.vim","vim-addon-async","vim-refact","vydark","gdb4vim","savemap.vim","operator-html-escape","Mizore","maxivim","vim-addon-json-encoding","tohtml_wincp","vim-addon-signs","unite-colorscheme","unite-font","vim-addon-xdebug","VimCoder.jar","FTPDEV","lilypink","js-mask","vim-fileutils","stakeholders","PyScratch","Blueshift","VimCalc","unite-locate","lua_omni","verilog_systemverilog_fix","mheg","void","VIP","Smart-Home-Key","tracwiki","newspaper.vim","rdist-syntax","zenesque.vim","auto","VimOrganizer","stackoverflow.vim","preview","inccomplete","screen_line_jumper","chance-of-storm","unite-gem","devbox-dark-256","lastchange.vim","qthelp","auto_mkdir","jbosslog","wesnothcfg.vim","UnconditionalPaste","unite-yarm","NERD_Tree-and-ack","tabpagecolorscheme","Figlet.vim","Peasy","Indent-Guides","janitor.vim","southwest-fog","Ceasy","txt.vim","Shebang","vimblogger_ft","List-File","softbluev2","eteSkeleton","hdl_plugin","blockle.vim","ColorSelect","notes.vim","FanVim","Vimblr","vcslogdiff","JumpNextLongLine","vimorator","emacsmodeline.vim","textobj-rubyblock","StatusLineHighlight","shadow.vim","csc.vim","JumpToLastOccurrence","perfect.vim","polytonic.utf-8.spl","opencl.vim","iim.vim","line-based_jump_memory.vim","hdl_plugin","localrc.vim","BOOKMARKS--Mark-and-Highlight-Full-Lines","chapa","unite.vim","neverland.vim--All-colorschemes-suck","fokus","phpunit","vim-creole","Search-Google","mophiaSmoke","mophiaDark","Google-translator","auto-kk","update_perl_line_directives","headerGatesAdd.vim","JellyX","HJKL","nclipper.vim","syntax_check_embedded_perl.vim","xterm-color-table.vim","zazen","bocau","supp.vim","w3cvalidator","toner.vim","QCL-syntax-hilighting","kkruby.vim","hdl_plugin","Mind_syntax","Comment-Squawk","neco-ghc","pytest.vim","Enhanced-Javascript-syntax","LispXp","Nazca","obsidian2.vim","vim-addon-sml","pep8","AsyncCommand","lazysnipmate","Biorhythm","IniParser","codepath.vim","twilight256.vim","PreciseJump","cscope_plus.vim","Cobaltish","neco-look","XFST-syntax-file","Royal-Colorschemes","pbcopy.vim","golded.vim","Getafe","ParseJSON","activity-log","File-Case-Enforcer","Microchip-Linker-Script-syntax-file","RST-Tables-works-with-non-english-langu","lexctwolc-Syntax-Highlighter","mxl.vim","fecompressor.vim","Flog","Headlights","Chess-files-.pgn-extension","vim-paint","vundle","funprototypes.vim","SVF-syntax","indentpython.vim","Compile","dragon","Tabular","Tagbar","vimake-vim-programmers-ide","align","windows-sif-syntax","csc.snippets","tidydiff","latte","thermometer","Clean","Neopro","Vim-Blog","bitly.vim","bad-apple","robokai","makebg","asp.net","Atom","vim-remote","IPC-syntax-highlight","PyREPL.vim","phrase.vim","virtualenv.vim","reporoot.vim","rebar","urilib","visualctrlg","textmanip.vim","compilerg95.vim","Risto-Color-Scheme","underlinetag","paper","compilergfortran.vim","compilerifort.vim","Scala-argument-formatter","FindEverything","vim_etx","emacs-like-macro-recorder","To-Upper-case-case-changer","vim-erlang-skeleteons","taglist-plus","PasteBin.vim","compilerpcc.vim","scrnpipe.vim","TeX-9","extradite.vim","VimRepress","text-object-left-and-right","Scala-Java-Edit","vim-stylus","vim-activator","VimOutliner","avr8bit.vim","iconv","accentuate.vim","Solarized","Gravity","SAS-Syntax","gem.vim","vim-scala","Rename","EasyMotion","boost.vim","ciscoacl.vim","Distinguished","mush.vim","cmdline-completion","UltraBlog","GetFilePlus","strange","vim-task","Tab-Manager","XPath-Search","plantuml-syntax","rvmprompt.vim","Save-Current-Font","fatrat.vim","Sesiones.vim","opener.vim","cascading.vim","Google-Translate","molly.vim","jianfan","Dagon","plexer","vim-online","gsearch","Message-Formatter","sudoku_game","emacscommandline","fso","openscad.vim","editqf","visual-increment","gtrans.vim","PairTools","Table-Helper","DayTimeColorer","Amethyst","hier","Javascript-OmniCompletion-with-YUI-and-j","m2sh.vim","colorizer","Tabs-only-for-indentation","modelica","terse","dogmatic.vim","ro-when-swapfound","quit-another-window","gitv","Enter-Indent","jshint.vim","pacmanlog.vim","lastmod.vim","ignore-me","vim-textobj-quoted","simplenote.vim","Comceal","checklist.vim","typofree.vim","Redhawk-Vim-Plugin","vim-soy","Find-XML-Tags","cake.vim","vim-coffee-script","browserprint","jovial.vim","pdub","ucompleteme","ethna-switch","Fanfou.vim","colorv.vim","Advancer-Abbreviation","Auto-Pairs","octave.vim","cmdline-insertdatetime","reorder-columns","calm","nicer-vim-regexps","listtag","Diablo3","vim_django","nautilus-py-vim","IDLE","operator-star","XQuery-indentomnicompleteftplugin","browsereload-mac.vim","splitjoin.vim","vimshell-ssh","ShowMarks7","warez-colorscheme","Quicksilver.vim","wikilink","Buffergator","Buffersaurus","ri-viewer","beautiful-pastebin","chef.vim","indsas","lua.vim","AutoSaveSetting","resizewin","cpp_gnuchlog.vim","tangolight","IDSearch","frawor","git_patch_tags.vim","snipmate-snippets","widl.vim","WinFastFind","ReplaceFile","gUnit-syntax","Handlebars","svnst.vim","The-Old-Ones","Atomic-Save","vim-orgmode","Vimper-IDE","vimgtd","gnupg.vim","Filesearch","VimLite","AutoCpp","simpleRGB","cakephp.vim","googleclosurevim","vim-task-org","brep","vrackets","xorium.vim","transpose-words","Powershell-FTDetect","LycosaExplorer","ldap_schema.vim","Lookup","Intelligent-Tags","lemon.vim","SnipMgr","repeat-motion","skyWeb","Toxic","sgmlendtag","rake.vim","orangeocean256","cdevframework","textgenshi.vim","aldmeris","univresal-blue-scheme","cab.vim","copy-as-rtf","baobaozhu","rfc5424","saturn.vim","tablistlite.vim","functionlist.vim","hints_opengl.vim","wikiatovimhelp","ctags_cache","werks.vim","RegImap","Calm-Breeze","Rst-edit-block-in-tab","Ambient-Color-Scheme","golden-ratio","annotatedmarks","quickhl.vim","FixCSS.vim","enablelvimrc.vim","commentary.vim","prefixer.vim","cssbaseline.vim","html_emogrifier.vim","Premailer.vim","tryit.vim","fthook.vim","sql.vim","zim-syntax","Transcription-Name-Helper","Rcode","obvious-resize","lemon256","swapcol.vim","vim-ipython","EasyPeasy","chinachess.vim","tabpage.vim","tabasco","light2011","numlist.vim","fuzzee.vim","SnippetySnip","melt-syntax","diffwindow_movement","noweboutline.vim","Threesome","quickfixstatus.vim","SimpylFold","indent-motion","mcabberlog.vim","easychair","right_align","galaxy.vim","vim-pandoc","putcmd.vim","vim-rpsl","olga_key","statusline.vim","bad-whitespace","ctrlp.vim","sexy-railscasts","TagmaTips","blue_sky","gccsingle.vim","kiwi.vim","mediawiki","Vimerl","MarkdownFootnotes","linediff.vim","watchdog.vim","syntaxdosini.vim","pylint-mode","NagelfarVim","TclShell","google_prettify.vim","Vimpy","vim-pad","baancomplete","racket.vim","scribble.vim","racket-auto-keywords.vim","Ambient-Theme","White","vim-dokuwiki","slide-show","Speech","vim-google-scribe","fcitx.vim","TagmaTasks","vimroom.vim","MapFinder","mappingmanager","ahkcomplete","Python-mode-klen","tagfinder.vim","rainbow_parentheses.vim","Lyrics","abbott.vim","wiki.vim","todotxt.vim","RST-Tables-CJK","utags","mango.vim","indentfolds","Twilight-for-python","Python-Syntax","vim-json-bundle","VIM-Metaprogramming","statline","SonicTemplate.vim","vim-mnml","Tagma-Buffer-Manager","desert-warm-256","html-source-explorer","codepaper","php-doc","Cpp11-Syntax-Support","node.js","Cleanroom","anwolib","fontforge_script.vim","prop.vim","vim-symbols-strings","vim-diff","openrel.vim","apg.vim","TFS","ipi","RSTO","project.vim","tex_AutoKeymap","log.vim","mirodark","vim-kickstart","MatchTag","Lisper.vim","Dart","vim-ocaml-conceal","csslint.vim","nu42dark-color-scheme","Colour-theme-neon-pk","simple_bookmarks.vim","modeleasy-vim-plugin","aurum","inline_edit.vim","better-snipmate-snippet","LastBuf.vim","SchemeXp","TVO--The-Vim-Outliner-with-asciidoc-supp","yankstack","vim-octopress","ChickenMetaXp","ChickenSetupXp","nscripter.vim","weibo.vim","vim-python-virtualenv","vim-django-support","nose.vim","nodeunit.vim","SpellCheck","lrc.vim","cue.vim","visualrepeat","git-time-lapse","boolpat.vim","Mark-Ring","Festoon","dokuwiki","unite-scriptenames","ide","tocdown","Word-Fuzzy-Completion","rmvim","Xoria256m","shelp","Lawrencium","grads.vim","epegzz.vim","Eddie.vim","behat.zip","phidgets.vim","gtags-multiwindow-browsing","lightdiff","vm.vim","SmartusLine","vimprj","turbux.vim","html-xml-tag-matcher","git-diff","ft_improved","nerdtree-ack","ambicmd.vim","fountain.vim","Powerline","EasyDigraph.vim","autosess","DfrankUtil","ruscmd","textobj-line","Independence","qtpy.vim","switch-buffer-quickly","simple-dark","gf-user","gf-diff","viewdoc","Limbo-syntax","rhinestones","buffet.vim","pwdstatus.vim","gtk-mode","indentjava.vim","coffee-check.vim-B","coffee-check.vim","compot","xsnippet","nsl.vim","vombato-colorscheme","ocamlMultiAnnot","mozpp.vim","mozjs.vim","e2.lua","gmlua.vim","vim-punto-switcher","toggle_comment","CapsulaPigmentorum.vim","CompleteHelper","CamelCaseComplete","vim-addon-haskell","tagport","cd-hook","pfldap.vim","WhiteWash","TagmaLast","Gummybears","taskmanagementvim","flymaker","ditaa","lout.vim","vim-flake8","phpcs.vim","badwolf","jbi.vim","Vim-Support","murphi.vim","argumentative.vim","editorconfig-vim","thinkpad.vim","Coverity-compiler-plugin","vim-wmfs","Trailer-Trash","ipyqtmacvim.vim","writebackupAutomator","CodeCommenter","sandbox_hg","pdv-standalone","Yii-API-manual-for-Vim","fountainwiki.vim","hop-language-syntax-highlight","Skittles-Berry","django.vim","pyunit.vim","EasyColour","tmpclip.vim","Improved-paragraph-motion","tortex","Add-to-Word-Search","fwk-notes","calendar.vim","mystatusinfo.vim","workflowish","tabman.vim","flashdevelop.vim","hammer.vim","Colorizer--Brabandt","less-syntax","DynamicSigns","ShowTrailingWhitespace","DeleteTrailingWhitespace","JumpToTrailingWhitespace","source.vim","mediawiki.vim","regexroute.vim","css3-syntax-plus","diff-toggle","showmarks2","Finder-for-vim","vim-human-dates","vim-addon-commenting","cudajinja.vim","vim-pomodoro","phpqa","TaskMotions","ConflictMotions","Sauce","gitvimrc.vim","instant-markdown.vim","vroom","portmon","spacebox.vim","paredit.vim","Ayumi","Clam","vim_movement","vbs_movement","dosbatch_movement","TextTransform","HyperList","python-imports.vim","youdao.dict","XDebug-DBGp-client-for-PHP","Vim-Gromacs","vimux","Vimpy--Stoner","readnovel","Vitality","close-duplicate-tabs","StripWhiteSpaces","vim-jsbeautify","clean_imports","WebAPI.vim","flipwords.vim","restore_view.vim","SpaceBetween","autolink","vim-addon-rdebug","DBGp-X-client","Splice","vim-htmldjango_omnicomplete","vim-addon-ruby-debug-ide","a-new-txt2tags-syntax","vim-cpp-auto-include","rstatusline","muxmate","vim4rally","SAS-Indent","modx","ucpp-vim-syntax","bestfriend.vim","vim-dasm","evervim","Fortune-vimtips","VDBI.vim","Ideone.vim","neocomplcache-snippets_complete","RbREPL.vim","AmbiCompletion","london.vim","jsruntime.vim","maven-plugin","vim-mou","Transpose","PHPUnit-QF","TimeTap","jsoncodecs.vim","jsflakes.vim","jsflakes","DBGPavim","nosyntaxwords","mathematic.vim","vtimer.vim","_jsbeautify","license-loader","cmdpathup","matchindent.vim","automatic-for-Verilog--guo","lingodirector.vim--Pawlik","Ubloh-Color-Scheme","html_FileCompletion","PyChimp","sonoma.vim","highlights-for-radiologist","Xdebug","burnttoast256","vmark.vim--Visual-Bookmarking","gprof.vim","jshint.vim--Stelmach","sourcebeautify.vim","HgCi","EscapeBchars","cscope.vim","php-cs-fixer","cst","OnSyntaxChange","python_fold_compact","EditPlus"] \ No newline at end of file diff --git a/.vim/bundle/EasyGrep/.DS_Store b/.vim/bundle/EasyGrep/.DS_Store new file mode 100644 index 0000000..d334989 Binary files /dev/null and b/.vim/bundle/EasyGrep/.DS_Store differ diff --git a/.vim/bundle/EasyGrep/doc/EasyGrep.txt b/.vim/bundle/EasyGrep/doc/EasyGrep.txt new file mode 100644 index 0000000..76548cc --- /dev/null +++ b/.vim/bundle/EasyGrep/doc/EasyGrep.txt @@ -0,0 +1,595 @@ +*EasyGrep.txt* +============================================================================== + EasyGrep *EasyGrep* +============================================================================== + +Author: Dan Price vim@danprice.fastmail.net *EasyGrep_Author* + +Goal: To be an easy to use, powerful find and |EasyGrep_Motivation| + replace tool for users of all skill levels. +Version: 0.98 |EasyGrep_History| + +License: Public domain, no restrictions whatsoever |EasyGrep_License| +Contribute: Please report any bugs or suggestions |EasyGrep_Bugs| + to the address above. |EasyGrep_Future| + + +============================================================================== + Table of Contents *EasyGrep_Contents* +============================================================================== + + + 1. Motivation.................|EasyGrep_Motivation| + 2. Operation..................|EasyGrep_Operation| + 2.1 Modes..................|EasyGrep_OperationModes| + 3. Keymaps....................|EasyGrep_Keymaps| + 3.1 Option Mappings........|EasyGrep_KeymapsOptions| + 3.2 Mapping Customization..|EasyGrep_KeymapsCustomization| + 4. Commands...................|EasyGrep_Commands| + 5. Options....................|EasyGrep_Options| + 5.1 Summary...............|EasyGrep_OptionsSummary| + 5.2 Explorer..............|EasyGrep_OptionsExplorer| + 5.3 Details...............|EasyGrep_OptionsDetail| + 6. Bugs.......................|EasyGrep_Bugs| + 7. Future.....................|EasyGrep_Future| + 8. History....................|EasyGrep_History| + 9. License....................|EasyGrep_License| + + +============================================================================== + Motivation *EasyGrep_Motivation* +============================================================================== + +EasyGrep's main goal is to make search and replace in files easy. Other Vim +plugins provide similar functionality, but few provide the same level of +functionality with as little configuration as EasyGrep does. In the common +case, all it takes to search for a string across multiple files is three +keypresses: vv. No clicks, no commands, no project/tags setup -- just +three keys. When you need a substitution, it also takes the same number of +keys to start a replace in files. After using EasyGrep, you'll wonder at how +you got around without it. + +While EasyGrep's default configuration will satisfy many users, it provides +more than a dozen options for those who need more control |EasyGrep_Options|. +When you need to change options, EasyGrep provides an options explorer that +indicates which files will be searched and allows visual customization of its +options |EasyGrep_OptionsExplorer|. When this isn't fast enough, EasyGrep +provides key mappings for each option to toggle its value +|EasyGrep_KeymapsOptions|. If you can't find an option you need, contact me +|EasyGrep_Author| and if it doesn't already exist, we'll make it happen. + +I hope that EasyGrep makes Vim more fun, productive, and easy for you to use. + + Happy Vimming! + + +============================================================================== + Operation *EasyGrep_Operation* +============================================================================== + +EasyGrep makes using Vim's grep capabilities easier. When using EasyGrep, +searching for a word is as easy as typing a three keypress mapping +|EasyGrep_Keymaps|. In addition to keymaps, search and replace can be invoked +through commands |EasyGrep_Commands|. + +To determine which files to search, EasyGrep provides three modes, described +in the next section. + + +Search Modes |EasyGrep_OperationModes| + +All + All files will be searched (default). + +Buffers + Files currently open in vim will be searched. Recursion has no meaning in + this mode, and will be turned off. + +TrackExt + Files that match the extension of the currently opened file will be + searched. Additionally, this extension can be mapped to a user defined + set of extensions that will also be searched |EasyGrepFileAssociations|. + + For example: in the default configuration, when test.cpp is open, files + that match any one of + + *.cpp *.hpp *.cxx *.hxx *.cc *.c *.h + + will be searched when a Grep is initiated. I find this mode to be the + most useful. + +User + Specify a custom set of file extensions to search. + + +These modes can be quickly changed through the |EasyGrep_OptionsExplorer| or +|EasyGrep_KeymapsOptions|. + + +============================================================================== + Keymaps *EasyGrep_Keymaps* +============================================================================== + +EasyGrep uses Vim's leader key, which is by default '\'. For information on +this key, type ":help mapleader". + +vv - Grep for the word under the cursor, match all occurences, + like 'g*'. See ":help gstar". +vV - Grep for the word under the cursor, match whole word, like + '*'. See ":help star". +va - Like vv, but add to existing list. +vA - Like vV, but add to existing list. + +vr - Perform a global search on the word under the cursor + and prompt for a pattern with which to replace it. +vR - Like vr, but match whole word. + +Each of these commands has an 'all occurences' and 'whole word' option, +designated by the case of the last character. If you would prefer that these +be reversed, see |EasyGrepInvertWholeWord|. + +In addition to grepping the word under the cursor, text may be visually +selected and these mappings may be used analogously to as they are used above. +Visual selections will automatically be escaped so as not to confuse the +selection with a regular expression. + + e.g. Selecting the text inside the quotes here "/" will match + against "\" but not against "word". + +To search with a regular expression, see the :Grep command |EasyGrep_Commands| + +Each of the above commands will search files according to settings +controlled by: + +vo - Open an options explorer to select the files to search in and + set grep options. + +For the options provided, see |EasyGrep_Options|. + + + *EasyGrep_KeymapsOptions* + +For each of the options presented in the options explorer, there is a mapping +that allows a direct change of this option. The pattern is vy* , +where star is the value listed in the options window for each of the options. + + e.g. To toggle recursive mode, type '\vyr' + +See |EasyGrepOptionPrefix| to change the prefix from '\vy' or to turn these +keymappings off. + + + *EasyGrep_KeymapsCustomization* + +Beyond EasyGrepOptionPrefix, other keymaps may be remapped to your liking. +See the "Keymaps" section of EasyGrep.vim for the names of these items. + +Mappings take the form: + + map (keycombination) (MappingName) +e.g. + map ,op EgMapGrepOptions + + +============================================================================== + Commands *EasyGrep_Commands* +============================================================================== + + *:Grep* +:Grep [arg] + Search for the specified arg, like vv. When an ! is added, + search like vV + + *:GrepAdd* +:GrepAdd [arg] + Search for the specified arg, add to existing file list, as in + va. When an ! is added, search like vA + + The Above commands can additionally accept command switches: + -r Perform a recursive search + -R Perform a recursive search + -i Perform a case-insensitive search + -I Perform a case-sensitive search + -m Specify the number of matches to get + + *:Replace* +:Replace [target] [replacement] +:Replace /[target]/[replacement]/ + Perform a global search and replace. The function searches + the same set of files a grep for the desired target and opens a dialog to + confirm replacement. In the second, forward slash delineated form, back + and forward slashes must be explicitly escaped. + + *:ReplaceUndo* +:ReplaceUndo + Undoes the last :Replace operation. Does not stack successive + searches; only the last replace may be undone. This function may not + work well when edits are made between a call to Replace and a call to + ReplaceUndo. + + *:GrepOptions* +:GrepOptions + Open the options explorer to set options. + + +For each of the search and replace commands, searching with regular +expressions is supported. Note that regular expressions are handled as +indicated by the 'magic' option (see ":help 'magic'"). + + *:ResultListFilter* +:ResultListFilter [args] + Removes entries from the error list according to whether or not they match + a set of specified patterns. The default behaviour is to save all entries + that match one of the patterns and remove those that do not. + + The Above command can additionally accept command switches: + -v Switch the criteria for matching; remove entries matching one of the + specified patterns instead of saving them + + *:ResultListOpen* +:ResultListOpen + Opens all of the entries in the current result list in a new tab. + + +============================================================================== + Options *EasyGrep_Options* +============================================================================== + +Options Summary *EasyGrep_OptionsSummary* + + Option Description +------------------------------------------------------------------------------ +|EasyGrepFileAssociations| Specifies the location of the EasyGrep + file associations +------------------------------------------------------------------------------ +|EasyGrepMode| Mode of operation +------------------------------------------------------------------------------ +|EasyGrepCommand| Whether to use vimgrep or grepprg +------------------------------------------------------------------------------ +|EasyGrepRecursive| Recursive searching +------------------------------------------------------------------------------ +|EasyGrepIgnoreCase| Case-sensitivity in searches +------------------------------------------------------------------------------ +|EasyGrepHidden| Include hidden files in searches +------------------------------------------------------------------------------ +|EasyGrepAllOptionsInExplorer| How many options to show in the explorer +------------------------------------------------------------------------------ +|EasyGrepWindow| Quickfix or location list +------------------------------------------------------------------------------ +|EasyGrepWindowPosition| Where the error list window is opened +------------------------------------------------------------------------------ +|EasyGrepOpenWindowOnMatch| Open grep window on successful match +------------------------------------------------------------------------------ +|EasyGrepEveryMatch| Match multiple times per line +------------------------------------------------------------------------------ +|EasyGrepJumpToMatch| Jump to first match +------------------------------------------------------------------------------ +|EasyGrepSearchCurrentBufferDir| Whether to search current buffers dir + in addition to working dir +------------------------------------------------------------------------------ +|EasyGrepInvertWholeWord| Invert the meaning of whole word for vv + and vV keymaps +------------------------------------------------------------------------------ +|EasyGrepFileAssociationsInExplorer| Whether to show the file associations + list in the options explorer +------------------------------------------------------------------------------ +|EasyGrepReplaceWindowMode| Controls whether to use tabs or splits + when replacing in files +------------------------------------------------------------------------------ +|EasyGrepReplaceAllPerFile| Replace on per file or global basis +------------------------------------------------------------------------------ +|EasyGrepOptionPrefix| Specify the keymap for toggling options +------------------------------------------------------------------------------ +|EasyGrepExtraWarnings| Whether to show extra warnings +------------------------------------------------------------------------------ + + +Options Explorer *EasyGrep_OptionsExplorer* + + To invoke the options explorer, type '\vo' (default). The options + explorer presents all of EasyGrep's customizable options and provides + information on the file patterns that will be searched when invoking a + Grep. + + A useful exercise for beginners is to toggle between EasyGrep's options + and modes (|EasyGrep_OperationModes|) and type 'e' to see which files will + be searched for a given configuration. + + +Options Details *EasyGrep_OptionsDetail* + +*EasyGrepFileAssociations* +Specifies the location of a file that contains groups of files that should be +associated with one another. When set to an empty string "", no file read +will be attempted. + +This file has a simple syntax used to logically link different files types. +A simple configuration is shown below: + + C=*.c *.h + C++=*.cpp *.hpp *.cxx *.hxx *.cc + VHDL=*.hdl *.vhd *.vhdl *.vbe *.vst + Web=*.htm *.html *.js + +For example, in this configuration, whenever the active file has the .c +extension, files with the .h extension will also be search. A special feature +of this syntax is the ability to link groups together. For example, the C++ +group links to all files that are in the C group. + + +*EasyGrepMode* +Specifies the mode in which to start. +0 - All files +1 - Open Buffers +2 - Track the current extension + +Note: I find option 2 to be the most powerful, but option 0 is activated by +default because it is the most intuitive for users who haven't take the +time to understand how the script works. See |EasyGrep_OperationModes|. + +*EasyGrepCommand* +Specifies the grep command to use. + +0 - vimgrep +1 - grep (follows grepprg) + +*EasyGrepRecursive* +Specifies that recursive search be activated on start. + +*EasyGrepIgnoreCase* +Specifies the case sensitivity of searches. Note that this can be further +overrided for vimgrep searches with \c and \C. + +*EasyGrepHidden* +Specifies that hidden files search be activated on start. Note that hidden +implies the unix meaning of those files that are prepended with a '.', and not +the Windows meaning of those files with a hidden attribute. + +*EasyGrepAllOptionsInExplorer* +Specifies that all options be included in the explorer window. + +Note: settting this option is very useful when you want to try out and +learn all of the options available in this script. + +*EasyGrepWindow* +Specifies the window to use for matches. +0 - quickfix +1 - location list + +*EasyGrepWindowPosition* +Specifies where the error list window is opened. The value of this option +must match one of Vim's splitting positional window commands, such as topleft +or botright. + +*EasyGrepOpenWindowOnMatch* +Specifies whether to open the with matches after a search. + +*EasyGrepEveryMatch* +Specifies that multiple matches on the same line be treated as different +matches, like the g option to vimgrep. + +*EasyGrepJumpToMatch* +Specifies that jump to first match be activated, like the j option to vimgrep. + +*EasyGrepSearchCurrentBufferDir* +Setting this option causes EasyGrep to search the current buffer's +directory in addition to the current working directory. + +*EasyGrepInvertWholeWord* +Specifies that the whole word search keys should be inverted from their +default meaning. For example, when this option is activated, vv +matches whole word, while vV matches everything that includes the +word. Note that this affects both keymappings and commands. + +*EasyGrepFileAssociationsInExplorer* +Specifies whether to show the file associations list in the options explorer +window. + +*EasyGrepOptionPrefix* +Specifies the prefix that is used when building keymaps for setting options +directly. To specify that no option keymaps be created, set this to the empty +string. + +Default: + let g:EasyGrepOptionPrefix='vy' +Custom: + let g:EasyGrepOptionPrefix=',oe' +None: + let g:EasyGrepOptionPrefix='' + + +*EasyGrepReplaceWindowMode* +Specifies the mode that the script will use when a buffer needs to be changed +while performing a global replace. +0 - Open a new tab for each window +1 - Perform a split of the current window with the next window +2 - autowriteall; create no new windows + +Note: Option 1 has the possibility of running out of vertical space to +split more windows. Actions are taken to make this a non-issue, but this +option can often be more clunky than other options. +Note: As a result of the limitation above, option 0 is the only mode that +won't require saving the files during a replace. + +*EasyGrepReplaceAllPerFile* +Specifies that selecting 'a' (for all) will apply the replacements on a per +file basis, as opposed to globally as is the default. + +*EasyGrepExtraWarnings* +Specifies that warnings be issued for conditions that may be valid but confuse +some users. + + +============================================================================== + Future *EasyGrep_Future* +============================================================================== + +------------------------------------------------------------------------------ +Show search progress? +------------------------------------------------------------------------------ +create capability to include paths other than the active directories in a +search. e.g. ../../include, $INCLUDE, etc. +------------------------------------------------------------------------------ +set file/directory exclusions +------------------------------------------------------------------------------ +Build in support for ack +------------------------------------------------------------------------------ + +============================================================================== + Bugs *EasyGrep_Bugs* +============================================================================== + +If you discover any bugs not listed here, please contact the |EasyGrep_Author| + +------------------------------------------------------------------------------ +Successive warning messages can hide a previous message +------------------------------------------------------------------------------ +ReplaceUndo opens a window even if it is already open? +------------------------------------------------------------------------------ +Report that a swap file can't be opened +------------------------------------------------------------------------------ +Patterns with backslashes in them require double-backslash to be searched from +the command line. This behaviour matches the builtin / command but it may be +unintuitive. +------------------------------------------------------------------------------ + + + +============================================================================== + History *EasyGrep_History* +============================================================================== + + 1.0 + Documentation: Added a help tag for each of the commands so that you can + look up more information on them. + Improved: Cleaned up the internals of the script substantially + Improved: Changed the name of FilterErrorList to ResultListFilter + Feature: Added ResultListOpen command to open all of the files in the + result list (aka error list) + Fixed: Added -- to signify the end of the command line options. Grepping + for patterns such as '->var' are now possible with ':Grep -- ->var' + 0.98 + Highlight: The Replace and ReplaceUndo commands were reimplemented. The + granularity of matches inside of a Replace call were improved so that + you can now decide replacements individually per line. + Additionally, Complex operations such as replacing x[i][j][k] with + x(i,j,k) and following it up with a ReplaceUndo are now possible. + + e.g. + :Replace /x\[\([^]]\+\)\]\[\([^]]\+\)\]\[\([^]]\+\)\]/x(\1,\2,\3)/ + :ReplaceUndo + + Please report any regressions with either of these functions. + + Feature: Added count command line option (-m 4 or -4) + Feature: Improved Grep options window keybindings; searching within the + options explorer window is now possible + Feature: Expanded searches to include all of the active buffers' + directories + Bugfix: Fixed recursive operation and expanded search from reporting + duplicate results + Bugfix: Fixed and in replace mode + Feature: Added EasyGrepWindowPosition for specifying where the error + list window will be opened + Feature: Added FilterErrorlist command for filtering the results within + the quickfix or location list windows + Feature: Improved printout when no matches are found + Feature: Improved searching when an entire line is selected + 0.96 + Feature: Expanded upon the list of file associations + Feature: Expanded searches to the current buffer's directory + in addition to the current working directory + Feature: Added command line arguments to :Grep and :Replace for + recursive searches and case sensitivity + Feature: Added toggle for window replace mode + Feature: Added toggle for showing file associations list in options + explorer + Bugfix: Case insensitivity would fail in replacing some patterns + 0.95 + Feature: Added search and replace on visual selections + Feature: Improved Grepping for items that can be interpreted as regular + expressions. Selections are assumed to be literal, whereas explicit + commands are assumed to be regular expressions. + Feature: Removed option g:EasyGrepNoDirectMappings in favor of + g:EasyGrepOptionPrefix, which allows the option prefix to be changed. + Bugfix: The tracked extension would sometimes fail to be updated when + switching between buffers + Documentation: Split the documentation into its own file; greatly + expanded upon its contents + Change: Activating a mode that is already activated will no longer + deactivate it + Change: GrepOptions no longer accepts an argument; use user mode instead + Change: Clarified mapping names; custom mappings will need to + be reset. + 0.9 + Feature: Added forward slash delineated pattern to the Replace command + e.g. :Replace /target/replacement/ + that allows more complicated replacements; you can now work with + patterns that have spaces in them. + Bugfix: If cursorline is off at the start of a replace, now ensuring + that cursorline is turned off for all buffers, and not just the last one + Bugfix: fixed an issue with an extra tab being opened during a + replacement + 0.8 + Implemented case sensitivity that is independent of ignorecase, thanks + to Doro Wu for contributing to this functionality + Changed shortcut key for hidden files from 'i' to 'h' + 0.7 + Expanded search of EasyGrepFileAssociations list to every component of + 'runtimepath'. This solves a starting message for those who placed + EasyGrepFileAssociations in a location other than the first location in + 'runtimepath'. + 0.6 + Fixed paths with spaces in them + Folds will now be disabled where replacements are to be made + Fixed an error with checking for extra warnings + Better highlighting while replacing + Recursive mode can no longer be activated when Buffers mode is activated + 0.5 + Fixed an issue with tracking the file extension where sometimes the + desired extension wouldn't be registered. + Better reporting when no files match. + Now warning when searching from a working directory that doesn't match + the current file's directory. + Added g:EasyGrepExtraWarnings option. + 0.4 + Improved Replace and ReplaceUndo + Added two configurable modes for how the windows operate when doing a + global replace. + Fixed an issue with linked filetypes. + 0.3 + Added experimental :Replace and :ReplaceUndo commands; keymapped + vr for :Replace + Improved response when no matches + 0.2 + Added option to toggle showing fewer or more options; showing fewer + options by default. + Added option '?' to print the current configuration and save it to a + register. + Now creating direct mappings by default; see g:EasyGrepNoDirectMappings + to turn this off. + 0.1 + Initial version + + +============================================================================== + License *EasyGrep_License* +============================================================================== + + Public domain, no restrictions whatsoever + +When writing EasyGrep, I wanted it to be free in the broadest sense. Of +course, most (if not all) plugins for Vim are free, but I wanted mine to be +freer still: I've released EasyGrep in the public domain. It took a lot of +time and learning to get EasyGrep to work, and I want anyone to take advantage +of my contribution. If you see some (or many) snippets of EasyGrep's code +that you need, use it -- you don't need to ask me, think about any copyright, +worry about violating a license, or even note that the code came from me, just +use it. My only request is that if you are thinking of forking EasyGrep (or +enhancing, as some authors claim to do), please contact me to let me know what +you feel is lacking in EasyGrep, and I promise I'll be receptive to correcting +these issues. + + +============================================================================== +vim:tw=78:ts=4:ft=help:norl:fdm=marker diff --git a/.vim/bundle/EasyGrep/plugin/EasyGrep.vim b/.vim/bundle/EasyGrep/plugin/EasyGrep.vim new file mode 100644 index 0000000..3fc1ec0 --- /dev/null +++ b/.vim/bundle/EasyGrep/plugin/EasyGrep.vim @@ -0,0 +1,2548 @@ +" Title: EasyGrep +" Author: Dan Price vim@danprice.fastmail.net +" +" Goal: To be an easy to use, powerful find and replace resource for +" users of all skill levels. +" Usage: This file should reside in the plugin directory and be +" automatically sourced. +" +" License: Public domain, no restrictions whatsoever +" Documentation: type ":help EasyGrep" +" +" Version: 1.0 -- Programs can inspect g:EasyGrepVersion + +" Initialization {{{ +if exists("g:EasyGrepVersion") || &cp || !has("quickfix") + finish +endif +let g:EasyGrepVersion = "1.0" +" Check for Vim version 700 or greater {{{ +if v:version < 700 + echo "Sorry, EasyGrep ".g:EasyGrepVersion."\nONLY runs with Vim 7.0 and greater." + finish +endif +" }}} +" }}} +" Helper Functions {{{ +" countstr {{{ +function! s:countstr(str, ele) + let end = len(a:str) + let c = 0 + let i = 0 + while i < end + if a:str[i] == a:ele + let c += 1 + endif + let i += 1 + endwhile + + return c +endfunction +"}}} +" unique {{{ +function! s:unique(lst) + if empty(a:lst) + return a:lst + endif + + let lst = a:lst + call sort(lst) + + let end = len(lst) + let i = 1 + let lastSeen = lst[0] + while i < end + if lst[i] == lastSeen + call remove(lst, i) + let end -= 1 + else + let i += 1 + endif + endwhile + + return lst +endfunction +"}}} +" BackToForwardSlash {{{ +function! s:BackToForwardSlash(arg) + return substitute(a:arg, '\\', '/', 'g') +endfunction +"}}} +" GetBuffersOutput {{{ +function! s:GetBuffersOutput() + redir => bufoutput + silent! buffers + " This echo clears a bug in printing that shows up when it is not present + silent! echo "" + redir END + + return bufoutput +endfunction +" }}} +" GetBufferIdList {{{ +function! s:GetBufferIdList() + let bufoutput = s:GetBuffersOutput() + + let bufids = [] + for i in split(bufoutput, "\n") + let s1 = 0 + while i[s1] == ' ' + let s1 += 1 + endwhile + + let s2 = stridx(i, ' ', s1) - 1 + let id = str2nr(i[s1 : s2]) + + call add(bufids, id) + endfor + + return bufids +endfunction +" }}} +" GetBufferNamesList {{{ +function! s:GetBufferNamesList() + let bufoutput = s:GetBuffersOutput() + + let bufNames = [] + for i in split(bufoutput, "\n") + let s1 = stridx(i, '"') + 1 + let s2 = stridx(i, '"', s1) - 1 + let str = i[s1 : s2] + + if str[0] == '[' && str[len(str)-1] == ']' + continue + endif + + call add(bufNames, str) + endfor + + return bufNames +endfunction +" }}} +" GetBufferDirsList {{{ +function! s:GetBufferDirsList() + let dirs = {} + let bufs = s:GetBufferNamesList() + for buf in bufs + let d = fnamemodify(expand(buf), ":.:h") + let dirs[d]=1 + endfor + return keys(dirs) +endfunction +" }}} +" GetVisibleBuffers {{{ +function! s:GetVisibleBuffers() + let tablist = [] + for i in range(tabpagenr('$')) + call extend(tablist, tabpagebuflist(i + 1)) + endfor + let tablist = s:unique(tablist) + return tablist +endfunction +" }}} +" EscapeList {{{ +function! s:FileEscape(item) + return escape(a:item, ' \') +endfunction +function! s:ShellEscape(item) + return shellescape(a:item, 1) +endfunction +function! s:DoEscapeList(lst, seperator, func) + let escapedList = [] + for item in a:lst + let e = a:func(item).a:seperator + call add(escapedList, e) + endfor + return escapedList +endfunction +function! s:EscapeList(lst, seperator) + return s:DoEscapeList(a:lst, a:seperator, function("s:FileEscape")) +endfunction +function! s:ShellEscapeList(lst, seperator) + return s:DoEscapeList(a:lst, a:seperator, function("s:ShellEscape")) +endfunction +"}}} +" Escape{{{ +function! s:Escape(str, lst) + let str = a:str + for i in a:lst + let str = escape(str, i) + endfor + return str +endfunction +"}}} +" EscapeSpecial {{{ +function! s:EscapeSpecial(str) + let lst = [ '\', '/', '^', '$' ] + if &magic + let magicLst = [ '*', '.', '~', '[', ']' ] + call extend(lst, magicLst) + endif + return s:Escape(a:str, lst) +endfunction +"}}} +" GetSavedName {{{ +function! s:GetSavedName(var) + let var = a:var + if match(var, "g:") == 0 + let var = substitute(var, "g:", "g_", "") + endif + return "s:saved_".var +endfunction +" }}} +" SaveVariable {{{ +function! s:SaveVariable(var) + if empty(a:var) + return + endif + let savedName = s:GetSavedName(a:var) + if match(a:var, "g:") == 0 + execute "let ".savedName." = ".a:var + else + execute "let ".savedName." = &".a:var + endif +endfunction +" }}} +" RestoreVariable {{{ +" if a second variable is present, indicate no unlet +function! s:RestoreVariable(var, ...) + let doUnlet = a:0 == 1 + let savedName = s:GetSavedName(a:var) + if exists(savedName) + if match(a:var, "g:") == 0 + execute "let ".a:var." = ".savedName + else + execute "let &".a:var." = ".savedName + endif + if doUnlet + unlet savedName + endif + endif +endfunction +" }}} +" OnOrOff {{{ +function! s:OnOrOff(num) + return a:num == 0 ? 'off' : 'on' +endfunction +"}}} +" Trim {{{ +function! s:Trim(s) + let len = strlen(a:s) + + let beg = 0 + while beg < len + if a:s[beg] != " " && a:s[beg] != "\t" + break + endif + let beg += 1 + endwhile + + let end = len - 1 + while end > beg + if a:s[end] != " " && a:s[end] != "\t" + break + endif + let end -= 1 + endwhile + + return strpart(a:s, beg, end-beg+1) +endfunction +"}}} +" ClearNewline {{{ +function! s:ClearNewline(s) + if empty(a:s) + return a:s + endif + + let lastchar = strlen(a:s)-1 + if char2nr(a:s[lastchar]) == 10 + return strpart(a:s, 0, lastchar) + endif + + return a:s +endfunction +"}}} +" Warning/Error {{{ +function! s:Info(message) + echohl Normal | echomsg "[EasyGrep] ".a:message | echohl None +endfunction +function! s:Warning(message) + echohl WarningMsg | echomsg "[EasyGrep] Warning: ".a:message | echohl None +endfunction +function! s:Error(message) + echohl ErrorMsg | echomsg "[EasyGrep] Error: ".a:message | echohl None +endfunction +"}}} +" }}} +" Global Options {{{ +if !exists("g:EasyGrepMode") + let g:EasyGrepMode=0 + " 0 - All + " 1 - Buffers + " 2 - Track +else + if g:EasyGrepMode > 2 + call s:Error("Invalid value for g:EasyGrepMode") + let g:EasyGrepMode = 0 + endif +endif + +if !exists("g:EasyGrepCommand") + let g:EasyGrepCommand=0 +endif + +if !exists("g:EasyGrepRecursive") + let g:EasyGrepRecursive=0 +endif + +if !exists("g:EasyGrepIgnoreCase") + let g:EasyGrepIgnoreCase=&ignorecase +endif + +if !exists("g:EasyGrepHidden") + let g:EasyGrepHidden=0 +endif + +if !exists("g:EasyGrepAllOptionsInExplorer") + let g:EasyGrepAllOptionsInExplorer=0 +endif + +if !exists("g:EasyGrepWindow") + let g:EasyGrepWindow=0 +endif + +if !exists("g:EasyGrepOpenWindowOnMatch") + let g:EasyGrepOpenWindowOnMatch=1 +endif + +if !exists("g:EasyGrepEveryMatch") + let g:EasyGrepEveryMatch=0 +endif + +if !exists("g:EasyGrepJumpToMatch") + let g:EasyGrepJumpToMatch=1 +endif + +if !exists("g:EasyGrepSearchCurrentBufferDir") + let g:EasyGrepSearchCurrentBufferDir=1 +endif + +if !exists("g:EasyGrepInvertWholeWord") + let g:EasyGrepInvertWholeWord=0 +endif + +" GetAssociationFileList {{{ +function! s:GetFileAssociationList() + if exists("g:EasyGrepFileAssociations") + return g:EasyGrepFileAssociations + endif + + let VimfilesDirs=split(&runtimepath, ',') + for v in VimfilesDirs + let f = s:BackToForwardSlash(v)."/plugin/EasyGrepFileAssociations" + if filereadable(f) + let g:EasyGrepFileAssociations=f + return f + endif + endfor + + call s:Error("Grep Pattern file list can't be read") + let g:EasyGrepFileAssociations="" + return "" +endfunction +" }}} + +if !exists("g:EasyGrepFileAssociationsInExplorer") + let g:EasyGrepFileAssociationsInExplorer=0 +endif + +if !exists("g:EasyGrepOptionPrefix") + let g:EasyGrepOptionPrefix='vy' + " Note: The default option prefix vy because I find it easy to type. + " If you want a mnemonic for it, think of (y)our own +endif + +let s:NumReplaceModeOptions = 3 +if !exists("g:EasyGrepReplaceWindowMode") + let g:EasyGrepReplaceWindowMode=0 +else + if g:EasyGrepReplaceWindowMode >= s:NumReplaceModeOptions + call s:Error("Invalid value for g:EasyGrepReplaceWindowMode") + let g:EasyGrepReplaceWindowMode = 0 + endif +endif + +if !exists("g:EasyGrepReplaceAllPerFile") + let g:EasyGrepReplaceAllPerFile=0 +endif + +if !exists("g:EasyGrepExtraWarnings") + let g:EasyGrepExtraWarnings=1 +endif + +if !exists("g:EasyGrepWindowPosition") + let g:EasyGrepWindowPosition="" +else + let w = g:EasyGrepWindowPosition + if w != "" +\ && w != "vertical" +\ && w != "leftabove" +\ && w != "aboveleft" +\ && w != "rightbelow" +\ && w != "belowright" +\ && w != "topleft" +\ && w != "botright" + call s:Error("Invalid position specified in g:EasyGrepWindowPosition") + let g:EasyGrepWindowPosition="" + endif +endif + +"}}} + +" Internals {{{ +" Global Variables {{{ +let s:OptionsExplorerOpen = 0 + +let s:FilesToGrep="*" +let s:TrackedExt = "*" + +function! s:GetReplaceWindowModeString(mode) + if(a:mode < 0 || a:mode >= s:NumReplaceModeOptions) + return "invalid" + endif + let ReplaceWindowModeStrings = [ "New Tab", "Split Windows", "autowriteall" ] + return ReplaceWindowModeStrings[a:mode] +endfunction +let s:SortOptions = [ "Name", "Name Reversed", "Extension", "Extension Reversed" ] +let s:SortFunctions = [ "SortName", "SortNameReversed", "SortExtension", "SortExtensionReversed" ] +let s:SortChoice = 0 + +let s:Commands = [ "vimgrep", "grep" ] +let s:CommandChoice = g:EasyGrepCommand < len(s:Commands) ? g:EasyGrepCommand : 0 +let s:CurrentFileCurrentDirChecked = 0 + +" SetGatewayVariables {{{ +function! s:SetGatewayVariables() + echo + call s:SaveVariable("lazyredraw") + set lazyredraw +endfunction +" }}} +" ClearGatewayVariables {{{ +function! s:ClearGatewayVariables() + let s:CurrentFileCurrentDirChecked = 0 + call s:RestoreVariable("lazyredraw") +endfunction +" }}} + +" }}} +" Common {{{ +" Echo {{{ +function! Echo(message) + let str = "" + if !s:OptionsExplorerOpen + let str .= "[EasyGrep] " + endif + let str .= a:message + echo str +endfunction +"}}} +" IsRecursivePattern {{{ +function! s:IsRecursivePattern(pattern) + return stridx(a:pattern, "\*\*\/") == 0 ? 1 : 0 +endfunction +" }}} +" GetPatternList {{{ +function! s:GetPatternList(sp, dopost) + let sp = a:sp + let dopost = a:dopost + if s:IsModeBuffers() + let filesToGrep = join(s:EscapeList(s:GetBufferNamesList(), " "), sp) + elseif s:IsModeTracked() + + let str = s:TrackedExt + let i = s:FindByPattern(s:TrackedExt) + if i != -1 + let keyList = [ i ] + let str = s:BreakDown(keyList) + endif + + if dopost + let filesToGrep = s:BuildPatternListPost(str, sp) + else + let filesToGrep = str + endif + else + let i = 0 + let numItems = len(s:Dict) + let keyList = [] + while i < numItems + if s:Dict[i][2] == 1 + call add(keyList, i) + endif + let i += 1 + endwhile + + if !empty(keyList) + let str = s:BreakDown(keyList) + else + echoerr "Inconsistency in EasyGrep script" + let str = "*" + endif + if dopost + let filesToGrep = s:BuildPatternListPost(str, sp) + else + let filesToGrep = str + endif + endif + + let filesToGrep = s:Trim(filesToGrep) + return filesToGrep +endfunction +" }}} +" BuildPatternList {{{ +function! s:BuildPatternList(...) + if a:0 > 0 + let sp = a:1 + else + let sp = " " + endif + let s:FilesToGrep = s:GetPatternList(sp, 1) +endfunction +" }}} +" BuildPatternListPost {{{ +function! s:BuildPatternListPost(str, sp) + if empty(a:str) + return a:str + endif + + let str = a:str + let sp = a:sp + if !s:IsModeBuffers() && g:EasyGrepSearchCurrentBufferDir && !g:EasyGrepRecursive + let str = s:AddBufferDirToPatternList(str,sp) + endif + let patternList = split(str) + + if g:EasyGrepHidden + let i = 0 + let size = len(patternList) + while i < size + let item = patternList[i] + if stridx(item, '*') != -1 + let newItem = '.'.item + let i += 1 + let size += 1 + call insert(patternList, newItem, i) + endif + let i += 1 + endwhile + endif + + let str = "" + for item in patternList + if g:EasyGrepRecursive && s:CommandChoice == 0 + let str .= "**/" + endif + let str .= item.sp + endfor + + return str +endfunction +"}}} +" AddBufferDirToPatternList {{{ +function! s:AddBufferDirToPatternList(str,sp) + let str = a:str + let sp = a:sp + + " Build a list of the directories in buffers + let dirs = s:GetBufferDirsList() + + let patternList = split(str, sp) + + let currDir = getcwd() + for key in sort(dirs) + let newDir = key + let addToList = 1 + if newDir == currDir || newDir == '.' + let addToList = 0 + elseif g:EasyGrepRecursive && match(newDir,currDir)==0 + let addToList = 0 + endif + if addToList + for p in patternList + let str = str.sp.newDir."/".p + endfor + endif + endfor + return str +endfunction +"}}} +" FindByPattern {{{ +function! s:FindByPattern(pattern) + let pattern = a:pattern + let i = 0 + let numItems = len(s:Dict) + while i < numItems + let patterns = split(s:Dict[i][1]) + for p in patterns + if pattern ==# p + return i + endif + endfor + let i += 1 + endwhile + return -1 +endfunction +" }}} +" CompareCurrentFileCurrentDirectory {{{ +function! s:CompareCurrentFileCurrentDirectory() + if !g:EasyGrepExtraWarnings || s:CurrentFileCurrentDirChecked + return 1 + endif + let s:CurrentFileCurrentDirChecked = 1 + if !empty(&buftype) " don't check for quickfix and others + return + endif + if !s:IsModeBuffers() + let currFile = bufname("%") + if empty(currFile) + call s:Warning("cannot search the current file because it is unnamed") + return 0 + endif + let fileDir = fnamemodify(currFile, ":p:h") + if !empty(fileDir) && !g:EasyGrepSearchCurrentBufferDir + let cwd = getcwd() + let willmatch = 1 + if g:EasyGrepRecursive + if match(fileDir, cwd) != 0 + let willmatch = 0 + endif + else + if fileDir != cwd + let willmatch = 0 + endif + endif + if !willmatch + call s:Warning("current file not searched, its directory [".fileDir."] doesn't match the working directory [".cwd."]") + return 0 + endif + endif + endif + return 1 +endfunction +" }}} +" }}} +" OptionsExplorer {{{ +" OpenOptionsExplorer {{{ +function! s:OpenOptionsExplorer() + let s:OptionsExplorerOpen = 1 + + call s:CreateOptions() + + let windowLines = len(s:Options) + 1 + if g:EasyGrepFileAssociationsInExplorer + let windowLines += len(s:Dict) + else + let windowLines += s:NumSpecialOptions + endif + + " split the window; fit exactly right + exe "keepjumps botright ".windowLines."new" + + setlocal bufhidden=delete + setlocal buftype=nofile + setlocal nobuflisted + setlocal noswapfile + setlocal cursorline + + syn match Help /^".*/ + highlight def link Help Special + + syn match Activated /^>\w.*/ + highlight def link Activated Type + + syn match Selection /^\ \w.*/ + highlight def link Selection String + + nnoremap l + nnoremap q :call Quit() + + nnoremap a :call ActivateAll() + nnoremap b :call ActivateBuffers() + nnoremap t :call ActivateTracked() + nnoremap u :call ActivateUser() + + nnoremap c :call ToggleCommand() + nnoremap r :call ToggleRecursion() + nnoremap i :call ToggleIgnoreCase() + nnoremap h :call ToggleHidden() + nnoremap w :call ToggleWindow() + nnoremap o :call ToggleOpenWindow() + nnoremap g :call ToggleEveryMatch() + nnoremap p :call ToggleJumpToMatch() + nnoremap ! :call ToggleWholeWord() + nnoremap e :call EchoFilesSearched() + nnoremap s :call Sort() + nnoremap m :call ToggleReplaceWindowMode() + nnoremap \| :call EchoOptionsSet() + nnoremap * :call ToggleFileAssociationsInExplorer() + nnoremap ? :call ToggleOptionsDisplay() + nnoremap :call Select() + nnoremap : :call Echo("Type q to quit") + + call s:BuildPatternList() + call s:FillWindow() +endfunction +" }}} +" Mapped Functions {{{ +" EchoFilesSearched {{{ +function! EchoFilesSearched() + call s:BuildPatternList("\n") + + if s:IsModeBuffers() + let str = s:FilesToGrep + else + let str = "" + let patternList = split(s:FilesToGrep) + for p in patternList + let s = glob(p) + if !empty(s) + let fileList = split(s, "\n") + for f in fileList + if filereadable(f) + let str .= f."\n" + endif + endfor + endif + endfor + endif + + if !empty(str) + call s:Echo("Files that will be searched") + echo str + else + call s:Echo("No files match the current options") + endif + call s:BuildPatternList() +endfunction +"}}} +" EchoOptionsSet {{{ +function! EchoOptionsSet() + + let optList = [ + \ "g:EasyGrepFileAssociations", + \ "g:EasyGrepMode", + \ "g:EasyGrepCommand", + \ "g:EasyGrepRecursive", + \ "g:EasyGrepIgnoreCase", + \ "g:EasyGrepHidden", + \ "g:EasyGrepSearchCurrentBufferDir", + \ "g:EasyGrepAllOptionsInExplorer", + \ "g:EasyGrepWindow", + \ "g:EasyGrepReplaceWindowMode", + \ "g:EasyGrepOpenWindowOnMatch", + \ "g:EasyGrepEveryMatch", + \ "g:EasyGrepJumpToMatch", + \ "g:EasyGrepInvertWholeWord", + \ "g:EasyGrepFileAssociationsInExplorer", + \ "g:EasyGrepExtraWarnings", + \ "g:EasyGrepOptionPrefix", + \ "g:EasyGrepReplaceAllPerFile" + \ ] + + let str = "" + for item in optList + let q = type(eval(item))==1 ? "'" : "" + let str .= "let ".item."=".q.eval(item).q."\n" + endfor + + call s:Warning("The following options will be saved in the e register; type \"ep to paste into your .vimrc") + redir @e + echo str + redir END + +endfunction + +"}}} +" Select {{{ +function! Select() + let pos = getpos(".") + let line = pos[1] + let choice = line - s:firstPatternLine + + call s:ActivateChoice(choice) +endfunction +" }}} +" ActivateAll {{{ +function! ActivateAll() + call s:ActivateChoice(s:allChoicePos) +endfunction +"}}} +" ActivateBuffers {{{ +function! ActivateBuffers() + call s:ActivateChoice(s:buffersChoicePos) +endfunction +"}}} +" ActivateTracked {{{ +function! ActivateTracked() + call s:ActivateChoice(s:trackChoicePos) +endfunction +"}}} +" ActivateUser {{{ +function! ActivateUser() + call s:ActivateChoice(s:userChoicePos) +endfunction +"}}} +" ActivateChoice {{{ +function! s:ActivateChoice(choice) + let choice = a:choice + + if choice < 0 || choice == s:NumSpecialOptions + return + endif + + if choice < 3 + let g:EasyGrepMode = choice + endif + + " handles the space in between the special options and file patterns + let choice -= choice >= s:NumSpecialOptions ? 1 : 0 + + let specialKeys = [ s:allChoicePos, s:buffersChoicePos, s:trackChoicePos, s:userChoicePos] + + let isActivated = (s:Dict[choice][2] == 0) + + let userStr = "" + if choice == s:userChoicePos + let userStr = input("Enter Grep Pattern: ", s:Dict[choice][1]) + if empty(userStr) + let s:Dict[choice][1] = "" + if isActivated + return + endif + else + let choice = s:GrepSetManual(userStr) + if choice == -1 + return + elseif choice == s:userChoicePos + let s:Dict[choice][1] = userStr + else + let isActivated = 1 + let s:Dict[s:userChoicePos][1] = "" + call s:ClearActivatedItems() + call s:UpdateAll() + endif + endif + endif + + let allBecomesActivated = 0 + if isActivated + if choice == s:buffersChoicePos && g:EasyGrepRecursive == 1 + call s:Echo("Recursion turned off by Buffers Selection") + let g:EasyGrepRecursive = 0 + endif + + if count(specialKeys, choice) > 0 + call s:ClearActivatedItems() + call s:UpdateAll() + else + for c in specialKeys + if s:Dict[c][2] == 1 + let s:Dict[c][2] = 0 + call s:UpdateChoice(c) + endif + endfor + endif + + let s:Dict[choice][2] = 1 + + else + if choice == s:allChoicePos || choice == s:buffersChoicePos || choice == s:trackChoicePos || (choice == s:userChoicePos && !empty(userStr)) + let isActivated = 1 + else + let s:Dict[choice][2] = 0 + let isActivated = 0 + if s:HasActivatedItem() == 0 + let allBecomesActivated = 1 + let s:Dict[s:allChoicePos][2] = 1 + call s:UpdateChoice(s:allChoicePos) + endif + endif + endif + + call s:BuildPatternList() + call s:UpdateOptions() + + call s:UpdateChoice(choice) + + let str = "" + if choice == s:allChoicePos + let str = "Activated (All)" + else + let e = isActivated ? "Activated" : "Deactivated" + + let keyName = s:Dict[choice][0] + let str = e." (".keyName.")" + if allBecomesActivated + let str .= " -> Activated (All)" + endif + endif + + call s:Echo(str) +endfunction +"}}} +" Sort {{{ +function! Sort() + let s:SortChoice += 1 + if s:SortChoice == len(s:SortOptions) + let s:SortChoice = 0 + endif + + let beg = s:NumSpecialOptions + let dictCopy = s:Dict[beg :] + call sort(dictCopy, s:SortFunctions[s:SortChoice]) + let s:Dict[beg :] = dictCopy + + call s:UpdateOptions() + call s:UpdateAll() + + call s:Echo("Set sort to (".s:SortOptions[s:SortChoice].")") +endfunction +" }}} +" Sort Functions {{{ +function! SortName(lhs, rhs) + return a:lhs[0] == a:rhs[0] ? 0 : a:lhs[0] > a:rhs[0] ? 1 : -1 +endfunction + +function! SortNameReversed(lhs, rhs) + let r = SortName(a:lhs, a:rhs) + return r == 0 ? 0 : r == -1 ? 1 : -1 +endfunction + +function! SortExtension(lhs, rhs) + return a:lhs[1] == a:rhs[1] ? 0 : a:lhs[1] > a:rhs[1] ? 1 : -1 +endfunction + +function! SortExtensionReversed(lhs, rhs) + let r = SortExtension(a:lhs, a:rhs) + return r == 0 ? 0 : r == -1 ? 1 : -1 +endfunction +" }}} +" GetGrepCommandName {{{ +function! s:GetGrepCommandName() + let name = s:Commands[s:CommandChoice] + if name == "grep" + let name .= "='".&grepprg."'" + endif + return name +endfunction +" }}} +" ToggleCommand {{{ +function! ToggleCommand() + let s:CommandChoice += 1 + if s:CommandChoice == len(s:Commands) + let s:CommandChoice = 0 + endif + + call s:BuildPatternList() + call s:UpdateOptions() + + call s:Echo("Set command to (".s:GetGrepCommandName().")") +endfunction +" }}} +" ToggleRecursion {{{ +function! ToggleRecursion() + if s:IsModeBuffers() + call s:Warning("Recursive mode cant' be set when *Buffers* is activated") + return + endif + + let g:EasyGrepRecursive = !g:EasyGrepRecursive + + call s:BuildPatternList() + call s:UpdateOptions() + + call s:Echo("Set recursive mode to (".s:OnOrOff(g:EasyGrepRecursive).")") +endfunction +" }}} +" ToggleIgnoreCase {{{ +function! ToggleIgnoreCase() + let g:EasyGrepIgnoreCase = !g:EasyGrepIgnoreCase + call s:UpdateOptions() + call s:Echo("Set ignore case to (".s:OnOrOff(g:EasyGrepIgnoreCase).")") +endfunction +" }}} +" ToggleHidden {{{ +function! ToggleHidden() + let g:EasyGrepHidden = !g:EasyGrepHidden + + call s:BuildPatternList() + call s:UpdateOptions() + + call s:Echo("Set hidden files included to (".s:OnOrOff(g:EasyGrepHidden).")") +endfunction +" }}} +" ToggleWindow {{{ +function! ToggleWindow() + let g:EasyGrepWindow = !g:EasyGrepWindow + call s:UpdateOptions() + + call s:Echo("Set window to (".s:GetErrorListName().")") +endfunction +"}}} +" ToggleOpenWindow {{{ +function! ToggleOpenWindow() + let g:EasyGrepOpenWindowOnMatch = !g:EasyGrepOpenWindowOnMatch + call s:UpdateOptions() + + call s:Echo("Set open window on match to (".s:OnOrOff(g:EasyGrepOpenWindowOnMatch).")") +endfunction +"}}} +" ToggleEveryMatch {{{ +function! ToggleEveryMatch() + let g:EasyGrepEveryMatch = !g:EasyGrepEveryMatch + call s:UpdateOptions() + + call s:Echo("Set seperate multiple matches to (".s:OnOrOff(g:EasyGrepEveryMatch).")") +endfunction +"}}} +" ToggleJumpToMatch {{{ +function! ToggleJumpToMatch() + let g:EasyGrepJumpToMatch = !g:EasyGrepJumpToMatch + call s:UpdateOptions() + + call s:Echo("Set jump to match to (".s:OnOrOff(g:EasyGrepJumpToMatch).")") +endfunction +"}}} +" ToggleWholeWord {{{ +function! ToggleWholeWord() + let g:EasyGrepInvertWholeWord = !g:EasyGrepInvertWholeWord + call s:UpdateOptions() + + call s:Echo("Set invert the meaning of whole word to (".s:OnOrOff(g:EasyGrepInvertWholeWord).")") +endfunction +"}}} +" ToggleReplaceWindowMode {{{ +function! ToggleReplaceWindowMode() + let g:EasyGrepReplaceWindowMode += 1 + if g:EasyGrepReplaceWindowMode == s:NumReplaceModeOptions + let g:EasyGrepReplaceWindowMode = 0 + endif + + call s:UpdateOptions() + + call s:Echo("Set replace window mode to (".s:GetReplaceWindowModeString(g:EasyGrepReplaceWindowMode).")") +endfunction +" }}} +" ToggleOptionsDisplay {{{ +function! ToggleOptionsDisplay() + let g:EasyGrepAllOptionsInExplorer = !g:EasyGrepAllOptionsInExplorer + + if s:OptionsExplorerOpen + let oldWindowLines = len(s:Options) + 1 + call s:FillWindow() + let newWindowLines = len(s:Options) + 1 + + let linesDiff = newWindowLines-oldWindowLines + if linesDiff > 0 + let linesDiff = "+".linesDiff + endif + + execute "resize ".linesDiff + normal zb + endif + + call s:Echo("Showing ". (g:EasyGrepAllOptionsInExplorer ? "more" : "fewer")." options") +endfunction +"}}} +" ToggleFileAssociationsInExplorer {{{ +function! ToggleFileAssociationsInExplorer() + let g:EasyGrepFileAssociationsInExplorer = !g:EasyGrepFileAssociationsInExplorer + + call s:FillWindow() + call s:UpdateOptions() + + if g:EasyGrepFileAssociationsInExplorer + execute "resize +".len(s:Dict) + else + let newSize = len(s:Options) + s:NumSpecialOptions + 1 + execute "resize ".newSize + endif + normal zb + + call s:Echo("Set file associations in explorer to (".s:OnOrOff(g:EasyGrepFileAssociationsInExplorer).")") +endfunction +"}}} +" Quit {{{ +function! Quit() + let s:OptionsExplorerOpen = 0 + echo "" + quit +endfunction +" }}} +"}}} +" ClearActivatedItems {{{ +function! s:ClearActivatedItems() + let i = 0 + let numItems = len(s:Dict) + while i < numItems + let s:Dict[i][2] = 0 + let i += 1 + endwhile +endfunction +" }}} +" HasActivatedItem {{{ +function! s:HasActivatedItem() + let i = 0 + let numItems = len(s:Dict) + while i < numItems + if s:Dict[i][2] == 1 + return 1 + endif + let i += 1 + endwhile + return 0 +endfunction +" }}} +" UpdateOptions {{{ +function! s:UpdateOptions() + if !s:OptionsExplorerOpen + return + endif + + call s:CreateOptions() + + setlocal modifiable + + let lastLine = len(s:Options) + let line = 0 + while line < lastLine + call setline(line+1, s:Options[line]) + let line += 1 + endwhile + + setlocal nomodifiable +endfunction +" }}} +" UpdateAll {{{ +function! s:UpdateAll() + if g:EasyGrepFileAssociationsInExplorer + let numItems = len(s:Dict) + else + let numItems = s:NumSpecialOptions + endif + call s:UpdateRange(0, numItems) +endfunction +" }}} +" UpdateChoice {{{ +function! s:UpdateChoice(choice) + call s:UpdateRange(a:choice, a:choice+1) +endfunction +" }}} +" UpdateRange {{{ +function! s:UpdateRange(first, last) + if !s:OptionsExplorerOpen + return + endif + + setlocal modifiable + let i = a:first + while i < a:last + let indicator = s:Dict[i][2] == 1 ? '>' : ' ' + let str = indicator. s:Dict[i][0] . ': ' . s:Dict[i][1] + let lineOffset = i >= s:NumSpecialOptions ? 1 : 0 + call setline(s:firstPatternLine+i+lineOffset, str) + let i += 1 + endwhile + + setlocal nomodifiable +endfunction +" }}} +" FillWindow {{{ +function! s:FillWindow() + + setlocal modifiable + + " Clear the entire window + execute "silent %delete" + + call s:CreateOptions() + call append(0, s:Options) + let s:firstPatternLine = len(s:Options) + 1 + call s:UpdateOptions() + + setlocal modifiable + + if g:EasyGrepFileAssociationsInExplorer + let numItems = len(s:Dict) + else + let numItems = s:NumSpecialOptions + endif + + let i = 0 + while i < numItems + call append(s:firstPatternLine, "") + let i += 1 + endwhile + call s:UpdateAll() + setlocal nomodifiable + + " place the cursor at the start of the special options + execute "".len(s:Options)+1 +endfunction +" }}} +" CreateOptionMappings {{{ +function! s:CreateOptionMappings() + if empty(g:EasyGrepOptionPrefix) + return + endif + + let p = g:EasyGrepOptionPrefix + + exe "nmap ".p."a :call ActivateAll()" + exe "nmap ".p."b :call ActivateBuffers()" + exe "nmap ".p."t :call ActivateTracked()" + exe "nmap ".p."u :call ActivateUser()" + + exe "nmap ".p."c :call ToggleCommand()" + exe "nmap ".p."r :call ToggleRecursion()" + exe "nmap ".p."i :call ToggleIgnoreCase()" + exe "nmap ".p."h :call ToggleHidden()" + exe "nmap ".p."w :call ToggleWindow()" + exe "nmap ".p."o :call ToggleOpenWindow()" + exe "nmap ".p."g :call ToggleEveryMatch()" + exe "nmap ".p."p :call ToggleJumpToMatch()" + exe "nmap ".p."! :call ToggleWholeWord()" + exe "nmap ".p."e :call EchoFilesSearched()" + exe "nmap ".p."s :call Sort()" + exe "nmap ".p."m :call ToggleReplaceWindowMode()" + exe "nmap ".p."? :call ToggleOptionsDisplay()" + exe "nmap ".p."\\| :call EchoOptionsSet()" + exe "nmap ".p."* :call ToggleFileAssociationsInExplorer()" +endfunction +"}}} +" GrepOptions {{{ +function! GrepOptions() + call s:SetGatewayVariables() + call s:CreateDict() + call s:OpenOptionsExplorer() + return s:ClearGatewayVariables() +endfunction +" }}} +" CreateOptions {{{ +function! s:CreateOptions() + + let s:Options = [] + + call add(s:Options, "\"q: quit") + call add(s:Options, "\"r: recursive mode (".s:OnOrOff(g:EasyGrepRecursive).")") + call add(s:Options, "\"i: ignore case (".s:OnOrOff(g:EasyGrepIgnoreCase).")") + call add(s:Options, "\"h: hidden files included (".s:OnOrOff(g:EasyGrepHidden).")") + call add(s:Options, "\"e: echo files that would be searched") + if g:EasyGrepAllOptionsInExplorer + call add(s:Options, "\"c: change grep command (".s:GetGrepCommandName().")") + call add(s:Options, "\"w: window to use (".s:GetErrorListName().")") + call add(s:Options, "\"m: replace window mode (".s:GetReplaceWindowModeString(g:EasyGrepReplaceWindowMode).")") + call add(s:Options, "\"o: open window on match (".s:OnOrOff(g:EasyGrepOpenWindowOnMatch).")") + call add(s:Options, "\"g: seperate multiple matches (".s:OnOrOff(g:EasyGrepEveryMatch).")") + call add(s:Options, "\"p: jump to match (".s:OnOrOff(g:EasyGrepJumpToMatch).")") + call add(s:Options, "\"!: invert the meaning of whole word (".s:OnOrOff(g:EasyGrepInvertWholeWord).")") + call add(s:Options, "\"*: show file associations list (".s:OnOrOff(g:EasyGrepFileAssociationsInExplorer).")") + if g:EasyGrepFileAssociationsInExplorer + call add(s:Options, "\"s: change file associations list sorting (".s:SortOptions[s:SortChoice].")") + endif + call add(s:Options, "") + call add(s:Options, "\"a: activate 'All' mode") + call add(s:Options, "\"b: activate 'Buffers' mode") + call add(s:Options, "\"t: activate 'TrackExt' mode") + call add(s:Options, "\"u: activate 'User' mode") + call add(s:Options, "") + call add(s:Options, "\"|: echo options that are set") + endif + call add(s:Options, "\"?: show ". (g:EasyGrepAllOptionsInExplorer ? "fewer" : "more")." options") + call add(s:Options, "") + call add(s:Options, "\"Current Directory: ".getcwd()) + call add(s:Options, "\"Grep Targets: ".s:FilesToGrep) + call add(s:Options, "") + +endfunction +"}}} +" GrepSetManual {{{ +function! s:GrepSetManual(str) + call s:SetGatewayVariables() + let str = a:str + if s:IsRecursivePattern(str) + call s:Error("User specified grep pattern may not have a recursive specifier") + return -1 + endif + let pos = s:userChoicePos + + let i = s:FindByPattern(str) + if i != -1 + let s2 = s:Dict[i][1] + if str == s2 + let pos = i + else + let msg = "Pattern '".s:Dict[i][0]."=".s:Dict[i][1]."' matches your input, use this?" + let response = confirm(msg, "&Yes\n&No") + if response == 1 + let pos = i + endif + endif + endif + + return pos +endfunction +"}}} +" }}} +" EasyGrepFileAssociations {{{ +" CreateDict {{{ +function! s:CreateDict() + if exists("s:Dict") + return + endif + + let s:Dict = [ ] + call add(s:Dict, [ "All" , "*", g:EasyGrepMode==0 ? 1 : 0 ] ) + call add(s:Dict, [ "Buffers" , "*Buffers*", g:EasyGrepMode==1 ? 1 : 0 ] ) + call add(s:Dict, [ "TrackExt" , "*TrackExt*", g:EasyGrepMode==2 ? 1 : 0 ] ) + call add(s:Dict, [ "User" , "", 0 ] ) + + let s:allChoicePos = 0 + let s:buffersChoicePos = 1 + let s:trackChoicePos = 2 + let s:userChoicePos = 3 + + let s:NumSpecialOptions = len(s:Dict) + + call s:ParseFileAssociationList() + let s:NumFileAssociations = len(s:Dict) - s:NumSpecialOptions + +endfunction +" }}} +" BreakDown {{{ +function! s:BreakDown(keyList) + + " Indicates which keys have already been parsed to avoid multiple entries + " and infinite recursion + let s:traversed = repeat([0], len(s:Dict)) + + let str = "" + for k in a:keyList + let str .= s:DoBreakDown(k)." " + endfor + unlet s:traversed + let str = s:Trim(str) + + return str +endfunction +"}}} +" DoBreakDown {{{ +function! s:DoBreakDown(key) + if s:traversed[a:key] == 1 + return "" + endif + let s:traversed[a:key] = 1 + + let str = "" + let patternList = split(s:Dict[a:key][1]) + for p in patternList + if s:IsLink(p) + let k = s:FindByKey(s:GetKeyFromLink(p)) + if k != -1 + let str .= s:DoBreakDown(k) + endif + else + let str .= p + endif + let str .= ' ' + endfor + return str +endfunction +"}}} +" CheckLinks {{{ +function! s:CheckLinks() + let i = s:NumSpecialOptions + let end = len(s:Dict) + while i < end + let patterns = split(s:Dict[i][1]) + let j = 0 + for p in patterns + if s:IsLink(p) && s:FindByKey(s:GetKeyFromLink(p)) == -1 + call s:Warning("Key(".p.") links to a nonexistent key") + call remove(patterns, j) + let j -= 1 + endif + let j += 1 + endfor + + if len(patterns) == 0 + call s:Warning("Key(".s:Dict[i][0].") has no valid patterns or links") + call remove(s:Dict, i) + else + let s:Dict[i][1] = join(patterns) + endif + let i += 1 + endwhile +endfunction +"}}} +" FindByKey {{{ +function! s:FindByKey(key) + let i = 0 + let numItems = len(s:Dict) + while i < numItems + if s:Dict[i][0] ==# a:key + return i + endif + let i += 1 + endwhile + return -1 +endfunction +" }}} +" IsInDict {{{ +function! s:IsInDict(pat) + let i = 0 + let numItems = len(s:Dict) + while i < numItems + if s:Dict[i][0] == a:pat + return 1 + endif + let i += 1 + endwhile + return 0 +endfunction +" }}} +" GetKeyFromLink {{{ +function! s:GetKeyFromLink(str) + return strpart(a:str, 1, len(a:str)-2) +endfunction +"}}} +" IsLink {{{ +function! s:IsLink(str) + return a:str[0] == '<' && a:str[len(a:str)-1] == '>' +endfunction +" }}} +" ParseFileAssociationList {{{ +function! s:ParseFileAssociationList() + let lst = s:GetFileAssociationList() + + if empty(lst) + return + endif + + if !filereadable(lst) + call s:Error("Grep Pattern file list can't be read") + return + endif + + let fileList = readfile(lst) + if empty(fileList) + call s:Error("Grep Pattern file list is empty") + return + endif + + let lineCounter = 0 + for line in fileList + let lineCounter += 1 + let line = s:Trim(line) + if empty(line) || line[0] == "\"" + continue + endif + + let keys = split(line, "=") + if len(keys) != 2 + call s:Warning("Invalid line: ".line) + continue + endif + + let keys[0] = s:Trim(keys[0]) + let keys[1] = s:Trim(keys[1]) + + if len(keys[0]) == 0 || len(keys[1]) == 0 + call s:Warning("Invalid line: ".line) + continue + endif + + " TODO: check that keys[0] is well-formed + + if s:IsInDict(keys[0]) + call s:Warning("Key already added: ".keys[0]) + continue + endif + + let pList = split(keys[1]) + for p in pList + + " check for invalid filesystem characters. + if match(p, "[/\\,;']") != -1 + call s:Warning("Invalid pattern (".p.") in line(".lineCounter.")") + continue + endif + + if match(p, '[<>]') != -1 + if s:countstr(p, '<') > 1 + \ || s:countstr(p, '>') > 1 + \ || p[0] != '<' + \ || p[len(p)-1] != '>' + call s:Warning("Invalid link (".p.") in line(".lineCounter.")") + continue + endif + endif + endfor + + call add(s:Dict, [ keys[0], keys[1], 0 ] ) + endfor + call s:CheckLinks() +endfunction +"}}} +" }}} +" Modes {{{ +" IsModeAll {{{ +function! s:IsModeAll() + return s:Dict[s:allChoicePos][2] == 1 +endfunction +" }}} +" IsModeBuffers {{{ +function! s:IsModeBuffers() + return s:Dict[s:buffersChoicePos][2] == 1 +endfunction +" }}} +" IsModeTracked {{{ +function! s:IsModeTracked() + return s:Dict[s:trackChoicePos][2] == 1 +endfunction +" }}} +" IsModeUser {{{ +function! s:IsModeUser() + return s:Dict[s:userChoicePos][2] == 1 +endfunction +" }}} +" Tracked {{{ +" SetCurrentExtension {{{ +function! s:SetCurrentExtension() + if !empty(&buftype) + return + endif + let fname = bufname("%") + if empty(fname) + return + endif + let ext = fnamemodify(fname, ":e") + if !empty(ext) + let ext = "*.".ext + else + let ext = fnamemodify(fname, ":p:t") + if(empty(ext)) + return + endif + endif + if !s:IsModeTracked() + " Always save the extension when not in tracked mode + let s:TrackedExt = ext + + " Note: this has a very, very, very, small issue (is it even an + " issue?) where if you're working with C++ files, and you switch to + " buffers mode, and then edit a file of another type, like .c (which + " should be in the C++ list), and then switch back to tracked mode, + " you will lose the C++ association and have to go back to a C++ + " file before being able to search them. + " This is so small of an issue that it's almost a non-issue, so I'm + " not going to bother fixing it + else + let tempList = split(s:FilesToGrep) + + " When in tracked mode, change the tracked extension if it isn't + " already in the list of files to be grepped + if index(tempList, ext) == -1 + let s:TrackedExt = ext + call s:BuildPatternList() + endif + endif +endfunction +"}}} +" SetWatchExtension {{{ +function! s:SetWatchExtension() + call s:CreateDict() + augroup EasyGrepAutocommands + au! + autocmd BufEnter * call s:SetCurrentExtension() + augroup END +endfunction +call s:SetWatchExtension() +"}}} +" }}} +" }}} +" Selection Functions {{{ +" GrepSelection {{{ +function! GrepSelection(add, whole) + call s:SetGatewayVariables() + let currSelection=s:GetCurrentSelection() + if empty(currSelection) + call s:Warning("No current selection") + return s:ClearGatewayVariables() + endif + call s:DoGrep(currSelection, a:add, a:whole, "", 1) + return s:ClearGatewayVariables() +endfunction +" }}} +" GrepCurrentWord {{{ +function! GrepCurrentWord(add, whole) + call s:SetGatewayVariables() + let currWord=s:GetCurrentWord() + if empty(currWord) + call s:Warning("No current word") + return s:ClearGatewayVariables() + endif + + let sameDirectory = s:CompareCurrentFileCurrentDirectory() + let r = s:DoGrep(currWord, a:add, a:whole, "", 1) + return s:ClearGatewayVariables() +endfunction +" }}} +" ReplaceSelection {{{ +function! ReplaceSelection(whole) + call s:SetGatewayVariables() + let currSelection=s:GetCurrentSelection() + if empty(currSelection) + call s:Warning("No current selection") + return s:ClearGatewayVariables() + endif + + call s:ReplaceString(currSelection, a:whole, 1) + return s:ClearGatewayVariables() +endfunction +"}}} +" GetCurrentWord {{{ +function! s:GetCurrentWord() + return expand("") +endfunction +" }}} +" GetCurrentSelection {{{ +function! s:GetCurrentSelection() + return s:ClearNewline(@") +endfunction +" }}} +" ReplaceCurrentWord {{{ +function! ReplaceCurrentWord(whole) + call s:SetGatewayVariables() + let currWord=s:GetCurrentWord() + if empty(currWord) + call s:Warning("No current word") + return s:ClearGatewayVariables() + endif + + call s:ReplaceString(currWord, a:whole, 1) + return s:ClearGatewayVariables() +endfunction +"}}} +" }}} +" Command Line Functions {{{ +" GrepCommandLine {{{ +function! s:GrepCommandLine(argv, add, bang) + call s:SetGatewayVariables() + let opts = s:ParseCommandLine(a:argv) + if !empty(opts["failedparse"]) + let errorstring="Invalid command: ".opts["failedparse"] + echo errorstring + else + call s:SetCommandLineOptions(opts) + call s:DoGrep(opts["pattern"], a:add, a:bang == "!" ? 1 : 0, opts["count"]>0 ? opts["count"] : "", 0) + call s:RestoreCommandLineOptions(opts) + endif + return s:ClearGatewayVariables() +endfunction +" }}} +" ParseCommandLine {{{ +function! s:ParseCommandLine(argv) + let opts = {} + let opts["recursive"] = 0 + let opts["case-insensitive"] = g:EasyGrepIgnoreCase + let opts["case-sensitive"] = 0 + let opts["count"] = 0 + let opts["pattern"] = "" + let opts["failedparse"] = "" + let parseopts = 1 + + if empty(a:argv) + return opts + endif + + let nextiscount = 0 + let tokens = split(a:argv, ' \zs') + let numtokens = len(tokens) + let j = 0 + while j < numtokens + let tok = tokens[j] + let tok = s:Trim(tok) + if tok == "--" + let parseopts = 0 + let j += 1 + continue + endif + if tok[0] == '-' && parseopts + let tok = s:Trim(tok) + if tok =~ '-[0-9]\+' + let opts["count"] = tok[1:] + else + let i = 1 + let end = len(tok) + while i < end + let c = tok[i] + if c == '-' + " ignore + elseif c ==# 'R' || c==# 'r' + let opts["recursive"] = 1 + elseif c ==# 'i' + let opts["case-insensitive"] = 1 + elseif c ==# 'I' + let opts["case-sensitive"] = 1 + elseif c ==# 'm' + let j += 1 + if j < numtokens + let tok = tokens[j] + let opts["count"] = tok + else + let opts["failedparse"] = "Missing argument to -m" + endif + else + let opts["failedparse"] = "Invalid option (".c.")" + endif + let i += 1 + endwhile + endif + else + let opts["pattern"] .= tok + endif + let j += 1 + endwhile + + if !empty(opts["failedparse"]) + return opts + endif + + if empty(opts["pattern"]) + let opts["failedparse"] = "missing pattern" + endif + + return opts +endfunction +" }}} +" SetCommandLineOptions {{{ +function! s:SetCommandLineOptions(opts) + let opts = a:opts + call s:SaveVariable("g:EasyGrepRecursive") + let g:EasyGrepRecursive = g:EasyGrepRecursive || opts["recursive"] + + call s:SaveVariable("g:EasyGrepIgnoreCase") + let g:EasyGrepIgnoreCase = (g:EasyGrepIgnoreCase || opts["case-insensitive"]) && !opts["case-sensitive"] +endfunction +" }}} +" RestoreCommandLineOptions {{{ +function! s:RestoreCommandLineOptions(opts) + let opts = a:opts + call s:RestoreVariable("g:EasyGrepRecursive") + call s:RestoreVariable("g:EasyGrepIgnoreCase") +endfunction +" }}} +" Replace {{{ +function! s:Replace(whole, argv) + call s:SetGatewayVariables() + + let l = len(a:argv) + let invalid = 0 + + if l == 0 + let invalid = 1 + elseif l > 3 && a:argv[0] == '/' + let ph = tempname() + let ph = substitute(ph, '/', '_', 'g') + let temp = substitute(a:argv, '\\/', ph, "g") + let l = len(temp) + if temp[l-1] != '/' + call s:Error("Missing trailing /") + let invalid = 1 + elseif stridx(temp, '/', 1) == l-1 + call s:Error("Missing middle /") + let invalid = 1 + elseif s:countstr(temp, '/') > 3 + call s:Error("Too many /'s, escape these if necessary") + let invalid = 1 + else + let argv = split(temp, '/') + let i = 0 + while i < len(argv) + let argv[i] = substitute(argv[i], ph, '\\/', 'g') + let i += 1 + endwhile + endif + else + let argv = split(a:argv) + if len(argv) != 2 + call s:Error("Too many arguments") + let invalid = 1 + endif + endif + + if invalid + call s:Echo("usage: Replace /target/replacement/ --or-- Replace target replacement") + return + endif + + let target = argv[0] + let replacement = argv[1] + + call s:DoReplace(target, replacement, a:whole, 0) + return s:ClearGatewayVariables() +endfunction +"}}} +" ReplaceUndo {{{ +function! s:ReplaceUndo(bang) + call s:SetGatewayVariables() + if !exists("s:actionList") + call s:Error("No saved actions to undo") + return s:ClearGatewayVariables() + endif + + " If either of these variables exists, that means the last command was + " interrupted; give it another shot + if !exists(s:GetSavedName("switchbuf")) && !exists(s:GetSavedName("autowriteall")) + + call s:SaveVariable("switchbuf") + set switchbuf=useopen + if g:EasyGrepReplaceWindowMode == 2 + call s:SaveVariable("autowriteall") + set autowriteall + else + if g:EasyGrepReplaceWindowMode == 0 + set switchbuf+=usetab + else + set switchbuf+=split + endif + endif + endif + + call s:SetErrorList(s:LastErrorList) + call s:GotoStartErrorList() + + let bufList = s:GetVisibleBuffers() + + let i = 0 + let numItems = len(s:actionList) + let lastFile = -1 + + let finished = 0 + while !finished + try + while i < numItems + + let cc = s:actionList[i][0] + let off = s:actionList[i][1] + let target = s:actionList[i][2] + let replacement = s:actionList[i][3] + + if g:EasyGrepReplaceWindowMode == 0 + let thisFile = s:LastErrorList[cc].bufnr + if thisFile != lastFile + " only open a new tab when this window isn't already + " open + if index(bufList, thisFile) == -1 + if lastFile != -1 + tabnew + endif + if g:EasyGrepWindow == 0 + execute g:EasyGrepWindowPosition." copen" + else + execute g:EasyGrepWindowPosition." lopen" + endif + setlocal nofoldenable + endif + endif + let lastFile = thisFile + endif + + if g:EasyGrepWindow == 0 + execute "cc ".(cc+1) + else + execute "ll ".(cc+1) + endif + + " TODO: increase the granularity of the undo to be per-atom + " TODO: restore numbered sub-expressions + " TODO: check that replacement is at off + + let thisLine = getline(".") + let linebeg = strpart(thisLine, 0, off) + let lineend = strpart(thisLine, off) + let lineend = substitute(lineend, replacement, target, "") + let newLine = linebeg.lineend + + call setline(".", newLine) + + let i += 1 + endwhile + let finished = 1 + catch /^Vim(\a\+):E36:/ + call s:Warning("Ran out of room for more windows") + let finished = confirm("Do you want to save all windows and continue?", "&Yes\n&No")-1 + if finished == 1 + call s:Warning("To continue, save unsaved windows, make some room (try :only) and run ReplaceUndo again") + return + else + wall + only + endif + catch /^Vim:Interrupt$/ + call s:Warning("Undo interrupted by user; state is not guaranteed") + let finished = confirm("Are you sure you want to stop the undo?", "&Yes\n&No")-1 + let finished = !finished + catch + echo v:exception + call s:Warning("Undo interrupted; state is not guaranteed") + let finished = confirm("Do you want to continue undoing?", "&Yes\n&No")-1 + endtry + endwhile + + call s:RestoreVariable("switchbuf") + call s:RestoreVariable("autowriteall") + + unlet s:actionList + unlet s:LastErrorList + return s:ClearGatewayVariables() +endfunction +"}}} +" }}} +" Grep Implementation {{{ +" DoGrep {{{ +function! s:DoGrep(word, add, whole, count, escapeArgs) + call s:CreateDict() + + if s:OptionsExplorerOpen == 1 + call s:Error("Error: Can't Grep while options window is open") + return 0 + endif + + call s:CompareCurrentFileCurrentDirectory() + + let com = s:Commands[s:CommandChoice] + + let commandIsVimgrep = (com == "vimgrep") + let commandIsGrep = !commandIsVimgrep && (stridx(&grepprg, "grep ") == 0) + let commandIsFindstr = !commandIsVimgrep && (stridx(&grepprg, "findstr ") == 0) + let commandIsAck = !commandIsVimgrep && (stridx(&grepprg, "ack") == 0) + + let s1 = "" + let s2 = "" + if commandIsVimgrep + let s1 = "/" + let s2 = "/" + + if g:EasyGrepEveryMatch + let s2 .= "g" + endif + + if g:EasyGrepJumpToMatch + let s2 .= "j" + endif + endif + + let opts = "" + + if g:EasyGrepInvertWholeWord + let whole = !a:whole + else + let whole = a:whole + endif + + let word = a:escapeArgs ? s:EscapeSpecial(a:word) : a:word + if whole + if commandIsVimgrep + let word = "\\<".word."\\>" + elseif commandIsGrep + let word = "-w ".word + elseif commandIsFindstr + let word = "\"\\<".word."\\>\"" + endif + endif + + if g:EasyGrepRecursive + if commandIsGrep + let opts .= "-R " + elseif commandIsFindstr + let opts .= "/S " + elseif commandIsAck + " do nothing + endif + endif + + if g:EasyGrepIgnoreCase + if commandIsGrep || commandIsAck + let opts .= "-i " + elseif commandIsFindstr + let opts .= "/I " + endif + else + if commandIsFindstr + let opts .= "/i " + endif + endif + + call s:BuildPatternList() + + let filesToGrep = s:FilesToGrep + if commandIsVimgrep + call s:SaveVariable("ignorecase") + let &ignorecase = g:EasyGrepIgnoreCase + endif + if commandIsGrep + " We would like to use --include pattern for a grep command + let opts .= " " . join(map(split(filesToGrep, ' '), '"--include=" .v:val'), ' ') + endif + + if s:IsModeBuffers() && empty(filesToGrep) + call s:Warning("No saved buffers to explore") + return + endif + + if g:EasyGrepExtraWarnings && !g:EasyGrepRecursive + " Don't evaluate if in recursive mode, this will take too long + if !s:HasFilesThatMatch() + call s:Warning("No files match against ".filesToGrep) + return + endif + endif + + let win = g:EasyGrepWindow != 0 ? "l" : "" + + let failed = 0 + try + "if g:EasyGrepRecursive + "call s:Info("Running a recursive search, this may take a while") + "endif + + let grepCommand = a:count.win.com.a:add." ".opts." ".s1.word.s2." ".filesToGrep + silent execute grepCommand + catch + if v:exception != 'E480' + call s:WarnNoMatches(a:word) + try + " go to the last error list on no matches + if g:EasyGrepWindow == 0 + silent colder + else + silent lolder + endif + catch + endtry + else + call s:Error("FIXME: exception not caught ".v:exception) + endif + let failed = 1 + endtry + + call s:RestoreVariable("ignorecase") + if failed + return 0 + endif + + if s:HasMatches() + if g:EasyGrepOpenWindowOnMatch + if g:EasyGrepWindow == 0 + execute g:EasyGrepWindowPosition." copen" + else + execute g:EasyGrepWindowPosition." lopen" + endif + setlocal nofoldenable + endif + else + call s:WarnNoMatches(a:word) + return 0 + endif + + return 1 +endfunction +" }}} +" HasMatches{{{ +function! s:HasMatches() + return !empty(s:GetErrorList()) +endfunction +"}}} +" HasFilesThatMatch{{{ +function! s:HasFilesThatMatch() + let saveFilesToGrep = s:FilesToGrep + + call s:BuildPatternList("\n") + let patternList = split(s:FilesToGrep, "\n") + for p in patternList + let p = s:Trim(p) + let fileList = split(glob(p), "\n") + for f in fileList + if filereadable(f) + let s:FilesToGrep = saveFilesToGrep + return 1 + endif + endfor + endfor + + let s:FilesToGrep = saveFilesToGrep + return 0 +endfunction +"}}} +" WarnNoMatches {{{ +function! s:WarnNoMatches(pattern) + if s:IsModeBuffers() + let fpat = "*Buffers*" + elseif s:IsModeAll() + let fpat = "*" + else + let fpat = s:GetPatternList(" ", 0) + endif + + let r = g:EasyGrepRecursive ? " (Recursive)" : "" + let h = g:EasyGrepHidden ? " (Hidden)" : "" + + call s:Warning("No matches for '".a:pattern."'") + call s:Warning("File Pattern: ".fpat.r.h) + if g:EasyGrepSearchCurrentBufferDir + let dirs = s:GetBufferDirsList() + else + let dirs = [ '.' ] + endif + let s = "Directories:" + for d in dirs + if d == "." + let d = getcwd() + endif + call s:Warning(s." ".d) + let s = " " + endfor +endfunction +" }}} +" }}} +" Replace Implementation {{{ +" ReplaceString {{{ +function! s:ReplaceString(str, whole, escapeArgs) + call s:CompareCurrentFileCurrentDirectory() + let r = input("Replace '".a:str."' with: ") + if empty(r) + return + endif + + call s:DoReplace(a:str, r, a:whole, a:escapeArgs) +endfunction +"}}} +" DoReplace {{{ +function! s:DoReplace(target, replacement, whole, escapeArgs) + + if !s:DoGrep(a:target, "", a:whole, "", a:escapeArgs) + return + endif + + let target = a:escapeArgs ? s:EscapeSpecial(a:target) : a:target + let replacement = a:replacement + + let s:LastErrorList = deepcopy(s:GetErrorList()) + let numMatches = len(s:LastErrorList) + + let s:actionList = [] + + call s:SaveVariable("switchbuf") + set switchbuf=useopen + if g:EasyGrepReplaceWindowMode == 2 + call s:SaveVariable("autowriteall") + set autowriteall + else + if g:EasyGrepReplaceWindowMode == 0 + set switchbuf+=usetab + else + set switchbuf+=split + endif + endif + + let opts = "" + if !g:EasyGrepEveryMatch + let opts .= "g" + endif + + let bufList = s:GetVisibleBuffers() + + if g:EasyGrepWindow == 0 + cfirst + else + lfirst + endif + + call s:SaveVariable("ignorecase") + let &ignorecase = g:EasyGrepIgnoreCase + + call s:SaveVariable("cursorline") + set cursorline + call s:SaveVariable("hlsearch") + set hlsearch + + if g:EasyGrepIgnoreCase + let case = '\c' + else + let case = '\C' + endif + + if g:EasyGrepInvertWholeWord + let whole = !a:whole + else + let whole = a:whole + endif + + if whole + let target = "\\<".target."\\>" + endif + + let finished = 0 + let lastFile = -1 + let doAll = 0 + let i = 0 + while i < numMatches && !finished + try + let pendingQuit = 0 + let doit = 1 + + let thisFile = s:LastErrorList[i].bufnr + if thisFile != lastFile + call s:RestoreVariable("cursorline", "no") + call s:RestoreVariable("hlsearch", "no") + if g:EasyGrepReplaceWindowMode == 0 + " only open a new tab when the window doesn't already exist + if index(bufList, thisFile) == -1 + if lastFile != -1 + tabnew + endif + if g:EasyGrepWindow == 0 + execute g:EasyGrepWindowPosition." copen" + else + execute g:EasyGrepWindowPosition." lopen" + endif + setlocal nofoldenable + endif + endif + if doAll && g:EasyGrepReplaceAllPerFile + let doAll = 0 + endif + endif + + if g:EasyGrepWindow == 0 + execute "cc ".(i+1) + else + execute "ll ".(i+1) + endif + + if thisFile != lastFile + set cursorline + set hlsearch + endif + let lastFile = thisFile + + if foldclosed(".") != -1 + foldopen! + endif + + let thisLine = getline(".") + let off = match(thisLine,case.target, 0) + while off != -1 + + " this highlights the match; it seems to be a simpler solution + " than matchadd() + let linebeg = strpart(thisLine, 0, off) + let m = matchstr(thisLine,case.target, off) + let lineafterm = strpart(thisLine, off+strlen(m)) + + let linebeg = s:EscapeSpecial(linebeg) + let m = s:EscapeSpecial(m) + let lineafterm = s:EscapeSpecial(lineafterm) + + silent exe "s/".linebeg."\\zs".case.m."\\ze".lineafterm."//ne" + + if !doAll + + redraw! + echohl Type | echo "replace with ".a:replacement." (y/n/a/q/l/^E/^Y)?"| echohl None + let ret = getchar() + + if ret == 5 + if winline() > &scrolloff+1 + normal  + endif + continue + elseif ret == 25 + if (winheight(0)-winline()) > &scrolloff + normal  + endif + continue + elseif ret == 27 + let doit = 0 + let pendingQuit = 1 + else + let ret = nr2char(ret) + + if ret == '' + continue + elseif ret == 'y' + let doit = 1 + elseif ret == 'n' + let doit = 0 + elseif ret == 'a' + let doit = 1 + let doAll = 1 + elseif ret == 'q' + let doit = 0 + let pendingQuit = 1 + elseif ret == 'l' + let doit = 1 + let pendingQuit = 1 + else + continue + endif + endif + endif + + if doit + let linebeg = strpart(thisLine, 0, off) + let lineend = strpart(thisLine, off) + let newend = substitute(lineend, target, replacement, "") + let newLine = linebeg.newend + call setline(".", newLine) + + let replacedText = matchstr(lineend, target) + let remainder = substitute(lineend, target, "", "") + let replacedWith = strpart(newend, 0, strridx(newend, remainder)) + + let action = [i, off, replacedText, replacedWith] + call add(s:actionList, action) + endif + + if pendingQuit + break + endif + + let thisLine = getline(".") + let m = matchstr(thisLine,target, off) + let off = match(thisLine,target,off+strlen(m)) + endwhile + + if pendingQuit + break + endif + + let i += 1 + + catch /^Vim(\a\+):E36:/ + call s:Warning("Ran out of room for more windows") + let finished = confirm("Do you want to save all windows and continue?", "&Yes\n&No")-1 + if finished == 1 + call s:Warning("To continue, save unsaved windows, make some room (try :only) and run Replace again") + else + wall + only + endif + catch /^Vim:Interrupt$/ + call s:Warning("Replace interrupted by user") + let finished = confirm("Are you sure you want to stop the replace?", "&Yes\n&No")-1 + let finished = !finished + catch + echo v:exception + call s:Warning("Replace interrupted") + let finished = confirm("Do you want to continue replace?", "&Yes\n&No")-1 + endtry + endwhile + + call s:RestoreVariable("switchbuf") + call s:RestoreVariable("autowriteall") + call s:RestoreVariable("cursorline") + call s:RestoreVariable("hlsearch") + call s:RestoreVariable("ignorecase") +endfunction +"}}} +" }}} +" ResultList Functions {{{ +" GetErrorList {{{ +function! s:GetErrorList() + if g:EasyGrepWindow == 0 + return getqflist() + else + return getloclist(0) + endif +endfunction +"}}} +" GetErrorListName {{{ +function! s:GetErrorListName() + if g:EasyGrepWindow == 0 + return 'quickfix' + else + return 'location list' + endif +endfunction +"}}} +" SetErrorList {{{ +function! s:SetErrorList(lst) + if g:EasyGrepWindow == 0 + call setqflist(a:lst) + else + call setloclist(0,a:lst) + endif +endfunction +"}}} +" GotoStartErrorList {{{ +function! s:GotoStartErrorList() + if g:EasyGrepWindow == 0 + cfirst + else + lfirst + endif +endfunction +"}}} +" ResultListFilter {{{ +function! s:ResultListFilter(...) + let mode = 'g' + + let filterlist = [] + for s in a:000 + if s[0] == '-' + if s == '-v' + let mode = 'v' + elseif s == '-g' + if mode == 'v' + call s:Error("Multiple -v / -g arguments given") + return + endif + let mode = 'g' + else + call s:Error("Invalid command line switch") + return + endif + else + call add(filterlist, s) + endif + endfor + + if empty(filterlist) + call s:Error("Missing pattern to filter") + return + endif + + let lst = s:GetErrorList() + if empty(lst) + call s:Error("Error list is empty") + return + endif + + let newlst = [] + for d in lst + let matched = 0 + for f in filterlist + let r = match(d.text, f) + if mode == 'g' + let matched = (r != -1) + else + let matched = (r == -1) + endif + if matched == 1 + call add(newlst, d) + break + endif + endfor + endfor + + call s:SetErrorList(newlst) +endfunction +"}}} +" ResultListOpen {{{ +function! s:ResultListOpen(...) + let lst = s:GetErrorList() + + if empty(lst) + call s:Error("Error list is empty") + return + endif + + let lastbnum = -1 + for item in lst + if item.bufnr != lastbnum + exe "tabnew ".bufname(item.bufnr) + let lastbnum = item.bufnr + endif + endfor +endfunction +"}}} +" }}} +" }}} + +" Commands {{{ +command! -bang -nargs=+ Grep :call s:GrepCommandLine( , "", "") +command! -bang -nargs=+ GrepAdd :call s:GrepCommandLine( , "add", "") +command! GrepOptions :call GrepOptions() + +command! -bang -nargs=+ Replace :call s:Replace("", ) +command! -bang ReplaceUndo :call s:ReplaceUndo("") + +command! -nargs=0 ResultListOpen :call s:ResultListOpen() +command! -nargs=+ ResultListFilter :call s:ResultListFilter() +"}}} +" Keymaps {{{ +if !hasmapto("EgMapGrepOptions") + map vo EgMapGrepOptions +endif +if !hasmapto("EgMapGrepCurrentWord_v") + map vv EgMapGrepCurrentWord_v +endif +if !hasmapto("EgMapGrepSelection_v") + vmap vv EgMapGrepSelection_v +endif +if !hasmapto("EgMapGrepCurrentWord_V") + map vV EgMapGrepCurrentWord_V +endif +if !hasmapto("EgMapGrepSelection_V") + vmap vV EgMapGrepSelection_V +endif +if !hasmapto("EgMapGrepCurrentWord_a") + map va EgMapGrepCurrentWord_a +endif +if !hasmapto("EgMapGrepSelection_a") + vmap va EgMapGrepSelection_a +endif +if !hasmapto("EgMapGrepCurrentWord_A") + map vA EgMapGrepCurrentWord_A +endif +if !hasmapto("EgMapGrepSelection_A") + vmap vA EgMapGrepSelection_A +endif +if !hasmapto("EgMapReplaceCurrentWord_r") + map vr EgMapReplaceCurrentWord_r +endif +if !hasmapto("EgMapReplaceSelection_r") + vmap vr EgMapReplaceSelection_r +endif +if !hasmapto("EgMapReplaceCurrentWord_R") + map vR EgMapReplaceCurrentWord_R +endif +if !hasmapto("EgMapReplaceSelection_R") + vmap vR EgMapReplaceSelection_R +endif + +if !exists("g:EasyGrepMappingsSet") + nmap