diff --git a/vim/.vimrc b/vim/.vimrc
new file mode 100755
index 0000000..b18b0ab
--- /dev/null
+++ b/vim/.vimrc
@@ -0,0 +1,53 @@
+set encoding=utf-8
+execute pathogen#infect('plugins/{}')
+execute pathogen#infect('snippets/{}')
+autocmd vimenter * Helptags
+syntax on
+filetype plugin on
+filetype plugin indent on
+set number
+set relativenumber
+set autochdir
+set expandtab
+
+let &undodir = expand('~/.vim/.undo')
+let &backupdir = expand('~/.vim/.backup//')
+let &directory = expand('~/.vim/.swp//')
+set undofile
+
+colorscheme new-railscasts
+source ~/.vim/config/plugin.vim
+source ~/.vim/config/keybindings.vim
+
+set tabstop=4
+set shiftwidth=4
+set cc=120
+let g:netrw_liststyle = 3
+let g:netrw_browse_split = 4
+let g:netrw_winsize = 20
+let g:netrw_altv = 0
+let g:netrw_banner = 0
+let g:tex_conceal = ""
+
+function! ForceResizeNetrw()
+let curWin = winnr()
+ for winnr in range(1, winnr('$'))
+ if getwinvar(winnr, '&ft')=="netrw"
+ if curWin != winnr
+ silent noautocmd exec winnr 'wincmd w'
+ silent noautocmd exec 'vertical resize ' . g:netrw_winsize
+ silent noautocmd exec curWin 'wincmd w'
+ else
+ silent noautocmd exec 'vertical resize ' . g:netrw_winsize
+ endif
+ endif
+ endfor
+endfunction
+
+
+autocmd WinEnter * call ForceResizeNetrw()
+" autocmd VimEnter * Vex
+autocmd BufNew * call ForceResizeNetrw()
+
+" Transparency
+hi Normal guibg=NONE ctermbg=NONE
diff --git a/vim/autoload/pathogen.vim b/vim/autoload/pathogen.vim
new file mode 100755
index 0000000..2ec30e1
--- /dev/null
+++ b/vim/autoload/pathogen.vim
@@ -0,0 +1,266 @@
+" pathogen.vim - path option manipulation
+" Maintainer: Tim Pope
+" Version: 2.4
+
+" Install in ~/.vim/autoload (or ~\vimfiles\autoload).
+"
+" For management of individually installed plugins in ~/.vim/bundle (or
+" ~\vimfiles\bundle), adding `execute pathogen#infect()` to the top of your
+" .vimrc is the only other setup necessary.
+"
+" The API is documented inline below.
+
+if exists("g:loaded_pathogen") || &cp
+ finish
+endif
+let g:loaded_pathogen = 1
+
+" Point of entry for basic default usage. Give a relative path to invoke
+" pathogen#interpose() or an absolute path to invoke pathogen#surround().
+" Curly braces are expanded with pathogen#expand(): "bundle/{}" finds all
+" subdirectories inside "bundle" inside all directories in the runtime path.
+" If no arguments are given, defaults "bundle/{}", and also "pack/{}/start/{}"
+" on versions of Vim without native package support.
+function! pathogen#infect(...) abort
+ if a:0
+ let paths = filter(reverse(copy(a:000)), 'type(v:val) == type("")')
+ else
+ let paths = ['bundle/{}', 'pack/{}/start/{}']
+ endif
+ if has('packages')
+ call filter(paths, 'v:val !~# "^pack/[^/]*/start/[^/]*$"')
+ endif
+ let static = '^\%([$~\\/]\|\w:[\\/]\)[^{}*]*$'
+ for path in filter(copy(paths), 'v:val =~# static')
+ call pathogen#surround(path)
+ endfor
+ for path in filter(copy(paths), 'v:val !~# static')
+ if path =~# '^\%([$~\\/]\|\w:[\\/]\)'
+ call pathogen#surround(path)
+ else
+ call pathogen#interpose(path)
+ endif
+ endfor
+ call pathogen#cycle_filetype()
+ if pathogen#is_disabled($MYVIMRC)
+ return 'finish'
+ endif
+ return ''
+endfunction
+
+" Split a path into a list.
+function! pathogen#split(path) abort
+ if type(a:path) == type([]) | return a:path | endif
+ if empty(a:path) | return [] | endif
+ let split = split(a:path,'\\\@]','\\&','')
+ endif
+endfunction
+
+" Like findfile(), but hardcoded to use the runtimepath.
+function! pathogen#runtime_findfile(file,count) abort
+ let rtp = pathogen#join(1,pathogen#split(&rtp))
+ let file = findfile(a:file,rtp,a:count)
+ if file ==# ''
+ return ''
+ else
+ return fnamemodify(file,':p')
+ endif
+endfunction
+
+" vim:set et sw=2 foldmethod=expr foldexpr=getline(v\:lnum)=~'^\"\ Section\:'?'>1'\:getline(v\:lnum)=~#'^fu'?'a1'\:getline(v\:lnum)=~#'^endf'?'s1'\:'=':
diff --git a/vim/colors/happy_hacking.vim b/vim/colors/happy_hacking.vim
new file mode 100644
index 0000000..9361d03
--- /dev/null
+++ b/vim/colors/happy_hacking.vim
@@ -0,0 +1,361 @@
+" # Happy Hacking
+"
+" Happy Hacking is a color scheme heavily inspired by Autumn
+" (https://github.com/yorickpeterse/autumn.vim). The main differences between
+" the two themes are various small tweaks to the colors, an easier to maintain
+" codebase and a much wider range of supported languages. On top of that
+" various inconsistencies that were present in Autumn have been resolved.
+"
+" As with any Vim color scheme the overall look and feel heavily depends on how
+" accurate a syntax highlighter for a language is. For example, the Ruby syntax
+" highlighter is fairly accurate and allows you to customize a lot whereas for
+" example C has a more generic highlighting setup. At worst this will result in
+" a bit more heavy use of red as it's one of the base colors of this theme.
+"
+" Author: Yorick Peterse
+" License: MIT
+" Website: https://github.com/yorickpeterse/happy_hacking.vim
+"
+
+set background=dark
+set t_Co=256
+
+hi clear
+
+if exists("syntax_on")
+ syntax reset
+end
+
+let colors_name = "happy_hacking"
+
+" ============================================================================
+" GUI Colors
+"
+" This section defines all the colors to use when running Vim as a GUI (Gvim,
+" Macvim, etc). These colors are *not* used when Vim is run in a terminal.
+
+let s:white = "#F3F2CC"
+let s:black1 = "#000000"
+let s:black2 = "#202020"
+let s:yellow = "#FAD566"
+let s:blue = "#81A2C7"
+let s:green = "#8daf67"
+let s:turqoise = "#B3EBBF"
+let s:orange = "#FAA166"
+let s:pink = "#F77EBD"
+let s:red = "#F05E48"
+let s:gray1 = "#292929"
+let s:gray2 = "#525252"
+let s:gray3 = "#6c6c6c"
+let s:gray4 = "#7c7c7c"
+let s:gray5 = "#aaaaaa"
+let s:gray6 = "#393939"
+
+" ============================================================================
+" Terminal Colors
+"
+" This section defines all the colors that are used when Vim is run inside a
+" terminal instead of a GUI.
+
+let s:t_white = "230"
+let s:t_black1 = "16"
+let s:t_black2 = "16"
+let s:t_yellow = "221"
+let s:t_blue = "103"
+let s:t_green = "107"
+let s:t_turqoise = "157"
+let s:t_orange = "179"
+let s:t_pink = "211"
+let s:t_gold = "186"
+let s:t_red = "203"
+let s:t_gray1 = "235"
+let s:t_gray2 = "59"
+let s:t_gray3 = "59"
+let s:t_gray4 = "102"
+let s:t_gray5 = "145"
+let s:t_gray6 = "237"
+
+" ============================================================================
+" Color Functions
+
+" Function for creating a highlight group with a GUI/Terminal foreground and
+" background. No font styling is applied.
+function! s:Color(group, fg, bg, t_fg, t_bg, ...)
+ if empty(a:0)
+ let style = "NONE"
+ else
+ let style = a:1
+ end
+
+ exe "hi " . a:group . " guifg=" . a:fg . " guibg=" . a:bg
+ \ . " ctermfg=" . a:t_fg
+ \ . " ctermbg=" . a:t_bg
+ \ . " gui=" . style
+ \ . " cterm=" . style
+endfunction
+
+" ============================================================================
+" General Syntax Elements
+"
+" Definitions for generic syntax elements such as strings and numbers.
+
+call s:Color("Pmenu", s:white, s:black2, s:t_white, s:t_gray6)
+" Modified Pmenu! original white black2 t_white t_black
+" ~rad4day
+call s:Color("PmenuSel", s:white, s:gray2, s:t_white, s:t_gray2)
+call s:Color("Cursor", "NONE", s:gray2, "NONE", s:t_gray2)
+call s:Color("Normal", s:white, s:gray1, s:t_white, s:t_gray1)
+call s:Color("Search", s:yellow, "NONE", s:t_yellow, "NONE", "bold")
+call s:Color("Title", s:white, "NONE", s:t_white, "NONE", "bold")
+
+call s:Color("LineNr", s:gray3, "NONE", s:t_gray3, "NONE")
+call s:Color("StatusLine", s:white, s:gray6, s:t_white, s:t_gray6)
+call s:Color("StatusLineNC", s:gray4, s:gray6, s:t_gray4, s:t_gray6)
+call s:Color("VertSplit", s:gray3, "NONE", s:t_gray3, "NONE")
+call s:Color("ColorColumn", "NONE", s:gray6, "NONE", s:t_gray6)
+
+call s:Color("Folded", s:gray4, "NONE", s:t_gray4, "NONE")
+call s:Color("FoldColumn", s:gray3, s:gray1, s:t_gray3, s:t_gray1)
+call s:Color("ErrorMsg", s:red, "NONE", s:t_red, "NONE", "bold")
+call s:Color("WarningMsg", s:yellow, "NONE", s:t_yellow, "NONE", "bold")
+call s:Color("Question", s:white, "NONE", s:t_white, "NONE")
+
+call s:Color("SpecialKey", s:white, s:gray2, s:t_white, s:t_gray2)
+call s:Color("Directory", s:blue, "NONE", s:t_blue, "NONE")
+
+call s:Color("Comment", s:gray4, "NONE", s:t_gray4, "NONE")
+call s:Color("Todo", s:gray5, "NONE", s:t_gray5, "NONE")
+call s:Color("String", s:green, "NONE", s:t_green, "NONE")
+call s:Color("Keyword", s:red, "NONE", s:t_red, "NONE")
+call s:Color("Number", s:turqoise, "NONE", s:t_turqoise, "NONE")
+call s:Color("Regexp", s:orange, "NONE", s:t_orange, "NONE")
+call s:Color("Macro", s:orange, "NONE", s:t_orange, "NONE")
+call s:Color("Function", s:yellow, "NONE", s:t_yellow, "NONE")
+call s:Color("Notice", s:yellow, "NONE", s:t_yellow, "NONE")
+
+call s:Color("MatchParen", "NONE", "NONE", "NONE", "NONE", "bold")
+
+hi! link CursorLine Cursor
+hi! link Identifier Normal
+hi! link Constant Normal
+hi! link Operator Normal
+hi! link Type Keyword
+hi! link Statement Keyword
+hi! link PmenuThumb PmenuSel
+hi! link Visual Cursor
+hi! link SignColumn FoldColumn
+hi! link Error ErrorMsg
+hi! link NonText LineNr
+hi! link PreProc Normal
+hi! link Special Normal
+hi! link Boolean Keyword
+hi! link StorageClass Keyword
+hi! link MoreMsg Normal
+hi! link Character String
+hi! link Label Special
+hi! link PreCondit Macro
+
+" ============================================================================
+" Specific Languages
+"
+" Language specific settings that would otherwise be too generic. These
+" definitions are sorted in alphabetical order.
+
+" Coffeescript
+hi! link coffeeRegex Regexp
+hi! link coffeeSpecialIdent Directory
+
+" CSS
+hi! link cssIdentifier Title
+hi! link cssClassName Directory
+hi! link cssMedia Notice
+hi! link cssColor Number
+hi! link cssTagName Normal
+hi! link cssImportant Notice
+
+" CtrlP
+hi! link CtrlPBufferHid Todo
+hi! link CtrlPBufferPath Todo
+
+call s:Color("CtrlPMode1", s:white, s:gray1, s:t_white, s:t_gray1, "bold")
+
+" D
+hi! link dDebug Notice
+hi! link dOperator Operator
+hi! link dStorageClass Keyword
+hi! link dAnnotation Directory
+hi! link dAttribute dAnnotation
+
+" Diffs
+hi! link diffFile WarningMsg
+hi! link diffLine Number
+hi! link diffAdded String
+hi! link diffRemoved Keyword
+
+hi! link DiffChange Notice
+hi! link DiffAdd diffAdded
+hi! link DiffDelete diffRemoved
+hi! link DiffText diffLine
+
+" Dot (GraphViz)
+hi! link dotKeyChar Normal
+
+" Git commits
+hi! link gitCommitSummary String
+hi! link gitCommitOverflow ErrorMsg
+
+" HAML
+hi! link hamlId Title
+hi! link hamlClass Directory
+hi! link htmlArg Normal
+hi! link hamlDocType Comment
+
+" HTML
+hi! link htmlLink Directory
+hi! link htmlSpecialTagName htmlTag
+hi! link htmlTagName htmlTag
+hi! link htmlScriptTag htmlTag
+
+" Javascript
+hi! link javaScriptBraces Normal
+hi! link javaScriptMember Normal
+hi! link javaScriptIdentifier Keyword
+hi! link javaScriptFunction Keyword
+hi! link JavaScriptNumber Number
+
+" Java
+hi! link javaCommentTitle javaComment
+hi! link javaDocTags Todo
+hi! link javaDocParam Todo
+hi! link javaStorageClass Keyword
+hi! link javaAnnotation Directory
+hi! link javaExternal Keyword
+
+" JSON
+hi! link jsonKeyword String
+
+" Less
+hi! link lessClass cssClassName
+
+" Make
+hi! link makeTarget Function
+
+" Markdown
+hi! link markdownCodeBlock Todo
+hi! link markdownCode markdownCodeBlock
+hi! link markdownListMarker Keyword
+hi! link markdownOrderedListMarker Keyword
+
+" NERDTree
+hi! link NERDTreeRO Notice
+hi! link NERDTreeCWD Title
+hi! link NERDTreeLink Number
+hi! link NERDTreeDir Directory
+hi! link NERDTreeOpenable NERDTreeDir
+hi! link NERDTreeClosable NERDTreeDir
+
+" Perl
+hi! link podCommand Comment
+hi! link podCmdText Todo
+hi! link podVerbatimLine Todo
+hi! link perlStatementInclude Statement
+hi! link perlStatementPackage Statement
+hi! link perlPackageDecl Normal
+
+" Ragel
+hi! link rlAugmentOps Operator
+
+" Ruby
+hi! link rubySymbol Regexp
+hi! link rubyConstant Constant
+hi! link rubyInstanceVariable Directory
+hi! link rubyClassVariable rubyInstancevariable
+hi! link rubyClass Keyword
+hi! link rubyModule rubyClass
+hi! link rubyFunction Function
+hi! link rubyDefine Keyword
+hi! link rubyRegexp Regexp
+hi! link rubyRegexpSpecial Regexp
+hi! link rubyRegexpCharClass Normal
+hi! link rubyRegexpQuantifier Normal
+
+" Rust
+hi! link rustFuncCall Identifier
+hi! link rustCommentBlockDoc Comment
+hi! link rustCommentLineDoc Comment
+
+" SASS
+hi! link sassClass cssClassName
+hi! link sassId cssIdentifier
+hi! link sassInclude cssMedia
+
+" Shell
+hi! link shFunctionKey Keyword
+hi! link shTestOpr Operator
+hi! link bashStatement Normal
+
+" SQL
+hi! link sqlKeyword Keyword
+
+" TypeScript
+hi! link typescriptBraces Normal
+hi! link typescriptEndColons Normal
+hi! link typescriptFunction Function
+hi! link typescriptFuncKeyword Keyword
+hi! link typescriptLogicSymbols Operator
+hi! link typescriptIdentifier Keyword
+hi! link typescriptExceptions Keyword
+
+" Vimscript
+hi! link vimGroup Constant
+hi! link vimHiGroup Constant
+hi! link VimIsCommand Constant
+hi! link VimCommentTitle Todo
+
+" YAML
+hi! link yamlPlainScalar String
+
+" YARD
+hi! link yardType Todo
+hi! link yardTypeList Todo
+hi! link yardComment Comment
+
+" XML
+hi! link xmlTagName Normal
+hi! link xmlTag Normal
+hi! link xmlAttrib Normal
+
+" Neomake
+hi! link NeomakeWarningSign WarningMsg
+hi! link NeomakeErrorSign Error
+hi! link NeomakeWarning WarningMsg
+
+" Wild menu completion
+hi! link WildMenu PmenuSel
+
+" Vim tabline
+hi! link TabLine StatusLine
+hi! link TabLineFill StatusLine
+
+call s:Color("TabLineSel", s:white, s:gray2, s:t_white, s:t_gray2, "bold")
+
+" Line numbers
+call s:Color("CursorLineNR", s:yellow, "NONE", s:t_yellow, "NONE", "bold")
+
+" Neovim terminal colors
+let g:terminal_color_0 = s:black1
+let g:terminal_color_1 = s:red
+let g:terminal_color_2 = s:green
+let g:terminal_color_3 = s:yellow
+let g:terminal_color_4 = s:blue
+let g:terminal_color_5 = s:pink
+let g:terminal_color_6 = s:turqoise
+let g:terminal_color_7 = s:white
+let g:terminal_color_8 = s:black1
+let g:terminal_color_9 = s:red
+let g:terminal_color_10 = s:green
+let g:terminal_color_11 = s:yellow
+let g:terminal_color_12 = s:blue
+let g:terminal_color_13 = s:pink
+let g:terminal_color_14 = s:turqoise
+let g:terminal_color_15 = s:white
diff --git a/vim/colors/jellybeans.vim b/vim/colors/jellybeans.vim
new file mode 100755
index 0000000..a089a5a
--- /dev/null
+++ b/vim/colors/jellybeans.vim
@@ -0,0 +1,687 @@
+" Vim color file
+"
+" " __ _ _ _ "
+" " \ \ ___| | |_ _| |__ ___ __ _ _ __ ___ "
+" " \ \/ _ \ | | | | | _ \ / _ \/ _ | _ \/ __| "
+" " /\_/ / __/ | | |_| | |_| | __/ |_| | | | \__ \ "
+" " \___/ \___|_|_|\__ |____/ \___|\____|_| |_|___/ "
+" " \___/ "
+"
+" "A colorful, dark color scheme for Vim."
+"
+" File: jellybeans.vim
+" URL: github.com/nanotech/jellybeans.vim
+" Scripts URL: vim.org/scripts/script.php?script_id=2555
+" Maintainer: NanoTech (nanotech.nanotechcorp.net)
+" Version: 1.6
+" Last Change: October 18th, 2016
+" License: MIT
+" Contributors: Andrew Wong (w0ng)
+" Brian Marshall (bmars)
+" Daniel Herbert (pocketninja)
+" David Liang
+" Henry So, Jr.
+" Joe Doherty (docapotamus)
+" Karl Litterfeldt (Litterfeldt)
+" Keith Pitt (keithpitt)
+" Philipp Rustemeier (12foo)
+" Rafael Bicalho (rbika)
+" Rich Healey (richo)
+" Siwen Yu (yusiwen)
+" Tim Willis (willist)
+"
+" Copyright (c) 2009-2016 NanoTech
+"
+" Permission is hereby granted, free of charge, to any per‐
+" son obtaining a copy of this software and associated doc‐
+" umentation files (the “Software”), to deal in the Soft‐
+" ware without restriction, including without limitation
+" the rights to use, copy, modify, merge, publish, distrib‐
+" ute, sublicense, and/or sell copies of the Software, and
+" to permit persons to whom the Software is furnished to do
+" so, subject to the following conditions:
+"
+" The above copyright notice and this permission notice
+" shall be included in all copies or substantial portions
+" of the Software.
+"
+" THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY
+" KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+" THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICU‐
+" LAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CON‐
+" TRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON‐
+" NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+" THE SOFTWARE.
+
+set background=dark
+
+hi clear
+
+if exists("syntax_on")
+ syntax reset
+endif
+
+let colors_name = "jellybeans"
+
+if has("gui_running") || (has('termguicolors') && &termguicolors) || &t_Co >= 88
+ let s:low_color = 0
+else
+ let s:low_color = 1
+endif
+
+" Configuration Variables:
+" - g:jellybeans_overrides (default = {})
+" - g:jellybeans_use_lowcolor_black (default = 1)
+" - g:jellybeans_use_gui_italics (default = 1)
+" - g:jellybeans_use_term_italics (default = 0)
+
+let s:background_color = "151515"
+
+if exists("g:jellybeans_overrides")
+ let s:overrides = g:jellybeans_overrides
+else
+ let s:overrides = {}
+endif
+
+" Backwards compatibility
+if exists("g:jellybeans_background_color")
+ \ || exists("g:jellybeans_background_color_256")
+ \ || exists("g:jellybeans_use_term_background_color")
+
+ let s:overrides = deepcopy(s:overrides)
+
+ if !has_key(s:overrides, "background")
+ let s:overrides["background"] = {}
+ endif
+
+ if exists("g:jellybeans_background_color")
+ let s:overrides["background"]["guibg"] = g:jellybeans_background_color
+ endif
+
+ if exists("g:jellybeans_background_color_256")
+ let s:overrides["background"]["256ctermbg"] = g:jellybeans_background_color_256
+ endif
+
+ if exists("g:jellybeans_use_term_background_color")
+ \ && g:jellybeans_use_term_background_color
+ let s:overrides["background"]["ctermbg"] = "NONE"
+ let s:overrides["background"]["256ctermbg"] = "NONE"
+ endif
+endif
+
+if !exists("g:jellybeans_use_lowcolor_black") || g:jellybeans_use_lowcolor_black
+ let s:termBlack = "Black"
+else
+ let s:termBlack = "Grey"
+endif
+
+" When `termguicolors` is set, Vim[^1] ignores `guibg=NONE` after
+" `guibg` is already set to a color. See:
+"
+" - https://github.com/vim/vim/issues/981
+" - https://github.com/nanotech/jellybeans.vim/issues/64
+"
+" To work around this, ensure we don't set the default background
+" color before an override changes it to `NONE` by ensuring that the
+" background color isn't set to a value different from its override.
+"
+" [^1]: Tested on 8.0.567. Does not apply to Neovim.
+"
+" TODO: Enable this behavior for all highlights by applying
+" overrides before calling highlight commands.
+"
+if has_key(s:overrides, "background") && has_key(s:overrides["background"], "guibg")
+ let s:background_color = s:overrides["background"]["guibg"]
+endif
+
+" Color approximation functions by Henry So, Jr. and David Liang {{{
+" Added to jellybeans.vim by Daniel Herbert
+
+" returns an approximate grey index for the given grey level
+fun! s:grey_number(x)
+ if &t_Co == 88
+ if a:x < 23
+ return 0
+ elseif a:x < 69
+ return 1
+ elseif a:x < 103
+ return 2
+ elseif a:x < 127
+ return 3
+ elseif a:x < 150
+ return 4
+ elseif a:x < 173
+ return 5
+ elseif a:x < 196
+ return 6
+ elseif a:x < 219
+ return 7
+ elseif a:x < 243
+ return 8
+ else
+ return 9
+ endif
+ else
+ if a:x < 14
+ return 0
+ else
+ let l:n = (a:x - 8) / 10
+ let l:m = (a:x - 8) % 10
+ if l:m < 5
+ return l:n
+ else
+ return l:n + 1
+ endif
+ endif
+ endif
+endfun
+
+" returns the actual grey level represented by the grey index
+fun! s:grey_level(n)
+ if &t_Co == 88
+ if a:n == 0
+ return 0
+ elseif a:n == 1
+ return 46
+ elseif a:n == 2
+ return 92
+ elseif a:n == 3
+ return 115
+ elseif a:n == 4
+ return 139
+ elseif a:n == 5
+ return 162
+ elseif a:n == 6
+ return 185
+ elseif a:n == 7
+ return 208
+ elseif a:n == 8
+ return 231
+ else
+ return 255
+ endif
+ else
+ if a:n == 0
+ return 0
+ else
+ return 8 + (a:n * 10)
+ endif
+ endif
+endfun
+
+" returns the palette index for the given grey index
+fun! s:grey_color(n)
+ if &t_Co == 88
+ if a:n == 0
+ return 16
+ elseif a:n == 9
+ return 79
+ else
+ return 79 + a:n
+ endif
+ else
+ if a:n == 0
+ return 16
+ elseif a:n == 25
+ return 231
+ else
+ return 231 + a:n
+ endif
+ endif
+endfun
+
+" returns an approximate color index for the given color level
+fun! s:rgb_number(x)
+ if &t_Co == 88
+ if a:x < 69
+ return 0
+ elseif a:x < 172
+ return 1
+ elseif a:x < 230
+ return 2
+ else
+ return 3
+ endif
+ else
+ if a:x < 75
+ return 0
+ else
+ let l:n = (a:x - 55) / 40
+ let l:m = (a:x - 55) % 40
+ if l:m < 20
+ return l:n
+ else
+ return l:n + 1
+ endif
+ endif
+ endif
+endfun
+
+" returns the actual color level for the given color index
+fun! s:rgb_level(n)
+ if &t_Co == 88
+ if a:n == 0
+ return 0
+ elseif a:n == 1
+ return 139
+ elseif a:n == 2
+ return 205
+ else
+ return 255
+ endif
+ else
+ if a:n == 0
+ return 0
+ else
+ return 55 + (a:n * 40)
+ endif
+ endif
+endfun
+
+" returns the palette index for the given R/G/B color indices
+fun! s:rgb_color(x, y, z)
+ if &t_Co == 88
+ return 16 + (a:x * 16) + (a:y * 4) + a:z
+ else
+ return 16 + (a:x * 36) + (a:y * 6) + a:z
+ endif
+endfun
+
+" returns the palette index to approximate the given R/G/B color levels
+fun! s:color(r, g, b)
+ " map greys directly (see xterm's 256colres.pl)
+ if &t_Co == 256 && a:r == a:g && a:g == a:b && a:r > 3 && a:r < 243
+ return (a:r - 8) / 10 + 232
+ endif
+
+ " get the closest grey
+ let l:gx = s:grey_number(a:r)
+ let l:gy = s:grey_number(a:g)
+ let l:gz = s:grey_number(a:b)
+
+ " get the closest color
+ let l:x = s:rgb_number(a:r)
+ let l:y = s:rgb_number(a:g)
+ let l:z = s:rgb_number(a:b)
+
+ if l:gx == l:gy && l:gy == l:gz
+ " there are two possibilities
+ let l:dgr = s:grey_level(l:gx) - a:r
+ let l:dgg = s:grey_level(l:gy) - a:g
+ let l:dgb = s:grey_level(l:gz) - a:b
+ let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)
+ let l:dr = s:rgb_level(l:gx) - a:r
+ let l:dg = s:rgb_level(l:gy) - a:g
+ let l:db = s:rgb_level(l:gz) - a:b
+ let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)
+ if l:dgrey < l:drgb
+ " use the grey
+ return s:grey_color(l:gx)
+ else
+ " use the color
+ return s:rgb_color(l:x, l:y, l:z)
+ endif
+ else
+ " only one possibility
+ return s:rgb_color(l:x, l:y, l:z)
+ endif
+endfun
+
+fun! s:is_empty_or_none(str)
+ return empty(a:str) || a:str ==? "NONE"
+endfun
+
+" returns the palette index to approximate the 'rrggbb' hex string
+fun! s:rgb(rgb)
+ if s:is_empty_or_none(a:rgb)
+ return "NONE"
+ endif
+ let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0
+ let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0
+ let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0
+ return s:color(l:r, l:g, l:b)
+endfun
+
+fun! s:prefix_highlight_value_with(prefix, color)
+ if s:is_empty_or_none(a:color)
+ return "NONE"
+ else
+ return a:prefix . a:color
+ endif
+endfun
+
+fun! s:remove_italic_attr(attr)
+ let l:attr = join(filter(split(a:attr, ","), "v:val !=? 'italic'"), ",")
+ if empty(l:attr)
+ let l:attr = "NONE"
+ endif
+ return l:attr
+endfun
+
+" sets the highlighting for the given group
+fun! s:X(group, fg, bg, attr, lcfg, lcbg)
+ if s:low_color
+ exec "hi ".a:group.
+ \ " ctermfg=".s:prefix_highlight_value_with("", a:lcfg).
+ \ " ctermbg=".s:prefix_highlight_value_with("", a:lcbg)
+ else
+ exec "hi ".a:group.
+ \ " guifg=".s:prefix_highlight_value_with("#", a:fg).
+ \ " guibg=".s:prefix_highlight_value_with("#", a:bg).
+ \ " ctermfg=".s:rgb(a:fg).
+ \ " ctermbg=".s:rgb(a:bg)
+ endif
+
+ let l:attr = s:prefix_highlight_value_with("", a:attr)
+
+ if exists("g:jellybeans_use_term_italics") && g:jellybeans_use_term_italics
+ let l:cterm_attr = l:attr
+ else
+ let l:cterm_attr = s:remove_italic_attr(l:attr)
+ endif
+
+ if !exists("g:jellybeans_use_gui_italics") || g:jellybeans_use_gui_italics
+ let l:gui_attr = l:attr
+ else
+ let l:gui_attr = s:remove_italic_attr(l:attr)
+ endif
+
+ exec "hi ".a:group." gui=".l:gui_attr." cterm=".l:cterm_attr
+endfun
+" }}}
+
+call s:X("Normal","e8e8d3",s:background_color,"","White","")
+set background=dark
+
+if version >= 700
+ call s:X("CursorLine","","1c1c1c","","",s:termBlack)
+ call s:X("CursorColumn","","1c1c1c","","",s:termBlack)
+ call s:X("MatchParen","ffffff","556779","bold","","DarkCyan")
+
+ call s:X("TabLine","000000","b0b8c0","italic","",s:termBlack)
+ call s:X("TabLineFill","9098a0","","","",s:termBlack)
+ call s:X("TabLineSel","000000","f0f0f0","italic,bold",s:termBlack,"White")
+
+ " Auto-completion
+ call s:X("Pmenu","ffffff","606060","","White",s:termBlack)
+ call s:X("PmenuSel","101010","eeeeee","",s:termBlack,"White")
+endif
+
+call s:X("Visual","","404040","","",s:termBlack)
+call s:X("Cursor",s:background_color,"b0d0f0","","","")
+
+call s:X("LineNr","605958",s:background_color,"NONE",s:termBlack,"")
+call s:X("CursorLineNr","ccc5c4","","NONE","White","")
+call s:X("Comment","888888","","italic","Grey","")
+call s:X("Todo","c7c7c7","","bold","White",s:termBlack)
+
+call s:X("StatusLine","000000","dddddd","italic","","White")
+call s:X("StatusLineNC","ffffff","403c41","italic","White","Black")
+call s:X("VertSplit","777777","403c41","",s:termBlack,s:termBlack)
+call s:X("WildMenu","f0a0c0","302028","","Magenta","")
+
+call s:X("Folded","a0a8b0","384048","italic",s:termBlack,"")
+call s:X("FoldColumn","535D66","1f1f1f","","",s:termBlack)
+call s:X("SignColumn","777777","333333","","",s:termBlack)
+call s:X("ColorColumn","","000000","","",s:termBlack)
+
+call s:X("Title","70b950","","bold","Green","")
+
+call s:X("Constant","cf6a4c","","","Red","")
+call s:X("Special","799d6a","","","Green","")
+call s:X("Delimiter","668799","","","Grey","")
+
+call s:X("String","99ad6a","","","Green","")
+call s:X("StringDelimiter","556633","","","DarkGreen","")
+
+call s:X("Identifier","c6b6ee","","","LightCyan","")
+call s:X("Structure","8fbfdc","","","LightCyan","")
+call s:X("Function","fad07a","","","Yellow","")
+call s:X("Statement","8197bf","","","DarkBlue","")
+call s:X("PreProc","8fbfdc","","","LightBlue","")
+
+hi! link Operator Structure
+hi! link Conceal Operator
+
+call s:X("Type","ffb964","","","Yellow","")
+call s:X("NonText","606060",s:background_color,"",s:termBlack,"")
+
+call s:X("SpecialKey","444444","1c1c1c","",s:termBlack,"")
+
+call s:X("Search","f0a0c0","302028","underline","Magenta","")
+
+call s:X("Directory","dad085","","","Yellow","")
+call s:X("ErrorMsg","","902020","","","DarkRed")
+hi! link Error ErrorMsg
+hi! link MoreMsg Special
+call s:X("Question","65C254","","","Green","")
+
+
+" Spell Checking
+
+call s:X("SpellBad","","902020","underline","","DarkRed")
+call s:X("SpellCap","","0000df","underline","","Blue")
+call s:X("SpellRare","","540063","underline","","DarkMagenta")
+call s:X("SpellLocal","","2D7067","underline","","Green")
+
+" Diff
+
+hi! link diffRemoved Constant
+hi! link diffAdded String
+
+" VimDiff
+
+call s:X("DiffAdd","D2EBBE","437019","","White","DarkGreen")
+call s:X("DiffDelete","40000A","700009","","DarkRed","DarkRed")
+call s:X("DiffChange","","2B5B77","","White","DarkBlue")
+call s:X("DiffText","8fbfdc","000000","reverse","Yellow","")
+
+" PHP
+
+hi! link phpFunctions Function
+call s:X("StorageClass","c59f6f","","","Red","")
+hi! link phpSuperglobal Identifier
+hi! link phpQuoteSingle StringDelimiter
+hi! link phpQuoteDouble StringDelimiter
+hi! link phpBoolean Constant
+hi! link phpNull Constant
+hi! link phpArrayPair Operator
+hi! link phpOperator Normal
+hi! link phpRelation Normal
+hi! link phpVarSelector Identifier
+
+" Python
+
+hi! link pythonOperator Statement
+
+" Ruby
+
+hi! link rubySharpBang Comment
+call s:X("rubyClass","447799","","","DarkBlue","")
+call s:X("rubyIdentifier","c6b6fe","","","Cyan","")
+hi! link rubyConstant Type
+hi! link rubyFunction Function
+
+call s:X("rubyInstanceVariable","c6b6fe","","","Cyan","")
+call s:X("rubySymbol","7697d6","","","Blue","")
+hi! link rubyGlobalVariable rubyInstanceVariable
+hi! link rubyModule rubyClass
+call s:X("rubyControl","7597c6","","","Blue","")
+
+hi! link rubyString String
+hi! link rubyStringDelimiter StringDelimiter
+hi! link rubyInterpolationDelimiter Identifier
+
+call s:X("rubyRegexpDelimiter","540063","","","Magenta","")
+call s:X("rubyRegexp","dd0093","","","DarkMagenta","")
+call s:X("rubyRegexpSpecial","a40073","","","Magenta","")
+
+call s:X("rubyPredefinedIdentifier","de5577","","","Red","")
+
+" Erlang
+
+hi! link erlangAtom rubySymbol
+hi! link erlangBIF rubyPredefinedIdentifier
+hi! link erlangFunction rubyPredefinedIdentifier
+hi! link erlangDirective Statement
+hi! link erlangNode Identifier
+
+" Elixir
+
+hi! link elixirAtom rubySymbol
+
+
+" JavaScript
+
+hi! link javaScriptValue Constant
+hi! link javaScriptRegexpString rubyRegexp
+hi! link javaScriptTemplateVar StringDelim
+hi! link javaScriptTemplateDelim Identifier
+hi! link javaScriptTemplateString String
+
+" CoffeeScript
+
+hi! link coffeeRegExp javaScriptRegexpString
+
+" Lua
+
+hi! link luaOperator Conditional
+
+" C
+
+hi! link cFormat Identifier
+hi! link cOperator Constant
+
+" Objective-C/Cocoa
+
+hi! link objcClass Type
+hi! link cocoaClass objcClass
+hi! link objcSubclass objcClass
+hi! link objcSuperclass objcClass
+hi! link objcDirective rubyClass
+hi! link objcStatement Constant
+hi! link cocoaFunction Function
+hi! link objcMethodName Identifier
+hi! link objcMethodArg Normal
+hi! link objcMessageName Identifier
+
+" Vimscript
+
+hi! link vimOper Normal
+
+" HTML
+
+hi! link htmlTag Statement
+hi! link htmlEndTag htmlTag
+hi! link htmlTagName htmlTag
+
+" XML
+
+hi! link xmlTag Statement
+hi! link xmlEndTag xmlTag
+hi! link xmlTagName xmlTag
+hi! link xmlEqual xmlTag
+hi! link xmlEntity Special
+hi! link xmlEntityPunct xmlEntity
+hi! link xmlDocTypeDecl PreProc
+hi! link xmlDocTypeKeyword PreProc
+hi! link xmlProcessingDelim xmlAttrib
+
+" Debugger.vim
+
+call s:X("DbgCurrent","DEEBFE","345FA8","","White","DarkBlue")
+call s:X("DbgBreakPt","","4F0037","","","DarkMagenta")
+
+" vim-indent-guides
+
+if !exists("g:indent_guides_auto_colors")
+ let g:indent_guides_auto_colors = 0
+endif
+call s:X("IndentGuidesOdd","","232323","","","")
+call s:X("IndentGuidesEven","","1b1b1b","","","")
+
+" Plugins, etc.
+
+hi! link TagListFileName Directory
+call s:X("PreciseJumpTarget","B9ED67","405026","","White","Green")
+
+" Manual overrides for 256-color terminals. Dark colors auto-map badly.
+if !s:low_color
+ hi StatusLineNC ctermbg=235
+ hi Folded ctermbg=236
+ hi DiffText ctermfg=81
+ hi DbgBreakPt ctermbg=53
+ hi IndentGuidesOdd ctermbg=235
+ hi IndentGuidesEven ctermbg=234
+endif
+
+if !empty("s:overrides")
+ fun! s:current_attr(group)
+ let l:synid = synIDtrans(hlID(a:group))
+ let l:attrs = []
+ for l:attr in ["bold", "italic", "reverse", "standout", "underline", "undercurl"]
+ if synIDattr(l:synid, l:attr, "gui") == 1
+ call add(l:attrs, l:attr)
+ endif
+ endfor
+ return join(l:attrs, ",")
+ endfun
+ fun! s:current_color(group, what, mode)
+ let l:color = synIDattr(synIDtrans(hlID(a:group)), a:what, a:mode)
+ if l:color == -1
+ return ""
+ else
+ return substitute(l:color, "^#", "", "")
+ endif
+ endfun
+ fun! s:load_color_def(group, def)
+ call s:X(a:group, get(a:def, "guifg", s:current_color(a:group, "fg", "gui")),
+ \ get(a:def, "guibg", s:current_color(a:group, "bg", "gui")),
+ \ get(a:def, "attr", s:current_attr(a:group)),
+ \ get(a:def, "ctermfg", s:current_color(a:group, "fg", "cterm")),
+ \ get(a:def, "ctermbg", s:current_color(a:group, "bg", "cterm")))
+ if !s:low_color
+ for l:prop in ["ctermfg", "ctermbg"]
+ let l:override_key = "256".l:prop
+ if has_key(a:def, l:override_key)
+ exec "hi ".a:group." ".l:prop."=".a:def[l:override_key]
+ endif
+ endfor
+ endif
+ endfun
+ fun! s:load_colors(defs)
+ for [l:group, l:def] in items(a:defs)
+ if l:group == "background"
+ call s:load_color_def("LineNr", l:def)
+ call s:load_color_def("NonText", l:def)
+ call s:load_color_def("Normal", l:def)
+ else
+ call s:load_color_def(l:group, l:def)
+ endif
+ unlet l:group
+ unlet l:def
+ endfor
+ endfun
+ call s:load_colors(s:overrides)
+ delf s:load_colors
+ delf s:load_color_def
+ delf s:current_color
+ delf s:current_attr
+endif
+
+" delete functions {{{
+delf s:X
+delf s:remove_italic_attr
+delf s:prefix_highlight_value_with
+delf s:rgb
+delf s:is_empty_or_none
+delf s:color
+delf s:rgb_color
+delf s:rgb_level
+delf s:rgb_number
+delf s:grey_color
+delf s:grey_level
+delf s:grey_number
+" }}}
diff --git a/vim/colors/molokai.vim b/vim/colors/molokai.vim
new file mode 100755
index 0000000..6d97053
--- /dev/null
+++ b/vim/colors/molokai.vim
@@ -0,0 +1,276 @@
+" Vim color file
+"
+" Author: Tomas Restrepo
+" https://github.com/tomasr/molokai
+"
+" Note: Based on the Monokai theme for TextMate
+" by Wimer Hazenberg and its darker variant
+" by Hamish Stuart Macpherson
+"
+
+hi clear
+
+if version > 580
+ " no guarantees for version 5.8 and below, but this makes it stop
+ " complaining
+ hi clear
+ if exists("syntax_on")
+ syntax reset
+ endif
+endif
+let g:colors_name="molokai"
+
+if exists("g:molokai_original")
+ let s:molokai_original = g:molokai_original
+else
+ let s:molokai_original = 0
+endif
+
+
+hi Boolean guifg=#AE81FF
+hi Character guifg=#E6DB74
+hi Number guifg=#AE81FF
+hi String guifg=#E6DB74
+hi Conditional guifg=#F92672 gui=bold
+hi Constant guifg=#AE81FF gui=bold
+hi Cursor guifg=#000000 guibg=#F8F8F0
+hi iCursor guifg=#000000 guibg=#F8F8F0
+hi Debug guifg=#BCA3A3 gui=bold
+hi Define guifg=#66D9EF
+hi Delimiter guifg=#8F8F8F
+hi DiffAdd guibg=#13354A
+hi DiffChange guifg=#89807D guibg=#4C4745
+hi DiffDelete guifg=#960050 guibg=#1E0010
+hi DiffText guibg=#4C4745 gui=italic,bold
+
+hi Directory guifg=#A6E22E gui=bold
+hi Error guifg=#E6DB74 guibg=#1E0010
+hi ErrorMsg guifg=#F92672 guibg=#232526 gui=bold
+hi Exception guifg=#A6E22E gui=bold
+hi Float guifg=#AE81FF
+hi FoldColumn guifg=#465457 guibg=#000000
+hi Folded guifg=#465457 guibg=#000000
+hi Function guifg=#A6E22E
+hi Identifier guifg=#FD971F
+hi Ignore guifg=#808080 guibg=bg
+hi IncSearch guifg=#C4BE89 guibg=#000000
+
+hi Keyword guifg=#F92672 gui=bold
+hi Label guifg=#E6DB74 gui=none
+hi Macro guifg=#C4BE89 gui=italic
+hi SpecialKey guifg=#66D9EF gui=italic
+
+hi MatchParen guifg=#000000 guibg=#FD971F gui=bold
+hi ModeMsg guifg=#E6DB74
+hi MoreMsg guifg=#E6DB74
+hi Operator guifg=#F92672
+
+" complete menu
+hi Pmenu guifg=#66D9EF guibg=#000000
+hi PmenuSel guibg=#808080
+hi PmenuSbar guibg=#080808
+hi PmenuThumb guifg=#66D9EF
+
+hi PreCondit guifg=#A6E22E gui=bold
+hi PreProc guifg=#A6E22E
+hi Question guifg=#66D9EF
+hi Repeat guifg=#F92672 gui=bold
+hi Search guifg=#000000 guibg=#FFE792
+" marks
+hi SignColumn guifg=#A6E22E guibg=#232526
+hi SpecialChar guifg=#F92672 gui=bold
+hi SpecialComment guifg=#7E8E91 gui=bold
+hi Special guifg=#66D9EF guibg=bg gui=italic
+if has("spell")
+ hi SpellBad guisp=#FF0000 gui=undercurl
+ hi SpellCap guisp=#7070F0 gui=undercurl
+ hi SpellLocal guisp=#70F0F0 gui=undercurl
+ hi SpellRare guisp=#FFFFFF gui=undercurl
+endif
+hi Statement guifg=#F92672 gui=bold
+hi StatusLine guifg=#455354 guibg=fg
+hi StatusLineNC guifg=#808080 guibg=#080808
+hi StorageClass guifg=#FD971F gui=italic
+hi Structure guifg=#66D9EF
+hi Tag guifg=#F92672 gui=italic
+hi Title guifg=#ef5939
+hi Todo guifg=#FFFFFF guibg=bg gui=bold
+
+hi Typedef guifg=#66D9EF
+hi Type guifg=#66D9EF gui=none
+hi Underlined guifg=#808080 gui=underline
+
+hi VertSplit guifg=#808080 guibg=#080808 gui=bold
+hi VisualNOS guibg=#403D3D
+hi Visual guibg=#403D3D
+hi WarningMsg guifg=#FFFFFF guibg=#333333 gui=bold
+hi WildMenu guifg=#66D9EF guibg=#000000
+
+hi TabLineFill guifg=#1B1D1E guibg=#1B1D1E
+hi TabLine guibg=#1B1D1E guifg=#808080 gui=none
+
+if s:molokai_original == 1
+ hi Normal guifg=#F8F8F2 guibg=#272822
+ hi Comment guifg=#75715E
+ hi CursorLine guibg=#3E3D32
+ hi CursorLineNr guifg=#FD971F gui=none
+ hi CursorColumn guibg=#3E3D32
+ hi ColorColumn guibg=#3B3A32
+ hi LineNr guifg=#BCBCBC guibg=#3B3A32
+ hi NonText guifg=#75715E
+ hi SpecialKey guifg=#75715E
+else
+ hi Normal guifg=#F8F8F2 guibg=#1B1D1E
+ hi Comment guifg=#7E8E91
+ hi CursorLine guibg=#293739
+ hi CursorLineNr guifg=#FD971F gui=none
+ hi CursorColumn guibg=#293739
+ hi ColorColumn guibg=#232526
+ hi LineNr guifg=#465457 guibg=#232526
+ hi NonText guifg=#465457
+ hi SpecialKey guifg=#465457
+end
+
+"
+" Support for 256-color terminal
+"
+if &t_Co > 255
+ if s:molokai_original == 1
+ hi Normal ctermbg=234
+ hi CursorLine ctermbg=235 cterm=none
+ hi CursorLineNr ctermfg=208 cterm=none
+ else
+ hi Normal ctermfg=252 ctermbg=233
+ hi CursorLine ctermbg=234 cterm=none
+ hi CursorLineNr ctermfg=208 cterm=none
+ endif
+ hi Boolean ctermfg=135
+ hi Character ctermfg=144
+ hi Number ctermfg=135
+ hi String ctermfg=144
+ hi Conditional ctermfg=161 cterm=bold
+ hi Constant ctermfg=135 cterm=bold
+ hi Cursor ctermfg=16 ctermbg=253
+ hi Debug ctermfg=225 cterm=bold
+ hi Define ctermfg=81
+ hi Delimiter ctermfg=241
+
+ hi DiffAdd ctermbg=24
+ hi DiffChange ctermfg=181 ctermbg=239
+ hi DiffDelete ctermfg=162 ctermbg=53
+ hi DiffText ctermbg=102 cterm=bold
+
+ hi Directory ctermfg=118 cterm=bold
+ hi Error ctermfg=219 ctermbg=89
+ hi ErrorMsg ctermfg=199 ctermbg=16 cterm=bold
+ hi Exception ctermfg=118 cterm=bold
+ hi Float ctermfg=135
+ hi FoldColumn ctermfg=67 ctermbg=16
+ hi Folded ctermfg=67 ctermbg=16
+ hi Function ctermfg=118
+ hi Identifier ctermfg=208 cterm=none
+ hi Ignore ctermfg=244 ctermbg=232
+ hi IncSearch ctermfg=193 ctermbg=16
+
+ hi keyword ctermfg=161 cterm=bold
+ hi Label ctermfg=229 cterm=none
+ hi Macro ctermfg=193
+ hi SpecialKey ctermfg=81
+
+ hi MatchParen ctermfg=233 ctermbg=208 cterm=bold
+ hi ModeMsg ctermfg=229
+ hi MoreMsg ctermfg=229
+ hi Operator ctermfg=161
+
+ " complete menu
+ hi Pmenu ctermfg=81 ctermbg=16
+ hi PmenuSel ctermfg=255 ctermbg=242
+ hi PmenuSbar ctermbg=232
+ hi PmenuThumb ctermfg=81
+
+ hi PreCondit ctermfg=118 cterm=bold
+ hi PreProc ctermfg=118
+ hi Question ctermfg=81
+ hi Repeat ctermfg=161 cterm=bold
+ hi Search ctermfg=0 ctermbg=222 cterm=NONE
+
+ " marks column
+ hi SignColumn ctermfg=118 ctermbg=235
+ hi SpecialChar ctermfg=161 cterm=bold
+ hi SpecialComment ctermfg=245 cterm=bold
+ hi Special ctermfg=81
+ if has("spell")
+ hi SpellBad ctermbg=52
+ hi SpellCap ctermbg=17
+ hi SpellLocal ctermbg=17
+ hi SpellRare ctermfg=none ctermbg=none cterm=reverse
+ endif
+ hi Statement ctermfg=161 cterm=bold
+ hi StatusLine ctermfg=238 ctermbg=253
+ hi StatusLineNC ctermfg=244 ctermbg=232
+ hi StorageClass ctermfg=208
+ hi Structure ctermfg=81
+ hi Tag ctermfg=161
+ hi Title ctermfg=166
+ hi Todo ctermfg=231 ctermbg=232 cterm=bold
+
+ hi Typedef ctermfg=81
+ hi Type ctermfg=81 cterm=none
+ hi Underlined ctermfg=244 cterm=underline
+
+ hi VertSplit ctermfg=244 ctermbg=232 cterm=bold
+ hi VisualNOS ctermbg=238
+ hi Visual ctermbg=235
+ hi WarningMsg ctermfg=231 ctermbg=238 cterm=bold
+ hi WildMenu ctermfg=81 ctermbg=16
+
+ hi Comment ctermfg=59
+ hi CursorColumn ctermbg=236
+ hi ColorColumn ctermbg=236
+ hi LineNr ctermfg=250 ctermbg=236
+ hi NonText ctermfg=59
+
+ hi SpecialKey ctermfg=59
+
+ if exists("g:rehash256") && g:rehash256 == 1
+ hi Normal ctermfg=252 ctermbg=234
+ hi CursorLine ctermbg=236 cterm=none
+ hi CursorLineNr ctermfg=208 cterm=none
+
+ hi Boolean ctermfg=141
+ hi Character ctermfg=222
+ hi Number ctermfg=141
+ hi String ctermfg=222
+ hi Conditional ctermfg=197 cterm=bold
+ hi Constant ctermfg=141 cterm=bold
+
+ hi DiffDelete ctermfg=125 ctermbg=233
+
+ hi Directory ctermfg=154 cterm=bold
+ hi Error ctermfg=222 ctermbg=233
+ hi Exception ctermfg=154 cterm=bold
+ hi Float ctermfg=141
+ hi Function ctermfg=154
+ hi Identifier ctermfg=208
+
+ hi Keyword ctermfg=197 cterm=bold
+ hi Operator ctermfg=197
+ hi PreCondit ctermfg=154 cterm=bold
+ hi PreProc ctermfg=154
+ hi Repeat ctermfg=197 cterm=bold
+
+ hi Statement ctermfg=197 cterm=bold
+ hi Tag ctermfg=197
+ hi Title ctermfg=203
+ hi Visual ctermbg=238
+
+ hi Comment ctermfg=244
+ hi LineNr ctermfg=239 ctermbg=235
+ hi NonText ctermfg=239
+ hi SpecialKey ctermfg=239
+ endif
+end
+
+" Must be at the end, because of ctermbg=234 bug.
+" https://groups.google.com/forum/#!msg/vim_dev/afPqwAFNdrU/nqh6tOM87QUJ
+set background=dark
diff --git a/vim/colors/new-railscasts.vim b/vim/colors/new-railscasts.vim
new file mode 100644
index 0000000..06374cf
--- /dev/null
+++ b/vim/colors/new-railscasts.vim
@@ -0,0 +1,229 @@
+" Vim color scheme
+"
+" Name: railscast.vim
+" Maintainer: Josh O'Rourke
+" Modified: Carlos Ramos, carakan
+" License: public domain
+"
+" A GUI Only port of the RailsCasts TextMate theme [1] to Vim.
+" Some parts of this theme were borrowed from the well-documented Lucius theme [2].
+"
+
+let g:colors_name = "new-railscasts"
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+highlight clear SignColumn
+set background=dark
+
+hi Normal guifg=#E6E1DC guibg=#212121 ctermfg=white ctermbg=234
+hi Cursor guifg=#000000 guibg=#FFFFFF ctermfg=0 ctermbg=15
+hi CursorLine guibg=#282828 ctermbg=235 cterm=NONE
+hi Search guibg=#072f95 ctermfg=NONE ctermbg=236
+hi Visual guibg=#004568 ctermbg=60
+hi LineNr guifg=#707070 guibg=#2d2d2d ctermfg=242
+hi StatusLine guifg=#e4e4e4 guibg=#606060 gui=NONE ctermfg=254 ctermbg=241 cterm=NONE
+hi StatusLineNC guifg=#585858 guibg=#303030 gui=NONE ctermfg=240 ctermbg=236 cterm=NONE
+
+hi! link CursorColumn ColorColumn
+hi VertSplit guibg=#212121 gui=bold guifg=#444444 ctermfg=white ctermbg=234
+hi CursorLineNr guifg=#d7b0fc guibg=#2d2d2d ctermfg=248
+hi ColorColumn guibg=#333435 ctermbg=235
+highlight SignColumn guibg=#2d2d2d
+
+" StatusLine
+" Bold
+hi User1 guifg=#eeeeee guibg=#606060 gui=bold ctermfg=255 ctermbg=241 cterm=bold
+" Yellow
+hi User2 guifg=#FFAF00 guibg=#606060 gui=bold ctermfg=214 ctermbg=241 cterm=bold
+" Green
+hi User3 guifg=#15d300 guibg=#606060 gui=bold ctermfg=82 ctermbg=241 cterm=bold
+" Red
+hi User4 guifg=#870000 guibg=#606060 gui=bold ctermfg=88 ctermbg=241 cterm=bold
+hi User5 guifg=#e4e4e4 guibg=#606060 gui=bold ctermfg=254 ctermbg=241 cterm=bold
+hi User6 guifg=#e4e4e4 guibg=#606060 gui=bold ctermfg=254 ctermbg=241 cterm=bold
+hi User7 guifg=#e4e4e4 guibg=#606060 gui=bold ctermfg=254 ctermbg=241 cterm=bold
+hi User8 guifg=#e4e4e4 guibg=#606060 gui=bold ctermfg=254 ctermbg=241 cterm=bold
+hi User9 guifg=#e4e4e4 guibg=#606060 gui=bold ctermfg=254 ctermbg=241 cterm=bold
+
+" Folds
+" -----
+hi Folded guifg=#F6F3E8 guibg=#444444 gui=NONE
+
+" Invisible Characters
+" ------------------
+hi NonText guifg=#777777 gui=NONE
+hi SpecialKey guifg=#777777 gui=NONE
+
+" Misc
+" ----
+" directory names and other special names in listings
+hi Directory guifg=#A5C261 gui=NONE
+
+" Popup Menu
+" ----------
+" normal item in popup
+hi Pmenu guifg=#F6F3E8 guibg=#444444 gui=NONE ctermfg=white ctermbg=237
+" selected item in popup
+hi PmenuSel guifg=#000000 guibg=#A5C261 gui=NONE
+" scrollbar in popup
+hi PMenuSbar guibg=#5A647E gui=NONE
+" thumb of the scrollbar in the popup
+hi PMenuThumb guibg=#AAAAAA gui=NONE
+
+" Comment
+hi Comment guifg=#BC9458 guibg=NONE gui=italic ctermfg=137 cterm=italic
+hi Todo guifg=#df5f5f guibg=NONE gui=bold ctermfg=94
+
+"rubyPseudoVariable: nil, self, symbols, etc
+hi Constant guifg=#6D9CBE ctermfg=73
+" rubyClass, rubyModule, rubyDefine def, end, include, etc
+hi Define guifg=#CC7833 ctermfg=173
+" Interpolation
+hi Delimiter guifg=#519F50
+hi WarningMsg guifg=#DA4939 guibg=NONE ctermfg=1 ctermbg=NONE
+" Error, rubyInvalidVariable
+hi Error guifg=#FFFFFF guibg=#990000 ctermfg=221 ctermbg=88
+"rubyFunction
+hi! Function guifg=#FFC66D guibg=NONE ctermfg=221 cterm=NONE
+" Identifier: @var, @@var, $var, etc
+hi Identifier guifg=#d7b0fc guibg=NONE ctermfg=73 cterm=NONE
+" Include: include, autoload, extend, load, require
+hi Include guifg=#CC7833 guibg=NONE ctermfg=173 cterm=NONE
+" Keyword, rubyKeywordAsMethod: alias, undef, super, yield, callcc, caller, lambda, proc
+hi Keyword guifg=#d8690f ctermfg=172 cterm=NONE
+" same as define
+hi Macro guifg=#CC7833 guibg=NONE ctermfg=172
+"rubyInteger
+hi Number guifg=#A5C261 ctermfg=107
+hi Boolean guifg=#47a3e5 ctermfg=107 gui=italic
+" #if, #else, #endif
+hi PreCondit guifg=#CC7833 guibg=NONE ctermfg=172 cterm=NONE
+" generic preprocessor
+hi PreProc guifg=#CC7833 guibg=NONE ctermfg=103
+" Control, Access, Eval: case, begin, do, for, if unless, while, until else, etc.
+hi Statement guifg=#CC7833 guibg=NONE ctermfg=172 cterm=NONE
+" String
+hi String guifg=#74d155 guibg=NONE ctermfg=107
+hi! Title guifg=#FFFFFF guibg=NONE ctermfg=15
+" Constant
+hi Type guifg=#ff5d4f guibg=NONE gui=NONE
+hi PreProc guifg=#ff8700 guibg=NONE ctermfg=208
+hi Special guifg=#ff8700 guibg=NONE ctermfg=22
+hi Operator guifg=#CC7833 guibg=NONE ctermfg=73
+hi Tag guifg=#CC7833 guibg=NONE ctermfg=73
+hi Label guifg=#6D9CBE ctermfg=221 gui=bold
+
+" Indentation
+hi IndentGuidesOdd ctermbg=239 guibg=#282828
+hi IndentGuidesEven ctermbg=237 guibg=#332717
+
+" Diffs
+hi DiffAdd guifg=#e4e4e4 guibg=#519F50 ctermfg=254 ctermbg=22
+hi DiffDelete guifg=#e4e4e4 guibg=#660000 gui=bold ctermfg=16 ctermbg=52 cterm=bold
+hi DiffChange guifg=#FFFFFF guibg=#870087 ctermfg=15 ctermbg=90
+hi DiffText guifg=#FFC66D guibg=#FF0000 gui=bold ctermfg=15 ctermbg=9 cterm=bold
+
+hi diffAdded guifg=#008700 ctermfg=28
+hi diffRemoved guifg=#800000 ctermfg=1
+hi diffNewFile guifg=#FFFFFF guibg=NONE gui=bold ctermfg=15 ctermbg=NONE cterm=bold
+hi diffFile guifg=#FFFFFF guibg=NONE gui=bold ctermfg=15 ctermbg=NONE cterm=bold
+
+
+hi javaScriptOperator guifg=#c9d05c ctermfg=185 guibg=NONE ctermbg=NONE gui=NONE cterm=NONE
+hi javaScriptBraces guifg=#dd7927 ctermfg=153 guibg=NONE ctermbg=NONE gui=NONE cterm=NONE
+hi javaScriptNull guifg=#dd7927 ctermfg=215 guibg=NONE ctermbg=NONE gui=NONE cterm=NONE
+
+" Ruby
+" ----
+hi rubyTodo guifg=#fc5858 guibg=NONE gui=bold ctermfg=167 ctermbg=NONE cterm=bold
+hi rubyClass guifg=#dd7927 ctermfg=15
+hi rubyConstant guifg=#fc5858 ctermfg=167
+hi rubyInterpolation guifg=#ea8c3f ctermfg=15
+hi rubyBlockParameter guifg=#d7b0fc ctermfg=189
+hi rubyPseudoVariable guifg=#47a3e5 ctermfg=221 gui=italic
+hi rubySymbol guifg=#6D9CBE ctermfg=73 gui=bold
+hi rubyStringDelimiter guifg=#87af5f ctermfg=107
+hi rubyInstanceVariable guifg=#d7b0fc ctermfg=189
+hi rubyPredefinedConstant guifg=#fc5858 ctermfg=167
+hi rubyLocalVariableOrMethod guifg=#d7b0fc ctermfg=189
+hi rubyBoolean guifg=#47a3e5 gui=italic
+
+" JAVASCRIPT
+"
+hi jsFunction guifg=#ff8700 ctermfg=221 gui=italic
+hi jsFunctionKey guifg=#ff8700 ctermfg=221 gui=italic
+hi jsArrowFunction guifg=#ff8700 ctermfg=221
+hi jsObjectKey guifg=#6D9CBE ctermfg=73 gui=bold
+hi jsThis guifg=#d7b0fc ctermfg=189 gui=italic
+hi jsStorageClass guifg=#fc5858 ctermfg=167 gui=italic
+hi jsNull guifg=#ff8700 ctermfg=221 gui=italic
+
+" Typescript
+"
+hi typescriptArrowFunc guifg=#ff8700 ctermfg=221 gui=italic
+hi typescriptIdentifier guifg=#d7b0fc ctermfg=189 gui=italic
+hi typescriptAsyncFuncKeyword guifg=#47a3e5 gui=italic
+hi typescriptType guifg=#ff8700 ctermfg=167 gui=italic
+hi typescriptObjectLabel guifg=#6D9CBE ctermfg=73 gui=bold
+
+" Python
+" ------
+hi pythonExceptions guifg=#ffaf87 ctermfg=216
+hi pythonDoctest guifg=#8787ff ctermfg=105
+hi pythonDoctestValue guifg=#87d7af ctermfg=115
+
+" Elixir
+"
+hi elixirAtom guifg=#6D9CBE ctermfg=221 gui=bold
+hi elixirTuple guifg=#6D9CBE ctermfg=221 gui=bold
+hi elixirDefine guifg=#CC7833 ctermfg=173 gui=bold
+hi elixirPrivateDefine guifg=#CC7833 ctermfg=173 gui=bold
+hi elixirModuleDefine guifg=#CC7833 ctermfg=173 gui=bold
+
+" Ember.js
+"
+hi hbsProperty guifg=#ff8700 ctermfg=221 gui=italic
+hi mustacheHandlebars guifg=#CC7833 ctermfg=173 gui=bold
+
+" CSS
+hi cssClassName guifg=#FFC66D gui=italic
+hi cssIdentifier guifg=#47a3e5 gui=italic
+
+" JSON
+hi jsonBoolean guifg=#47a3e5 gui=italic
+hi jsonNull guifg=#47a3e5 gui=italic
+
+" yaml
+hi yamlKey guifg=#d7b0fc ctermfg=189 gui=bold
+
+" Mail
+" ----
+hi mailEmail guifg=#87af5f ctermfg=107 gui=italic cterm=underline
+hi mailHeaderKey guifg=#ffdf5f ctermfg=221
+hi! link mailSubject mailHeaderKey
+
+" Spell
+" ----
+hi! SpellBad guifg=#df5f87 guibg=NONE gui=NONE ctermfg=160 ctermbg=NONE cterm=underline
+hi! SpellRare guifg=#df5f87 guibg=NONE gui=NONE ctermfg=168 ctermbg=NONE cterm=underline
+hi! SpellCap guifg=#dfdfff guibg=NONE gui=NONE ctermfg=189 ctermbg=NONE cterm=underline
+hi! SpellLocal guifg=#00FFFF guibg=NONE gui=NONE ctermfg=51 ctermbg=NONE cterm=underline
+hi! MatchParen guifg=#FFFFFF guibg=#005f5f ctermfg=15 ctermbg=23
+hi! Question guifg=#df5f87 guibg=NONE gui=NONE ctermfg=168 ctermbg=NONE cterm=underline
+
+" XML
+" ---
+hi xmlTag guifg=#dfaf5f ctermfg=179
+hi xmlTagName guifg=#dfaf5f ctermfg=179
+hi xmlEndTag guifg=#dfaf5f ctermfg=179
+
+hi link htmlTag xmlTag
+hi link htmlTagName xmlTagName
+hi link htmlEndTag xmlEndTag
+hi htmlArg guifg=#ff8700 ctermfg=221 gui=italic
+
+hi checkbox guifg=#3a3a3a guibg=NONE gui=NONE ctermfg=237 ctermbg=NONE cterm=NONE
+hi checkboxDone guifg=#15d300 guibg=NONE gui=BOLD ctermfg=82 ctermbg=NONE cterm=BOLD
+hi checkboxNotDone guifg=#005fdf guibg=NONE gui=BOLD ctermfg=26 ctermbg=NONE cterm=BOLD
diff --git a/vim/colors/sexy-railscasts.vim b/vim/colors/sexy-railscasts.vim
new file mode 100755
index 0000000..187fc18
--- /dev/null
+++ b/vim/colors/sexy-railscasts.vim
@@ -0,0 +1,102 @@
+" Name: sexy-railscast vim colorscheme
+" Modifier: Oguz Bilgic
+" Url: https://github.com/oguzbilgic/sexy-railscasts-theme
+" License: public domain
+"
+" A GUI Only port of the RailsCasts TextMate theme [1] to Vim.
+" Some parts of this theme were borrowed from the well-documented Lucius theme [2].
+" Initial file was written by Josh O'Rourke [3] then improved by Oguz Bilgic
+"
+" [1] http://railscasts.com/about
+" [2] http://www.vim.org/scripts/script.php?script_id=2536
+" [3] https://github.com/jpo/vim-railscasts-theme
+
+" -----------------------------------------------------------------------------------
+" Settings
+" -----------------------------------------------------------------------------------
+set background=dark
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+let g:colors_name = "sexy-railscasts"
+
+" -----------------------------------------------------------------------------------
+" Basics
+" -----------------------------------------------------------------------------------
+hi Normal guifg=#E6E1DC guibg=#222222
+hi Cursor guibg=#FFFFFF
+hi CursorLine guibg=#333435
+hi LineNr guifg=#383838 guibg=#141414
+hi SignColumn guibg=#222222
+hi NonText guifg=#383838 guibg=#252525
+hi Search guibg=#5A647E
+hi VertSplit guifg=#383838 guibg=#383838
+hi Visual guibg=#5A647E
+hi Title guifg=#FFFFFF
+
+" -----------------------------------------------------------------------------------
+" Folds
+" -----------------------------------------------------------------------------------
+hi Folded guifg=#F6F3E8 guibg=#444444 gui=NONE
+
+" -----------------------------------------------------------------------------------
+" Misc
+" -----------------------------------------------------------------------------------
+hi Directory guifg=#A5C261 gui=NONE
+
+" -----------------------------------------------------------------------------------
+" Popup Menu
+" -----------------------------------------------------------------------------------
+hi Pmenu guifg=#F6F3E8 guibg=#444444 gui=NONE
+hi PmenuSel guifg=#000000 guibg=#A5C261 gui=NONE
+hi PMenuSbar guibg=#5A647E gui=NONE
+hi PMenuThumb guibg=#AAAAAA gui=NONE
+
+" -----------------------------------------------------------------------------------
+" Syntax
+" -----------------------------------------------------------------------------------
+hi Comment guifg=#BC9458 gui=italic
+hi Todo guifg=#BC9458 guibg=NONE gui=italic
+hi Constant guifg=#6D9CBE
+hi Define guifg=#CC7833
+hi Delimiter guifg=#519F50
+hi Error guifg=#FFFFFF guibg=#990000
+hi Function guifg=#FFC66D gui=NONE
+hi Identifier guifg=#D0D0FF gui=NONE
+hi Include guifg=#CC7833 gui=NONE
+hi Keyword guifg=#CC7833
+hi Macro guifg=#CC7833 gui=NONE
+hi Number guifg=#A5C261
+hi PreCondit guifg=#CC7833 gui=NONE
+hi PreProc guifg=#CC7833 gui=NONE
+hi Statement guifg=#CC7833 gui=NONE
+hi String guifg=#A5C261
+hi Type guifg=#DA4939 gui=NONE
+
+" -----------------------------------------------------------------------------------
+" Ruby
+" -----------------------------------------------------------------------------------
+hi erubyDelimiter guifg=#DA4939
+
+" -----------------------------------------------------------------------------------
+" Git
+" -----------------------------------------------------------------------------------
+hi DiffAdd guifg=#E6E1DC guibg=#144212
+hi DiffDelete guifg=#E6E1DC guibg=#660000
+
+" -----------------------------------------------------------------------------------
+" Xml
+" -----------------------------------------------------------------------------------
+hi xmlTag guifg=#E8BF6A
+hi xmlTagName guifg=#E8BF6A
+hi xmlEndTag guifg=#E8BF6A
+
+" -----------------------------------------------------------------------------------
+" Html
+" -----------------------------------------------------------------------------------
+hi htmlArg guifg=#FFC66D guibg=#222222
+hi link htmlTag xmlTag
+hi link htmlTagName xmlTagName
+hi link htmlEndTag xmlEndTag
+
diff --git a/vim/config/keybindings.vim b/vim/config/keybindings.vim
new file mode 100644
index 0000000..eb8da51
--- /dev/null
+++ b/vim/config/keybindings.vim
@@ -0,0 +1,40 @@
+" No Arrowkeys
+no
+no
+no
+no
+ino
+ino
+ino
+ino
+vno
+vno
+vno
+vno
+
+" Misc Keybindings
+let mapleader = ","
+
+" Window Movement
+nnoremap
+nnoremap
+nnoremap
+nnoremap
+
+" Yankstack
+nmap yankstack_substitute_newer_paste
+nmap yankstack_substitute_older_paste
+
+" CTRL + Space = Autocomplete
+inoremap
+imap
+
+" Syntastic
+nnoremap :SyntasticToggleMode
+
+" SingleCompile
+nmap :SCChooseCompiler
+nmap :SCCompile
+nmap :SCCompileRun
+
+nmap g~iw
diff --git a/vim/config/plugin.vim b/vim/config/plugin.vim
new file mode 100644
index 0000000..f08b395
--- /dev/null
+++ b/vim/config/plugin.vim
@@ -0,0 +1,106 @@
+" Airline
+if !exists('g:airline_symbols')
+ let g:airline_symbols = {}
+endif
+let g:airline_left_sep = ''
+let g:airline_left_alt_sep = ''
+let g:airline_right_sep = ''
+let g:airline_right_alt_sep = ''
+let g:airline_symbols.branch = ''
+let g:airline_symbols.readonly = ''
+let g:airline_symbols.linenr = ''
+let g:airline#extensions#tabline#left_sep=''
+let g:airline#extensions#tabline#left_alt_sep=''
+let g:airline_symbols.maxlinenr = ''
+let g:airline#extensions#tabline#enabled = 1
+let g:airline#extensions#wordcount#enabled = 1
+let g:airline_theme="minimalist"
+
+" GoldenView
+let g:goldenview__enable_default_mapping = 0
+let g:goldenview__ignore_urule = {
+ \ 'filetype' : [
+ \ '' ,
+ \ 'qf' , 'vimpager', 'undotree', 'tagbar',
+ \ 'nerdtree', 'vimshell', 'vimfiler', 'voom' ,
+ \ 'tabman' , 'unite' , 'quickrun', 'Decho' ,
+ \ 'netrw' ,
+ \ ],
+ \ 'buftype' : [
+ \ 'nofile' ,
+ \ ],
+ \ 'bufname' : [
+ \ 'GoToFile' , 'diffpanel_\d\+' ,
+ \ '__Gundo_Preview__' , '__Gundo__' ,
+ \ '\[LustyExplorer-Buffers\]' , '\-MiniBufExplorer\-' ,
+ \ '_VOOM\d\+$' , '__Urannotate_\d\+__' ,
+ \ '__MRU_Files__' ,
+ \ ],
+ \}
+let g:goldenview__restore_urule = {
+ \ 'filetype' : [
+ \ 'nerdtree', 'vimfiler', 'netrw',
+ \ ],
+ \ 'bufname' : [
+ \ '__MRU_Files__' ,
+ \ ],
+ \ }
+
+
+" JavaComplete
+if has("autocmd")
+ autocmd Filetype java setlocal omnifunc=javacomplete#CompleteParamsInfo
+endif
+
+" Deoplete
+let g:deoplete#enable_at_startup = 1
+
+" NeoComplete
+" let g:acp_enableAtStartup = 0
+" let g:neocomplete#enable_at_startup = 1
+" let g:neocomplete#enable_smart_case = 1
+
+" NerdCommenter
+let g:NERDSpaceDelims = 1
+let g:NERDCompactSexyComs = 1
+let g:NERDDefaultAlign = "left"
+let g:NERDCommentEmptyLines = 1
+let g:NERDTrimTrailingWhitespace = 1
+
+" NerdTree
+" let g:NERDTreeShowHidden = 1
+" " let NERDTreeMinimalUI = 1
+" let NERDTreeCascadeSingleChildDir = 1
+" let NERDTreeCascadeOpenSingleChildDir = 1
+" autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
+" let g:nerdtree_tabs_open_on_console_startup = 1
+
+" PythonSyntax
+let python_highlight_all = 1
+
+" Simpylfold
+let g:SimpylFold_docstring_preview = 1
+
+" Supertab
+let g:SuperTabDefaultCompletionType = ""
+
+" Syntastic
+let g:syntastic_always_populate_loc_list = 1
+let g:syntastic_auto_loc_list = 1
+let g:syntastic_check_on_open = 1
+let g:syntastic_check_on_wq = 0
+let g:syntastic_mode_map={"mode":"active", "active_filetypes": [], "passive_filetypes": ['tex']}
+let g:syntastic_python_checkers=['flake8']
+let g:syntastic_python_flake8_args='--ignore=E501,E225'
+
+
+" UltiSnips
+let g:UltiSnipsJumpForwardTrigger=""
+let g:UltiSnipsJumpBackwardTrigger=""
+
+" Whitespace
+autocmd BufEnter * EnableStripWhitespaceOnSave
+
+" Yankstack
+let g:yankstack_map_keys = 0
+call yankstack#setup()
diff --git a/vim/plugins/FastFold/.gitignore b/vim/plugins/FastFold/.gitignore
new file mode 100644
index 0000000..926ccaa
--- /dev/null
+++ b/vim/plugins/FastFold/.gitignore
@@ -0,0 +1 @@
+doc/tags
diff --git a/vim/plugins/FastFold/README.md b/vim/plugins/FastFold/README.md
new file mode 100644
index 0000000..1c51fb0
--- /dev/null
+++ b/vim/plugins/FastFold/README.md
@@ -0,0 +1,106 @@
+# What good will FastFold do?
+
+Automatic folds (that is, folds generated by a fold method different
+from `manual`), bog down VIM noticeably in insert mode. They are also often
+recomputed too early (for example, when inserting an opening fold marker
+whose closing counterpart is yet missing to complete the fold.)
+
+See http://vim.wikia.com/wiki/Keep_folds_closed_while_inserting_text
+for a discussion.
+
+With this plug-in, the folds in the currently edited buffer are updated by an
+automatic fold method only
+
+- when saving the buffer
+- when closing or opening folds (zo, za, zc, etc...)
+- when moving or operating fold-wise (zj,zk,[z,]z)
+- when typing `zuz` in normal mode
+
+and are kept as is otherwise (by keeping the fold method set to `manual`).
+
+# Example Setup
+
+Each of these triggers for updating folds can be modified or disabled by adding
+the lines
+
+```vim
+nmap zuz (FastFoldUpdate)
+let g:fastfold_savehook = 1
+let g:fastfold_fold_command_suffixes = ['x','X','a','A','o','O','c','C']
+let g:fastfold_fold_movement_commands = [']z', '[z', 'zj', 'zk']
+```
+
+to the file `~/.vimrc` (respectively `%USERPROFILE%/_vimrc` on Microsoft Windows).
+
+For example, by adding
+
+```vim
+let g:tex_fold_enabled=1
+let g:vimsyn_folding='af'
+let g:xml_syntax_folding = 1
+let g:php_folding = 1
+let g:perl_fold = 1
+```
+
+to the `.vimrc` file and installing this plug-in, the folds in a TeX, Vim, XML,
+PHP or Perl file are updated by the `syntax` fold method when saving the
+buffer, opening, closing, moving or operating on folds, or typing `zuz` in
+normal mode and are kept as is otherwise.
+
+*Set fold methods for every file type only*! Setting it globally risks that FastFold assumes the wrong, global, fold method instead of that intended by the file type plug-in, for example TagList.
+
+# Configuration
+
+- If you prefer that folds are only updated manually but not when saving the buffer,
+ then add `let g:fastfold_savehook = 0` to your `.vimrc`.
+
+- If you prefer that folds are updated whenever you close or open folds by a
+ standard keystroke such as `zx`,`zo` or `zc`, then add `let
+ g:fastfold_fold_command_suffixes = []` to your `.vimrc`.
+
+ The exact list of these standard keystrokes is `zx,zX,za,zA,zo,zO,zc,zC` and
+ it can be customized by changing the global variable
+ `g:fastfold_mapsuffixes`. If you wanted to intercept all possible fold
+ commands (such as zr,zm,...), change this to:
+
+ ```vim
+ let g:fastfold_fold_command_suffixes =
+ ['x','X','a','A','o','O','c','C','r','R','m','M','i','n','N']
+ ```
+
+- If you prefer that this plug-in does not add a normal mode mapping that updates
+ folds (that defaults to `zuz`), then add
+ `nmap (DisableFastFoldUpdate) (FastFoldUpdate) ` to your `.vimrc`.
+
+ You can remap `zuz` to your favorite keystroke, say ``, by adding
+ `nmap (FastFoldUpdate)` to your `.Vimrc`.
+
+ There is also a command `FastFoldUpdate` that updates all folds and its
+ variant `FastFoldUpdate!` that updates all folds and echos by which fold
+ method the folds were updated.
+
+# Addons
+
+## Vim-Stay
+
+`FastFold` integrates with the plug-in
+[vim-stay](https://github.com/kopischke/vim-stay/issues) that restores the
+folds of a file buffer by `:mkview` and `:loadview`.
+
+## Custom Fold Text
+
+A `CustomFoldText()` function that displays the percentage of the number of buffer lines that the folded text takes up and indents folds according to their nesting level, similar to [that](http://www.gregsexton.org/2011/03/improving-the-text-displayed-in-a-fold/) by Greg Sexton, is available at
+
+http://www.github.com/Konfekt/FoldText
+
+## Fold Text-Object
+
+Create a fold text object, mapped to `iz` and `az`, by adding the lines
+
+```vim
+xnoremap iz :FastFoldUpdate:normal! ]zv[z
+xnoremap az :FastFoldUpdate:normal! ]zV[z
+```
+
+to the file `~/.vimrc` (respectively `%USERPROFILE%/_vimrc` on Microsoft Windows).
+
diff --git a/vim/plugins/FastFold/doc/FastFold.txt b/vim/plugins/FastFold/doc/FastFold.txt
new file mode 100644
index 0000000..42484ea
--- /dev/null
+++ b/vim/plugins/FastFold/doc/FastFold.txt
@@ -0,0 +1,153 @@
+ FastFold, folding optimization *FastFold* *fastfold*
+
+===========================================================================
+0. Introduction ~
+ *FastFold-intro* *fastfold-intro*
+
+Automatic folds - that is, folds generated by a fold method different
+from `manual` - bog down VIM considerably in insert mode. Also, they are often
+re-evaluated prematurely for example, when inserting an opening fold marker
+whose closing counterpart has yet to be added to complete the fold.
+
+See http://vim.wikia.com/wiki/Keep_folds_closed_while_inserting_text
+for a discussion.
+
+With this plug-in, the folds in the currently edited buffer are updated when
+certain triggers are met:
+
+- when saving the buffer
+- when closing or opening folds (zo, za, zc, etc...)
+- when moving or operating fold-wise (zj,zk,[z,]z)
+- when typing `zuz` in normal mode
+
+===========================================================================
+1. Commands ~
+ *FastFold-commands* *fastfold-commands*
+ *FastFoldUpdate!*
+
+- `:FastFoldUpdate` updates all folds in the current buffer.
+- `:FastFoldUpdate!` updates all folds & echoes what fold method was used
+
+- The mapping `zuz` that invokes `:FastFoldUpdate!` can be changed to your
+ favorite keystroke, say ``, by adding
+>
+ nmap (FastFoldUpdate)
+<
+ to your `.vimrc`. It can be disabled by adding
+>
+ nmap (DisableFastFoldUpdate) (FastFoldUpdate)
+<
+===========================================================================
+2. Config ~
+ *FastFold-config* *fastfold-config*
+
+Each of the above triggers can be enabled or disabled by setting the
+matching global flags in your `.vimrc`. Default values are shown.
+>
+ let g:fastfold_savehook = 1
+ let g:fastfold_fdmhook = 0
+ nmap zuz (FastFoldUpdate)
+ let g:fastfold_fold_command_suffixes = ['x','X','a','A','o','O','c','C']
+ let g:fastfold_fold_movement_commands = [']z', '[z', 'zj', 'zk']
+<
+For example, by adding the following to your `.vimrc`
+>
+ let g:tex_fold_enabled=1
+ let g:vimsyn_folding='af'
+ let g:xml_syntax_folding = 1
+ let g:php_folding = 1
+ let g:perl_fold = 1
+<
+You will enable tex, vim, xml, php and perl syntax folding.
+
+Set fold methods for every file type only! Setting it globally risks that
+FastFold assumes the wrong, global, fold method instead of that intended by the
+file type plug-in, for example TagList.
+
+-----------------------------
+
+- FastFold updates all folds when you open or close folds by the commands
+ zx, zX, za, zA, zo, zO, zc, zC. This list of commands is configured by
+>
+ let g:fastfold_fold_command_suffixes = ['x','X','a','A','o','O','c','C']
+<
+ To intercept all possible fold commands (such as zr,zm,...),change this to
+>
+ let g:fastfold_fold_command_suffixes =
+ ['x','X','a','A','o','O','c','C','r','R','m','M','i','n','N']
+<
+ To disable all interceptions, change this to
+>
+ let g:fastfold_fold_command_suffixes = []
+<
+- FastFold updates all fold when you move or operate fold-wise by
+ the commands zj,zk,[z or ]z. This list of commands is configured by
+>
+ let g:fastfold_fold_movement_commands = [']z', '[z', 'zj', 'zk']
+<
+ It can be disabled by
+>
+ let g:fastfold_fold_movement_commands = []
+<
+- FastFold updates all folds when you save a buffer. This hook is set by
+>
+ let g:fastfold_savehook = 1
+<
+- FastFold intercepts every change of the fold method by
+>
+ let g:fastfold_fdmhook = 1
+<
+ This is disabled by default as it could interfere with other plugins such as
+ `easymotion`.
+
+- To disable FastFold for a list of file types, such as 'taglist', add
+>
+` let g:fastfold_skip_filetypes`= [ 'taglist' ]
+<
+ to your 'vimrc'. Default value is [].
+
+- Add a fold text-object, mapped to `iz` and `az`, by adding the lines
+
+ xnoremap iz :FastFoldUpdate:normal! ]zv[z
+ xnoremap az :FastFoldUpdate:normal! ]zV[z
+
+ to your 'vimrc'.
+===========================================================================
+3. Extra Notes ~
+
+3.1 Related Plugins ~
+
+`FastFold` integrates with the plug-in `vim-stay` available at
+
+https://github.com/kopischke/vim-stay
+
+that stores and restores the last folds by `:mkview` and `:loadview`.
+
+------------------------------
+
+A fold-text function `CustomFoldText()` that displays the percentage of the
+number of buffer lines that the folded text takes up and indents folds
+according to their nesting level is available at
+
+http://www.github.com/Konfekt/FoldText
+
+3.2 Warning ~
+
+FastFold overwrites your manual folds when saving the currently edited buffer,
+unless
+
+- FastFold is disabled for this filetype by `g:fastfold_skip_filetypes`, or
+- the `foldmethod=manual` since having entered the buffer.
+
+3.3 API ~
+
+The last used fold method by which FastFold updates the folds in the current
+buffer can be read off from the window local variable `w:lastdfm`.
+
+3.4 Thanks go to... ~
+
+- starcraftman for providing this documentation, and
+- blueyed, kopischke, sabauma, willywampa, and many others for reporting
+issues and suggesting code improvements.
+
+vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl
diff --git a/vim/plugins/FastFold/plugin/fastfold.vim b/vim/plugins/FastFold/plugin/fastfold.vim
new file mode 100644
index 0000000..19de8f8
--- /dev/null
+++ b/vim/plugins/FastFold/plugin/fastfold.vim
@@ -0,0 +1,224 @@
+scriptencoding utf-8
+
+" LICENCE PUBLIQUE RIEN À BRANLER
+" Version 1, Mars 2009
+"
+" Copyright (C) 2009 Sam Hocevar
+" 14 rue de Plaisance, 75014 Paris, France
+"
+" La copie et la distribution de copies exactes de cette licence sont
+" autorisées, et toute modification est permise à condition de changer
+" le nom de la licence.
+"
+" CONDITIONS DE COPIE, DISTRIBUTON ET MODIFICATION
+" DE LA LICENCE PUBLIQUE RIEN À BRANLER
+"
+" 0. Faites ce que vous voulez, j’en ai RIEN À BRANLER.
+
+if exists('g:loaded_fastfold') || &cp
+ finish
+endif
+let g:loaded_fastfold = 1
+
+let s:keepcpo = &cpo
+set cpo&vim
+" ------------------------------------------------------------------------------
+
+if !exists('g:fastfold_fdmhook') | let g:fastfold_fdmhook = 0 | endif
+if !exists('g:fastfold_savehook') | let g:fastfold_savehook = 1 | endif
+if !exists('g:fastfold_fold_command_suffixes')
+ let g:fastfold_fold_command_suffixes = ['x','X','a','A','o','O','c','C']
+endif
+if !exists('g:fastfold_fold_movement_commands')
+ let g:fastfold_fold_movement_commands = [']z', '[z', 'zj', 'zk']
+endif
+if !exists('g:fastfold_skip_filetypes') | let g:fastfold_skip_filetypes = [] | endif
+
+function! s:EnterWin()
+ if exists('w:unchanged')
+ unlet w:unchanged
+ elseif s:Skip()
+ if exists('w:lastfdm')
+ unlet w:lastfdm
+ endif
+ else
+ let w:lastfdm = &l:foldmethod
+ setlocal foldmethod=manual
+ endif
+endfunction
+
+function! s:LeaveWin()
+ if exists('w:predifffdm')
+ if empty(&l:foldmethod) || &l:foldmethod is# 'manual'
+ let &l:foldmethod = w:predifffdm
+ unlet w:predifffdm
+ return
+ elseif &l:foldmethod isnot# 'diff'
+ unlet w:predifffdm
+ endif
+ endif
+
+ if exists('w:lastfdm') && &l:foldmethod is# 'diff'
+ let w:predifffdm = w:lastfdm
+ endif
+
+ if exists('w:lastfdm') && &l:foldmethod is# 'manual'
+ if !exists('b:last_changedtick') || b:changedtick > b:last_changedtick
+ let &l:foldmethod = w:lastfdm
+ let b:last_changedtick = b:changedtick
+ else
+ let w:unchanged = 1
+ endif
+ endif
+endfunction
+
+" Like windo but restore the current buffer.
+" See http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers#Restoring_position
+function! s:WinDo( command )
+ " avoid errors in CmdWin
+ if exists('*getcmdwintype') && !empty(getcmdwintype())
+ return
+ endif
+ " Work around Vim bug.
+ " See https://groups.google.com/forum/#!topic/vim_dev/LLTw8JV6wKg
+ let curaltwin = winnr('#') ? winnr('#') : 1
+ let currwin=winnr()
+ if &scrollopt =~# '\'
+ set scrollopt-=jump
+ let l:restore = 'set scrollopt+=jump'
+ endif
+ silent! execute 'keepjumps noautocmd windo ' . a:command
+ silent! execute 'noautocmd ' . curaltwin . 'wincmd w'
+ silent! execute 'noautocmd ' . currwin . 'wincmd w'
+ if exists('l:restore')
+ exe l:restore
+ endif
+endfunction
+
+" WinEnter then TabEnter then BufEnter then BufWinEnter
+function! s:UpdateWin(check)
+ " skip if another session still loading
+ if a:check && exists('g:SessionLoad') | return | endif
+
+ let s:curwin = winnr()
+ call s:WinDo('if winnr() is s:curwin | call s:LeaveWin() | endif')
+ call s:WinDo('if winnr() is s:curwin | call s:EnterWin() | endif')
+endfunction
+
+function! s:UpdateBuf(feedback)
+ let s:curbuf = bufnr('%')
+ call s:WinDo("if bufnr('%') is s:curbuf | call s:LeaveWin() | endif")
+ call s:WinDo("if bufnr('%') is s:curbuf | call s:EnterWin() | endif")
+
+ if !a:feedback | return | endif
+
+ if !exists('w:lastfdm')
+ echomsg "'" . &l:foldmethod . "' folds already continuously updated"
+ else
+ echomsg "updated '" . w:lastfdm . "' folds"
+ endif
+endfunction
+
+function! s:UpdateTab()
+ " skip if another session still loading
+ if exists('g:SessionLoad') | return | endif
+
+ call s:WinDo('call s:LeaveWin()')
+ call s:WinDo('call s:EnterWin()')
+endfunction
+
+function! s:Skip()
+ if !s:isReasonable() | return 1 | endif
+ if !&l:modifiable | return 1 | endif
+ if s:inSkipList() | return 1 | endif
+
+ return 0
+endfunction
+
+function! s:isReasonable()
+ if &l:foldmethod is# 'syntax' || &l:foldmethod is# 'expr'
+ return 1
+ else
+ return 0
+ endif
+endfunction
+
+function! s:inSkipList()
+ for ifiles in g:fastfold_skip_filetypes
+ if index(g:fastfold_skip_filetypes, &l:filetype) >= 0
+ return 1
+ endif
+ endfor
+ return 0
+endfunction
+
+command! -bar -bang FastFoldUpdate call s:UpdateBuf(0)
+
+nnoremap (FastFoldUpdate) :FastFoldUpdate!
+
+if !hasmapto('(FastFoldUpdate)', 'n') && empty(mapcheck('zuz', 'n'))
+ nmap zuz (FastFoldUpdate)
+endif
+
+for suffix in g:fastfold_fold_command_suffixes
+ execute 'nnoremap z'.suffix.' :call UpdateWin(0)z'.suffix
+endfor
+
+for cmd in g:fastfold_fold_movement_commands
+ exe "nnoremap " . cmd. " ':call UpdateWin(0)'.v:count." . "'".cmd."'"
+ exe "xnoremap " . cmd. " ':call UpdateWin(0)gv'.v:count." . "'".cmd."'"
+ exe "onoremap " . cmd. " ':call UpdateWin(0)' . '\"' . v:register . v:operator . v:count1 . " . "'".cmd."'"
+endfor
+
+augroup FastFold
+ autocmd!
+ autocmd VimEnter * call s:init()
+ autocmd BufEnter,WinEnter *
+ \ if !exists('b:last_changedtick') | let b:last_changedtick = b:changedtick | endif
+augroup end
+
+function! s:init()
+ call s:UpdateTab()
+ augroup FastFoldEnter
+ autocmd!
+ " Make &l:foldmethod local to Buffer and NOT Window.
+ autocmd BufEnter,WinEnter *
+ \ if exists('b:lastfdm') | let w:lastfdm = b:lastfdm | call s:LeaveWin() | call s:EnterWin() | endif
+ autocmd BufLeave,WinLeave *
+ \ call s:LeaveWin() | call s:EnterWin() |
+ \ if exists('w:lastfdm') | let b:lastfdm = w:lastfdm |
+ \ elseif exists('b:lastfdm') | unlet b:lastfdm | endif
+
+ autocmd BufEnter,WinEnter *
+ \ if &l:foldmethod isnot# 'diff' && exists('b:predifffdm') | call s:UpdateBuf(0) | endif
+ autocmd BufLeave,WinLeave *
+ \ if exists('w:predifffdm') | let b:predifffdm = w:predifffdm |
+ \ elseif exists('b:predifffdm') | unlet b:predifffdm | endif
+
+ " UpdateBuf/Win(1) = skip if another session is still loading.
+ autocmd TabEnter * call s:UpdateTab()
+
+ " BufWinEnter = to change &l:foldmethod by modelines.
+ autocmd BufWinEnter,FileType * call s:UpdateWin(1)
+ " So that FastFold functions correctly after :loadview.
+ autocmd SessionLoadPost * call s:UpdateWin(0)
+
+ " Update folds on reload.
+ autocmd BufReadPost *
+ \ if !exists('b:already_loaded') | let b:already_loaded = 1 |
+ \ else | call s:UpdateBuf(0) | endif
+ " Update folds on saving.
+ if g:fastfold_savehook
+ autocmd BufWritePost * call s:UpdateBuf(0)
+ endif
+ if g:fastfold_fdmhook
+ if exists('##OptionSet')
+ autocmd OptionSet foldmethod call s:UpdateBuf(0)
+ endif
+ endif
+ augroup end
+endfunction
+
+" ------------------------------------------------------------------------------
+let &cpo= s:keepcpo
+unlet s:keepcpo
diff --git a/vim/plugins/GoldenView/.gitignore b/vim/plugins/GoldenView/.gitignore
new file mode 100644
index 0000000..c4c4ffc
--- /dev/null
+++ b/vim/plugins/GoldenView/.gitignore
@@ -0,0 +1 @@
+*.zip
diff --git a/vim/plugins/GoldenView/.vclog b/vim/plugins/GoldenView/.vclog
new file mode 100644
index 0000000..796c237
--- /dev/null
+++ b/vim/plugins/GoldenView/.vclog
@@ -0,0 +1,31 @@
+# Heuristics used by VCLog itself.
+
+type :major, 3, "Major Enhancements"
+type :minor, 2, "Minor Enhancements"
+type :bug, 1, "Bug Fixes"
+type :fix, 1, "Bug Fixes"
+type :update, 0, "Nominal Changes"
+type :doc, -1, "Documentation Changes"
+type :test, -1, "Test/Spec Adjustments"
+type :admin, -2, "Administrative Changes"
+type :log, -3, "Just a record"
+
+
+on Regexp.union(/^(? \w+):/, /^\[(?\w+)\]/) do |commit, md|
+ type = md[:type].to_sym
+ commit.type = type
+ commit.message = commit.message.sub(md[0],'').strip
+end
+
+on /updated? (README\.md|PROFILE|PACKAGE|VERSION|Manifest\.txt)/ do |commit|
+ commit.type = :admin
+end
+
+on /(bump|bumped|prepare) version/ do |commit|
+ commit.type = :admin
+end
+
+colors :grey, :blue, :cyan, :green, :yellow, :red, [:red, :bold]
+
+
+# vim: set ft=ruby ts=2 sw=2 tw=78 fmr=[[[,]]] fdm=syntax :
diff --git a/vim/plugins/GoldenView/GoldenView.Vim.vimup b/vim/plugins/GoldenView/GoldenView.Vim.vimup
new file mode 100644
index 0000000..7b8d7d2
--- /dev/null
+++ b/vim/plugins/GoldenView/GoldenView.Vim.vimup
@@ -0,0 +1,124 @@
+script_name: GoldenView.Vim
+script_id: '4529'
+script_type: utility
+script_package: '{script_name}-{version}.zip'
+required_vim_version: '7.3'
+summary: Always have a nice view for vim split windows
+
+detailed_description: |
+
+ Please goto homepage for a better view of the introduction.
+
+ Homepage: http://zhaocai.github.io/GoldenView.Vim/
+ Screencast: http://dl.dropboxusercontent.com/u/1897501/Screencasts/GoldenView.gif
+
+
+ If you like it, please star or fork in https://github.com/zhaocai/GoldenView.Vim so that more people may find it.
+
+
+
+
+
+
+ >>> Introduction:
+
+ The initial motive for GoldenView comes from the frustration of using other vim plugins to autoresize split windows. The idea is deadly simple and very useful: resize the focused window to a proper size. However, in practice, many hiccups makes autoresizing not a smooth experience. Below are a list of issues I am trying to solve:
+
+ First and the most important one, autoresizing should play nicely with existing plugins like tagbar, vimfiler, unite, VOoM, quickfix, undotree, gundo, etc. These windows should manage there own window size.
+
+ Second, autoresizing should take care of the other windows too. Resizing the focused window may cause the other windows become too small. When you have 4+ split windows, autoresizing may just make a mess out of it.
+
+
+
+
+ >>> Features:
+
+ GoldenView has preliminarily solved the issues described above. It also provides other features. Bascally, it does two things:
+
+ 1. Autoresizing
+
+ First of all, it automatically resize the focused split window to a "golden" view based on golden ratio and textwidth.
+
+ 2. Tiled Windows Management
+
+ Second, it maps a single key ( by default) to nicely split windows to tiled windows.
+
+ ====+==============+============+===+
+ | | | | |
+ | F | | S1 | T |
+ | I | +------------| A |
+ | L | MAIN PANE | S2 | G |
+ | E | +------------+ B |
+ | R | | S3 | A |
+ | | | | |
+ +===+==============+============+===+
+
+ To get this view, just hit 4 times. or, if you have a large monitor, you may get tiled windows below.
+
+ +===+==============+==============+============+===+
+ | | | | | |
+ | F | | | S1 | T |
+ | I | | +------------| A |
+ | L | MAIN PANE | M2 | S2 | G |
+ | E | | +------------+ B |
+ | R | | | S3 | A |
+ | | | | | |
+ +===+==============+==============+============+===+
+
+
+ To quickly switch between those windows, a few keys are mapped to
+
+ - Focuse to the main window
+ - Switch with the largest, smallest, etc.
+ - Jump to next and previous window
+
+ Requirements:
+ - Vim 7.3 or later
+
+install_details: |
+ http://zhaocai.github.io/GoldenView.Vim/
+
+versions:
+- '1.3.6': |
+ - Maintenance update
+- '1.3.5': |
+ - Fix for issue #5 (github).
+ - Fix for Dirdiff, FencView
+ - Improve tracing
+
+- '1.3.0': |
+ - Diff mode auto-resizing
+ - refactor autocmd function: tweak restore behavior
+
+- '1.2.2': |
+ Improve documents and small bug fixes,
+ Load guard for #4 (github)
+
+- '1.2.0': |
+ add restore rule for some special buffers, which solves all the hiccups I could identify so far.
+
+- '1.1.2': |
+ Improve documents, fix load sequence
+
+- '1.1.1': |
+ Improve documents, fix zl library load
+
+- '1.1.0': |
+ - 3 Major Enhancements
+ * add WinLeave event into account. This version works perfectly.
+ * fix various hiccups caused by winleave
+ * use ignore rules from zl.vim
+ - 4 Minor Enhancements
+ * add mapping to switch to main pane. [minor] speed up buffer switch with noautocmd
+ * include zl.vim into source code
+ * tune for autocmd sequence
+ * treat winfixwidth and winfixheight separately
+ - 2 Bug Fixes
+ * winleave cause ignored windows resized
+ * cannot let &winminwidth > &winwidth
+ - 2 Nominal Changes
+ * change profile variable scope to s\:
+ * tweak golden ratio for win size
+
+# __END__
+# vim: filetype=yaml
diff --git a/vim/plugins/GoldenView/History.md b/vim/plugins/GoldenView/History.md
new file mode 100644
index 0000000..f30e4aa
--- /dev/null
+++ b/vim/plugins/GoldenView/History.md
@@ -0,0 +1,102 @@
+# RELEASE HISTORY
+
+## V1.3.0 / 2013-04-22
+
+Diff Mode auto resizing (Zhao Cai )
+
+Changes:
+
+* 1 Major Enhancements
+
+ * diff mode auto-resizing.
+
+* 1 Minor Enhancements
+
+ * refactor autocmd function: tweak restore behavior
+
+
+## V1.2.2 / 2013-04-21
+
+Improve documents and small bug fixes,
+Load guard for #4 (github) (Zhao Cai )
+
+Changes:
+
+* 1 Minor Enhancements
+
+ * better tracing
+
+* 1 Bug Fixes
+
+ * load guard for issue #4
+
+ E806: using Float as a String
+
+
+## V1.2.0 / 2013-04-18
+
+ (Zhao Cai )
+
+Changes:
+
+* 1 Major Enhancements
+
+ * add restore rule for some special buffers
+
+* 4 Bug Fixes
+
+ * E36 no enough room to split
+ * issue #2 MRU plugin window
+ * init sequence
+ * zl load guard
+
+
+## V1.1.2 / 2013-04-18
+
+Fix init sequence between zl.vim and GoldenVim (Zhao Cai )
+
+
+## HEAD / 2013-04-23
+
+Current Development (Zhao Cai)
+
+
+## V1.1.1 / 2013-04-18
+
+improve documents, fix zl library load (Zhao Cai )
+
+
+## V1.1.0 / 2013-04-18
+
+ (Zhao Cai )
+
+Changes:
+
+* 3 Major Enhancements
+
+ * add WinLeave event into account. This version works perfectly.
+ * fix various hiccups caused by winleave
+ * use ignore rules from zl.vim
+
+* 4 Minor Enhancements
+
+ * add mapping to switch to main pane. [minor] speed up buffer switch with noautocmd
+ * include zl.vim into source code
+ * tune for autocmd sequence
+ * treat winfixwidth and winfixheight separately
+
+* 2 Bug Fixes
+
+ * winleave cause ignored windows resized
+ * cannot let &winminwidth > &winwidth
+
+* 2 Nominal Changes
+
+ * change profile variable scope to s:
+ * tweak golden ratio for win size
+
+
+## 1.0 / 2012-09-18
+
+ (Zhao Cai )
+
diff --git a/vim/plugins/GoldenView/README.md b/vim/plugins/GoldenView/README.md
new file mode 100644
index 0000000..8373a4f
--- /dev/null
+++ b/vim/plugins/GoldenView/README.md
@@ -0,0 +1,343 @@
+# Always have a nice view for vim split windows
+
+ ------------- - -----------------------------------------------
+ Plugin : GoldenView.vim
+ Author : Zhao Cai
+ EMail : caizhaoff@gmail.com
+ Homepage : http://zhaocai.github.io/GoldenView.Vim/
+ Vim.org : http://www.vim.org/scripts/script.php?script_id=4529
+ Version : 1.3.6
+ Date Created : Tue 18 Sep 2012 05:23:13 PM EDT
+ Last Modified : Mon 22 Apr 2013 05:55:22 PM EDT
+ ------------- - -----------------------------------------------
+
+
+
+The initial motive for [GoldenView][GoldenView] comes from the frustration of using other vim plugins to auto-resize split windows. The idea is deadly simple and very useful: **resize the focused window to a proper size.** However, in practice, many hiccups makes **auto-resizing** not a smooth experience. Below are a list of issues [GoldenView][GoldenView] attempts to solve:
+
+First and the most important one, auto-resizing should play nicely with existing plugins like `tagbar`, `vimfiler`, `unite`, `VOoM`, `quickfix`, `undotree`, `gundo`, etc. These windows should manage there own window size.
+
+Second, auto-resizing should take care of **the other windows** too. Resizing the focused window may cause the other windows become too small. When you have 4+ split windows, auto-resizing may just make a mess out of it.
+
+
+![GoldView Screencast]( http://dl.dropboxusercontent.com/u/1897501/Screencasts/GoldenView.gif )
+
+
+## Features
+
+[GoldenView][GoldenView] has preliminarily solved the issues described above. It also provides other features. Bascally, it does two things:
+
+### 1. AutoResizing
+First of all, it automatically resize the focused split window to a "golden" view based on [golden ratio][golden-ratio-wikipedia] and `textwidth`.
+
+
+### 2. Tiled Windows Management
+
+Second, it maps a single key (`` by default) to nicely split windows to tiled windows.
+
+```
+----+----------------+------------+---+
+| | | | |
+| F | | S1 | T |
+| I | +------------| A |
+| L | | S2 | G |
+| E | MAIN PANE +------------+ B |
+| R | | S3 | A |
+| | | | R |
+| | | | |
++---+----------------+------------+---+
+```
+
+To get this view, just hit `` 4 times. or, if you have a large monitor, you may get tiled windows below.
+
+
+```
+----+---------------+--------------+------------+---+
+| | | | | |
+| F | | | S1 | T |
+| I | | +------------| A |
+| L | | M2 | S2 | G |
+| E | MAIN PANE | +------------+ B |
+| R | | | S3 | A |
+| | | | | B |
+| | | | | |
++---+---------------+--------------+------------+---+
+```
+
+
+To quickly switch between those windows, a few keys are mapped to
+
+- Focus to the main window
+- Switch with the `MAIN PANE`, the largest, smallest, etc.
+- Jump to the next and previous window
+
+
+
+
+
+## Installation
+
+Install [GoldenView][GoldenView] is the *same as installing other vim plugins*. If experienced with vim, you can skim the example below and move to [next section](#quick-start).
+
+
+### **Option A** - With [Plugin Manager][vim-plugin-manager] ( **recommended** )
+
+If you use plugin managers like *Pathogen*, *vundle*, *neobundle*, *vim-addon-manager*, etc., just unarchive the zip file or clone the [GoldenView][GoldenView] repo from `git://github.com/zhaocai/GoldenView.git` into your local plugin installation directory (most likely `~/.vim/bundle/`). Then add corresponding scripts in .vimrc for the bundle manager you are using.
+
+**Example**:
+
+- *neobundle*:
+
+```vim
+ NeoBundle 'zhaocai/GoldenView.Vim' "Always have a nice view for vim split windows
+```
+
+- *vundle*:
+
+```vim
+ Bundle 'zhaocai/GoldenView.Vim'
+```
+
+- *vim-addon-manager*:
+
+```vim
+ call vam#ActivateAddons(['GoldenView.Vim'], {'auto_install' : 1})
+```
+
+
+### **Option B** - Without [Plugin Manager][vim-plugin-manager]
+
+Unarchive the zip file into a directory that is under `runtimepath` of your vim, `~/.vim` for example.
+
+
+## Quick Start
+[GoldenView][GoldenView] should work out of the box without configuration. It should automatically start to resize focused window to [golden ratio][golden-ratio-wikipedia] based on `textwidth` and vim available size. You may start to play with it now.
+
+To get you started, a few default keys are mapped as below:
+
+```vim
+" 1. split to tiled windows
+nmap GoldenViewSplit
+
+" 2. quickly switch current window with the main pane
+" and toggle back
+nmap GoldenViewSwitchMain
+nmap GoldenViewSwitchToggle
+
+" 3. jump to next and previous window
+nmap GoldenViewNext
+nmap GoldenViewPrevious
+
+```
+
+The meaning of those keys are self-explaining. A general workflow would be `GoldenViewSplit` key to quickly and nicely split windows to the layout as below. Then you may open your files.
+
+```
+----+----------------+------------+---+
+| | | | |
+| F | | S1 | T |
+| I | +------------| A |
+| L | | S2 | G |
+| E | MAIN PANE +------------+ B |
+| R | | S3 | A |
+| | | | R |
+| | | | |
++---+----------------+------------+---+
+
+```
+
+To switch `S1` with `MAIN PANE`, in `S1` and hit `GoldenViewSwitchMain`. To switch back, hit `GoldenViewSwitchToggle` in either `MAIN PAIN` or `S1`
+
+#### g:goldenview__enable_default_mapping
+
+Every experienced vim user has a different set of key mappings. If you you are (most likely) unhappy about some of the mappings, map you own keys as below:
+
+```vim
+let g:goldenview__enable_default_mapping = 0
+
+nmap GoldenViewSplit
+" ... and so on
+
+```
+
+#### g:goldenview__enable_at_startup
+
+if you do not want to start auto-resizing automatically, you can put the following script in your vimrc.
+
+```vim
+let g:goldenview__enable_at_startup = 0
+```
+
+## More Commands and Mappings
+
+### `:ToggleGoldenViewAutoResize`
+### `:DisableGoldenViewAutoResize`
+### `:EnableGoldenViewAutoResize`
+
+These commands toggle, enable, and disable GoldenView auto-resizing.
+
+
+### `:GoldenViewResize`
+this command do manual resizing of focused window.
+
+You can also map a key for this as below:
+
+```vim
+nmap GoldenViewResize
+
+```
+
+### `:SwitchGoldenViewMain`
+### `:SwitchGoldenViewLargest`
+### `:SwitchGoldenViewSmallest`
+
+these commands do as it named.
+
+You can also add mappings as below. ( no default keys for these mappings)
+```vim
+nmap GoldenViewSwitchWithLargest
+nmap GoldenViewSwitchWithSmallest
+
+```
+
+Other switch rules can be easily defined. If you have some ideas, please post to [github issue][GoldenViewIssue] for discussion.
+
+
+## Rules
+
+[GoldenView][] defines two rules:
+
+### `g:goldenview__ignore_urule`
+is to "ignore" - allow those special buffers to manage their own window size.
+
+### `g:goldenview__restore_urule`
+is to "restore" - restore window size of some of special buffers.
+
+The `urule` (user rules) are like this, which will be normalize at runtime for faster processing.
+
+```vim
+ \{
+ \ 'filetype' : [
+ \ '' ,
+ \ 'qf' , 'vimpager', 'undotree', 'tagbar',
+ \ 'nerdtree', 'vimshell', 'vimfiler', 'voom' ,
+ \ 'tabman' , 'unite' , 'quickrun', 'Decho' ,
+ \ ],
+ \ 'buftype' : [
+ \ 'nofile' ,
+ \ ],
+ \ 'bufname' : [
+ \ 'GoToFile' , 'diffpanel_\d\+' ,
+ \ '__Gundo_Preview__' , '__Gundo__' ,
+ \ '\[LustyExplorer-Buffers\]' , '\-MiniBufExplorer\-' ,
+ \ '_VOOM\d\+$' , '__Urannotate_\d\+__' ,
+ \ '__MRU_Files__' ,
+ \ ],
+ \},
+
+```
+
+## Profiles
+[GoldenView][] defines two profile:
+
+### `g:goldenview__active_profile`
+defines the functions and preferences to auto resize windows.
+
+### `g:goldenview__reset_profile`
+
+defines reset preferences to restore everything to default.
+
+
+`function GoldenView#ExtendProfile()` is provided to customize preferences.
+
+For more details, please read the source code! :)
+
+
+
+## Troubleshooting:
+
+### Please do not resize me!
+
+[GoldenView][] maintains rules for "common" cases. But vim offers a great variety of plugins which defines buffers for special purposes. If you find some special buffers which is supposed to not be auto-resized. Please check `g:goldenview__ignore_urule`. You may extend the `g:goldenview__active_profile` yourself or post the issue to [github issue][GoldenViewIssue] for adding it to builtin support.
+
+
+
+### [minibufexpl.vim][] takes 5+ lines
+
+Check my fork [minibufexpl.vim][] to see if it is working for you. I have send pull request to the origin repo.
+
+
+### I cannot resize window height to < 7
+
+This is features. As mentioned in the [Introduction](#always-have-a-nice-view-for-vim-split-windows) section, there is no normal cases to have a normal window too small. For special cases like [minibufexpl.vim][], it can be handled case by case.
+
+
+However, if you really want to have small windows. It can be done by :
+
+```vim
+
+" Extend a new profile named 'small-height' from default profile.
+"
+" 1. Change "2" to your desire minimal height
+" 2. Change "small-height" to the profile name you like
+" ---------------------------------------------------------------
+call GoldenView#ExtendProfile('small-height', {
+\ 'other_window_winheight' : 2 ,
+\ })
+
+let g:goldenview__active_profile = 'small-height'
+```
+
+(refer to issue #5)
+
+### I still have Issues:
+
+If you have any issues, please post it to [github issue][GoldenViewIssue] for discussion.
+
+Remember to run the following command and post the results.
+```vim
+echo GoldenView#Info()
+```
+
+
+## Contributors
+
+
+
+
+## RELEASE HISTORY
+
+Refer to [History.md]( https://github.com/zhaocai/GoldenView.Vim/blob/master/History.md )
+
+
+
+
+## LICENSE:
+
+Copyright (c) 2013 Zhao Cai \
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation, either version 3 of the License, or (at your option)
+any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program. If not, see .
+
+
+
+
+[dwm]: http://www.vim.org/scripts/script.php?script_id=4186
+[golden-ratio-plugin]: http://www.vim.org/scripts/script.php?script_id=3690
+[golden-ratio-wikipedia]: http://en.wikipedia.org/wiki/Golden_ratio
+[zl]: https://github.com/zhaocai/zl.vim "zl.vim vim script library"
+[GoldenView]: http://zhaocai.github.io/GoldenView.Vim/ "GoldenView Homepage"
+[GoldenViewCode]: https://github.com/zhaocai/GoldenView.Vim "GoldenView Vim Plugin"
+[vim-plugin-manager]: http://vim-scripts.org/vim/tools.html "Vim Plugin Manangers"
+[GoldenViewIssue]: https://github.com/zhaocai/GoldenView.Vim/issues "GoldenView Issue Track"
+[minibufexpl.vim]: https://github.com/zhaocai/minibufexpl.vim
+
diff --git a/vim/plugins/GoldenView/Rakefile b/vim/plugins/GoldenView/Rakefile
new file mode 100644
index 0000000..208e8aa
--- /dev/null
+++ b/vim/plugins/GoldenView/Rakefile
@@ -0,0 +1,54 @@
+require 'facets/string'
+require 'rake/clean'
+
+project_name = __FILE__.pathmap("%-1d")
+
+def version
+ project_readme = FileList['README.*']
+ version_re = /Version \s+ : \s* (? \d\.\d\.\d) $/x
+
+ project_readme.each { |f|
+ File.read(f).mscan(version_re).each { |m|
+ return m[:version]
+ }
+ }
+end
+
+desc "version"
+task :version => [] do
+ puts version
+end
+
+
+
+
+desc "zip for distribution"
+task :zip => [] do
+ sh "zip -r #{project_name}-#{version}.zip autoload plugin doc README.md --exclude='*/.DS_Store'"
+end
+
+CLEAN.include('*.zip')
+
+
+
+
+vimup = File.expand_path('~/Developer/Vim/Bundle/tool/vimup/vimup')
+vimorg = File.expand_path('~/.apps/vimup/vim.org.yml')
+
+namespace :vimup do
+ desc "new vim.org script"
+ task :new do
+ sh vimup, 'new-script', project_name, vimorg
+ end
+
+ desc "updae vim.org script"
+ task :release => [:zip] do
+ sh vimup, 'update-script', project_name, vimorg
+ task(:clean).invoke
+ end
+
+ desc "updae vim.org script detail"
+ task :details do
+ sh vimup, 'update-details', project_name, vimorg
+ end
+end
diff --git a/vim/plugins/GoldenView/autoload/GoldenView.vim b/vim/plugins/GoldenView/autoload/GoldenView.vim
new file mode 100644
index 0000000..7203dd0
--- /dev/null
+++ b/vim/plugins/GoldenView/autoload/GoldenView.vim
@@ -0,0 +1,529 @@
+" =============== ============================================================
+" Name : GoldenView
+" Description : Always have a nice view for vim split windows
+" Author : Zhao Cai
+" HomePage : https://github.com/zhaocai/GoldenView.Vim
+" Date Created : Tue 18 Sep 2012 10:25:23 AM EDT
+" Last Modified : Fri 19 Oct 2012 05:55:17 PM EDT
+" Tag : [ vim, window, golden-ratio ]
+" Copyright : © 2012 by Zhao Cai,
+" Released under current GPL license.
+" =============== ============================================================
+
+" ============================================================================
+" Initialization And Profile: ⟨⟨⟨1
+" ============================================================================
+function! GoldenView#ExtendProfile(name, def)
+ let default = get(s:goldenview__profile, a:name,
+ \ copy(s:goldenview__profile['default']))
+
+ let s:goldenview__profile[a:name] = extend(default, a:def)
+endfunction
+
+function! GoldenView#Init()
+ if exists('g:goldenview__initialized') && g:goldenview__initialized == 1
+ return
+ endif
+
+ let s:goldenview__golden_ratio = 1.618
+ lockvar s:goldenview__golden_ratio
+
+ set equalalways
+ set eadirection=ver
+
+
+ let s:goldenview__profile = {
+ \ 'reset' : {
+ \ 'focus_window_winheight' : &winheight ,
+ \ 'focus_window_winwidth' : &winwidth ,
+ \ 'other_window_winheight' : &winminheight ,
+ \ 'other_window_winwidth' : &winminwidth ,
+ \ },
+ \ 'default' : {
+ \ 'focus_window_winheight' : function('GoldenView#GoldenHeight') ,
+ \ 'focus_window_winwidth' : function('GoldenView#TextWidth') ,
+ \ 'other_window_winheight' : function('GoldenView#GoldenMinHeight') ,
+ \ 'other_window_winwidth' : function('GoldenView#GoldenMinWidth') ,
+ \ },
+ \
+ \ }
+
+ call GoldenView#ExtendProfile('golden-ratio', {
+ \ 'focus_window_winwidth' : function('GoldenView#GoldenWidth') ,
+ \ })
+
+ let s:goldenview__ignore_nrule = GoldenView#zl#rule#norm(
+ \ g:goldenview__ignore_urule, {
+ \ 'logic' : 'or',
+ \ }
+ \ )
+
+ let s:goldenview__restore_nrule = GoldenView#zl#rule#norm(
+ \ g:goldenview__restore_urule, {
+ \ 'logic' : 'or',
+ \ }
+ \ )
+ let g:goldenview__initialized = 1
+endfunction
+
+
+
+" ============================================================================
+" Auto Resize: ⟨⟨⟨1
+" ============================================================================
+function! GoldenView#ToggleAutoResize()
+ if exists('s:goldenview__auto_resize') && s:goldenview__auto_resize == 1
+ call GoldenView#DisableAutoResize()
+ call GoldenView#zl#print#moremsg('GoldenView Auto Resize: Off')
+ else
+ call GoldenView#EnableAutoResize()
+ call GoldenView#zl#print#moremsg('GoldenView Auto Resize: On')
+ endif
+endfunction
+
+
+function! GoldenView#EnableAutoResize()
+
+ call GoldenView#Init()
+
+ let active_profile = s:goldenview__profile[g:goldenview__active_profile]
+ call s:set_focus_window(active_profile)
+ call s:set_other_window(active_profile)
+
+ augroup GoldenView
+ au!
+ " Enter
+ autocmd VimResized * call GoldenView#Enter({'event' : 'VimResized'})
+ autocmd BufWinEnter * call GoldenView#Enter({'event' : 'BufWinEnter'})
+ autocmd WinEnter * call GoldenView#Enter({'event' : 'WinEnter'})
+
+ " Leave
+ autocmd WinLeave * call GoldenView#Leave()
+ augroup END
+ let s:goldenview__auto_resize = 1
+
+endfunction
+
+
+function! GoldenView#DisableAutoResize()
+ au! GoldenView
+ call GoldenView#ResetResize()
+
+ let s:goldenview__auto_resize = 0
+endfunction
+
+function! GoldenView#Leave(...)
+
+ " GoldenViewTrace 'WinLeave', a:000
+
+ " Do nothing if there is no split window
+ " --------------------------------------
+ if winnr('$') < 2
+ return
+ endif
+
+ call GoldenView#Diff()
+
+ if GoldenView#IsIgnore()
+ " Record the last size of ignored windows. Restore there sizes if affected
+ " by GoldenView.
+
+ " For new split, the size does not count, which is highly possible
+ " to be resized later. Should use the size with WinLeave event.
+ "
+ call GoldenView#initialize_tab_variable()
+ let t:goldenview['bufs'][bufnr('%')] = {
+ \ 'winnr' : winnr() ,
+ \ 'winwidth' : winwidth(0) ,
+ \ 'winheight' : winheight(0) ,
+ \ }
+ let t:goldenview['cmdheight'] = &cmdheight
+ end
+endfunction
+
+function! GoldenView#Diff()
+ " Diff Mode: auto-resize to equal size
+ if ! exists('b:goldenview_diff')
+ let b:goldenview_diff = 0
+ endif
+ if &diff
+ if ! b:goldenview_diff
+ for nr in GoldenView#zl#list#uniq(tabpagebuflist())
+ if getbufvar(nr, '&diff')
+ call setbufvar(nr, 'goldenview_diff', 1)
+ endif
+ endfor
+ exec 'wincmd ='
+ endif
+ return 1
+ else
+ if b:goldenview_diff
+ let b:goldenview_diff = 0
+ endif
+ endif
+ return 0
+endfunction
+
+function! GoldenView#Enter(...)
+
+ if GoldenView#Diff()
+ return
+ endif
+
+ if &lazyredraw
+ return
+ endif
+
+ return call('GoldenView#Resize', a:000)
+endfunction
+
+function! GoldenView#Resize(...)
+ "--------- ------------------------------------------------
+ " Desc : resize focused window
+ "
+ " Args : {'event' : event}
+ " Return : none
+ "
+ " Raise : none from this function
+ "
+ " Pitfall :
+ " - Can not set winminwith > winwidth
+ " - AutoCmd Sequence:
+ " - `:copen` :
+ " 1. WinEnter (&ft inherited from last buffer)
+ " 2. BufWinEnter (&ft == '')
+ " 3. BufWinEnter (&ft == 'qf', set winfixheight)
+ " - `:split`
+ " 1. WinLeave current window
+ " 2. WinEnter new split window with current buffer
+ " 3. `split` return, user script may change the buffer
+ " type, width, etc.
+ "
+ "
+ "--------- ------------------------------------------------
+
+ " GoldenViewTrace 'GoldenView Resize', a:000
+
+ let opts = {'is_force' : 0}
+ if a:0 >= 1 && GoldenView#zl#var#is_dict(a:1)
+ call extend(opts, a:1)
+ endif
+
+ let winnr_diff = s:winnr_diff()
+ if winnr_diff > 0
+ " Plus Split Window:
+ " ++++++++++++++++++
+
+ " GoldenViewTrace '+++ winnr +++', a:000
+ return
+
+ elseif winnr_diff < 0
+ " Minus Split Window:
+ " -------------------
+
+ call GoldenView#initialize_tab_variable()
+ let saved_lazyredraw = &lazyredraw
+ set lazyredraw
+ let current_winnr = winnr()
+
+ " Restore: original size based on "g:goldenview__restore_urule"
+ " ------------------------------------------------------------
+ for winnr in range(1, winnr('$'))
+ let bufnr = winbufnr(winnr)
+ let bufsaved = get(t:goldenview['bufs'], bufnr, {})
+
+ " Ignored Case: same buffer displayed in multiply windows
+ " -------------------------------------------------------
+ if ! empty(bufsaved) && bufsaved['winnr'] == winnr
+ silent noautocmd exec winnr 'wincmd w'
+
+ if GoldenView#IsRestore()
+ silent exec 'vertical resize ' . bufsaved['winwidth']
+ silent exec 'resize ' . bufsaved['winheight']
+
+ " GoldenViewTrace 'restore buffer:'. nr, a:000
+ endif
+ endif
+ endfor
+
+ if &cmdheight != t:goldenview['cmdheight']
+ exec 'set cmdheight=' . t:goldenview['cmdheight']
+ endif
+
+ silent exec current_winnr 'wincmd w'
+
+ redraw
+ let &lazyredraw = saved_lazyredraw
+
+ " GoldenViewTrace '--- winnr ---', a:000
+ return
+ endif
+
+ if ! opts['is_force']
+
+ " Do nothing if there is no split window
+ if winnr('$') < 2
+ return
+ endif
+
+ if GoldenView#IsIgnore()
+ " GoldenViewTrace 'Ignored', a:000
+ return
+ endif
+
+ endif
+
+
+ let active_profile = s:goldenview__profile[g:goldenview__active_profile]
+ call s:set_focus_window(active_profile)
+ " GoldenViewTrace 'Set Focuse', a:000
+
+
+
+ " reset focus windows minimal size
+ let &winheight = &winminheight
+ let &winwidth = &winminwidth
+
+ " GoldenViewTrace 'Reset Focus', a:000
+endfunction
+
+function! GoldenView#IsIgnore()
+ return GoldenView#zl#rule#is_true(s:goldenview__ignore_nrule)
+endfunction
+
+function! GoldenView#IsRestore()
+ return GoldenView#zl#rule#is_true(s:goldenview__restore_nrule)
+endfunction
+
+
+function! GoldenView#ResetResize()
+ let reset_profile = s:goldenview__profile[g:goldenview__reset_profile]
+ call s:set_other_window(reset_profile, {'force' : 1})
+ call s:set_focus_window(reset_profile, {'force' : 1})
+endfunction
+
+
+function! GoldenView#GoldenHeight(...)
+ return float2nr(&lines / s:goldenview__golden_ratio)
+endfunction
+
+
+function! GoldenView#GoldenWidth(...)
+ return float2nr(&columns / s:goldenview__golden_ratio)
+endfunction
+
+
+function! GoldenView#GoldenMinHeight(...)
+ return float2nr(GoldenView#GoldenHeight()/(5*s:goldenview__golden_ratio))
+endfunction
+
+
+function! GoldenView#GoldenMinWidth(...)
+ return float2nr(GoldenView#GoldenWidth()/(3*s:goldenview__golden_ratio))
+endfunction
+
+
+function! GoldenView#TextWidth(...)
+ let tw = &l:textwidth
+
+ if tw != 0
+ return float2nr(tw * 4/3)
+ else
+ let tw = float2nr(80 * 4/3)
+ let gw = GoldenView#GoldenWidth()
+ return tw > gw ? gw : tw
+ endif
+endfunction
+
+
+function! s:set_focus_window(profile,...)
+ let opts = {
+ \ 'force' : 0
+ \ }
+ if a:0 >= 1 && GoldenView#zl#var#is_dict(a:1)
+ call extend(opts, a:1)
+ endif
+
+ try
+ if !&winfixwidth || opts['force']
+ let &winwidth =
+ \ s:eval(a:profile, a:profile['focus_window_winwidth'])
+ endif
+ if !&winfixheight || opts['force']
+ let &winheight =
+ \ s:eval(a:profile, a:profile['focus_window_winheight'])
+ endif
+ catch /^Vim\%((\a\+)\)\=:E36/ " Not enough room
+ call GoldenView#zl#print#warning('GoldenView: ' . v:exception)
+ endtry
+endfunction
+
+function! s:set_other_window(profile,...)
+ let opts = {
+ \ 'force' : 0
+ \ }
+ if a:0 >= 1 && GoldenView#zl#var#is_dict(a:1)
+ call extend(opts, a:1)
+ endif
+
+ try
+ if !&winfixwidth || opts['force']
+ let &winminwidth =
+ \ s:eval(a:profile, a:profile['other_window_winwidth'])
+ endif
+ if !&winfixheight || opts['force']
+ let &winminheight =
+ \ s:eval(a:profile, a:profile['other_window_winheight'])
+ endif
+ catch /^Vim\%((\a\+)\)\=:E36/ " Not enough room
+ call GoldenView#zl#print#warning('GoldenView: ' . v:exception)
+ endtry
+endfunction
+
+
+
+
+
+" ============================================================================
+" Split: ⟨⟨⟨1
+" ============================================================================
+function! GoldenView#Split()
+ call GoldenView#zl#window#split_nicely()
+endfunction
+
+
+
+" ============================================================================
+" Switch: ⟨⟨⟨1
+" ============================================================================
+function! GoldenView#SwitchMain(...)
+ let opts = {
+ \ 'from_bufnr' : bufnr('%') ,
+ \}
+ if a:0 >= 1 && type(a:1) == type({})
+ call extend(opts, a:1)
+ endif
+
+ let window_count = winnr('$')
+ if window_count < 2
+ return
+ endif
+
+ let current_winnr = winnr()
+ let switched = 0
+
+ let saved_lazyredraw = &lazyredraw
+ set lazyredraw
+ for i in range(1, window_count)
+ silent noautocmd exec i 'wincmd w'
+
+ if ! GoldenView#IsIgnore()
+ let switched = GoldenView#zl#window#switch_buffer(
+ \ opts['from_bufnr'], winbufnr(i))
+ break
+ endif
+ endfor
+
+ redraw
+ let &lazyredraw = saved_lazyredraw
+
+ if switched
+ call GoldenView#Resize({'event' : 'WinEnter'})
+ else
+ silent noautocmd exec current_winnr 'wincmd w'
+ endif
+endfunction
+
+" ============================================================================
+" Helper Functions: ⟨⟨⟨1
+" ============================================================================
+
+function! s:eval(profile, val)
+ if GoldenView#zl#var#is_number(a:val)
+ return a:val
+ elseif GoldenView#zl#var#is_funcref(a:val)
+ return a:val(a:profile)
+ else
+ try
+ return eval(a:val)
+ catch /^Vim\%((\a\+)\)\=:E/
+ throw 'GoldenView: invalid profile value type!'
+ endtry
+ endif
+endfunction
+
+function! GoldenView#initialize_tab_variable()
+ if !exists('t:goldenview')
+ let t:goldenview = {
+ \ 'nrwin' : winnr('$') ,
+ \ 'cmdheight' : &cmdheight ,
+ \ 'bufs' : {} ,
+ \ }
+ endif
+endfunction
+
+function! s:winnr_diff()
+ call GoldenView#initialize_tab_variable()
+
+ let nrwin = winnr('$')
+ if nrwin != t:goldenview['nrwin']
+ let diff = nrwin - t:goldenview['nrwin']
+ let t:goldenview['nrwin'] = nrwin
+ return diff
+ else
+ return 0
+ endif
+endfunction
+
+
+
+
+" ============================================================================
+" Debug: ⟨⟨⟨1
+" ============================================================================
+
+function! GoldenView#Info()
+ return {
+ \ 'buffer' : {
+ \ 'filetype' : &ft ,
+ \ 'buftype' : &buftype ,
+ \ 'bufname' : bufname('%') ,
+ \ 'winwidth' : winwidth(0) ,
+ \ 'winheight' : winheight(0) ,
+ \ },
+ \ 'goldenview' : get(t:, 'goldenview', GoldenView#initialize_tab_variable()),
+ \ 'setting' : {
+ \ 'win_count' : winnr('$') ,
+ \ 'lazyredraw' : &lazyredraw ,
+ \ 'cmdheight' : &cmdheight ,
+ \ 'winfixwidth' : &winfixwidth ,
+ \ 'winfixheight' : &winfixheight ,
+ \ 'winwidth' : &winwidth ,
+ \ 'winminwidth' : &winminwidth ,
+ \ 'winheight' : &winheight ,
+ \ 'winminheight' : &winminheight ,
+ \ }
+ \}
+endfunction
+
+
+function! GoldenView#Trace(...)
+ " -------- - -----------------------------------------------
+ " Example : >
+ " GoldenViewTrace 'WinLeave', a:000
+ " -------- - -----------------------------------------------
+
+ call GoldenView#initialize_tab_variable()
+ let info = GoldenView#Info()
+ let info['context'] = get(g:,'GoldenView_zl_context','')
+ let info['args'] = a:000
+ call GoldenView#zl#log#debug(info)
+endfunction
+
+command! -nargs=* -complete=expression GoldenViewTrace
+ \ exec GoldenView#zl#vim#context() | call GoldenView#Trace()
+
+" ============================================================================
+" Modeline: ⟨⟨⟨1
+" ============================================================================
+" vim: set ft=vim ts=4 sw=4 tw=78 fdm=syntax fmr=⟨⟨⟨,⟩⟩⟩ fdl=1 :
diff --git a/vim/plugins/GoldenView/autoload/GoldenView/zl/list.vim b/vim/plugins/GoldenView/autoload/GoldenView/zl/list.vim
new file mode 100644
index 0000000..be0f944
--- /dev/null
+++ b/vim/plugins/GoldenView/autoload/GoldenView/zl/list.vim
@@ -0,0 +1,126 @@
+" =============== ============================================================
+" Synopsis : list helper functions
+" Author : Zhao Cai
+" HomePage : https://github.com/zhaocai/zl.vim
+" Version : 0.1
+" Date Created : Sat 03 Sep 2011 03:54:00 PM EDT
+" Last Modified : Thu 20 Sep 2012 04:25:10 PM EDT
+" Tag : [ vim, list ]
+" Copyright : (c) 2012 by Zhao Cai,
+" Released under current GPL license.
+" =============== ============================================================
+
+
+
+" ============================================================================
+" Sort: ⟨⟨⟨1
+" ============================================================================
+
+function! GoldenView#zl#list#unique_sort(list, ...)
+ "--------- ------------------------------------------------
+ " Args : list, [func]
+ " Return : unique sorted list
+ " Raise :
+ "
+ " Refer : http://vim.wikia.com/wiki/Unique_sorting
+ "--------- ------------------------------------------------
+ let list = copy(a:list)
+
+ if exists('a:1') && type(a:1) == type(function('function'))
+ call sort(list, a:1)
+ else
+ call sort(list)
+ endif
+ if len(list) <= 1 | return list | endif
+ let result = [ list[0] ]
+ let last = list[0]
+ let i = 1
+ while i < len(list)
+ if last != list[i]
+ let last = list[i]
+ call add(result, last)
+ endif
+ let i += 1
+ endwhile
+ return result
+endfunction
+
+
+
+function! GoldenView#zl#list#sort_by(list, expr)
+ "--------- ------------------------------------------------
+ " Desc : sort list by expr
+ "
+ " Args : v:val is used in {expr}
+ " Return : sroted list
+ " Raise :
+ "
+ " Example : >
+ " let list = [{'a' : 1}, {'a' : 22}, {'a' : 3}]
+ " echo GoldenView#zl#list#sort_by(list, 'v:val["a"]')
+ "
+ " Refer : vital.vim
+ "--------- ------------------------------------------------
+
+ let pairs = map(a:list, printf('[v:val, %s]', a:expr))
+ return map(GoldenView#zl#list#sort(pairs,
+ \ 'a:a[1] ==# a:b[1] ? 0 : a:a[1] ># a:b[1] ? 1 : -1'),
+ \ 'v:val[0]')
+endfunction
+
+function! s:_compare(a, b)
+ return eval(s:expr)
+endfunction
+
+function! GoldenView#zl#list#sort(list, expr)
+ "--------- ------------------------------------------------
+ " Desc : sort list with expr to compare two values.
+ "
+ " Args : a:a and a:b can be used in {expr}
+ " Return : sroted list
+ " Raise :
+ "
+ " Refer : vital.vim
+ "--------- ------------------------------------------------
+
+ if type(a:expr) == type(function('function'))
+ return sort(a:list, a:expr)
+ endif
+ let s:expr = a:expr
+ return sort(a:list, 's:_compare')
+endfunction
+
+
+function! GoldenView#zl#list#uniq(list, ...)
+ let list = a:0
+ \ ? map(copy(a:list), printf('[v:val, %s]', a:1))
+ \ : copy(a:list)
+ let i = 0
+ let seen = {}
+ while i < len(list)
+ let key = string(a:0 ? list[i][1] : list[i])
+ if has_key(seen, key)
+ call remove(list, i)
+ else
+ let seen[key] = 1
+ let i += 1
+ endif
+ endwhile
+ return a:0 ? map(list, 'v:val[0]') : list
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+" ============================================================================
+" Modeline: ⟨⟨⟨1
+" ============================================================================
+" vim: set ft=vim ts=4 sw=4 tw=78 fdm=marker fmr=⟨⟨⟨,⟩⟩⟩ fdl=1 :
diff --git a/vim/plugins/GoldenView/autoload/GoldenView/zl/log.vim b/vim/plugins/GoldenView/autoload/GoldenView/zl/log.vim
new file mode 100644
index 0000000..ffc5980
--- /dev/null
+++ b/vim/plugins/GoldenView/autoload/GoldenView/zl/log.vim
@@ -0,0 +1,310 @@
+" =============== ============================================================
+" Name : log.vim
+" Synopsis : vim script library: log
+" Author : Zhao Cai
+" HomePage : https://github.com/zhaocai/zl.vim
+" Date Created : Sat 03 Sep 2012 03:54:00 PM EDT
+" Last Modified : Sat 27 Apr 2013 06:58:13 PM EDT
+" Tag : [ vim, log ]
+" Copyright : © 2012 by Zhao Cai,
+" Released under current GPL license.
+" =============== ============================================================
+
+
+
+
+
+
+
+" ============================================================================
+" Logger: [[[1
+" ============================================================================
+
+
+if !has('ruby')
+
+ function! GoldenView#zl#log#info(...)
+ call GoldenView#zl#print#warning("GoldenView(log): require vim to be built with +ruby.")
+ endfunction
+ function! GoldenView#zl#log#level_info(...)
+ call GoldenView#zl#print#warning("GoldenView(log): require vim to be built with +ruby.")
+ endfunction
+
+
+ function! GoldenView#zl#log#debug(...)
+ call GoldenView#zl#print#warning("GoldenView(log): require vim to be built with +ruby.")
+ endfunction
+ function! GoldenView#zl#log#level_debug(...)
+ call GoldenView#zl#print#warning("GoldenView(log): require vim to be built with +ruby.")
+ endfunction
+
+
+ function! GoldenView#zl#log#warn(...)
+ call GoldenView#zl#print#warning("GoldenView(log): require vim to be built with +ruby.")
+ endfunction
+ function! GoldenView#zl#log#level_warn(...)
+ call GoldenView#zl#print#warning("GoldenView(log): require vim to be built with +ruby.")
+ endfunction
+
+
+ function! GoldenView#zl#log#error(...)
+ call GoldenView#zl#print#warning("GoldenView(log): require vim to be built with +ruby.")
+ endfunction
+ function! GoldenView#zl#log#level_error(...)
+ call GoldenView#zl#print#warning("GoldenView(log): require vim to be built with +ruby.")
+ endfunction
+
+
+ function! GoldenView#zl#log#fatal(...)
+ call GoldenView#zl#print#warning("GoldenView(log): require vim to be built with +ruby.")
+ endfunction
+ function! GoldenView#zl#log#level_fatal(...)
+ call GoldenView#zl#print#warning("GoldenView(log): require vim to be built with +ruby.")
+ endfunction
+
+
+else
+
+
+function! get_logfile()
+ if GoldenView#zl#sys#is_mac()
+ let logfile = expand('~/Library/Logs/vim/GoldenView.log')
+ elseif GoldenView#zl#sys#is_win()
+ let logfile = "C:/windows/temp/vim/GoldenView.log"
+ elseif GoldenView#zl#sys#is_linux()
+ let logfile = expand('/var/log/vim/GoldenView.log')
+ else
+ let logfile = input('Please Input logfile: ', '/var/log/vim/GoldenView.log', 'file')
+ endif
+ let log_dir = fnamemodify(logfile, ':p:h')
+ if !isdirectory(log_dir)
+ call mkdir(log_dir, 'p')
+ endif
+ return logfile
+endfunction
+
+let s:GoldenView_zl_ruby_loaded = 0
+function! setup_ruby()
+ if s:GoldenView_zl_ruby_loaded == 0
+
+ let logfile = get_logfile()
+
+ ruby << __RUBY__
+# ($LOAD_PATH << File.join(Vim.evaluate('g:GoldenView_zl_autoload_path'), 'lib')).uniq!
+require "logger"
+require "awesome_print"
+
+$GoldenView_zl_logger = Logger.new(Vim.evaluate('logfile'), 'weekly')
+__RUBY__
+
+ autocmd VimLeavePre * call cleanup_ruby()
+ let s:GoldenView_zl_ruby_loaded = 1
+ endif
+endfunction
+
+function! cleanup_ruby()
+ if s:GoldenView_zl_ruby_loaded
+ ruby $GoldenView_zl_logger.close
+ endif
+endfunction
+
+
+" --------------------------------%>--------------------------------
+" Example:
+" function! Trace(...) abort
+" let message = {}
+" let message['context'] = get(g:,'GoldenView_zl_context','')
+" let message['args'] = a:000
+" call GoldenView#zl#log#info(message)
+" endfunction
+"
+" command! -nargs=* -complete=expression Trace
+" \ exec GoldenView#zl#vim#context() | call GoldenView#zl#log#info()
+" --------------------------------%<--------------------------------
+
+
+
+
+function! GoldenView#zl#log#info(...)
+ call setup_ruby()
+ ruby << __RUBY__
+
+args = Vim.evaluate('a:000')
+
+case args.size
+when 0
+ return
+when 1
+ $GoldenView_zl_logger.info("GoldenView") { args[0].ai(:plain => true) }
+when 2
+ $GoldenView_zl_logger.info(args[0]) { args[1].ai(:plain => true) }
+else
+ $GoldenView_zl_logger.info(args[0]) { args[1].ai(:plain => true) }
+end
+__RUBY__
+
+endfunction
+
+function! GoldenView#zl#log#level_info()
+ ruby $GoldenView_zl_logger.level = Logger::INFO
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+function! GoldenView#zl#log#debug(...)
+ call setup_ruby()
+ ruby << __RUBY__
+
+args = Vim.evaluate('a:000')
+
+case args.size
+when 0
+ return
+when 1
+ $GoldenView_zl_logger.debug("GoldenView") { args[0].ai(:plain => true) }
+when 2
+ $GoldenView_zl_logger.debug(args[0]) { args[1].ai(:plain => true) }
+else
+ $GoldenView_zl_logger.debug(args[0]) { args[1].ai(:plain => true) }
+end
+__RUBY__
+
+endfunction
+
+function! GoldenView#zl#log#level_debug()
+ ruby $GoldenView_zl_logger.level = Logger::DEBUG
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+function! GoldenView#zl#log#warn(...)
+ call setup_ruby()
+ ruby << __RUBY__
+
+args = Vim.evaluate('a:000')
+
+case args.size
+when 0
+ return
+when 1
+ $GoldenView_zl_logger.warn("GoldenView") { args[0].ai(:plain => true) }
+when 2
+ $GoldenView_zl_logger.warn(args[0]) { args[1].ai(:plain => true) }
+else
+ $GoldenView_zl_logger.warn(args[0]) { args[1].ai(:plain => true) }
+end
+__RUBY__
+
+endfunction
+
+function! GoldenView#zl#log#level_warn()
+ ruby $GoldenView_zl_logger.level = Logger::WARN
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+function! GoldenView#zl#log#error(...)
+ call setup_ruby()
+ ruby << __RUBY__
+
+args = Vim.evaluate('a:000')
+
+case args.size
+when 0
+ return
+when 1
+ $GoldenView_zl_logger.error("GoldenView") { args[0].ai(:plain => true) }
+when 2
+ $GoldenView_zl_logger.error(args[0]) { args[1].ai(:plain => true) }
+else
+ $GoldenView_zl_logger.error(args[0]) { args[1].ai(:plain => true) }
+end
+__RUBY__
+
+endfunction
+
+function! GoldenView#zl#log#level_error()
+ ruby $GoldenView_zl_logger.level = Logger::ERROR
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+function! GoldenView#zl#log#fatal(...)
+ call setup_ruby()
+ ruby << __RUBY__
+
+args = Vim.evaluate('a:000')
+
+case args.size
+when 0
+ return
+when 1
+ $GoldenView_zl_logger.fatal("GoldenView") { args[0].ai(:plain => true) }
+when 2
+ $GoldenView_zl_logger.fatal(args[0]) { args[1].ai(:plain => true) }
+else
+ $GoldenView_zl_logger.fatal(args[0]) { args[1].ai(:plain => true) }
+end
+__RUBY__
+
+endfunction
+
+function! GoldenView#zl#log#level_fatal()
+ ruby $GoldenView_zl_logger.level = Logger::FATAL
+endfunction
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endif
+
+
+" ============================================================================
+" Modeline: [[[1
+" ============================================================================
+" vim: set ts=4 sw=4 tw=78 fdm=marker fmr=[[[,]]] fdl=1 :
+
+
diff --git a/vim/plugins/GoldenView/autoload/GoldenView/zl/print.vim b/vim/plugins/GoldenView/autoload/GoldenView/zl/print.vim
new file mode 100644
index 0000000..68bc9a2
--- /dev/null
+++ b/vim/plugins/GoldenView/autoload/GoldenView/zl/print.vim
@@ -0,0 +1,69 @@
+" =============== ============================================================
+" Name : print.vim
+" Synopsis : vim script library: print
+" Author : Zhao Cai
+" HomePage : https://github.com/zhaocai/zl.vim
+" Date Created : Sat 03 Sep 2011 03:54:00 PM EDT
+" Last Modified : Thu 20 Sep 2012 04:25:11 PM EDT
+" Tag : [ vim, print ]
+" Copyright : © 2012 by Zhao Cai,
+" Released under current GPL license.
+" =============== ============================================================
+
+
+
+
+
+" ============================================================================
+" Echo Message: ⟨⟨⟨1
+" ============================================================================
+
+function! GoldenView#zl#print#echomsg(message, ...)
+ "--------- ------------------------------------------------
+ " Desc : echomsg wrapper
+ "
+ " Args :
+ " - message to print
+ " - opts : >
+ " {
+ " 'hl' : 'MoreMsg' ,
+ " }
+ " Return :
+ " Raise :
+ "--------- ------------------------------------------------
+
+ if empty(a:message) | return | endif
+ let opts = {
+ \ 'hl' : 'MoreMsg',
+ \ }
+ if a:0 >= 1 && type(a:1) == type({})
+ call extend(opts, a:1)
+ endif
+
+ execute 'echohl ' . opts.hl
+ for m in split(a:message, "\n")
+ echomsg m
+ endfor
+ echohl NONE
+endfunction
+
+function! GoldenView#zl#print#warning(message)
+ call GoldenView#zl#print#echomsg(a:message, {'hl':'WarningMsg'})
+endfunction
+function! GoldenView#zl#print#error(message)
+ call GoldenView#zl#print#echomsg(a:message, {'hl':'ErrorMsg'})
+endfunction
+function! GoldenView#zl#print#moremsg(message)
+ call GoldenView#zl#print#echomsg(a:message, {'hl':'MoreMsg'})
+endfunction
+
+
+
+
+
+" ============================================================================
+" Modeline: ⟨⟨⟨1
+" ============================================================================
+" vim: set ts=4 sw=4 tw=78 fdm=marker fmr=⟨⟨⟨,⟩⟩⟩ fdl=1 :
+
+
diff --git a/vim/plugins/GoldenView/autoload/GoldenView/zl/rc.vim b/vim/plugins/GoldenView/autoload/GoldenView/zl/rc.vim
new file mode 100644
index 0000000..5eaf483
--- /dev/null
+++ b/vim/plugins/GoldenView/autoload/GoldenView/zl/rc.vim
@@ -0,0 +1,222 @@
+" =============== ============================================================
+" Description : vim script library
+" Author : Zhao Cai
+" HomePage : https://github.com/zhaocai/zl.vim
+" Date Created : Mon 03 Sep 2012 09:05:14 AM EDT
+" Last Modified : Thu 18 Apr 2013 03:16:39 PM EDT
+" Tag : [ vim, library ]
+" Copyright : © 2012 by Zhao Cai,
+" Released under current GPL license.
+" =============== ============================================================
+
+" ============================================================================
+" Initialization: [[[1
+" ============================================================================
+
+let s:GOLDENVIEW_ZL_VERSION_CURRENT = 140
+
+let s:VERSION_FACTOR = str2float('0.01')
+
+
+function! GoldenView#zl#rc#init() abort
+ if exists('g:loaded_GoldenView_zl')
+ return
+ endif
+
+ if v:version < 700
+ echoerr "zl.vim: requires Vim >= 7"
+ return
+ endif
+
+
+ if !exists("g:GoldenView_zl_force_reload")
+ let g:GoldenView_zl_force_reload = 0
+ endif
+
+ if !exists("g:GoldenView_zl_debug_mode")
+ let g:GoldenView_zl_debug_mode = 0
+ endif
+
+ let g:loaded_GoldenView_zl = s:GOLDENVIEW_ZL_VERSION_CURRENT * s:VERSION_FACTOR
+
+endfunction
+
+
+
+function! GoldenView#zl#rc#load_guard(prefix, vim_version, GoldenView_zl_version,exprs,...)
+ "--------- ------------------------------------------------
+ " Desc : gereric script load guard function
+ "
+ " Args :
+ " - prefix : to generate loaded_var_name
+ " - vim_version : minmium vim version requirement
+ " - GoldenView_zl_version : minmium zl.vim version requirement.
+ " set 0 to ignore.
+ " - exprs : assert list of expresses to be true
+ " - ... scope : 'g' , 'b', ...
+ "
+ " Return :
+ " - 1 : unloaded
+ " - 0 : already loaded
+ "
+ " Raise :
+ "
+ " Example : >
+ " try | if !GoldenView#zl#rc#load_guard(expand(':t:r'), 703, 140, ['!&cp'])
+ " finish
+ " endif
+ " catch /^Vim\%((\a\+)\)\=:E117/
+ " " E117: Unknown Function
+ " throw 'zl.vim is required!'
+ " endtry
+ "
+ " Details :
+ " g:loaded_{script name} is defined as 1 if:
+ " - vim version > 702
+ " - zl version > 100
+ " - test !&cp is true
+ "
+ " Refer :
+ "--------- ------------------------------------------------
+
+" call Dfunc('GoldenView#zl#rc#load_guard(' . a:prefix .' '. a:vim_version .' '. a:GoldenView_zl_version .' '. join(a:exprs))
+
+ let l:scope = a:0 >= 1 ? a:1 : 'g'
+
+ let l:loaded_var_name = l:scope . ':loaded_'
+ \ . substitute(a:prefix, '[^0-9a-zA-Z_]', '_', 'g')
+" call Decho("loaded_var_name: " . l:loaded_var_name)
+
+ if exists(l:loaded_var_name) && g:GoldenView_zl_force_reload == 0
+" call Decho(l:loaded_var_name . ' loaded: return 0')
+" call Dret('GoldenView#zl#rc#load_guard')
+ return 0
+ endif
+
+ if a:vim_version > 0 && a:vim_version > v:version
+ echoerr l:loaded_var_name . ' requires Vim version '
+ \ . string(a:vim_version * s:VERSION_FACTOR)
+ return 0
+ elseif a:GoldenView_zl_version > 0
+ if !exists("g:loaded_GoldenView_zl")
+ echoerr 'zl.vim is required but not loaded'
+ return 0
+ endif
+
+ if (a:GoldenView_zl_version > s:GOLDENVIEW_ZL_VERSION_CURRENT)
+ echoerr l:loaded_var_name . ' requires zl library version '
+ \ . string(a:GoldenView_zl_version * s:VERSION_FACTOR)
+ return 0
+ endif
+ endif
+ for expr in a:exprs
+ if !eval(expr)
+ echoerr l:loaded_var_name . ' requires: ' . expr
+" call Dret('GoldenView#zl#rc#load_guard')
+ return 0
+ endif
+ endfor
+ let {l:loaded_var_name} = 1
+" call Dret('GoldenView#zl#rc#load_guard')
+ return 1
+endfunction
+
+function! GoldenView#zl#rc#script_force_reload(...)
+ "--------- ------------------------------------------------
+ " Desc : Call to ignore GoldenView#zl#rc#load_guard() and source.
+ "
+ " Args : script path or current script by default
+ " Return :
+ " Raise : E484: cannot open file
+ "
+ "--------- ------------------------------------------------
+ let script = a:0 >= 1 ? a:1 : '%'
+
+ let l:saved = g:GoldenView_zl_force_reload
+ let g:GoldenView_zl_force_reload = 1
+
+ exec "so " . script
+
+ let g:GoldenView_zl_force_reload = l:saved
+endfunction
+
+
+
+
+function! GoldenView#zl#rc#init_python()
+ if has("python3")
+ let g:GoldenView_zl_py = 'py3'
+ let g:GoldenView_zl_pyeval = 'py3eval'
+ elseif has("python")
+ let g:GoldenView_zl_py = 'py'
+ let g:GoldenView_zl_pyeval = 'pyeval'
+ else
+ let g:GoldenView_zl_py = ''
+ let g:GoldenView_zl_pyeval = ''
+ endif
+endfunction
+
+
+
+" ============================================================================
+" Set Initialization Default Variables: [[[1
+" ============================================================================
+function! GoldenView#zl#rc#set_default(var, ...)
+ "--------- ------------------------------------------------
+ " Desc : Set Initialization Default Variables
+ "
+ " Args : ('var', val) || ( {dict} )
+ " Return :
+ " Raise : 'zl.vim ***'
+ "
+ " Pitfall : avoid 's:' variables, which will be defined in
+ " this rc.vim script bur your script
+ "
+ " Example : >
+ " call GoldenView#zl#rc#set_default({
+ " \ 'g:xxx_yyy' : {
+ " \ 'abc' : 1,
+ " \ }
+ " \
+ " \ , 'g:yyy_zzz' : 'bcd'
+ " \ })
+ "--------- ------------------------------------------------
+
+ if type(a:var) == type({})
+ for key in keys(a:var)
+ call set_default(key, a:var[key])
+ endfor
+ elseif type(a:var) == type("")
+ if a:0 >= 1
+ call set_default(a:var, a:1)
+ else
+ throw "zl.vim should call with default value for " . a:var
+ endif
+ else
+ throw "zl.vim unsupported type: " . type(a:var)
+ endif
+endfunction
+
+function! s:set_default(var,val)
+ if !exists(a:var) || type({a:var}) != type(a:val)
+ let {a:var} = a:val
+ endif
+endfunction
+
+
+
+
+
+
+"
+" Note:
+" add this call to other files if they need to check g:loaded_GoldenView_zl
+" or g:GoldenView_zl_install_path
+"
+call GoldenView#zl#rc#init()
+
+
+" ============================================================================
+" Modeline: [[[1
+" ============================================================================
+" vim: set ft=vim ts=4 sw=4 tw=78 fdm=marker fmr=[[[,]]] fdl=1 :
diff --git a/vim/plugins/GoldenView/autoload/GoldenView/zl/regex.vim b/vim/plugins/GoldenView/autoload/GoldenView/zl/regex.vim
new file mode 100644
index 0000000..df3cc82
--- /dev/null
+++ b/vim/plugins/GoldenView/autoload/GoldenView/zl/regex.vim
@@ -0,0 +1,94 @@
+" =============== ============================================================
+" Name : regex.vim
+" Description : vim library: Regular Expression
+" Author : Zhao Cai
+" HomePage : https://github.com/zhaocai/zl.vim
+" Date Created : Mon 03 Sep 2012 09:05:14 AM EDT
+" Last Modified : Thu 20 Sep 2012 04:25:12 PM EDT
+" Tag : [ vim, library, regex ]
+" Copyright : © 2012 by Zhao Cai,
+" Released under current GPL license.
+" =============== ============================================================
+
+
+
+
+
+
+
+
+" ============================================================================
+" Regex Escape: ⟨⟨⟨1
+" ============================================================================
+function! GoldenView#zl#regex#escape(text, ...) " (text, ?magic='m') ⟨⟨⟨2
+ "--------- ------------------------------------------------
+ " Desc : escape common special characters.
+ "
+ " Args :
+ "
+ " - text to escape
+ " - magic : one of m, M, v, V. See :help 'magic'
+ "
+ " Return : escaped text
+ " Raise :
+ "
+ " Example : echo GoldenView#zl#regex#escape('I|||love&you\\\', 'v')
+ "
+ " Refer :
+ "--------- ------------------------------------------------
+
+ let l:magic = a:0 >= 1 ? a:1 : 'm'
+
+ if l:magic =~# '^\\\?m$'
+ return escape(a:text, '^$.*\[]~')
+ elseif l:magic =~# '^\\\?M$'
+ return escape(a:text, '^$\')
+ elseif l:magic =~# '^\\\?V$'
+ return escape(a:text, '\')
+ elseif l:magic =~# '^\\\?v$'
+ return substitute(a:text, '[^0-9a-zA-Z_]', '\\&', 'g')
+ else
+ throw 'unsupported magic type'
+ return a:text
+ endif
+endfunction " ⟩⟩⟩
+
+
+
+" ----------------------------------------------------------------------------
+" Regex Builder: ⟨⟨⟨1
+
+
+function! GoldenView#zl#regex#or(list, ...) "⟨⟨⟨
+ let opts =
+ \ { 'is_capturing' : 0
+ \ , 'magic' : 'm'
+ \ }
+ if a:0 >= 1 && GoldenView#zl#var#is_dict(a:1)
+ call extend(opts, a:1)
+ endif
+
+ let begin = opts['is_capturing'] ? '\(' : '\%('
+ let or = '\|'
+ let end = '\)'
+
+ if opts['magic'] =~# '^\\\?v$'
+ let begin = opts['is_capturing'] ? '(' : '%('
+ let or = '|'
+ let end = ')'
+ endif
+
+ return begin
+ \ . join(map(
+ \ a:list, 'GoldenView#zl#regex#escape(v:val, "' . opts['magic'] . '")'),
+ \ or)
+ \ . end
+endfunction "⟩⟩⟩
+
+" ⟩⟩⟩
+
+
+" ============================================================================
+" Modeline: ⟨⟨⟨1
+" ============================================================================
+" vim: set ft=vim ts=4 sw=4 tw=78 fdm=marker fmr=⟨⟨⟨,⟩⟩⟩ fdl=1 :
diff --git a/vim/plugins/GoldenView/autoload/GoldenView/zl/rule.vim b/vim/plugins/GoldenView/autoload/GoldenView/zl/rule.vim
new file mode 100644
index 0000000..4da76f1
--- /dev/null
+++ b/vim/plugins/GoldenView/autoload/GoldenView/zl/rule.vim
@@ -0,0 +1,331 @@
+" =============== ============================================================
+" Name : rule.vim
+" Synopsis : vim script library: rule
+" Author : Zhao Cai
+" HomePage : https://github.com/zhaocai/zl.vim
+" Date Created : Sat 03 Sep 2011 03:54:00 PM EDT
+" Last Modified : Sat 29 Sep 2012 01:03:24 AM EDT
+" Tag : [ vim, rule ]
+" Copyright : © 2012 by Zhao Cai,
+" Released under current GPL license.
+" =============== ============================================================
+
+
+
+" ============================================================================
+" Rule: [[[1
+" ============================================================================
+
+" [TODO]( list for at type ) @zhaocai @start(2012-09-27 08:05)
+
+let s:rule_types = [
+ \ 'filetype', 'buftype', 'mode' , 'cword',
+ \ 'bufname' , 'at' , 'syntax', 'expr' ,
+ \ ]
+let s:nrule = {
+ \ 'eval_order' : copy(s:rule_types),
+ \ 'eval_negate' : [] ,
+ \ 'logic' : 'or' ,
+ \ 'rule' : {} ,
+ \ }
+
+function! GoldenView#zl#rule#norm(urule, ...)
+ "--------- ------------------------------------------------
+ " Desc : normalize rules
+ "
+ " Rule :
+ " - "urule" : "Unnormalized RULE", rules written by users.
+ " - "nrule" : "Nnormalized RULE", rules completed with
+ " optional items and internal items.
+ "
+ " Args :
+ " - urule: un-normalized rule
+ " - opts :
+ " - eval_order : order in s:rule_types,
+ " - eval_negate : reverse eval result
+ " - logic :
+ " - {or} : 'v:filetype || v:bufname || ...'
+ " - {and} : 'v:filetype && v:bufname && ...'
+ " - {string} : similar to v:val for filter()
+ "
+ " Return : normalized rules
+ " Raise :
+ "
+ " Example : >
+ "
+ " Refer :
+ "--------- ------------------------------------------------
+ let nrule = deepcopy(s:nrule)
+
+ if a:0 >= 1 && GoldenView#zl#var#is_dict(a:1)
+ call extend(nrule, a:1)
+ endif
+
+ let type_expr = {
+ \ 'buftype' : '&buftype' ,
+ \ 'filetype' : '&ft' ,
+ \ 'bufname' : "bufname('%')" ,
+ \ 'cword' : "expand('')" ,
+ \ }
+
+ let type_pat = {}
+ for type in ['filetype', 'buftype', 'syntax']
+ if has_key(a:urule, type)
+ let type_pat[type] = '^\%(' . join(a:urule[type], '\|') . '\)$'
+ endif
+ endfor
+ for type in ['bufname', 'cword']
+ if has_key(a:urule, type)
+ let type_pat[type] = '^\%('
+ \ . join(map(a:urule[type], 'GoldenView#zl#regex#escape(v:val)'), '\|')
+ \ . '\)$'
+ endif
+ endfor
+
+
+ " normalize each type of rules
+ for type in ['mode']
+ if has_key(a:urule, type)
+ let nrule.rule[type] = a:urule[type]
+ endif
+ endfor
+
+ for type in ['filetype', 'buftype', 'bufname', 'cword']
+ if has_key(a:urule, type)
+ let nrule.rule[type] =
+ \ {
+ \ 'eval_expr' : 1 ,
+ \ 'expr' : type_expr[type] ,
+ \ 'pat' : type_pat[type] ,
+ \ }
+ endif
+ endfor
+
+
+ for type in ['syntax']
+ if has_key(a:urule, type)
+ let nrule.rule[type] = type_pat[type]
+ endif
+ endfor
+
+ for type in ['mode', 'at']
+ if has_key(a:urule, type)
+ let nrule.rule[type] = a:urule[type]
+ endif
+ endfor
+
+ for type in ['expr']
+ if has_key(a:urule, type)
+ try | let nrule.rule[type] =
+ \ join(
+ \ map(
+ \ map(
+ \ copy(a:urule[type])
+ \ ,"join(v:val,' || ')"
+ \ )
+ \ , "'('.v:val.')'"
+ \ )
+ \ ,' && '
+ \ )
+ catch /^Vim\%((\a\+)\)\=:E714/ " E714: List required
+ throw 'zl(rule): expr rule should be written as list of lists.'
+ endtry
+ endif
+ endfor
+
+ call filter(
+ \ nrule['eval_order']
+ \ , 'has_key(nrule.rule, v:val) && !empty(nrule.rule[v:val])'
+ \ )
+
+ return nrule
+endfunction
+
+
+function! GoldenView#zl#rule#is_true(nrule, ...)
+ try
+ return call('GoldenView#zl#rule#logic_'.a:nrule['logic'], [a:nrule] + a:000)
+ catch /^Vim\%((\a\+)\)\=:E129/
+ throw 'zl(rule): undefined logic funcref'
+ endtry
+endfunction
+
+
+function! GoldenView#zl#rule#is_false(nrule, ...)
+ return !call('GoldenView#zl#rule#is_true', [a:nrule] + a:000)
+endfunction
+
+
+" rule logic
+function! s:_return(nrule, type, ret)
+ return
+ \ index(a:nrule.eval_negate, a:type) >= 0
+ \ ? !a:ret
+ \ : a:ret
+endfunction
+
+function! GoldenView#zl#rule#logic_or(nrule, ...)
+ let opts = {}
+ if a:0 >= 1 && GoldenView#zl#var#is_dict(a:1)
+ call extend(opts, a:1)
+ endif
+
+ for type in a:nrule['eval_order']
+ if s:_return(a:nrule, type, s:eval_{type}(a:nrule['rule'], opts))
+ return 1
+ endif
+ endfor
+ return 0
+endfunction
+
+function! GoldenView#zl#rule#logic_and(nrule, ...)
+ let opts = {}
+ if a:0 >= 1 && GoldenView#zl#var#is_dict(a:1)
+ call extend(opts, a:1)
+ endif
+
+ for type in a:nrule['eval_order']
+ if !s:_return(a:nrule, type, s:eval_{type}(a:nrule['rule'], opts))
+ return 0
+ endif
+ endfor
+ return 1
+endfunction
+
+function! GoldenView#zl#rule#logic_expr(nrule, ...)
+ let opts = {}
+ if a:0 >= 1 && GoldenView#zl#var#is_dict(a:1)
+ call extend(opts, a:1)
+ endif
+
+ let str = a:nrule['expr']
+ for type in a:nrule['eval_order']
+ let str = substitute(str
+ \ , 'v:'.type
+ \ , string(
+ \ s:_return(a:nrule, type,
+ \ s:eval_{type}(a:nrule['rule'], opts)
+ \ )
+ \ )
+ \ , 'ge'
+ \ )
+ endfor
+
+ try
+ return eval(str)
+ catch /^Vim\%((\a\+)\)\=:E/
+ throw printf('zl(rule): eval(%s) raises %s', str, v:exception)
+ endtry
+endfunction
+
+
+
+" nrule eval
+function! s:eval_filetype(nrule, ...)
+ return call('s:_eval_match', ['filetype', a:nrule] + a:000)
+endfunction
+
+function! s:eval_cword(nrule, ...)
+ return call('s:_eval_match', ['cword', a:nrule] + a:000)
+endfunction
+
+function! s:eval_buftype(nrule, ...)
+ return call('s:_eval_match', ['buftype', a:nrule] + a:000)
+endfunction
+
+function! s:eval_bufname(nrule, ...)
+ return call('s:_eval_match', ['bufname', a:nrule] + a:000)
+endfunction
+
+
+function! s:eval_at(nrule, ...)
+ return search(get(a:nrule, 'at', '\%#'), 'bcnW')
+endfunction
+
+function! s:eval_mode(nrule, ...)
+ let mode_pat = get(a:nrule, 'mode', [])
+ let mode_expr =
+ \ a:0 >= 1 && GoldenView#zl#var#is_dict(a:1)
+ \ ? get(a:1, 'mode', mode())
+ \ : mode()
+
+ return
+ \ !empty(
+ \ filter(
+ \ mode_pat
+ \ , 'stridx(mode_expr, v:val) == -1'
+ \ )
+ \ )
+endfunction
+
+function! s:eval_syntax(nrule, ...)
+ let pat = get(a:nrule, 'syntax', '')
+
+ let opts = {}
+ if a:0 >= 1 && GoldenView#zl#var#is_dict(a:1)
+ call extend(opts, a:1)
+ endif
+ let syn_names = GoldenView#zl#syntax#synstack_names(opts)
+
+ return !empty(filter(syn_names, 'match(v:val, pat) != -1'))
+endfunction
+
+function! s:eval_expr(nrule, ...)
+ try
+ return eval(get(a:nrule, 'expr', 1))
+ catch /^Vim\%((\a\+)\)\=:E/
+ return 0
+ endtry
+endfunction
+
+function! s:_eval_match(type, nrule, ...)
+ "--------- ------------------------------------------------
+ " Desc : internal match evluation
+ " Rule :
+ " { 'type' :
+ " {
+ " 'eval_expr' : (1|0) ,
+ " 'expr' : {expr} ,
+ " 'pat' : {pat} ,
+ " }
+ " }
+ "
+ " Args : [{type}, {nrule}[, {opts}]]
+ " Return :
+ " - 0 : false
+ " - 1 : true
+ " Raise : zl(rule)
+ "
+ " Refer : vimhelp:match()
+ "--------- ------------------------------------------------
+
+ let rule = copy(get(a:nrule, a:type, {}))
+ if empty(rule)
+ throw 'zl(rule): ' . v:exception
+ endif
+
+ " opt for {expr} from runtime opts
+ if a:0 >= 1 && GoldenView#zl#var#is_dict(a:1) && has_key(a:1, a:type)
+ let rt_rule = a:1[a:type]
+ if GoldenView#zl#var#is_dict(rt_rule)
+ call extend(rule, rt_rule)
+ elseif GoldenView#zl#var#is_string(rt_rule)
+ let rule['expr'] = rt_rule
+ let rule['eval_expr'] = 0
+ endif
+ endif
+ if rule['eval_expr']
+ let rule['expr'] = eval(rule['expr'])
+ endif
+ try
+ return call('match', [rule['expr'], rule['pat']]) != -1
+ catch /^Vim\%((\a\+)\)\=:E/
+ throw 'zl(rule): ' . v:exception
+ endtry
+endfunction
+
+
+" ============================================================================
+" Modeline: [[[1
+" ============================================================================
+" vim: set ft=vim ts=4 sw=4 tw=78 fdm=marker fmr=[[[,]]] fdl=1 :
diff --git a/vim/plugins/GoldenView/autoload/GoldenView/zl/sys.vim b/vim/plugins/GoldenView/autoload/GoldenView/zl/sys.vim
new file mode 100644
index 0000000..74dcdf5
--- /dev/null
+++ b/vim/plugins/GoldenView/autoload/GoldenView/zl/sys.vim
@@ -0,0 +1,78 @@
+" =============== ============================================================
+" Name : sys.vim
+" Description : vim library
+" Author : Zhao Cai
+" HomePage : https://github.com/zhaocai/zl.vim
+" Date Created : Mon 03 Sep 2012 09:05:14 AM EDT
+" Last Modified : Thu 20 Sep 2012 04:25:15 PM EDT
+" Tag : [ vim, library ]
+" Copyright : © 2012 by Zhao Cai,
+" Released under current GPL license.
+" =============== ============================================================
+
+
+
+
+
+
+
+
+
+
+" ============================================================================
+" Environment: [[[1
+" ============================================================================
+
+function! GoldenView#zl#sys#ostype()
+ "--------- ------------------------------------------------
+ " Args :
+ " Return :
+ " - Mac, Windows, Linux, FreeBSD, SunOS, Unix,
+ " - undefined
+ " Raise :
+ "
+ " Example : >
+ " call GoldenView#zl#rc#set_default('g:os_type', GoldenView#zl#sys#ostype())
+ "--------- ------------------------------------------------
+ if (has("win32") || has("win95") || has("win64") || has("win16"))
+ let s:os_type = "Windows"
+ elseif has('mac')
+ let s:os_type="Mac"
+ elseif has('unix')
+ let arch = system("uname | tr -d '\n'")
+ if ( arch=="Linux" )
+ let s:os_type="Linux"
+ elseif ( arch=="FreeBSD" )
+ let s:os_type="FreeBSD"
+ elseif ( arch=="SunOS" )
+ let s:os_type="SunOS"
+ elseif ( arch=="Darwin" )
+ let s:os_type="Mac"
+ else
+ let s:os_type="Unix"
+ endif
+ endif
+ return s:os_type
+endfunction
+
+function! GoldenView#zl#sys#is_cygwin()
+ return s:is_cygwin
+endfunction
+
+function! GoldenView#zl#sys#is_win()
+ return s:os_type == 'Windows'
+endfunction
+function! GoldenView#zl#sys#is_mac()
+ return s:os_type == 'Mac'
+endfunction
+function! GoldenView#zl#sys#is_linux()
+ return s:os_type == 'Linux'
+endfunction
+
+let s:os_type = GoldenView#zl#sys#ostype()
+let s:is_cygwin = has('win32unix')
+
+" ============================================================================
+" Modeline: [[[1
+" ============================================================================
+" vim: set ft=vim ts=4 sw=4 tw=78 fdm=marker fmr=[[[,]]] fdl=1 :
diff --git a/vim/plugins/GoldenView/autoload/GoldenView/zl/var.vim b/vim/plugins/GoldenView/autoload/GoldenView/zl/var.vim
new file mode 100644
index 0000000..77c6d03
--- /dev/null
+++ b/vim/plugins/GoldenView/autoload/GoldenView/zl/var.vim
@@ -0,0 +1,86 @@
+" =============== ============================================================
+" Name : var.vim
+" Synopsis : vim script library: variable
+" Author : Zhao Cai
+" HomePage : https://github.com/zhaocai/zl.vim
+" Date Created : Sat 03 Sep 2011 03:54:00 PM EDT
+" Last Modified : Thu 20 Sep 2012 04:25:16 PM EDT
+" Tag : [ vim, variable ]
+" Copyright : © 2012 by Zhao Cai,
+" Released under current GPL license.
+" =============== ============================================================
+
+
+
+
+" ============================================================================
+" Type: [[[1
+" ============================================================================
+
+
+"--------- ------------------------------------------------
+" Desc : Wrapper functions for type()
+"
+" Refer : vital.vim
+"--------- ------------------------------------------------
+
+let [
+\ s:__TYPE_NUMBER,
+\ s:__TYPE_STRING,
+\ s:__TYPE_FUNCREF,
+\ s:__TYPE_LIST,
+\ s:__TYPE_DICT,
+\ s:__TYPE_FLOAT
+\] = [
+\ type(3),
+\ type(""),
+\ type(function('tr')),
+\ type([]),
+\ type({}),
+\ has('float') ? type(str2float('0')) : -1
+\]
+" __TYPE_FLOAT = -1 when -float
+" This doesn't match to anything.
+
+" Number or Float
+function! GoldenView#zl#var#is_numeric(Value)
+ let _ = type(a:Value)
+ return _ ==# s:__TYPE_NUMBER
+ \ || _ ==# s:__TYPE_FLOAT
+endfunction
+" Number
+function! GoldenView#zl#var#is_integer(Value)
+ return type(a:Value) ==# s:__TYPE_NUMBER
+endfunction
+function! GoldenView#zl#var#is_number(Value)
+ return type(a:Value) ==# s:__TYPE_NUMBER
+endfunction
+" Float
+function! GoldenView#zl#var#is_float(Value)
+ return type(a:Value) ==# s:__TYPE_FLOAT
+endfunction
+" String
+function! GoldenView#zl#var#is_string(Value)
+ return type(a:Value) ==# s:__TYPE_STRING
+endfunction
+" Funcref
+function! GoldenView#zl#var#is_funcref(Value)
+ return type(a:Value) ==# s:__TYPE_FUNCREF
+endfunction
+" List
+function! GoldenView#zl#var#is_list(Value)
+ return type(a:Value) ==# s:__TYPE_LIST
+endfunction
+" Dictionary
+function! GoldenView#zl#var#is_dict(Value)
+ return type(a:Value) ==# s:__TYPE_DICT
+endfunction
+
+
+
+
+
+" ============================================================================
+" Modeline: [[[1
+" ============================================================================
+" vim: set ft=vim ts=4 sw=4 tw=78 fdm=marker fmr=[[[,]]] fdl=1 :
diff --git a/vim/plugins/GoldenView/autoload/GoldenView/zl/vim.vim b/vim/plugins/GoldenView/autoload/GoldenView/zl/vim.vim
new file mode 100644
index 0000000..8334121
--- /dev/null
+++ b/vim/plugins/GoldenView/autoload/GoldenView/zl/vim.vim
@@ -0,0 +1,50 @@
+" =============== ============================================================
+" Description : vim library: vim
+" Author : Zhao Cai
+" HomePage : https://github.com/zhaocai/zl.vim
+" Date Created : Mon 03 Sep 2012 09:05:14 AM EDT
+" Last Modified : Thu 20 Sep 2012 06:01:48 PM EDT
+" Tag : [ vim, library, debug ]
+" Copyright : © 2012 by Zhao Cai,
+" Released under current GPL license.
+" =============== ============================================================
+
+
+
+
+
+
+
+
+" ============================================================================
+" Context: [[[1
+" ============================================================================
+function! GoldenView#zl#vim#context()
+ " -------- - -----------------------------------------------
+ " Desc : generate context
+ "
+ " Example : >
+ " function BeTraced(...)
+ " exec GoldenView#zl#vim#context() | call XXX#Trace(a:000)
+ " endfunction
+ "
+ " function XXX#Trace(...)
+ " let context = g:GoldenView_zl_context
+ " "...
+ " endfunction
+ " Refer :
+ " -------- - -----------------------------------------------
+ return
+ \'try
+ \| throw ""
+ \|catch
+ \| let g:GoldenView_zl_context = v:throwpoint
+ \|endtry
+ \'
+endfunction
+
+
+" ============================================================================
+" Modeline: [[[1
+" ============================================================================
+" vim: set ft=vim ts=4 sw=4 tw=78 fdm=marker fmr=[[[,]]] fdl=1 :
diff --git a/vim/plugins/GoldenView/autoload/GoldenView/zl/window.vim b/vim/plugins/GoldenView/autoload/GoldenView/zl/window.vim
new file mode 100644
index 0000000..a8e7e04
--- /dev/null
+++ b/vim/plugins/GoldenView/autoload/GoldenView/zl/window.vim
@@ -0,0 +1,432 @@
+" =============== ============================================================
+" Name : window.vim
+" Synopsis : vim script library: window
+" Author : Zhao Cai
+" HomePage : https://github.com/zhaocai/zl.vim
+" Version : 0.1
+" Date Created : Sat 03 Sep 2011 03:54:00 PM EDT
+" Last Modified : Tue 23 Oct 2012 04:59:06 PM EDT
+" Tag : [ vim, syntax ]
+" Copyright : © 2012 by Zhao Cai,
+" Released under current GPL license.
+" =============== ============================================================
+
+
+
+" ============================================================================
+" Status: ⟨⟨⟨1
+" ============================================================================
+call GoldenView#zl#rc#set_default({
+ \ 'g:GoldenView_zl_window__ignore_urule' : {
+ \ 'filetype' : [
+ \ '' ,
+ \ 'qf' , 'vimpager', 'undotree', 'tagbar',
+ \ 'nerdtree', 'vimshell', 'vimfiler', 'voom' ,
+ \ 'tabman' , 'unite' , 'quickrun', 'Decho' ,
+ \ ],
+ \ 'buftype' : [
+ \ 'nofile' ,
+ \ ],
+ \ 'bufname' : [
+ \ 'GoToFile' , 'diffpanel_\d\+' ,
+ \ '__Gundo_Preview__' , '__Gundo__' ,
+ \ '\[LustyExplorer-Buffers\]' , '\-MiniBufExplorer\-' ,
+ \ '_VOOM\d\+$' , '__Urannotate_\d\+__' ,
+ \ '__MRU_Files__' ,
+ \ ],
+ \ },
+ \ })
+
+let s:GoldenView_zl_window__ignore_nrule = GoldenView#zl#rule#norm(
+ \ g:GoldenView_zl_window__ignore_urule, {
+ \ 'logic' : 'or',
+ \ }
+ \ )
+
+function! GoldenView#zl#window#is_last_visible()
+ "--------- ------------------------------------------------
+ " Desc : check if no visible buffer left
+ "
+ " Args :
+ "
+ " Return :
+ " - 0 : false
+ " - 1 : true
+ " Raise :
+ "
+ "--------- ------------------------------------------------
+
+ for i in range(tabpagenr('$'))
+ let tabnr = i + 1
+ for bufnr in tabpagebuflist(tabnr)
+ let ft = getbufvar(bufnr, '&ft')
+ let buftype = getbufvar(bufnr, '&buftype')
+ if empty(ft) && empty(buftype)
+ continue
+ endif
+ if ! GoldenView#zl#rule#is_true(s:GoldenView_zl_window__ignore_nrule)
+ return 0
+ endif
+ endfor
+ endfor
+
+ return 1
+endfunction
+
+
+
+
+
+" ============================================================================
+" Move: ⟨⟨⟨1
+" ============================================================================
+let s:golden_ratio = 1.618
+function! GoldenView#zl#window#next_window_or_tab()
+ if tabpagenr('$') == 1 && winnr('$') == 1
+ call GoldenView#zl#window#split_nicely()
+ elseif winnr() < winnr("$")
+ wincmd w
+ else
+ tabnext
+ wincmd w
+ endif
+endfunction
+
+function! GoldenView#zl#window#previous_window_or_tab()
+ if winnr() > 1
+ wincmd W
+ else
+ tabprevious
+ execute winnr("$") . "wincmd w"
+ endif
+endfunction
+
+
+
+" ============================================================================
+" Size: ⟨⟨⟨1
+" ============================================================================
+function! GoldenView#zl#window#golden_ratio_width()
+ return float2nr(&columns / s:golden_ratio)
+endfunction
+
+function! GoldenView#zl#window#golden_ratio_height()
+ return float2nr(&lines / s:golden_ratio)
+endfunction
+
+function! GoldenView#zl#window#textwidth()
+ return &tw == 0 ? 78 : &tw
+endfunction
+
+" ============================================================================
+" Split: ⟨⟨⟨1
+" ============================================================================
+
+function! GoldenView#zl#window#nicely_split_cmd(...)
+ let opts = {
+ \ 'winnr' : 0 ,
+ \}
+ if a:0 >= 1 && type(a:1) == type({})
+ call extend(opts, a:1)
+ endif
+
+ let ww = winwidth(opts['winnr'])
+ let tw = &textwidth
+
+ if tw != 0 && ww > s:golden_ratio * tw
+ return 'vsplit'
+ endif
+
+ if ww > &columns / s:golden_ratio
+ return 'vsplit'
+ endif
+
+ return 'split'
+endfunction
+
+function! GoldenView#zl#window#split_nicely()
+ let split_cmd = GoldenView#zl#window#nicely_split_cmd()
+ try
+ exec split_cmd
+ catch /^Vim\%((\a\+)\)\=:E36/
+ if split_cmd == 'split'
+ let &winminheight = &winminheight / 2
+ else
+ let &winminwidth = &winminwidth / 2
+ endif
+ exec split_cmd
+ endtry
+ wincmd p
+endfunction
+
+function! GoldenView#zl#window#toggle_split()
+ let prev_name = winnr()
+ silent! wincmd w
+ if prev_name == winnr()
+ split
+ else
+ call GoldenView#zl#buf#quit()
+ endif
+endfunction
+
+
+
+" ============================================================================
+" Sort: ⟨⟨⟨1
+" ============================================================================
+function! GoldenView#zl#window#sort_by(...)
+ "--------- ------------------------------------------------
+ " Desc : sort buffer by size, height, or width
+ "
+ " Args :
+ " - opts : > ↓
+ " {
+ " 'by' : size|height|width|winnr|bufnr ,
+ " 'tabnr' : tabpagenr() ,
+ " 'width_weight' : s:golden_ratio ,
+ " 'height_weight' : 1 ,
+ " }
+ "
+ " Return : sorted list of
+ " {
+ " 'bufnr' : bufnr ,
+ " 'winnr' : winnr ,
+ " 'width' : width ,
+ " 'height' : height ,
+ " 'size' : size ,
+ " }
+ "
+ " Raise :
+ "
+ "--------- ------------------------------------------------
+
+ let opts = {
+ \ 'by' : 'size' ,
+ \ 'tabnr' : tabpagenr() ,
+ \ 'width_weight' : s:golden_ratio ,
+ \ 'height_weight' : 1 ,
+ \}
+ if a:0 >= 1 && type(a:1) == type({})
+ call extend(opts, a:1)
+ endif
+
+ let list = []
+ for bufnr in tabpagebuflist(opts['tabnr'])
+ let winnr = bufwinnr(bufnr)
+ let width = winwidth(winnr)
+ let height = winheight(winnr)
+ let size = width * opts['width_weight']
+ \ + height * opts['height_weight']
+
+ call add(list, {
+ \ 'bufnr' : bufnr ,
+ \ 'winnr' : winnr ,
+ \ 'width' : width ,
+ \ 'height' : height ,
+ \ 'size' : size ,
+ \ })
+ endfor
+
+ return GoldenView#zl#list#sort_by(list,'v:val["'.opts['by'].'"]')
+endfunction
+
+
+" ============================================================================
+" Switch: ⟨⟨⟨1
+" ============================================================================
+
+function! GoldenView#zl#window#switch_buffer_toggle(...)
+ "--------- ------------------------------------------------
+ " Desc : toggle buffer switch
+ "
+ " Args :
+ " - opts : >
+ " {
+ " 'with' : 'largest' ,
+ " }
+ "
+ " Return :
+ " Raise :
+ "
+ " Example : >
+ " nnoremap
+ " \ :call GoldenView#zl#window#switch_buffer_toggle()
+ "--------- ------------------------------------------------
+
+ let opts = {
+ \ 'with' : 'largest',
+ \}
+ if a:0 >= 1 && type(a:1) == type({})
+ call extend(opts, a:1)
+ endif
+
+ let bufnr = bufnr('%')
+ if exists('b:switch_buffer')
+ \ && bufwinnr(b:switch_buffer['bufnr']) == b:switch_buffer['winnr']
+ call GoldenView#zl#window#switch_buffer(bufnr, b:switch_buffer['bufnr'])
+ else
+ try
+ let fn = 'GoldenView#zl#window#switch_buffer_with_'.opts['with']
+ exec 'call ' . fn . '()'
+ catch /^Vim%((a+))=:E700/
+ throw "zl: function " . fn . 'for ' . opts['with']
+ \ . ' is not implemented!'
+ endtry
+
+ endif
+endfunction
+
+
+function! GoldenView#zl#window#switch_buffer_with_sorted_by_size_index(index, ...)
+ "--------- ------------------------------------------------
+ " Desc : switch buffer with the largest window
+ "
+ " Args :
+ " - opts : >
+ " {
+ " 'bufnr' : bufnr('%') ,
+ " 'by' : 'size'|'height'|'width' ,
+ " 'tabnr' : tabpagenr() ,
+ " 'width_weight' : s:golden_ratio ,
+ " 'height_weight' : 1 ,
+ " }
+ "
+ " Return :
+ " Raise :
+ "
+ " Example : >
+ " nnoremap
+ " \ :call GoldenView#zl#window#switch_buffer_with_largest()
+ "--------- ------------------------------------------------
+
+
+ let opts = {
+ \ 'bufnr' : bufnr('%') ,
+ \ 'by' : 'size' ,
+ \ 'tabnr' : tabpagenr() ,
+ \ 'width_weight' : s:golden_ratio ,
+ \ 'height_weight' : 1 ,
+ \}
+ if a:0 >= 1 && type(a:1) == type({})
+ call extend(opts, a:1)
+ endif
+
+ let sorted = GoldenView#zl#window#sort_by(filter(copy(opts),'v:key != "bufnr"'))
+ let bufnr_to = sorted[a:index]['bufnr']
+ call GoldenView#zl#window#switch_buffer(opts['bufnr'], bufnr_to)
+endfunction
+
+
+function! GoldenView#zl#window#switch_buffer_with_largest(...)
+ call GoldenView#zl#window#switch_buffer_with_sorted_by_size_index(-1, a:000)
+endfunction
+
+function! GoldenView#zl#window#switch_buffer_with_smallest(...)
+ call GoldenView#zl#window#switch_buffer_with_sorted_by_size_index(0, a:000)
+endfunction
+
+function! GoldenView#zl#window#switch_buffer(bufnr1, bufnr2)
+ "--------- ------------------------------------------------
+ " Desc : switch buffer window if both are visible
+ "
+ " Args : bufnr1 <-> bufnr2
+ " Return :
+ " - 0 : fail
+ " - 1 : success
+ " Raise :
+ "
+ " Example : >
+ "
+ " Refer :
+ "--------- ------------------------------------------------
+ let winnr1 = bufwinnr(a:bufnr1)
+ let winnr2 = bufwinnr(a:bufnr2)
+ if winnr1 != -1 && winnr2 != -1
+
+ silent noautocmd exec winnr1 'wincmd w'
+ if bufnr('%') != a:bufnr2
+ silent noautocmd exec 'buffer' a:bufnr2
+ let b:switch_buffer = {
+ \ 'bufnr' : a:bufnr1 ,
+ \ 'winnr' : winnr2 ,
+ \ }
+ endif
+ silent noautocmd exec winnr2 'wincmd w'
+ if bufnr('%') != a:bufnr1
+ silent noautocmd exec 'buffer' a:bufnr1
+
+ " need filetype detect (maybe) because bufnr1 disappears for a
+ " moment
+ silent filetype detect
+
+ let b:switch_buffer = {
+ \ 'bufnr' : a:bufnr2 ,
+ \ 'winnr' : winnr1 ,
+ \ }
+ endif
+
+ return 1
+ else
+ return 0
+ endif
+endfunction
+
+function! GoldenView#zl#window#alternate_buffer()
+ if bufnr('%') != bufnr('#') && buflisted(bufnr('#'))
+ buffer #
+ else
+ let cnt = 0
+ let pos = 1
+ let current = 0
+ while pos <= bufnr('$')
+ if buflisted(pos)
+ if pos == bufnr('%')
+ let current = cnt
+ endif
+
+ let cnt += 1
+ endif
+
+ let pos += 1
+ endwhile
+
+ if current > cnt / 2
+ bprevious
+ else
+ bnext
+ endif
+ endif
+endfunction
+
+" ============================================================================
+" Scroll: ⟨⟨⟨1
+" ============================================================================
+
+function! GoldenView#zl#window#scroll_other_window(direction)
+ execute 'wincmd' (winnr('#') == 0 ? 'w' : 'p')
+ execute (a:direction ? "normal! \" : "normal! \")
+ wincmd p
+endfunction
+
+" ============================================================================
+" View: ⟨⟨⟨1
+" ============================================================================
+function! GoldenView#zl#window#save_view_command(command) range
+ let view = winsaveview()
+
+ let range = ''
+ if a:firstline != a:lastline
+ let range = a:firstline.','.a:lastline
+ endif
+ try
+ keepjumps execute range.a:command
+ finally
+ call winrestview(view)
+ endtry
+endfunction
+
+" ============================================================================
+" Modeline: ⟨⟨⟨1
+" ============================================================================
+" vim: set ft=vim ts=4 sw=4 tw=78 fdm=marker fmr=⟨⟨⟨,⟩⟩⟩ fdl=1 :
+
diff --git a/vim/plugins/GoldenView/doc/GoldenView.txt b/vim/plugins/GoldenView/doc/GoldenView.txt
new file mode 100644
index 0000000..2a085ae
--- /dev/null
+++ b/vim/plugins/GoldenView/doc/GoldenView.txt
@@ -0,0 +1,366 @@
+*GoldenView.txt* Always have a nice view for vim split windows
+
+===============================================================================
+CONTENTS *goldenview-contents*
+
+ 1. Introduction |goldenview-introduction|
+ 2. Features |goldenview-features|
+ 1. 1. AutoResizing |goldenview-1.-autoresizing|
+ 2. 2. Tiled Windows Management |goldenview-2.-tiled-windows-management|
+ 3. Installation |goldenview-installation|
+ 1. Option A - With Plugin Manager [4] ( recommanded )
+ 2. Option B - Without Plugin Manager [4]
+ 4. Quick Start |goldenview-quick-start|
+ 1. |g:goldenview__enable_default_mapping|
+ 2. |g:goldenview__enable_at_startup|
+ 5. More Commands and Mappings |goldenview-more-commands-and-mappings|
+ 1. |:ToggleGoldenViewAutoResize|
+ 2. |:DisableGoldenViewAutoResize|
+ 3. |:EnableGoldenViewAutoResize|
+ 4. |:GoldenViewResize|
+ 5. |:SwitchGoldenViewLargest|
+ 6. |:SwitchGoldenViewSmallest|
+ 6. Rules |goldenview-rules|
+ 1. |g:goldenview__ignore_urule|
+ 2. |g:goldenview__restore_urule|
+ 7. Profiles |goldenview-profiles|
+ 1. |g:goldenview__active_profile|
+ 2. |g:goldenview__reset_profile|
+ 8. Troubleshooting: |goldenview-troubleshooting:|
+ 1. Please do not resize me! |goldenview-please-do-not-resize-me|
+ 2. minibufexpl.vim [6] takes 5+ lines |goldenview-minibufexpl.vim-6-takes-5-lines|
+ 3. I still have Issues: |goldenview-i-still-have-issues:|
+ 9. Contributors |goldenview-contributors|
+ 10. RELEASE HISTORY |goldenview-release-history|
+ 11. LICENSE: |goldenview-license:|
+
+===============================================================================
+INTRODUCTION *goldenview-introduction*
+>
+ ------------- - -----------------------------------------------
+ Plugin : GoldenView.vim
+ Author : Zhao Cai
+ EMail : caizhaoff@gmail.com
+ URL : http://zhaocai.github.io/GoldenView.Vim/
+ Version : 1.2.2
+ Date Created : Tue 18 Sep 2012 05:23:13 PM EDT
+ Last Modified : Wed 17 Apr 2013 09:52:45 PM EDT
+ ------------- - -----------------------------------------------
+
+The initial motive for GoldenView [1] comes from the frustration of using
+other vim plugins to auto-resize split windows. The idea is deadly simple and
+very useful: resize the focused window to a proper size. However, in practice,
+many hiccups makes auto-resizing not a smooth experience. Below are a list of
+issues GoldenView [1] attempts to solve:
+
+First and the most important one, auto-resizing should play nicely with
+existing plugins like 'tagbar', 'vimfiler', 'unite', 'VOoM', 'quickfix',
+'undotree', 'gundo', etc. These windows should manage there own window size.
+
+Second, auto-resizing should take care of the other windows too. Resizing the
+focused window may cause the other windows become too small. When you have 4+
+split windows, auto-resizing may just make a mess out of it.
+
+ GoldView Screencast, see reference [2]
+
+GoldView Screencast
+
+===============================================================================
+FEATURES *goldenview-features*
+
+GoldenView [1] has preliminarily solved the issues described above. It also
+provides other features. Bascally, it does two things:
+
+-------------------------------------------------------------------------------
+1. AUTORESIZING *goldenview-1.-autoresizing*
+
+First of all, it automatically resize the focused split window to a "golden"
+view based on golden ratio [3] and 'textwidth'.
+
+-------------------------------------------------------------------------------
+2. TILED WINDOWS MANAGEMENT *goldenview-2.-tiled-windows-management*
+
+Second, it maps a single key ('' by default) to nicely split windows to
+tiled windows.
+>
+ ----+----------------+------------+---+
+ | | | | |
+ | F | | S1 | T |
+ | I | +------------| A |
+ | L | | S2 | G |
+ | E | MAIN PANE +------------+ B |
+ | R | | S3 | A |
+ | | | | R |
+ | | | | |
+ +---+----------------+------------+---+
+
+To get this view, just hit '' 4 times. or, if you have a large monitor,
+you may get tiled windows below.
+>
+ ----+---------------+--------------+------------+---+
+ | | | | | |
+ | F | | | S1 | T |
+ | I | | +------------| A |
+ | L | | M2 | S2 | G |
+ | E | MAIN PANE | +------------+ B |
+ | R | | | S3 | A |
+ | | | | | B |
+ | | | | | |
+ +---+---------------+--------------+------------+---+
+
+To quickly switch between those windows, a few keys are mapped to
+
+- Focus to the main window
+
+- Switch with the 'MAIN PANE', the largest, smallest, etc.
+
+- Jump to the next and previous window
+
+===============================================================================
+INSTALLATION *goldenview-installation*
+
+Install GoldenView [1] is the same as installing other vim plugins. If
+experienced with vim, you can skim the example below and move to next section.
+
+-------------------------------------------------------------------------------
+OPTION A - WITH PLUGIN MANAGER [4] ( RECOMMANDED )
+
+If you use plugin managers like Pathogen, vundle, neobundle,
+vim-addon-manager, etc., just unarchive the zip file or clone the GoldenView
+[1] repo from 'git://github.com/zhaocai/GoldenView.git' into your local plugin
+installation directory (most likely '~/.vim/bundle/'). Then add corresponding
+scripts in .vimrc for the bundle manager you are using.
+
+Example:
+
+- neobundle:
+>
+ NeoBundle 'zhaocai/GoldenView.Vim' "Always have a nice view for vim split windows
+
+- vundle:
+>
+ Bundle 'zhaocai/GoldenView.Vim'
+
+- vim-addon-manager:
+>
+ call vam#ActivateAddons(['GoldenView.Vim'], {'auto_install' : 1})
+
+-------------------------------------------------------------------------------
+OPTION B - WITHOUT PLUGIN MANAGER [4]
+
+Unarchive the zip file into a directory that is under 'runtimepath' of your
+vim, '~/.vim' for example.
+
+===============================================================================
+QUICK START *goldenview-quick-start*
+
+GoldenView [1] should work out of the box without configuration. It should
+automatically start to resize focused window to golden ratio [3] based on
+'textwidth' and vim available size. You may start to play with it now.
+
+To get you started, a few default keys are mapped as below:
+>
+ " 1. split to tiled windows
+ nmap GoldenViewSplit
+
+ " 2. quickly switch current window with the main pane
+ " and toggle back
+ nmap GoldenViewSwitchMain
+ nmap GoldenViewSwitchToggle
+
+ " 3. jump to next and previous window
+ nmap GoldenViewNext
+ nmap GoldenViewPrevious
+
+The meaning of those keys are self-explaining. A general workflow would be
+'GoldenViewSplit' key to quickly and nicely split windows to the layout
+as below. Then you may open your files.
+>
+ ----+----------------+------------+---+
+ | | | | |
+ | F | | S1 | T |
+ | I | +------------| A |
+ | L | | S2 | G |
+ | E | MAIN PANE +------------+ B |
+ | R | | S3 | A |
+ | | | | R |
+ | | | | |
+ +---+----------------+------------+---+
+
+To switch 'S1' with 'MAIN PANE', in 'S1' and hit 'GoldenViewSwitchMain'.
+To switch back, hit 'GoldenViewSwitchToggle' in either 'MAIN PAIN' or
+'S1'
+
+-------------------------------------------------------------------------------
+*g:goldenview__enable_default_mapping*
+
+Every experienced vim user has a different set of key mappings. If you you are
+(most likely) unhappy about some of the mappings, map you own keys as below:
+>
+ let g:goldenview__enable_default_mapping = 0
+
+ nmap GoldenViewSplit
+ " ... and so on
+
+-------------------------------------------------------------------------------
+*g:goldenview__enable_at_startup*
+
+if you do not want to start auto-resizing automatically, you can put 'let
+g:goldenview__enable_at_startup = 0' in your vimrc.
+
+===============================================================================
+MORE COMMANDS AND MAPPINGS *goldenview-more-commands-and-mappings*
+
+-------------------------------------------------------------------------------
+*:ToggleGoldenViewAutoResize*
+
+-------------------------------------------------------------------------------
+*:DisableGoldenViewAutoResize*
+
+-------------------------------------------------------------------------------
+*:EnableGoldenViewAutoResize*
+
+These commands toggle, enable, and disable GoldenView auto-resizing.
+
+-------------------------------------------------------------------------------
+*:GoldenViewResize*
+
+this command do manual resizing of focused window.
+
+You can also map a key for this as below:
+>
+ nmap GoldenViewResize
+
+-------------------------------------------------------------------------------
+*:SwitchGoldenViewLargest*
+
+-------------------------------------------------------------------------------
+*:SwitchGoldenViewSmallest*
+
+these commands do as it named.
+
+You can also add mappings as below. ( no default keys for these mappings)
+```vim nmap GoldenViewSwitchWithLargest nmap GoldenViewSwitchWithSmallest
+
+```
+
+Other switch rules can be easily defined. If you have some ideas, please post
+to github issue [5] for discussion.
+
+===============================================================================
+RULES *goldenview-rules*
+
+GoldenView [1] defines two rules:
+
+-------------------------------------------------------------------------------
+*g:goldenview__ignore_urule*
+
+is to "ignore" - allow those special buffers to manage their own window size.
+
+-------------------------------------------------------------------------------
+*g:goldenview__restore_urule*
+
+is to "restore" - restore window size of some of special buffers.
+
+The 'urule' (user rules) are like this, which will be normalize at runtime for
+faster processing.
+>
+ \{
+ \ 'filetype' : [
+ \ '' ,
+ \ 'qf' , 'vimpager', 'undotree', 'tagbar',
+ \ 'nerdtree', 'vimshell', 'vimfiler', 'voom' ,
+ \ 'tabman' , 'unite' , 'quickrun', 'Decho' ,
+ \ ],
+ \ 'buftype' : [
+ \ 'nofile' ,
+ \ ],
+ \ 'bufname' : [
+ \ 'GoToFile' , 'diffpanel_\d\+' ,
+ \ '__Gundo_Preview__' , '__Gundo__' ,
+ \ '\[LustyExplorer-Buffers\]' , '\-MiniBufExplorer\-' ,
+ \ '_VOOM\d\+$' , '__Urannotate_\d\+__' ,
+ \ '__MRU_Files__' ,
+ \ ],
+ \},
+
+===============================================================================
+PROFILES *goldenview-profiles*
+
+GoldenView [1] defines two profile:
+
+-------------------------------------------------------------------------------
+*g:goldenview__active_profile*
+
+defines the functions and preferences to auto resize windows.
+
+-------------------------------------------------------------------------------
+*g:goldenview__reset_profile*
+
+defines reset preferences to restore everything to default.
+
+'function GoldenView#ExtendProfile()' is provided to customize preferences.
+
+For more details, please read the source code! :)
+
+===============================================================================
+TROUBLESHOOTING: *goldenview-troubleshooting:*
+
+-------------------------------------------------------------------------------
+PLEASE DO NOT RESIZE ME! *goldenview-please-do-not-resize-me*
+
+GoldenView [1] maintains rules for "common" cases. But vim offers a great
+variety of plugins which defines buffers for special purposes. If you find
+some special buffers which is supposed to not be auto-resized. Please check
+|g:goldenview__ignore_urule|. You may extend the |g:goldenview__active_profile|
+or post the issue to github issue [5] for adding it to builtin support.
+
+-------------------------------------------------------------------------------
+MINIBUFEXPL.VIM [6] TAKES 5+ LINES *goldenview-minibufexpl.vim-6-takes-5-lines*
+
+Check my fork minibufexpl.vim [6] to see if it is working for you. I have send
+pull request to the origin repo.
+
+-------------------------------------------------------------------------------
+I STILL HAVE ISSUES: *goldenview-i-still-have-issues:*
+
+If you have any issues, please post it to github issue [5] for discussion.
+
+===============================================================================
+CONTRIBUTORS *goldenview-contributors*
+
+===============================================================================
+RELEASE HISTORY *goldenview-release-history*
+
+Refer to History.md [7]
+
+===============================================================================
+LICENSE: *goldenview-license:*
+
+Copyright (c) 2013 Zhao Cai
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation, either version 3 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program. If not, see 'http://www.gnu.org/licenses/' [8].
+
+===============================================================================
+REFERENCES *goldenview-references*
+
+[1] http://zhaocai.github.io/GoldenView.Vim/
+[2] http://dl.dropboxusercontent.com/u/1897501/Screencasts/GoldenView.gif
+[3] http://en.wikipedia.org/wiki/Golden_ratio
+[4] http://vim-scripts.org/vim/tools.html
+[5] https://github.com/zhaocai/GoldenView.Vim/issues
+[6] https://github.com/zhaocai/minibufexpl.vim
+[7] https://github.com/zhaocai/GoldenView.Vim/blob/master/History.md
+[8] http://www.gnu.org/licenses/
+
+vim: ft=help
diff --git a/vim/plugins/GoldenView/plugin/GoldenView.vim b/vim/plugins/GoldenView/plugin/GoldenView.vim
new file mode 100644
index 0000000..ae244fb
--- /dev/null
+++ b/vim/plugins/GoldenView/plugin/GoldenView.vim
@@ -0,0 +1,177 @@
+" =============== ============================================================
+" Name : GoldenView
+" Description : Golden view for vim split windows
+" Author : Zhao Cai
+" HomePage : https://github.com/zhaocai/GoldenView.Vim
+" Date Created : Tue 18 Sep 2012 10:25:23 AM EDT
+" Last Modified : Sat 29 Sep 2012 01:23:02 AM EDT
+" Tag : [ vim, window, size, golden-ratio ]
+" Copyright : © 2012 by Zhao Cai,
+" Released under current GPL license.
+" =============== ============================================================
+
+" ============================================================================
+" Load Guard: ⟨⟨⟨1
+" ============================================================================
+if !GoldenView#zl#rc#load_guard(
+ \ expand(':t:r'), 700, 130, ['!&cp', "has('float')"])
+ finish
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+
+" ============================================================================
+" Settings: ⟨⟨⟨1
+" ============================================================================
+
+call GoldenView#zl#rc#set_default({
+ \ 'g:goldenview__enable_at_startup' : 1 ,
+ \ 'g:goldenview__enable_default_mapping' : 1 ,
+ \ 'g:goldenview__active_profile' : 'default' ,
+ \ 'g:goldenview__reset_profile' : 'reset' ,
+ \ 'g:goldenview__ignore_urule' : {
+ \ 'filetype' : [
+ \ '' ,
+ \ 'qf' , 'vimpager', 'undotree', 'tagbar',
+ \ 'nerdtree', 'vimshell', 'vimfiler', 'voom' ,
+ \ 'tabman' , 'unite' , 'quickrun', 'Decho' ,
+ \ 'ControlP', 'diff' , 'extradite'
+ \ ],
+ \ 'buftype' : [
+ \ 'nofile' ,
+ \ ],
+ \ 'bufname' : [
+ \ 'GoToFile' , 'diffpanel_\d\+' ,
+ \ '__Gundo_Preview__' , '__Gundo__' ,
+ \ '\[LustyExplorer-Buffers\]' , '\-MiniBufExplorer\-' ,
+ \ '_VOOM\d\+$' , '__Urannotate_\d\+__' ,
+ \ '__MRU_Files__' , 'FencView_\d\+$'
+ \ ],
+ \ },
+ \ 'g:goldenview__restore_urule' : {
+ \ 'filetype' : [
+ \ 'nerdtree', 'vimfiler',
+ \ ],
+ \ 'bufname' : [
+ \ '__MRU_Files__' ,
+ \ ],
+ \ },
+ \
+ \ })
+
+
+
+" ============================================================================
+" Public Interface: ⟨⟨⟨1
+" ============================================================================
+
+
+
+" Auto Resize:
+" ------------
+command! -nargs=0 ToggleGoldenViewAutoResize
+\ call GoldenView#ToggleAutoResize()
+
+command! -nargs=0 DisableGoldenViewAutoResize
+\ call GoldenView#DisableAutoResize()
+
+command! -nargs=0 EnableGoldenViewAutoResize
+\ call GoldenView#EnableAutoResize()
+
+nnoremap ToggleGoldenViewAutoResize
+\ :ToggleGoldenViewAutoResize
+
+
+
+" Manual Resize:
+" --------------
+command! -nargs=0 GoldenViewResize
+\ call GoldenView#EnableAutoResize()
+\|call GoldenView#DisableAutoResize()
+
+nnoremap GoldenViewResize
+\ :GoldenViewResize
+
+
+
+" Layout Split:
+" -------------
+nnoremap GoldenViewSplit
+\ :call GoldenView#Split()
+" [TODO]( define comfortable width &tw * 4/3) @zhaocai @start(2012-09-29 01:17)
+
+
+
+" Goto Window:
+" ------------
+nnoremap GoldenViewNext
+\ :call GoldenView#zl#window#next_window_or_tab()
+
+nnoremap GoldenViewPrevious
+\ :call GoldenView#zl#window#previous_window_or_tab()
+
+
+
+" Switch Window:
+" --------------
+nnoremap GoldenViewSwitchMain
+\ :