diff --git a/vim/colors/peaksea.vim b/vim/colors/peaksea.vim new file mode 100644 index 0000000..2466360 --- /dev/null +++ b/vim/colors/peaksea.vim @@ -0,0 +1,601 @@ +" Vim color file --- psc (peak sea color) "Lite version" +" Maintainer: Pan, Shi Zhu +" URL: http://vim.sourceforge.net/scripts/script.php?script_id=760 +" Last Change: 5 Feb 2010 +" Version: 3.4 +" +" Comments and e-mails are welcomed, thanks. +" +" The peaksea color is simply a colorscheme with the default settings of +" the original ps_color. Lite version means there's no custom settings +" and fancy features such as integration with reloaded.vim +" +" The full version of ps_color.vim will be maintained until Vim 8. +" By then there will be only the lite version: peaksea.vim +" +" Note: Please set the background option in your .vimrc and/or .gvimrc +" +" It is much better *not* to set 'background' option inside +" a colorscheme file. because ":set background" improperly +" may cause colorscheme be sourced twice +" +" Color Scheme Overview: +" :ru syntax/hitest.vim +" +" Relevant Help: +" :h highlight-groups +" :h psc-cterm-color-table +" +" Colors Order: +" #rrggbb +" + +hi clear + +if exists("syntax_on") + syntax reset +endif + +let g:colors_name = expand(":t:r") + +" I don't want to abuse folding, but here folding is used to avoid confusion. +if &background=='light' + " for background=light {{{2 + " LIGHT COLOR DEFINE START + + hi Normal guifg=#000000 guibg=#e0e0e0 gui=NONE + hi Search guifg=NONE guibg=#f8f8f8 gui=NONE + hi Visual guifg=NONE guibg=#a6caf0 gui=NONE + hi Cursor guifg=#f0f0f0 guibg=#008000 gui=NONE + " The idea of CursorIM is pretty good, however, the feature is still buggy + " in the current version (Vim 7.0). + " The following line will be kept commented until the bug fixed. + " + " hi CursorIM guifg=#f0f0f0 guibg=#800080 + hi Special guifg=#907000 guibg=NONE gui=NONE + hi Comment guifg=#606000 guibg=NONE gui=NONE + hi Number guifg=#907000 guibg=NONE gui=NONE + hi Constant guifg=#007068 guibg=NONE gui=NONE + hi StatusLine guifg=fg guibg=#a6caf0 gui=NONE + hi LineNr guifg=#686868 guibg=NONE gui=NONE + hi Question guifg=fg guibg=#d0d090 gui=NONE + hi PreProc guifg=#009030 guibg=NONE gui=NONE + hi Statement guifg=#2060a8 guibg=NONE gui=NONE + hi Type guifg=#0850a0 guibg=NONE gui=NONE + hi Todo guifg=#800000 guibg=#e0e090 gui=NONE + " NOTE THIS IS IN THE WARM SECTION + hi Error guifg=#c03000 guibg=NONE gui=NONE + hi Identifier guifg=#a030a0 guibg=NONE gui=NONE + hi ModeMsg guifg=fg guibg=#b0b0e0 gui=NONE + hi VisualNOS guifg=fg guibg=#b0b0e0 gui=NONE + hi SpecialKey guifg=#1050a0 guibg=NONE gui=NONE + hi NonText guifg=#002090 guibg=#d0d0d0 gui=NONE + hi Directory guifg=#a030a0 guibg=NONE gui=NONE + hi ErrorMsg guifg=fg guibg=#f0b090 gui=NONE + hi MoreMsg guifg=#489000 guibg=NONE gui=NONE + hi Title guifg=#a030a0 guibg=NONE gui=NONE + hi WarningMsg guifg=#b02000 guibg=NONE gui=NONE + hi WildMenu guifg=fg guibg=#d0d090 gui=NONE + hi Folded guifg=NONE guibg=#b0e0b0 gui=NONE + hi FoldColumn guifg=fg guibg=#90e090 gui=NONE + hi DiffAdd guifg=NONE guibg=#b0b0e0 gui=NONE + hi DiffChange guifg=NONE guibg=#e0b0e0 gui=NONE + hi DiffDelete guifg=#002090 guibg=#d0d0d0 gui=NONE + hi DiffText guifg=NONE guibg=#c0e080 gui=NONE + hi SignColumn guifg=fg guibg=#90e090 gui=NONE + + hi IncSearch guifg=#f0f0f0 guibg=#806060 gui=NONE + hi StatusLineNC guifg=fg guibg=#c0c0c0 gui=NONE + hi VertSplit guifg=fg guibg=#c0c0c0 gui=NONE + hi Underlined guifg=#6a5acd guibg=NONE gui=underline + hi Ignore guifg=bg guibg=NONE + " NOTE THIS IS IN THE WARM SECTION + if v:version >= 700 + if has('spell') + hi SpellBad guifg=NONE guibg=NONE guisp=#c03000 + hi SpellCap guifg=NONE guibg=NONE guisp=#2060a8 + hi SpellRare guifg=NONE guibg=NONE guisp=#a030a0 + hi SpellLocal guifg=NONE guibg=NONE guisp=#007068 + endif + hi Pmenu guifg=fg guibg=#e0b0e0 + hi PmenuSel guifg=#f0f0f0 guibg=#806060 gui=NONE + hi PmenuSbar guifg=fg guibg=#c0c0c0 gui=NONE + hi PmenuThumb guifg=fg guibg=#c0e080 gui=NONE + hi TabLine guifg=fg guibg=#c0c0c0 gui=NONE + hi TabLineFill guifg=fg guibg=#c0c0c0 gui=NONE + hi TabLineSel guifg=fg guibg=NONE gui=NONE + hi CursorColumn guifg=NONE guibg=#f0b090 + hi CursorLine guifg=NONE guibg=NONE gui=underline + hi MatchParen guifg=NONE guibg=#c0e080 + endif + + " LIGHT COLOR DEFINE END + + " Vim 7 added stuffs + if v:version >= 700 + hi Ignore gui=NONE + + " the gui=undercurl guisp could only support in Vim 7 + if has('spell') + hi SpellBad gui=undercurl + hi SpellCap gui=undercurl + hi SpellRare gui=undercurl + hi SpellLocal gui=undercurl + endif + hi TabLine gui=underline + hi TabLineFill gui=underline + hi CursorLine gui=underline + endif + + " For reversed stuffs, clear the reversed prop and set the bold prop again + hi IncSearch gui=bold + hi StatusLine gui=bold + hi StatusLineNC gui=bold + hi VertSplit gui=bold + hi Visual gui=bold + + " Enable the bold property + hi Question gui=bold + hi DiffText gui=bold + hi Statement gui=bold + hi Type gui=bold + hi MoreMsg gui=bold + hi ModeMsg gui=bold + hi NonText gui=bold + hi Title gui=bold + hi DiffDelete gui=bold + hi TabLineSel gui=bold + + " gui define for background=light end here + + " generally, a dumb terminal is dark, we assume the light terminal has 256 + " color support. + if &t_Co==8 || &t_Co==16 + set t_Co=256 + endif + if &t_Co==256 + " 256color light terminal support here + + hi Normal ctermfg=16 ctermbg=254 cterm=NONE + " Comment/Uncomment the following line to disable/enable transparency + "hi Normal ctermfg=16 ctermbg=NONE cterm=NONE + hi Search ctermfg=NONE ctermbg=231 cterm=NONE + hi Visual ctermfg=NONE ctermbg=153 cterm=NONE + hi Cursor ctermfg=255 ctermbg=28 cterm=NONE + " hi CursorIM ctermfg=255 ctermbg=90 + hi Special ctermfg=94 ctermbg=NONE cterm=NONE + hi Comment ctermfg=58 ctermbg=NONE cterm=NONE + hi Number ctermfg=94 ctermbg=NONE cterm=NONE + hi Constant ctermfg=23 ctermbg=NONE cterm=NONE + hi StatusLine ctermfg=fg ctermbg=153 cterm=NONE + hi LineNr ctermfg=242 ctermbg=NONE cterm=NONE + hi Question ctermfg=fg ctermbg=186 cterm=NONE + hi PreProc ctermfg=29 ctermbg=NONE cterm=NONE + hi Statement ctermfg=25 ctermbg=NONE cterm=NONE + hi Type ctermfg=25 ctermbg=NONE cterm=NONE + hi Todo ctermfg=88 ctermbg=186 cterm=NONE + " NOTE THIS IS IN THE WARM SECTION + hi Error ctermfg=130 ctermbg=NONE cterm=NONE + hi Identifier ctermfg=133 ctermbg=NONE cterm=NONE + hi ModeMsg ctermfg=fg ctermbg=146 cterm=NONE + hi VisualNOS ctermfg=fg ctermbg=146 cterm=NONE + hi SpecialKey ctermfg=25 ctermbg=NONE cterm=NONE + hi NonText ctermfg=18 ctermbg=252 cterm=NONE + " Comment/Uncomment the following line to disable/enable transparency + "hi NonText ctermfg=18 ctermbg=NONE cterm=NONE + hi Directory ctermfg=133 ctermbg=NONE cterm=NONE + hi ErrorMsg ctermfg=fg ctermbg=216 cterm=NONE + hi MoreMsg ctermfg=64 ctermbg=NONE cterm=NONE + hi Title ctermfg=133 ctermbg=NONE cterm=NONE + hi WarningMsg ctermfg=124 ctermbg=NONE cterm=NONE + hi WildMenu ctermfg=fg ctermbg=186 cterm=NONE + hi Folded ctermfg=NONE ctermbg=151 cterm=NONE + hi FoldColumn ctermfg=fg ctermbg=114 cterm=NONE + hi DiffAdd ctermfg=NONE ctermbg=146 cterm=NONE + hi DiffChange ctermfg=NONE ctermbg=182 cterm=NONE + hi DiffDelete ctermfg=18 ctermbg=252 cterm=NONE + hi DiffText ctermfg=NONE ctermbg=150 cterm=NONE + hi SignColumn ctermfg=fg ctermbg=114 cterm=NONE + + hi IncSearch ctermfg=255 ctermbg=95 cterm=NONE + hi StatusLineNC ctermfg=fg ctermbg=250 cterm=NONE + hi VertSplit ctermfg=fg ctermbg=250 cterm=NONE + hi Underlined ctermfg=62 ctermbg=NONE cterm=underline + hi Ignore ctermfg=bg ctermbg=NONE + " NOTE THIS IS IN THE WARM SECTION + if v:version >= 700 + if has('spell') + if 0 + " ctermsp is not supported in Vim7, we ignore it. + hi SpellBad cterm=undercurl ctermbg=NONE ctermfg=130 + hi SpellCap cterm=undercurl ctermbg=NONE ctermfg=25 + hi SpellRare cterm=undercurl ctermbg=NONE ctermfg=133 + hi SpellLocal cterm=undercurl ctermbg=NONE ctermfg=23 + else + hi SpellBad cterm=undercurl ctermbg=NONE ctermfg=NONE + hi SpellCap cterm=undercurl ctermbg=NONE ctermfg=NONE + hi SpellRare cterm=undercurl ctermbg=NONE ctermfg=NONE + hi SpellLocal cterm=undercurl ctermbg=NONE ctermfg=NONE + endif + endif + hi Pmenu ctermfg=fg ctermbg=182 + hi PmenuSel ctermfg=255 ctermbg=95 cterm=NONE + hi PmenuSbar ctermfg=fg ctermbg=250 cterm=NONE + hi PmenuThumb ctermfg=fg ctermbg=150 cterm=NONE + hi TabLine ctermfg=fg ctermbg=250 cterm=NONE + hi TabLineFill ctermfg=fg ctermbg=250 cterm=NONE + hi TabLineSel ctermfg=fg ctermbg=NONE cterm=NONE + hi CursorColumn ctermfg=NONE ctermbg=216 + hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline + hi MatchParen ctermfg=NONE ctermbg=150 + endif + + hi TabLine cterm=underline + hi TabLineFill cterm=underline + hi CursorLine cterm=underline + + " For reversed stuffs, clear the reversed prop and set the bold prop again + hi IncSearch cterm=bold + hi StatusLine cterm=bold + hi StatusLineNC cterm=bold + hi VertSplit cterm=bold + hi Visual cterm=bold + + hi NonText cterm=bold + hi Question cterm=bold + hi Title cterm=bold + hi DiffDelete cterm=bold + hi DiffText cterm=bold + hi Statement cterm=bold + hi Type cterm=bold + hi MoreMsg cterm=bold + hi ModeMsg cterm=bold + hi TabLineSel cterm=bold + + "hi lCursor ctermfg=bg ctermbg=fg cterm=NONE + endif " t_Co==256 + " }}}2 +elseif &background=='dark' + " for background=dark {{{2 + " DARK COLOR DEFINE START + + hi Normal guifg=#d0d0d0 guibg=#202020 gui=NONE + hi Comment guifg=#d0d090 guibg=NONE gui=NONE + hi Constant guifg=#80c0e0 guibg=NONE gui=NONE + hi Number guifg=#e0c060 guibg=NONE gui=NONE + hi Identifier guifg=#f0c0f0 guibg=NONE gui=NONE + hi Statement guifg=#c0d8f8 guibg=NONE gui=NONE + hi PreProc guifg=#60f080 guibg=NONE gui=NONE + hi Type guifg=#b0d0f0 guibg=NONE gui=NONE + hi Special guifg=#e0c060 guibg=NONE gui=NONE + hi Error guifg=#f08060 guibg=NONE gui=NONE + hi Todo guifg=#800000 guibg=#d0d090 gui=NONE + hi Search guifg=NONE guibg=#800000 gui=NONE + hi Visual guifg=#000000 guibg=#a6caf0 gui=NONE + hi Cursor guifg=#000000 guibg=#00f000 gui=NONE + " NOTE THIS IS IN THE COOL SECTION + " hi CursorIM guifg=#000000 guibg=#f000f0 gui=NONE + hi StatusLine guifg=#000000 guibg=#a6caf0 gui=NONE + hi LineNr guifg=#b0b0b0 guibg=NONE gui=NONE + hi Question guifg=#000000 guibg=#d0d090 gui=NONE + hi ModeMsg guifg=fg guibg=#000080 gui=NONE + hi VisualNOS guifg=fg guibg=#000080 gui=NONE + hi SpecialKey guifg=#b0d0f0 guibg=NONE gui=NONE + hi NonText guifg=#6080f0 guibg=#101010 gui=NONE + hi Directory guifg=#80c0e0 guibg=NONE gui=NONE + hi ErrorMsg guifg=#d0d090 guibg=#800000 gui=NONE + hi MoreMsg guifg=#c0e080 guibg=NONE gui=NONE + hi Title guifg=#f0c0f0 guibg=NONE gui=NONE + hi WarningMsg guifg=#f08060 guibg=NONE gui=NONE + hi WildMenu guifg=#000000 guibg=#d0d090 gui=NONE + hi Folded guifg=NONE guibg=#004000 gui=NONE + hi FoldColumn guifg=#e0e0e0 guibg=#008000 gui=NONE + hi DiffAdd guifg=NONE guibg=#000080 gui=NONE + hi DiffChange guifg=NONE guibg=#800080 gui=NONE + hi DiffDelete guifg=#6080f0 guibg=#202020 gui=NONE + hi DiffText guifg=#000000 guibg=#c0e080 gui=NONE + hi SignColumn guifg=#e0e0e0 guibg=#008000 gui=NONE + hi IncSearch guifg=#000000 guibg=#d0d0d0 gui=NONE + hi StatusLineNC guifg=#000000 guibg=#c0c0c0 gui=NONE + hi VertSplit guifg=#000000 guibg=#c0c0c0 gui=NONE + hi Underlined guifg=#80a0ff guibg=NONE gui=underline + hi Ignore guifg=#000000 guibg=NONE + " NOTE THIS IS IN THE COOL SECTION + if v:version >= 700 + if has('spell') + " the guisp= could only support in Vim 7 + hi SpellBad guifg=NONE guibg=NONE guisp=#f08060 + hi SpellCap guifg=NONE guibg=NONE guisp=#6080f0 + hi SpellRare guifg=NONE guibg=NONE guisp=#f0c0f0 + hi SpellLocal guifg=NONE guibg=NONE guisp=#c0d8f8 + endif + hi Pmenu guifg=fg guibg=#800080 + hi PmenuSel guifg=#000000 guibg=#d0d0d0 gui=NONE + hi PmenuSbar guifg=fg guibg=#000080 gui=NONE + hi PmenuThumb guifg=fg guibg=#008000 gui=NONE + hi TabLine guifg=fg guibg=#008000 gui=NONE + hi TabLineFill guifg=fg guibg=#008000 gui=NONE + hi TabLineSel guifg=fg guibg=NONE gui=NONE + hi CursorColumn guifg=NONE guibg=#800000 gui=NONE + hi CursorLine guifg=NONE guibg=NONE gui=underline + hi MatchParen guifg=NONE guibg=#800080 + endif + + " DARK COLOR DEFINE END + + " Vim 7 added stuffs + if v:version >= 700 + hi Ignore gui=NONE + + " the gui=undercurl could only support in Vim 7 + if has('spell') + hi SpellBad gui=undercurl + hi SpellCap gui=undercurl + hi SpellRare gui=undercurl + hi SpellLocal gui=undercurl + endif + hi TabLine gui=underline + hi TabLineFill gui=underline + hi Underlined gui=underline + hi CursorLine gui=underline + endif + + " gui define for background=dark end here + + if &t_Co==8 || &t_Co==16 + " for 8-color and 16-color term + hi Normal ctermfg=LightGrey ctermbg=Black + hi Special ctermfg=Yellow ctermbg=bg + hi Comment ctermfg=DarkYellow ctermbg=bg + hi Constant ctermfg=Blue ctermbg=bg + hi Number ctermfg=Yellow ctermbg=bg + hi LineNr ctermfg=DarkGrey ctermbg=bg + hi PreProc ctermfg=Green ctermbg=bg + hi Statement ctermfg=Cyan ctermbg=bg + hi Type ctermfg=Cyan ctermbg=bg + hi Error ctermfg=Red ctermbg=bg + hi Identifier ctermfg=Magenta ctermbg=bg + hi SpecialKey ctermfg=Cyan ctermbg=bg + hi NonText ctermfg=Blue ctermbg=bg + hi Directory ctermfg=Blue ctermbg=bg + hi MoreMsg ctermfg=Green ctermbg=bg + hi Title ctermfg=Magenta ctermbg=bg + hi WarningMsg ctermfg=Red ctermbg=bg + hi DiffDelete ctermfg=Blue ctermbg=bg + + hi Search ctermfg=NONE ctermbg=DarkRed + hi Visual ctermfg=Black ctermbg=DarkCyan + hi Cursor ctermfg=Black ctermbg=Green + hi StatusLine ctermfg=Black ctermbg=DarkCyan + hi Question ctermfg=Black ctermbg=DarkYellow + hi Todo ctermfg=DarkRed ctermbg=DarkYellow + hi Folded ctermfg=White ctermbg=DarkGreen + hi ModeMsg ctermfg=Grey ctermbg=DarkBlue + hi VisualNOS ctermfg=Grey ctermbg=DarkBlue + hi ErrorMsg ctermfg=DarkYellow ctermbg=DarkRed + hi WildMenu ctermfg=Black ctermbg=DarkYellow + hi FoldColumn ctermfg=White ctermbg=DarkGreen + hi SignColumn ctermfg=White ctermbg=DarkGreen + hi DiffText ctermfg=Black ctermbg=DarkYellow + + if v:version >= 700 + if has('spell') + hi SpellBad ctermfg=NONE ctermbg=DarkRed + hi SpellCap ctermfg=NONE ctermbg=DarkBlue + hi SpellRare ctermfg=NONE ctermbg=DarkMagenta + hi SpellLocal ctermfg=NONE ctermbg=DarkGreen + endif + hi Pmenu ctermfg=fg ctermbg=DarkMagenta + hi PmenuSel ctermfg=Black ctermbg=fg + hi PmenuSbar ctermfg=fg ctermbg=DarkBlue + hi PmenuThumb ctermfg=fg ctermbg=DarkGreen + hi TabLine ctermfg=fg ctermbg=DarkGreen cterm=underline + hi TabLineFill ctermfg=fg ctermbg=DarkGreen cterm=underline + hi CursorColumn ctermfg=NONE ctermbg=DarkRed + + hi TabLineSel ctermfg=fg ctermbg=bg + hi CursorLine ctermfg=NONE ctermbg=bg cterm=underline + + hi MatchParen ctermfg=NONE ctermbg=DarkMagenta + endif + if &t_Co==8 + " 8 colour terminal support, this assumes 16 colour is available through + " setting the 'bold' attribute, will get bright foreground colour. + " However, the bright background color is not available for 8-color terms. + " + " You can manually set t_Co=16 in your .vimrc to see if your terminal + " supports 16 colours, + hi DiffText cterm=none + hi Visual cterm=none + hi Cursor cterm=none + hi Comment cterm=none + hi Todo cterm=none + hi StatusLine cterm=none + hi Question cterm=none + hi DiffChange cterm=none + hi ModeMsg cterm=none + hi VisualNOS cterm=none + hi ErrorMsg cterm=none + hi WildMenu cterm=none + hi DiffAdd cterm=none + hi Folded cterm=none + hi DiffDelete cterm=none + hi Normal cterm=none + hi PmenuThumb cterm=none + hi Search cterm=bold + hi Special cterm=bold + hi Constant cterm=bold + hi Number cterm=bold + hi LineNr cterm=bold + hi PreProc cterm=bold + hi Statement cterm=bold + hi Type cterm=bold + hi Error cterm=bold + hi Identifier cterm=bold + hi SpecialKey cterm=bold + hi NonText cterm=bold + hi MoreMsg cterm=bold + hi Title cterm=bold + hi WarningMsg cterm=bold + hi FoldColumn cterm=bold + hi SignColumn cterm=bold + hi Directory cterm=bold + hi DiffDelete cterm=bold + else + " Background > 7 is only available with 16 or more colors + + hi WarningMsg cterm=none + hi Search cterm=none + hi Visual cterm=none + hi Cursor cterm=none + hi Special cterm=none + hi Comment cterm=none + hi Constant cterm=none + hi Number cterm=none + hi LineNr cterm=none + hi PreProc cterm=none + hi Todo cterm=none + hi Error cterm=none + hi Identifier cterm=none + hi Folded cterm=none + hi SpecialKey cterm=none + hi Directory cterm=none + hi ErrorMsg cterm=none + hi Normal cterm=none + hi PmenuThumb cterm=none + hi WildMenu cterm=none + hi FoldColumn cterm=none + hi SignColumn cterm=none + hi DiffAdd cterm=none + hi DiffChange cterm=none + hi Question cterm=none + hi StatusLine cterm=none + hi DiffText cterm=none + hi IncSearch cterm=reverse + hi StatusLineNC cterm=reverse + hi VertSplit cterm=reverse + + " Well, well, bold font with color 0-7 is not possible. + " So, the Question, StatusLine, DiffText cannot act as expected. + + hi Statement cterm=none + hi Type cterm=none + hi MoreMsg cterm=none + hi ModeMsg cterm=none + hi NonText cterm=none + hi Title cterm=none + hi VisualNOS cterm=none + hi DiffDelete cterm=none + hi TabLineSel cterm=none + + endif + elseif &t_Co==256 + " 256color dark terminal support here + hi Normal ctermfg=252 ctermbg=234 cterm=NONE + " Comment/Uncomment the following line to disable/enable transparency + "hi Normal ctermfg=252 ctermbg=NONE cterm=NONE + hi Comment ctermfg=186 ctermbg=NONE cterm=NONE + hi Constant ctermfg=110 ctermbg=NONE cterm=NONE + hi Number ctermfg=179 ctermbg=NONE cterm=NONE + hi Identifier ctermfg=219 ctermbg=NONE cterm=NONE + hi Statement ctermfg=153 ctermbg=NONE cterm=NONE + hi PreProc ctermfg=84 ctermbg=NONE cterm=NONE + hi Type ctermfg=153 ctermbg=NONE cterm=NONE + hi Special ctermfg=179 ctermbg=NONE cterm=NONE + hi Error ctermfg=209 ctermbg=NONE cterm=NONE + hi Todo ctermfg=88 ctermbg=186 cterm=NONE + hi Search ctermfg=NONE ctermbg=88 cterm=NONE + hi Visual ctermfg=16 ctermbg=153 cterm=NONE + hi Cursor ctermfg=16 ctermbg=46 cterm=NONE + " NOTE THIS IS IN THE COOL SECTION + " hi CursorIM ctermfg=16 ctermbg=201 cterm=NONE + hi StatusLine ctermfg=16 ctermbg=153 cterm=NONE + hi LineNr ctermfg=249 ctermbg=NONE cterm=NONE + hi Question ctermfg=16 ctermbg=186 cterm=NONE + hi ModeMsg ctermfg=fg ctermbg=18 cterm=NONE + hi VisualNOS ctermfg=fg ctermbg=18 cterm=NONE + hi SpecialKey ctermfg=153 ctermbg=NONE cterm=NONE + hi NonText ctermfg=69 ctermbg=233 cterm=NONE + " Comment/Uncomment the following line to disable/enable transparency + "hi NonText ctermfg=69 ctermbg=NONE cterm=NONE + hi Directory ctermfg=110 ctermbg=NONE cterm=NONE + hi ErrorMsg ctermfg=186 ctermbg=88 cterm=NONE + hi MoreMsg ctermfg=150 ctermbg=NONE cterm=NONE + hi Title ctermfg=219 ctermbg=NONE cterm=NONE + hi WarningMsg ctermfg=209 ctermbg=NONE cterm=NONE + hi WildMenu ctermfg=16 ctermbg=186 cterm=NONE + hi Folded ctermfg=NONE ctermbg=22 cterm=NONE + hi FoldColumn ctermfg=254 ctermbg=28 cterm=NONE + hi DiffAdd ctermfg=NONE ctermbg=18 cterm=NONE + hi DiffChange ctermfg=NONE ctermbg=90 cterm=NONE + hi DiffDelete ctermfg=69 ctermbg=234 cterm=NONE + hi DiffText ctermfg=16 ctermbg=150 cterm=NONE + hi SignColumn ctermfg=254 ctermbg=28 cterm=NONE + hi IncSearch ctermfg=16 ctermbg=252 cterm=NONE + hi StatusLineNC ctermfg=16 ctermbg=250 cterm=NONE + hi VertSplit ctermfg=16 ctermbg=250 cterm=NONE + hi Underlined ctermfg=111 ctermbg=NONE cterm=underline + hi Ignore ctermfg=16 ctermbg=NONE + " NOTE THIS IS IN THE COOL SECTION + if v:version >= 700 + if has('spell') + " the ctermsp= is not supported in Vim 7 we simply ignored + if 0 + hi SpellBad cterm=undercurl ctermbg=NONE ctermfg=209 + hi SpellCap cterm=undercurl ctermbg=NONE ctermfg=69 + hi SpellRare cterm=undercurl ctermbg=NONE ctermfg=219 + hi SpellLocal cterm=undercurl ctermbg=NONE ctermfg=153 + else + hi SpellBad cterm=undercurl ctermbg=NONE ctermfg=NONE + hi SpellCap cterm=undercurl ctermbg=NONE ctermfg=NONE + hi SpellRare cterm=undercurl ctermbg=NONE ctermfg=NONE + hi SpellLocal cterm=undercurl ctermbg=NONE ctermfg=NONE + endif + endif + hi Pmenu ctermfg=fg ctermbg=90 + hi PmenuSel ctermfg=16 ctermbg=252 cterm=NONE + hi PmenuSbar ctermfg=fg ctermbg=18 cterm=NONE + hi PmenuThumb ctermfg=fg ctermbg=28 cterm=NONE + hi TabLine ctermfg=fg ctermbg=28 cterm=NONE + hi TabLineFill ctermfg=fg ctermbg=28 cterm=NONE + hi TabLineSel ctermfg=fg ctermbg=NONE cterm=NONE + hi CursorColumn ctermfg=NONE ctermbg=88 cterm=NONE + hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline + hi MatchParen ctermfg=NONE ctermbg=90 + hi TabLine cterm=underline + hi TabLineFill cterm=underline + hi Underlined cterm=underline + hi CursorLine cterm=underline + endif + + endif " t_Co + + " }}}2 +endif + +" Links: +" +" COLOR LINKS DEFINE START + +hi link String Constant +" Character must be different from strings because in many languages +" (especially C, C++) a 'char' variable is scalar while 'string' is pointer, +" mistaken a 'char' for a 'string' will cause disaster! +hi link Character Number +hi link SpecialChar LineNr +hi link Tag Identifier +hi link cCppOut LineNr +" The following are not standard hi links, +" these are used by DrChip +hi link Warning MoreMsg +hi link Notice Constant +" these are used by Calendar +hi link CalToday PreProc +" these are used by TagList +hi link MyTagListTagName IncSearch +hi link MyTagListTagScope Constant + +" COLOR LINKS DEFINE END + +" vim:et:nosta:sw=2:ts=8: +" vim600:fdm=marker:fdl=1: diff --git a/vim/colors/wombat.vim b/vim/colors/wombat.vim new file mode 100644 index 0000000..9ad1e56 --- /dev/null +++ b/vim/colors/wombat.vim @@ -0,0 +1,51 @@ +" Maintainer: Lars H. Nielsen (dengmao@gmail.com) +" Last Change: January 22 2007 + +set background=dark + +hi clear + +if exists("syntax_on") + syntax reset +endif + +let colors_name = "wombat" + + +" Vim >= 7.0 specific colors +if version >= 700 + hi CursorLine guibg=#2d2d2d + hi CursorColumn guibg=#2d2d2d + hi MatchParen guifg=#f6f3e8 guibg=#857b6f gui=bold + hi Pmenu guifg=#f6f3e8 guibg=#444444 + hi PmenuSel guifg=#000000 guibg=#cae682 +endif + +" General colors +hi Cursor guifg=NONE guibg=#656565 gui=none +hi Normal guifg=#f6f3e8 guibg=#242424 gui=none +hi NonText guifg=#808080 guibg=#303030 gui=none +hi LineNr guifg=#857b6f guibg=#000000 gui=none +hi StatusLine guifg=#f6f3e8 guibg=#444444 gui=italic +hi StatusLineNC guifg=#857b6f guibg=#444444 gui=none +hi VertSplit guifg=#444444 guibg=#444444 gui=none +hi Folded guibg=#384048 guifg=#a0a8b0 gui=none +hi Title guifg=#f6f3e8 guibg=NONE gui=bold +hi Visual guifg=#f6f3e8 guibg=#444444 gui=none +hi SpecialKey guifg=#808080 guibg=#343434 gui=none + +" Syntax highlighting +hi Comment guifg=#99968b gui=italic +hi Todo guifg=#8f8f8f gui=italic +hi Constant guifg=#e5786d gui=none +hi String guifg=#95e454 gui=italic +hi Identifier guifg=#cae682 gui=none +hi Function guifg=#cae682 gui=none +hi Type guifg=#cae682 gui=none +hi Statement guifg=#8ac6f2 gui=none +hi Keyword guifg=#8ac6f2 gui=none +hi PreProc guifg=#e5786d gui=none +hi Number guifg=#e5786d gui=none +hi Special guifg=#e7f6da gui=none + + diff --git a/vim/colors/wombat256.vim b/vim/colors/wombat256.vim new file mode 100644 index 0000000..73be6db --- /dev/null +++ b/vim/colors/wombat256.vim @@ -0,0 +1,302 @@ +" Vim color file +" Maintainer: David Liang (bmdavll at gmail dot com) +" Last Change: November 28 2008 +" +" wombat256.vim - a modified version of Wombat by Lars Nielsen that also +" works on xterms with 88 or 256 colors. The algorithm for approximating the +" GUI colors with the xterm palette is from desert256.vim by Henry So Jr. + +set background=dark + +if version > 580 + hi clear + if exists("syntax_on") + syntax reset + endif +endif + +let g:colors_name = "wombat256" + +if !has("gui_running") && &t_Co != 88 && &t_Co != 256 + finish +endif + +" functions {{{ +" returns an approximate grey index for the given grey level +fun 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 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 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 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 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 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 color(r, g, b) + " get the closest grey + let l:gx = grey_number(a:r) + let l:gy = grey_number(a:g) + let l:gz = grey_number(a:b) + + " get the closest color + let l:x = rgb_number(a:r) + let l:y = rgb_number(a:g) + let l:z = rgb_number(a:b) + + if l:gx == l:gy && l:gy == l:gz + " there are two possibilities + let l:dgr = grey_level(l:gx) - a:r + let l:dgg = grey_level(l:gy) - a:g + let l:dgb = grey_level(l:gz) - a:b + let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb) + let l:dr = rgb_level(l:gx) - a:r + let l:dg = rgb_level(l:gy) - a:g + let l:db = 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 grey_color(l:gx) + else + " use the color + return rgb_color(l:x, l:y, l:z) + endif + else + " only one possibility + return rgb_color(l:x, l:y, l:z) + endif +endfun + +" returns the palette index to approximate the 'rrggbb' hex string +fun rgb(rgb) + 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 color(l:r, l:g, l:b) +endfun + +" sets the highlighting for the given group +fun X(group, fg, bg, attr) + if a:fg != "" + exec "hi ".a:group." guifg=#".a:fg." ctermfg=".rgb(a:fg) + endif + if a:bg != "" + exec "hi ".a:group." guibg=#".a:bg." ctermbg=".rgb(a:bg) + endif + if a:attr != "" + if a:attr == 'italic' + exec "hi ".a:group." gui=".a:attr." cterm=none" + else + exec "hi ".a:group." gui=".a:attr." cterm=".a:attr + endif + endif +endfun +" }}} + +call X("Normal", "cccccc", "242424", "none") +call X("Cursor", "222222", "ecee90", "none") +call X("CursorLine", "", "32322e", "none") +call X("CursorColumn", "", "2d2d2d", "") + "CursorIM + "Question + "IncSearch +call X("Search", "444444", "af87d7", "") +call X("MatchParen", "ecee90", "857b6f", "bold") +call X("SpecialKey", "6c6c6c", "2d2d2d", "none") +call X("Visual", "ecee90", "597418", "none") +call X("LineNr", "857b6f", "121212", "none") +call X("Folded", "a0a8b0", "404048", "none") +call X("Title", "f6f3e8", "", "bold") +call X("VertSplit", "444444", "444444", "none") +call X("StatusLine", "f6f3e8", "444444", "italic") +call X("StatusLineNC", "857b6f", "444444", "none") + "Scrollbar + "Tooltip + "Menu + "WildMenu +call X("Pmenu", "f6f3e8", "444444", "") +call X("PmenuSel", "121212", "caeb82", "") +call X("WarningMsg", "ff0000", "", "") + "ErrorMsg + "ModeMsg + "MoreMsg + "Directory + "DiffAdd + "DiffChange + "DiffDelete + "DiffText + +" syntax highlighting +call X("Number", "e5786d", "", "none") +call X("Constant", "e5786d", "", "none") +call X("String", "95e454", "", "italic") +call X("Comment", "c0bc6c", "", "italic") +call X("Identifier", "caeb82", "", "none") +call X("Keyword", "87afff", "", "none") +call X("Statement", "87afff", "", "none") +call X("Function", "caeb82", "", "none") +call X("PreProc", "e5786d", "", "none") +call X("Type", "caeb82", "", "none") +call X("Special", "ffdead", "", "none") +call X("Todo", "857b6f", "", "italic") + "Underlined + "Error + "Ignore + +hi! link VisualNOS Visual +hi! link NonText LineNr +hi! link FoldColumn Folded + +" delete functions {{{ +delf X +delf rgb +delf color +delf rgb_color +delf rgb_level +delf rgb_number +delf grey_color +delf grey_level +delf grey_number +" }}} + +" vim:set ts=4 sw=4 noet fdm=marker: diff --git a/vim/doc/open_terminal.txt b/vim/doc/open_terminal.txt new file mode 100644 index 0000000..bb760c3 --- /dev/null +++ b/vim/doc/open_terminal.txt @@ -0,0 +1,71 @@ +*open-terminal* Open Terminal, Filemanager for various platform + + Open Terminal Help File + +Introduction |open-terminal-introduction| +Commmands |open-terminal-commands| +Requires |open-terminal-requires| +Key map examples |open-terminal-keymap| +Changelog |open-terminal-changelog| +About |open-terminal-about| + +============================================================================== +Introduction *open-terminal-introduction* + +Some vim user want to shell like emacs's eshell. But vim don't support shell, +terminal interface in vim (at least 7.x version). + +In this situation, I use native terminal software open script for my various +working platforms. + +============================================================================== +Commmands *open-terminal-commands* + + *OpenTerminal* +:OpenTerminal Open native terminal sw. Check |requires| list + + *OpenFilemanager* +:OpenFilemanager Open native file manager. Check |requires| list + + +============================================================================== +Map key examples *open-terminal-keymap* +> + nnoremap :OpenTerminal + nnoremap :OpenFilemanager +< + +============================================================================== +Requires (per platform) *open-terminal-requires* + +I use Mac, Gnome, Windows(gvim). I don't test in KDE environment. + + Platform Terminal File manager ~ +> + Mac Terminal.app Finder + (with Applescript) + Gnome gnome-terminal nautilus + KDE konsole konqueror + Windows cmd explorer + (with start) + cygwin bash explorer +< +============================================================================== +Changelog *open-terminal-changelog* + +0.1: + - First release used script for everyone. + + +============================================================================== +About *open-terminal-about* + + Copyright (c) 2009 by neocoin ~ + File: open_terminal.vim + Author: Sangmin Ryu (neocoin@gmail.com) + Date: Tue Dec 22 13:33:32 PST 2009 + License: The MIT License + +============================================================================== + + vim:tw=78:ts=8:ft=help:norl: diff --git a/vim/doc/tags b/vim/doc/tags index bbfd4af..8e0c944 100644 --- a/vim/doc/tags +++ b/vim/doc/tags @@ -57,10 +57,6 @@ 'Tlist_WinWidth' taglist.txt /*'Tlist_WinWidth'* 'loaded_nerd_comments' NERD_commenter.txt /*'loaded_nerd_comments'* 'loaded_nerd_tree' NERD_tree.txt /*'loaded_nerd_tree'* -:AlignCenter textformat.txt /*:AlignCenter* -:AlignJustify textformat.txt /*:AlignJustify* -:AlignLeft textformat.txt /*:AlignLeft* -:AlignRight textformat.txt /*:AlignRight* :CVSEdit vcscommand.txt /*:CVSEdit* :CVSEditors vcscommand.txt /*:CVSEditors* :CVSUnedit vcscommand.txt /*:CVSUnedit* @@ -193,6 +189,8 @@ NERDTreeOptionSummary NERD_tree.txt /*NERDTreeOptionSummary* NERDTreeOptions NERD_tree.txt /*NERDTreeOptions* NERD_commenter.txt NERD_commenter.txt /*NERD_commenter.txt* NERD_tree.txt NERD_tree.txt /*NERD_tree.txt* +OpenFilemanager open_terminal.txt /*OpenFilemanager* +OpenTerminal open_terminal.txt /*OpenTerminal* Tlist_Get_Tag_Prototype_By_Line() taglist.txt /*Tlist_Get_Tag_Prototype_By_Line()* Tlist_Get_Tagname_By_Line() taglist.txt /*Tlist_Get_Tagname_By_Line()* Tlist_Set_App() taglist.txt /*Tlist_Set_App()* @@ -242,6 +240,13 @@ g:bufExplorerSortBy bufexplorer.txt /*g:bufExplorerSortBy* g:bufExplorerSplitBelow bufexplorer.txt /*g:bufExplorerSplitBelow* g:bufExplorerSplitOutPathName bufexplorer.txt /*g:bufExplorerSplitOutPathName* g:bufExplorerSplitRight bufexplorer.txt /*g:bufExplorerSplitRight* +open-terminal open_terminal.txt /*open-terminal* +open-terminal-about open_terminal.txt /*open-terminal-about* +open-terminal-changelog open_terminal.txt /*open-terminal-changelog* +open-terminal-commands open_terminal.txt /*open-terminal-commands* +open-terminal-introduction open_terminal.txt /*open-terminal-introduction* +open-terminal-keymap open_terminal.txt /*open-terminal-keymap* +open-terminal-requires open_terminal.txt /*open-terminal-requires* taglist-commands taglist.txt /*taglist-commands* taglist-debug taglist.txt /*taglist-debug* taglist-extend taglist.txt /*taglist-extend* @@ -259,12 +264,6 @@ taglist-session taglist.txt /*taglist-session* taglist-todo taglist.txt /*taglist-todo* taglist-using taglist.txt /*taglist-using* taglist.txt taglist.txt /*taglist.txt* -textformat-commands textformat.txt /*textformat-commands* -textformat-config textformat.txt /*textformat-config* -textformat-history textformat.txt /*textformat-history* -textformat-keymap textformat.txt /*textformat-keymap* -textformat-start textformat.txt /*textformat-start* -textformat.txt textformat.txt /*textformat.txt* vcscommand vcscommand.txt /*vcscommand* vcscommand-buffer-management vcscommand.txt /*vcscommand-buffer-management* vcscommand-buffer-variables vcscommand.txt /*vcscommand-buffer-variables* diff --git a/vim/doc/vcscommand.txt b/vim/doc/vcscommand.txt index eaee014..34fb5cc 100644 --- a/vim/doc/vcscommand.txt +++ b/vim/doc/vcscommand.txt @@ -81,7 +81,7 @@ output appears in a new window. Many of the commands accept revisions as arguments. By default, most operate on the most recent revision on the current branch if no revision is specified. -Each vcscommand is mapped to a key sequence starting with the +Each vcscommand is mapped to a key sequence starting with the || keystroke. The default mappings may be overridden by supplying different mappings before the plugin is loaded, such as in the vimrc, in the standard fashion for plugin mappings. For examples, please see @@ -131,7 +131,7 @@ This command adds the current file to source control. Please note, this does not commit the newly-added file. All parameters to the command are passed to the underlying VCS. -:VCSAnnotate *:VCSAnnotate* +:VCSAnnotate[!] *:VCSAnnotate* This command displays the current file with each line annotated with the version in which it was most recently changed. If an argument is given, the @@ -140,16 +140,20 @@ it uses the most recent version of the file (on the current branch, if under CVS control). Additionally, if the current buffer is a VCSAnnotate buffer already, the version number on the current line is used. +If '!' is used, the view of the annotated buffer is split so that the +annotation is in a separate window from the content, and each is highlighted +separately. + For CVS buffers, the 'VCSCommandCVSAnnotateParent' option, if set to non-zero, will cause the above behavior to change. Instead of annotating the version on the current line, the parent revision is used instead, crossing branches if necessary. The filetype of the vcscommand scratch buffer is set to one of 'CVSAnnotate', -'SVNAnnotate', or 'SVKAnnotate' as appropriate, to take advantage of the +'SVNAnnotate', 'SVKAnnotate' or 'gitAnnotate' as appropriate, to take advantage of the bundled syntax files. -:VCSBlame *:VCSBlame* +:VCSBlame[!] *:VCSBlame* Alias for |:VCSAnnotate|. @@ -168,9 +172,10 @@ log message. The commit can be abandoned if the log message buffer is deleted or wiped before being written. Alternatively, the mapping that is used to invoke :VCSCommit (by default -cc) can be used in the log message buffer to immediately commit. This -is useful if the |VCSCommandCommitOnWrite| variable is set to 0 to disable the -normal commit-on-write behavior. +||cc, please see |vcscommand-mappings|) can be used in the log message +buffer in Normal mode to immediately commit. This is useful if the +|VCSCommandCommitOnWrite| variable is set to 0 to disable the normal +commit-on-write behavior. :VCSDelete *:VCSDelete* @@ -325,32 +330,33 @@ This command performs "cvs watchers" on the current file. By default, a mapping is defined for each command. These mappings execute the default (no-argument) form of each command. -ca VCSAdd -cn VCSAnnotate -cc VCSCommit -cD VCSDelete -cd VCSDiff -cg VCSGotoOriginal -cG VCSGotoOriginal! -ci VCSInfo -cl VCSLog -cL VCSLock -cr VCSReview -cs VCSStatus -cu VCSUpdate -cU VCSUnlock -cv VCSVimDiff +||ca VCSAdd +||cn VCSAnnotate +||cN VCSAnnotate! +||cc VCSCommit +||cD VCSDelete +||cd VCSDiff +||cg VCSGotoOriginal +||cG VCSGotoOriginal! +||ci VCSInfo +||cl VCSLog +||cL VCSLock +||cr VCSReview +||cs VCSStatus +||cu VCSUpdate +||cU VCSUnlock +||cv VCSVimDiff Only for CVS buffers: -ce CVSEdit -cE CVSEditors -ct CVSUnedit -cwv CVSWatchers -cwa CVSWatchAdd -cwn CVSWatchOn -cwf CVSWatchOff -cwf CVSWatchRemove +||ce CVSEdit +||cE CVSEditors +||ct CVSUnedit +||cwv CVSWatchers +||cwa CVSWatchAdd +||cwn CVSWatchOn +||cwf CVSWatchOff +||cwf CVSWatchRemove *vcscommand-mappings-override* @@ -583,7 +589,7 @@ For instance, the following could be added to the vimrc to provide a 'q' mapping to quit a vcscommand scratch buffer: augroup VCSCommand - au User VCSBufferCreated silent! nmap q: bwipeout + au User VCSBufferCreated silent! nmap q :bwipeout augroup END The following hooks are available: diff --git a/vim/gvimrc b/vim/gvimrc index 7633679..8e607bb 100644 --- a/vim/gvimrc +++ b/vim/gvimrc @@ -11,6 +11,9 @@ set errorbells set visualbell set showtabline=2 set guicursor=a:blinkon0 +set showtabline=2 +set guitablabel=%!GuiTabLabel() +set guitabtooltip=%!GuiTabToolTip() set fuoptions=maxvert,maxhorz set guioptions-=T @@ -21,11 +24,11 @@ if &background == "dark" endif " colorscheme zenburn -" colorscheme freya +colorscheme freya " colorscheme moria " colorscheme morning " colorscheme desert -colorscheme macvim +" colorscheme macvim " colorscheme inkpot " Emacs like indenting. Pressing Tab indents line diff --git a/vim/plugin/open_terminal.vim b/vim/plugin/open_terminal.vim new file mode 100644 index 0000000..e09dd8d --- /dev/null +++ b/vim/plugin/open_terminal.vim @@ -0,0 +1,108 @@ +" +" File: open_terminal.vim +" +" Requires: +" platform Terminal File manager +" Mac Terminal.app Finder +" (with Applescript) +" Gnome gnome-terminal nautilus +" KDE konsole konqueror +" Windows cmd explorer +" (with start) +" cygwin bash explorer +" +" Example: +" nnoremap :OpenTerminal +" nnoremap :OpenFilemanager +" +" Commands: +" OpenTerminal +" OpenFilemanager +" + +" OpenTerminal {{{1 +function! s:open_terminal() + let l:current_dir = getcwd() + execute("chdir " . escape(expand("%:p:h"), " \"'")) + + if has("mac") + let l:cmd = " + \ tell application 'System Events' \n + \ set is_term_running to exists application process '$Terminal' \n + \ end tell \n + \ + \ set cmd to 'cd $current_path' \n + \ tell application '$Terminal' \n + \ activate \n + \ if is_term_running is true then \n + \ do script with command cmd \n + \ else \n + \ do script with command cmd in window 1 \n + \ end if \n + \ end tell \n + \ " + let l:cmd = substitute(l:cmd, "'", '\\"', 'g') + let l:cmd = substitute( l:cmd, "$Terminal", "Terminal", "g" ) + let l:cmd = substitute( l:cmd, "$current_path", "'" . expand("%:p:h") . "'" , "g") + call system('osascript -e " ' . l:cmd . '"') + + elseif has("gui_gnome") && executable("gnome-terminal") + call system("gnome-terminal &") + elseif has("gui_gnome") && executable("konsole") + call system("konsole &") + elseif has("gui_win32") + try + call system("start cmd") + catch /E484:/ + echo "Ignore E484 error in Windows platform" + endtry + elseif executable("bash") + !bash + elseif has("win32") + stop + endif + + execute("chdir " . escape(l:current_dir, " \"'")) +endfunction + +command! -nargs=0 -bar OpenTerminal call s:open_terminal() + +"}}}1 + +" OpenFilemanager {{{1 +function! s:open_filemanager() + let l:cmd = "$cmd ." + + let l:current_dir = getcwd() + execute("chdir " . escape(expand("%:p:h"), " \"'")) + + if has("mac") + call system("open .") + elseif has("gui_gnome") && executable("nautilus") + call system("nautilus .") + elseif has("gui_gnome") && executable("konqueror") + call system("konqueror .") + elseif has("gui_win32") || has("win32") + call system("explorer .") + elseif executable("bash") + !bash + endif + + execute("chdir " . escape(l:current_dir, " \"'")) +endfunction + +command! -nargs=0 -bar OpenFilemanager call s:open_filemanager() +" }}}1 + +" About file info {{{1 +"============================================================================= +" Copyright (c) 2009 by neocoin +" File: open_terminal.vim +" Author: Sangmin Ryu (neocoin@gmail.com) +" Date: Tue Dec 22 13:33:32 PST 2009 +" License: The MIT License +" Version: 0.1 +"============================================================================= +" }}}1 + +" vim: set fdm=marker: diff --git a/vim/plugin/statusline.vim b/vim/plugin/statusline.vim new file mode 100644 index 0000000..ecf4814 --- /dev/null +++ b/vim/plugin/statusline.vim @@ -0,0 +1,91 @@ +" """""""""""" +" Status Line +" """""""""""" +" Some useful functions +"return the syntax highlight group under the cursor '' +function! StatuslineCurrentHighlight() + let name = synIDattr(synID(line('.'),col('.'),1),'name') + if name == '' + return '' + else + return '[' . name . ']' + endif +endfunction + +"recalculate the tab warning flag when idle and after writing +autocmd cursorhold,bufwritepost * unlet! b:statusline_tab_warning +" +"return '[&et]' if &et is set wrong +"return '[mixed-indenting]' if spaces and tabs are used to indent +"return an empty string if everything is fine +function! StatuslineTabWarning() + if !exists("b:statusline_tab_warning") + let tabs = search('^\t', 'nw') != 0 + let spaces = search('^ ', 'nw') != 0 + + if tabs && spaces + let b:statusline_tab_warning = '[mixed-indenting]' + elseif (spaces && !&et) || (tabs && &et) + let b:statusline_tab_warning = '[&et]' + else + let b:statusline_tab_warning = '' + endif + endif + return b:statusline_tab_warning +endfunction + +"recalculate the trailing whitespace warning when idle, and after saving +autocmd cursorhold,bufwritepost * unlet! b:statusline_trailing_space_warning + +"return '[\s]' if trailing white space is detected +"return '' otherwise +function! StatuslineTrailingSpaceWarning() + if !exists("b:statusline_trailing_space_warning") + if search('\s\+$', 'nw') != 0 + let b:statusline_trailing_space_warning = '[\s]' + else + let b:statusline_trailing_space_warning = '' + endif + endif + return b:statusline_trailing_space_warning +endfunction + + +" Real Status line definition +set statusline=%t\ "tail of the filename + +"display a warning if fileformat isnt unix +set statusline+=%#warningmsg# +set statusline+=%{&ff!='unix'?'['.&ff.']':''} +set statusline+=%* + +"display a warning if file encoding isnt utf-8 +set statusline+=%#warningmsg# +set statusline+=%{(&fenc!='utf-8'&&&fenc!='')?'['.&fenc.']':''} +set statusline+=%* + +set statusline+=%h "help file flag +set statusline+=%y "filetype +set statusline+=%r "read only flag +set statusline+=%m "modified flag + +"display a warning if &et is wrong, or we have mixed-indenting +set statusline+=%#error# +set statusline+=%{StatuslineTabWarning()} +set statusline+=%* + +set statusline+=%{StatuslineTrailingSpaceWarning()} + +"display a warning if &paste is set +set statusline+=%#error# +set statusline+=%{&paste?'[paste]':'[nopaste]'} +set statusline+=%* + +set statusline+=%= "left/right separator +set statusline+=%{StatuslineCurrentHighlight()}\ \ "current highlight +set statusline+=%02c, "cursor column +set statusline+=%03l/%03L "cursor line/total lines +set statusline+=\ hex:\ 0x%02B +set statusline+=\ %P "percent through file + +" vim: set ts=4 sw=4 tw=78 ft=vim : diff --git a/vim/plugin/tabline.vim b/vim/plugin/tabline.vim new file mode 100644 index 0000000..a93756a --- /dev/null +++ b/vim/plugin/tabline.vim @@ -0,0 +1,72 @@ +" set up tab labels with tab number, buffer name, number of windows +function! GuiTabLabel() + let label = '' + let bufnrlist = tabpagebuflist(v:lnum) + + + " Append the tab number + let label .= tabpagenr().': ' + + " Append the buffer name + let name = bufname(bufnrlist[tabpagewinnr(v:lnum) - 1]) + if name == '' + " give a name to no-name documents + if &buftype=='quickfix' + let name = '[Quickfix List]' + else + let name = '[No Name]' + endif + else + " get only the file name + let name = fnamemodify(name,":t") + endif + let label .= name + + for bufnr in bufnrlist + if getbufvar(bufnr, "&modified") + let label .= ' [+]' + break + endif + endfor + return label +endfunction + +" set up tab tooltips with every buffer name +function! GuiTabToolTip() + let tip = '' + let bufnrlist = tabpagebuflist(v:lnum) + + for bufnr in bufnrlist + " separate buffer entries + if tip!='' + let tip .= ' | ' + endif + + " Add name of buffer + let name=bufname(bufnr) + if name == '' + " give a name to no name documents + if getbufvar(bufnr,'&buftype')=='quickfix' + let name = '[Quickfix List]' + else + let name = '[No Name]' + endif + endif + let tip.=name + + " add modified/modifiable flags + if getbufvar(bufnr, "&modified") + let tip .= ' [+]' + endif + if getbufvar(bufnr, "&modifiable")==0 + let tip .= ' [-]' + endif + endfor + + return tip +endfunction + +set guitablabel=%!GuiTabLabel() +set guitabtooltip=%!GuiTabToolTip() + +" vim: set ts=4 sw=4 tw=78 ft=vim : diff --git a/vim/plugin/vcsbzr.vim b/vim/plugin/vcsbzr.vim new file mode 100644 index 0000000..bbbca38 --- /dev/null +++ b/vim/plugin/vcsbzr.vim @@ -0,0 +1,268 @@ +" vim600: set foldmethod=marker: +" +" BZR extension for VCSCommand. +" +" Version: VCS development +" Maintainer: Bob Hiestand +" License: +" Copyright (c) 2009 Bob Hiestand +" +" Permission is hereby granted, free of charge, to any person obtaining a copy +" of this software and associated documentation files (the "Software"), to +" deal in the Software without restriction, including without limitation the +" rights to use, copy, modify, merge, publish, distribute, 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 PARTICULAR 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 CONTRACT, TORT OR OTHERWISE, ARISING +" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +" IN THE SOFTWARE. +" +" Section: Documentation {{{1 +" +" Options documentation: {{{2 +" +" VCSCommandBZRExec +" This variable specifies the BZR executable. If not set, it defaults to +" 'bzr' executed from the user's executable path. + +" Section: Plugin header {{{1 + +if exists('VCSCommandDisableAll') + finish +endif + +if v:version < 700 + echohl WarningMsg|echomsg 'VCSCommand requires at least VIM 7.0'|echohl None + finish +endif + +runtime plugin/vcscommand.vim + +if !executable(VCSCommandGetOption('VCSCommandBZRExec', 'bzr')) + " BZR is not installed + finish +endif + +let s:save_cpo=&cpo +set cpo&vim + +" Section: Variable initialization {{{1 + +let s:bzrFunctions = {} + +" Section: Utility functions {{{1 + +" Function: s:Executable() {{{2 +" Returns the executable used to invoke bzr suitable for use in a shell +" command. +function! s:Executable() + return shellescape(VCSCommandGetOption('VCSCommandBZRExec', 'bzr')) +endfunction + +" Function: s:DoCommand(cmd, cmdName, statusText) {{{2 +" Wrapper to VCSCommandDoCommand to add the name of the BZR executable to the +" command argument. +function! s:DoCommand(cmd, cmdName, statusText, options) + if VCSCommandGetVCSType(expand('%')) == 'BZR' + let fullCmd = s:Executable() . ' ' . a:cmd + return VCSCommandDoCommand(fullCmd, a:cmdName, a:statusText, a:options) + else + throw 'BZR VCSCommand plugin called on non-BZR item.' + endif +endfunction + +" Section: VCS function implementations {{{1 + +" Function: s:bzrFunctions.Identify(buffer) {{{2 +function! s:bzrFunctions.Identify(buffer) + let fileName = resolve(bufname(a:buffer)) + let statusText = s:VCSCommandUtility.system(s:Executable() . ' info -- "' . fileName . '"') + if(v:shell_error) + return 0 + else + return 1 + endif +endfunction + +" Function: s:bzrFunctions.Add() {{{2 +function! s:bzrFunctions.Add(argList) + return s:DoCommand(join(['add'] + a:argList, ' '), 'add', join(a:argList, ' '), {}) +endfunction + +" Function: s:bzrFunctions.Annotate(argList) {{{2 +function! s:bzrFunctions.Annotate(argList) + if len(a:argList) == 0 + if &filetype == 'BZRAnnotate' + " Perform annotation of the version indicated by the current line. + let caption = matchstr(getline('.'),'\v^\s+\zs\d+') + let options = ' -r' . caption + else + let caption = '' + let options = '' + endif + elseif len(a:argList) == 1 && a:argList[0] !~ '^-' + let caption = a:argList[0] + let options = ' -r' . caption + else + let caption = join(a:argList, ' ') + let options = ' ' . caption + endif + + let resultBuffer = s:DoCommand('blame' . options, 'annotate', caption, {}) + if resultBuffer > 0 + normal 1G2dd + set filetype=BZRAnnotate + endif + return resultBuffer +endfunction + +" Function: s:bzrFunctions.Commit(argList) {{{2 +function! s:bzrFunctions.Commit(argList) + let resultBuffer = s:DoCommand('commit -F "' . a:argList[0] . '"', 'commit', '', {}) + if resultBuffer == 0 + echomsg 'No commit needed.' + endif +endfunction + +" Function: s:bzrFunctions.Delete() {{{2 +function! s:bzrFunctions.Delete(argList) + return s:DoCommand(join(['rm'] + a:argList, ' '), 'rm', join(a:argList, ' '), {}) +endfunction + +" Function: s:bzrFunctions.Diff(argList) {{{2 +function! s:bzrFunctions.Diff(argList) + if len(a:argList) == 0 + let revOptions = [] + let caption = '' + elseif len(a:argList) <= 2 && match(a:argList, '^-') == -1 + let revOptions = ['-r' . join(a:argList, '..')] + let caption = '(' . a:argList[0] . ' : ' . get(a:argList, 1, 'current') . ')' + else + " Pass-through + let caption = join(a:argList, ' ') + let revOptions = a:argList + endif + + let resultBuffer = s:DoCommand(join(['diff'] + revOptions), 'diff', caption, {'allowNonZeroExit': 1}) + if resultBuffer > 0 + set filetype=diff + else + echomsg 'No differences found' + endif + return resultBuffer +endfunction + +" Function: s:bzrFunctions.GetBufferInfo() {{{2 +" Provides version control details for the current file. Current version +" number and current repository version number are required to be returned by +" the vcscommand plugin. +" Returns: List of results: [revision, repository] + +function! s:bzrFunctions.GetBufferInfo() + let originalBuffer = VCSCommandGetOriginalBuffer(bufnr('%')) + let fileName = resolve(bufname(originalBuffer)) + let statusText = s:VCSCommandUtility.system(s:Executable() . ' status -S -- "' . fileName . '"') + let revision = s:VCSCommandUtility.system(s:Executable() . ' revno -- "' . fileName . '"') + if(v:shell_error) + return [] + endif + + " File not under BZR control. + if statusText =~ '^?' + return ['Unknown'] + endif + + let [flags, repository] = matchlist(statusText, '^\(.\{3}\)\s\+\(\S\+\)')[1:2] + if revision == '' + " Error + return ['Unknown'] + elseif flags =~ '^A' + return ['New', 'New'] + else + return [revision, repository] + endif +endfunction + +" Function: s:bzrFunctions.Info(argList) {{{2 +function! s:bzrFunctions.Info(argList) + return s:DoCommand(join(['version-info'] + a:argList, ' '), 'version-info', join(a:argList, ' '), {}) +endfunction + +" Function: s:bzrFunctions.Lock(argList) {{{2 +function! s:bzrFunctions.Lock(argList) + echomsg 'bzr lock is not necessary' +endfunction + +" Function: s:bzrFunctions.Log() {{{2 +function! s:bzrFunctions.Log(argList) + if len(a:argList) == 0 + let options = [] + let caption = '' + elseif len(a:argList) <= 2 && match(a:argList, '^-') == -1 + let options = ['-r' . join(a:argList, ':')] + let caption = options[0] + else + " Pass-through + let options = a:argList + let caption = join(a:argList, ' ') + endif + + let resultBuffer = s:DoCommand(join(['log', '-v'] + options), 'log', caption, {}) + return resultBuffer +endfunction + +" Function: s:bzrFunctions.Revert(argList) {{{2 +function! s:bzrFunctions.Revert(argList) + return s:DoCommand('revert', 'revert', '', {}) +endfunction + +" Function: s:bzrFunctions.Review(argList) {{{2 +function! s:bzrFunctions.Review(argList) + if len(a:argList) == 0 + let versiontag = '(current)' + let versionOption = '' + else + let versiontag = a:argList[0] + let versionOption = ' -r ' . versiontag . ' ' + endif + + let resultBuffer = s:DoCommand('cat' . versionOption, 'review', versiontag, {}) + if resultBuffer > 0 + let &filetype=getbufvar(b:VCSCommandOriginalBuffer, '&filetype') + endif + return resultBuffer +endfunction + +" Function: s:bzrFunctions.Status(argList) {{{2 +function! s:bzrFunctions.Status(argList) + let options = ['-S'] + if len(a:argList) == 0 + let options = a:argList + endif + return s:DoCommand(join(['status'] + options, ' '), 'status', join(options, ' '), {}) +endfunction + +" Function: s:bzrFunctions.Unlock(argList) {{{2 +function! s:bzrFunctions.Unlock(argList) + echomsg 'bzr unlock is not necessary' +endfunction +" Function: s:bzrFunctions.Update(argList) {{{2 +function! s:bzrFunctions.Update(argList) + return s:DoCommand('update', 'update', '', {}) +endfunction + +" Annotate setting {{{2 +let s:bzrFunctions.AnnotateSplitRegex = '^[^|]\+ | ' + +" Section: Plugin Registration {{{1 +let s:VCSCommandUtility = VCSCommandRegisterModule('BZR', expand(''), s:bzrFunctions, []) + +let &cpo = s:save_cpo diff --git a/vim/plugin/vcscommand.vim b/vim/plugin/vcscommand.vim index f12fd10..88bc654 100644 --- a/vim/plugin/vcscommand.vim +++ b/vim/plugin/vcscommand.vim @@ -4,7 +4,6 @@ " Control Systems, such as CVS, SVN, SVK, and git. " " Maintainer: Bob Hiestand -" Version: Beta 29 " License: " Copyright (c) 2008 Bob Hiestand " @@ -33,18 +32,17 @@ " directory and all subdirectories associated with the current buffer). The " output of the commands is captured in a new scratch window. " -" This plugin needs additional extension plugins, each specific to a source -" control system, to function. Those plugins should be placed in a -" subdirectory of the standard plugin directory named 'vcscommand'. Several -" options include the name of the version control system in the option name. -" Such options use the placeholder text '{VCSType}', which would be replaced -" in actual usage with 'CVS' or 'SVN', for instance. +" This plugin needs additional extension plugins, each specific to a source +" control system, to function. Several options include the name of the +" version control system in the option name. Such options use the placeholder +" text '{VCSType}', which would be replaced in actual usage with 'CVS' or +" 'SVN', for instance. " " Command documentation {{{2 " " VCSAdd Adds the current file to source control. " -" VCSAnnotate Displays the current file with each line annotated with the +" VCSAnnotate[!] Displays the current file with each line annotated with the " version in which it was most recently changed. If an " argument is given, the argument is used as a revision " number to display. If not given an argument, it uses the @@ -52,6 +50,10 @@ " Additionally, if the current buffer is a VCSAnnotate buffer " already, the version number on the current line is used. " +" If '!' is used, the view of the annotated buffer is split +" so that the annotation is in a separate window from the +" content, and each is highlighted separately. +" " VCSBlame Alias for 'VCSAnnotate'. " " VCSCommit[!] Commits changes to the current file to source control. @@ -89,7 +91,7 @@ " VCS scratch buffers associated with the original file. " " VCSInfo Displays extended information about the current file in a -" new scratch buffer. +" new scratch buffer. " " VCSLock Locks the current file in order to prevent other users from " concurrently modifying it. The exact semantics of this @@ -152,6 +154,7 @@ " " ca VCSAdd " cn VCSAnnotate +" cN VCSAnnotate! " cc VCSCommit " cD VCSDelete " cd VCSDiff @@ -268,7 +271,7 @@ " mapping to quit a VCS scratch buffer: " " augroup VCSCommand -" au VCSCommand User VCSBufferCreated silent! nmap q :bwipeout +" au VCSCommand User VCSBufferCreated silent! nmap q :bwipeout " augroup END " " The following hooks are available: @@ -331,6 +334,9 @@ let g:VCSCOMMAND_IDENTIFY_INEXACT = -1 " Section: Script variable initialization {{{1 +" Hidden functions for use by extensions +let s:VCSCommandUtility = {} + " plugin-specific information: {vcs -> [script, {command -> function}, {key -> mapping}]} let s:plugins = {} @@ -346,7 +352,7 @@ unlet! s:vimDiffRestoreCmd " original buffer currently reflected in vimdiff windows unlet! s:vimDiffSourceBuffer -" +" unlet! s:vimDiffScratchList " Section: Utility functions {{{1 @@ -359,6 +365,23 @@ function! s:ReportError(error) echohl WarningMsg|echomsg 'VCSCommand: ' . a:error|echohl None endfunction +" Function s:VCSCommandUtility.system(...) {{{2 +" Replacement for system() function. This version protects the quoting in the +" command line on Windows systems. + +function! s:VCSCommandUtility.system(...) + if (has("win32") || has("win64")) && &sxq !~ '"' + let save_sxq = &sxq + set sxq=\" + endif + try + return call('system', a:000) + finally + if exists("save_sxq") + let &sxq = save_sxq + endif + endtry +endfunction " Function: s:CreateMapping(shortcut, expansion, display) {{{2 " Creates the given mapping by prepending the contents of @@ -480,15 +503,6 @@ endfunction function! s:EditFile(command, originalBuffer, statusText) let vcsType = getbufvar(a:originalBuffer, 'VCSCommandVCSType') - let nameExtension = VCSCommandGetOption('VCSCommandResultBufferNameExtension', '') - if nameExtension == '' - let nameFunction = VCSCommandGetOption('VCSCommandResultBufferNameFunction', 's:GenerateResultBufferName') - else - let nameFunction = VCSCommandGetOption('VCSCommandResultBufferNameFunction', 's:GenerateResultBufferNameWithExtension') - endif - - let resultBufferName = call(nameFunction, [a:command, a:originalBuffer, vcsType, a:statusText]) - " Protect against useless buffer set-up let s:isEditFileRunning += 1 try @@ -503,28 +517,45 @@ function! s:EditFile(command, originalBuffer, statusText) enew - let b:VCSCommandCommand = a:command - let b:VCSCommandOriginalBuffer = a:originalBuffer - let b:VCSCommandSourceFile = bufname(a:originalBuffer) - let b:VCSCommandVCSType = vcsType + call s:SetupScratchBuffer(a:command, vcsType, a:originalBuffer, a:statusText) - setlocal buftype=nofile - setlocal noswapfile - let &filetype = vcsType . a:command - - if a:statusText != '' - let b:VCSCommandStatusText = a:statusText - endif - - if VCSCommandGetOption('VCSCommandDeleteOnHide', 0) - setlocal bufhidden=delete - endif - silent noautocmd file `=resultBufferName` finally let s:isEditFileRunning -= 1 endtry endfunction +" Function: s:SetupScratchBuffer(command, vcsType, originalBuffer, statusText) {{{2 +" Creates convenience buffer variables and the name of a vcscommand result +" buffer. + +function! s:SetupScratchBuffer(command, vcsType, originalBuffer, statusText) + let nameExtension = VCSCommandGetOption('VCSCommandResultBufferNameExtension', '') + if nameExtension == '' + let nameFunction = VCSCommandGetOption('VCSCommandResultBufferNameFunction', 's:GenerateResultBufferName') + else + let nameFunction = VCSCommandGetOption('VCSCommandResultBufferNameFunction', 's:GenerateResultBufferNameWithExtension') + endif + + let name = call(nameFunction, [a:command, a:originalBuffer, a:vcsType, a:statusText]) + + let b:VCSCommandCommand = a:command + let b:VCSCommandOriginalBuffer = a:originalBuffer + let b:VCSCommandSourceFile = bufname(a:originalBuffer) + let b:VCSCommandVCSType = a:vcsType + if a:statusText != '' + let b:VCSCommandStatusText = a:statusText + endif + + setlocal buftype=nofile + setlocal noswapfile + let &filetype = a:vcsType . a:command + + if VCSCommandGetOption('VCSCommandDeleteOnHide', 0) + setlocal bufhidden=delete + endif + silent noautocmd file `=name` +endfunction + " Function: s:SetupBuffer() {{{2 " Attempts to set the b:VCSCommandBufferInfo variable @@ -563,7 +594,7 @@ endfunction function! s:MarkOrigBufferForSetup(buffer) checktime - if a:buffer > 0 + if a:buffer > 0 let origBuffer = VCSCommandGetOriginalBuffer(a:buffer) " This should never not work, but I'm paranoid if origBuffer != a:buffer @@ -652,7 +683,7 @@ function! s:VimDiffRestore(vimDiffBuff) endif unlet s:vimDiffRestoreCmd - endif + endif " All buffers are gone. unlet s:vimDiffSourceBuffer unlet s:vimDiffScratchList @@ -667,6 +698,43 @@ endfunction " Section: Generic VCS command functions {{{1 +" Function: s:VCSAnnotate(...) {{{2 +function! s:VCSAnnotate(bang, ...) + try + let annotateBuffer = s:ExecuteVCSCommand('Annotate', a:000) + if annotateBuffer == -1 + return -1 + endif + if a:bang == '!' && VCSCommandGetOption('VCSCommandDisableSplitAnnotate', 0) == 0 + let vcsType = VCSCommandGetVCSType(annotateBuffer) + let functionMap = s:plugins[vcsType][1] + let splitRegex = '' + if has_key(s:plugins[vcsType][1], 'AnnotateSplitRegex') + let splitRegex = s:plugins[vcsType][1]['AnnotateSplitRegex'] + endif + let splitRegex = VCSCommandGetOption('VCSCommand' . vcsType . 'AnnotateSplitRegex', splitRegex) + if splitRegex == '' + return annotateBuffer + endif + let originalBuffer = VCSCommandGetOriginalBuffer(annotateBuffer) + let originalFileType = getbufvar(originalBuffer, '&ft') + let annotateFileType = getbufvar(annotateBuffer, '&ft') + execute "normal 0zR\G/" . splitRegex . "/e\d" + call setbufvar('%', '&filetype', getbufvar(originalBuffer, '&filetype')) + set scrollbind + leftabove vert new + normal 0P + execute "normal" . col('$') . "\|" + call s:SetupScratchBuffer('annotate', vcsType, originalBuffer, 'header') + wincmd l + endif + return annotateBuffer + catch + call s:ReportError(v:exception) + return -1 + endtry +endfunction + " Function: s:VCSCommit() {{{2 function! s:VCSCommit(bang, message) try @@ -717,7 +785,7 @@ endfunction function! s:VCSFinishCommitWithBuffer() setlocal nomodified - let currentBuffer = bufnr('%') + let currentBuffer = bufnr('%') let logMessageList = getbufline('%', 1, '$') call filter(logMessageList, 'v:val !~ ''^\s*VCS:''') let resultBuffer = s:VCSFinishCommit(logMessageList, b:VCSCommandOriginalBuffer) @@ -855,7 +923,7 @@ function! s:VCSVimDiff(...) wincmd W execute 'buffer' originalBuffer " Store info for later original buffer restore - let s:vimDiffRestoreCmd = + let s:vimDiffRestoreCmd = \ 'call setbufvar('.originalBuffer.', ''&diff'', '.getbufvar(originalBuffer, '&diff').')' \ . '|call setbufvar('.originalBuffer.', ''&foldcolumn'', '.getbufvar(originalBuffer, '&foldcolumn').')' \ . '|call setbufvar('.originalBuffer.', ''&foldenable'', '.getbufvar(originalBuffer, '&foldenable').')' @@ -997,6 +1065,7 @@ function! VCSCommandRegisterModule(name, path, commandMap, mappingMap) call s:CreateMapping(shortcut, expansion, a:name . " extension mapping " . shortcut) endfor endif + return s:VCSCommandUtility endfunction " Function: VCSCommandDoCommand(cmd, cmdName, statusText, [options]) {{{2 @@ -1018,7 +1087,7 @@ function! VCSCommandDoCommand(cmd, cmdName, statusText, options) endif let originalBuffer = VCSCommandGetOriginalBuffer(bufnr('%')) - if originalBuffer == -1 + if originalBuffer == -1 throw 'Original buffer no longer exists, aborting.' endif @@ -1036,7 +1105,7 @@ function! VCSCommandDoCommand(cmd, cmdName, statusText, options) if match(a:cmd, '') > 0 let fullCmd = substitute(a:cmd, '', fileName, 'g') else - let fullCmd = a:cmd . ' "' . fileName . '"' + let fullCmd = a:cmd . ' -- "' . fileName . '"' endif " Change to the directory of the current buffer. This is done for CVS, but @@ -1044,7 +1113,7 @@ function! VCSCommandDoCommand(cmd, cmdName, statusText, options) let oldCwd = VCSCommandChangeToCurrentFileDir(path) try - let output = system(fullCmd) + let output = s:VCSCommandUtility.system(fullCmd) finally call VCSCommandChdir(oldCwd) endtry @@ -1163,8 +1232,8 @@ endfunction " Section: Command definitions {{{1 " Section: Primary commands {{{2 com! -nargs=* VCSAdd call s:MarkOrigBufferForSetup(s:ExecuteVCSCommand('Add', [])) -com! -nargs=* VCSAnnotate call s:ExecuteVCSCommand('Annotate', []) -com! -nargs=* VCSBlame call s:ExecuteVCSCommand('Annotate', []) +com! -nargs=* -bang VCSAnnotate call s:VCSAnnotate(, ) +com! -nargs=* -bang VCSBlame call s:VCSAnnotate(, ) com! -nargs=? -bang VCSCommit call s:VCSCommit(, ) com! -nargs=* VCSDelete call s:ExecuteVCSCommand('Delete', []) com! -nargs=* VCSDiff call s:ExecuteVCSCommand('Diff', []) @@ -1200,6 +1269,7 @@ nnoremap VCSLock :VCSLock nnoremap VCSLog :VCSLog nnoremap VCSRevert :VCSRevert nnoremap VCSReview :VCSReview +nnoremap VCSSplitAnnotate :VCSAnnotate! nnoremap VCSStatus :VCSStatus nnoremap VCSUnlock :VCSUnlock nnoremap VCSUpdate :VCSUpdate @@ -1217,6 +1287,7 @@ let s:defaultMappings = [ \['i', 'VCSInfo'], \['L', 'VCSLock'], \['l', 'VCSLog'], + \['N', 'VCSSplitAnnotate'], \['n', 'VCSAnnotate'], \['q', 'VCSRevert'], \['r', 'VCSReview'], @@ -1271,7 +1342,7 @@ function! s:CloseAllResultBuffers() let buffnr = 1 let buffmaxnr = bufnr('$') while buffnr <= buffmaxnr - if getbufvar(buffnr, 'VCSCommandOriginalBuffer') != "" + if getbufvar(buffnr, 'VCSCommandOriginalBuffer') != "" execute 'bw' buffnr endif let buffnr = buffnr + 1 diff --git a/vim/plugin/vcscvs.vim b/vim/plugin/vcscvs.vim index f2ff708..2e9c102 100644 --- a/vim/plugin/vcscvs.vim +++ b/vim/plugin/vcscvs.vim @@ -32,23 +32,23 @@ " The following commands only apply to files under CVS source control. " " CVSEdit Performs "cvs edit" on the current file. -" +" " CVSEditors Performs "cvs editors" on the current file. -" +" " CVSUnedit Performs "cvs unedit" on the current file. -" +" " CVSWatch Takes an argument which must be one of [on|off|add|remove]. " Performs "cvs watch" with the given argument on the current " file. -" +" " CVSWatchers Performs "cvs watchers" on the current file. -" +" " CVSWatchAdd Alias for "CVSWatch add" -" +" " CVSWatchOn Alias for "CVSWatch on" -" +" " CVSWatchOff Alias for "CVSWatch off" -" +" " CVSWatchRemove Alias for "CVSWatch remove" " " Mapping documentation: {{{2 @@ -106,23 +106,40 @@ let s:cvsFunctions = {} " Section: Utility functions {{{1 +" Function: s:Executable() {{{2 +" Returns the executable used to invoke cvs suitable for use in a shell +" command. +function! s:Executable() + return shellescape(VCSCommandGetOption('VCSCommandCVSExec', 'cvs')) +endfunction + " Function: s:DoCommand(cmd, cmdName, statusText, options) {{{2 " Wrapper to VCSCommandDoCommand to add the name of the CVS executable to the " command argument. function! s:DoCommand(cmd, cmdName, statusText, options) if VCSCommandGetVCSType(expand('%')) == 'CVS' - let fullCmd = VCSCommandGetOption('VCSCommandCVSExec', 'cvs') . ' ' . a:cmd - return VCSCommandDoCommand(fullCmd, a:cmdName, a:statusText, a:options) + let fullCmd = s:Executable() . ' ' . a:cmd + let ret = VCSCommandDoCommand(fullCmd, a:cmdName, a:statusText, a:options) + + if ret > 0 + if getline(line('$')) =~ '^cvs \w\+: closing down connection' + $d + 1 + endif + + endif + + return ret else throw 'CVS VCSCommand plugin called on non-CVS item.' endif endfunction -" Function: GetRevision() {{{2 +" Function: s:GetRevision() {{{2 " Function for retrieving the current buffer's revision number. " Returns: Revision number or an empty string if an error occurs. -function! GetRevision() +function! s:GetRevision() if !exists('b:VCSCommandBufferInfo') let b:VCSCommandBufferInfo = s:cvsFunctions.GetBufferInfo() endif @@ -187,7 +204,7 @@ function! s:cvsFunctions.Annotate(argList) " CVS defaults to pulling HEAD, regardless of current branch. " Therefore, always pass desired revision. let caption = '' - let options = ['-r' . GetRevision()] + let options = ['-r' . s:GetRevision()] endif elseif len(a:argList) == 1 && a:argList[0] !~ '^-' let caption = a:argList[0] @@ -284,7 +301,7 @@ function! s:cvsFunctions.GetBufferInfo() endif let oldCwd = VCSCommandChangeToCurrentFileDir(fileName) try - let statusText=system(VCSCommandGetOption('VCSCommandCVSExec', 'cvs') . ' status "' . realFileName . '"') + let statusText=s:VCSCommandUtility.system(s:Executable() . ' status -- "' . realFileName . '"') if(v:shell_error) return [] endif @@ -292,7 +309,7 @@ function! s:cvsFunctions.GetBufferInfo() " We can still be in a CVS-controlled directory without this being a CVS " file - if match(revision, '^New file!$') >= 0 + if match(revision, '^New file!$') >= 0 let revision='New' elseif match(revision, '^\d\+\.\d\+\%(\.\d\+\.\d\+\)*$') <0 return ['Unknown'] @@ -391,6 +408,9 @@ function! s:CVSWatchers() return s:DoCommand('watchers', 'cvswatchers', '', {}) endfunction +" Annotate setting {{{2 +let s:cvsFunctions.AnnotateSplitRegex = '): ' + " Section: Command definitions {{{1 " Section: Primary commands {{{2 com! CVSEdit call s:CVSEdit() @@ -425,7 +445,6 @@ for [pluginName, commandText, shortCut] in mappingInfo endfor " Section: Menu items {{{1 -silent! aunmenu Plugin.VCS.CVS amenu &Plugin.VCS.CVS.&Edit CVSEdit amenu &Plugin.VCS.CVS.Ed&itors CVSEditors amenu &Plugin.VCS.CVS.Unedi&t CVSUnedit @@ -436,6 +455,6 @@ amenu &Plugin.VCS.CVS.WatchOff CVSWatchOff amenu &Plugin.VCS.CVS.WatchRemove CVSWatchRemove " Section: Plugin Registration {{{1 -call VCSCommandRegisterModule('CVS', expand(''), s:cvsFunctions, s:cvsExtensionMappings) +let s:VCSCommandUtility = VCSCommandRegisterModule('CVS', expand(''), s:cvsFunctions, s:cvsExtensionMappings) let &cpo = s:save_cpo diff --git a/vim/plugin/vcsgit.vim b/vim/plugin/vcsgit.vim index 869a587..255e9ab 100644 --- a/vim/plugin/vcsgit.vim +++ b/vim/plugin/vcsgit.vim @@ -65,12 +65,19 @@ let s:gitFunctions = {} " Section: Utility functions {{{1 +" Function: s:Executable() {{{2 +" Returns the executable used to invoke git suitable for use in a shell +" command. +function! s:Executable() + return shellescape(VCSCommandGetOption('VCSCommandGitExec', 'git')) +endfunction + " Function: s:DoCommand(cmd, cmdName, statusText, options) {{{2 " Wrapper to VCSCommandDoCommand to add the name of the git executable to the " command argument. function! s:DoCommand(cmd, cmdName, statusText, options) if VCSCommandGetVCSType(expand('%')) == 'git' - let fullCmd = VCSCommandGetOption('VCSCommandGitExec', 'git',) . ' ' . a:cmd + let fullCmd = s:Executable() . ' ' . a:cmd return VCSCommandDoCommand(fullCmd, a:cmdName, a:statusText, a:options) else throw 'git VCSCommand plugin called on non-git item.' @@ -85,7 +92,7 @@ endfunction function! s:gitFunctions.Identify(buffer) let oldCwd = VCSCommandChangeToCurrentFileDir(resolve(bufname(a:buffer))) try - call system(VCSCommandGetOption('VCSCommandGitExec', 'git') . ' rev-parse --is-inside-work-tree') + call s:VCSCommandUtility.system(s:Executable() . ' rev-parse --is-inside-work-tree') if(v:shell_error) return 0 else @@ -116,7 +123,7 @@ function! s:gitFunctions.Annotate(argList) let options = join(a:argList, ' ') endif - let resultBuffer = s:DoCommand('blame ' . options . ' -- ', 'annotate', options, {}) + let resultBuffer = s:DoCommand('blame ' . options, 'annotate', options, {}) if resultBuffer > 0 normal 1G set filetype=gitAnnotate @@ -177,7 +184,7 @@ endfunction function! s:gitFunctions.GetBufferInfo() let oldCwd = VCSCommandChangeToCurrentFileDir(resolve(bufname('%'))) try - let branch = substitute(system(VCSCommandGetOption('VCSCommandGitExec', 'git') . ' symbolic-ref -q HEAD'), '\n$', '', '') + let branch = substitute(s:VCSCommandUtility.system(s:Executable() . ' symbolic-ref -q HEAD'), '\n$', '', '') if v:shell_error let branch = 'DETACHED' else @@ -190,7 +197,7 @@ function! s:gitFunctions.GetBufferInfo() if method != '' let method = ' --' . method endif - let tag = substitute(system(VCSCommandGetOption('VCSCommandGitExec', 'git') . ' describe' . method), '\n$', '', '') + let tag = substitute(s:VCSCommandUtility.system(s:Executable() . ' describe' . method), '\n$', '', '') if !v:shell_error call add(info, tag) break @@ -227,7 +234,7 @@ function! s:gitFunctions.Review(argList) let oldCwd = VCSCommandChangeToCurrentFileDir(resolve(bufname(VCSCommandGetOriginalBuffer('%')))) try - let prefix = system(VCSCommandGetOption('VCSCommandGitExec', 'git') . ' rev-parse --show-prefix') + let prefix = s:VCSCommandUtility.system(s:Executable() . ' rev-parse --show-prefix') finally call VCSCommandChdir(oldCwd) endtry @@ -251,8 +258,10 @@ function! s:gitFunctions.Update(argList) throw "This command is not implemented for git because file-by-file update doesn't make much sense in that context. If you have an idea for what it should do, please let me know." endfunction +" Annotate setting {{{2 +let s:gitFunctions.AnnotateSplitRegex = ') ' " Section: Plugin Registration {{{1 -call VCSCommandRegisterModule('git', expand(''), s:gitFunctions, []) +let s:VCSCommandUtility = VCSCommandRegisterModule('git', expand(''), s:gitFunctions, []) let &cpo = s:save_cpo diff --git a/vim/plugin/vcshg.vim b/vim/plugin/vcshg.vim new file mode 100644 index 0000000..a053f5e --- /dev/null +++ b/vim/plugin/vcshg.vim @@ -0,0 +1,290 @@ +" vim600: set foldmethod=marker: +" +" Mercurial extension for VCSCommand. +" +" Version: VCS development +" Maintainer: Bob Hiestand +" License: +" Copyright (c) 2009 Bob Hiestand +" +" Permission is hereby granted, free of charge, to any person obtaining a copy +" of this software and associated documentation files (the "Software"), to +" deal in the Software without restriction, including without limitation the +" rights to use, copy, modify, merge, publish, distribute, 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 PARTICULAR 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 CONTRACT, TORT OR OTHERWISE, ARISING +" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +" IN THE SOFTWARE. +" +" Section: Documentation {{{1 +" +" Options documentation: {{{2 +" +" VCSCommandHGExec +" This variable specifies the mercurial executable. If not set, it defaults +" to 'hg' executed from the user's executable path. +" +" VCSCommandHGDiffExt +" This variable, if set, sets the external diff program used by Subversion. +" +" VCSCommandHGDiffOpt +" This variable, if set, determines the options passed to the hg diff +" command (such as 'u', 'w', or 'b'). + +" Section: Plugin header {{{1 + +if exists('VCSCommandDisableAll') + finish +endif + +if v:version < 700 + echohl WarningMsg|echomsg 'VCSCommand requires at least VIM 7.0'|echohl None + finish +endif + +runtime plugin/vcscommand.vim + +if !executable(VCSCommandGetOption('VCSCommandHGExec', 'hg')) + " HG is not installed + finish +endif + +let s:save_cpo=&cpo +set cpo&vim + +" Section: Variable initialization {{{1 + +let s:hgFunctions = {} + +" Section: Utility functions {{{1 + +" Function: s:Executable() {{{2 +" Returns the executable used to invoke hg suitable for use in a shell +" command. +function! s:Executable() + return shellescape(VCSCommandGetOption('VCSCommandHGExec', 'hg')) +endfunction + +" Function: s:DoCommand(cmd, cmdName, statusText, options) {{{2 +" Wrapper to VCSCommandDoCommand to add the name of the HG executable to the +" command argument. +function! s:DoCommand(cmd, cmdName, statusText, options) + if VCSCommandGetVCSType(expand('%')) == 'HG' + let fullCmd = s:Executable() . ' ' . a:cmd + return VCSCommandDoCommand(fullCmd, a:cmdName, a:statusText, a:options) + else + throw 'HG VCSCommand plugin called on non-HG item.' + endif +endfunction + +" Section: VCS function implementations {{{1 + +" Function: s:hgFunctions.Identify(buffer) {{{2 +function! s:hgFunctions.Identify(buffer) + let oldCwd = VCSCommandChangeToCurrentFileDir(resolve(bufname(a:buffer))) + try + call s:VCSCommandUtility.system(s:Executable() . ' root') + if(v:shell_error) + return 0 + else + return g:VCSCOMMAND_IDENTIFY_INEXACT + endif + finally + call VCSCommandChdir(oldCwd) + endtry +endfunction + +" Function: s:hgFunctions.Add() {{{2 +function! s:hgFunctions.Add(argList) + return s:DoCommand(join(['add'] + a:argList, ' '), 'add', join(a:argList, ' '), {}) +endfunction + +" Function: s:hgFunctions.Annotate(argList) {{{2 +function! s:hgFunctions.Annotate(argList) + if len(a:argList) == 0 + if &filetype == 'HGAnnotate' + " Perform annotation of the version indicated by the current line. + let caption = matchstr(getline('.'),'\v^\s+\zs\d+') + let options = ' -r' . caption + else + let caption = '' + let options = ' -un' + endif + elseif len(a:argList) == 1 && a:argList[0] !~ '^-' + let caption = a:argList[0] + let options = ' -un -r' . caption + else + let caption = join(a:argList, ' ') + let options = ' ' . caption + endif + + let resultBuffer = s:DoCommand('blame' . options, 'annotate', caption, {}) + if resultBuffer > 0 + set filetype=HGAnnotate + endif + return resultBuffer +endfunction + +" Function: s:hgFunctions.Commit(argList) {{{2 +function! s:hgFunctions.Commit(argList) + let resultBuffer = s:DoCommand('commit -l "' . a:argList[0] . '"', 'commit', '', {}) + if resultBuffer == 0 + echomsg 'No commit needed.' + endif +endfunction + +" Function: s:hgFunctions.Delete() {{{2 +function! s:hgFunctions.Delete(argList) + return s:DoCommand(join(['remove'] + a:argList, ' '), 'remove', join(a:argList, ' '), {}) +endfunction + +" Function: s:hgFunctions.Diff(argList) {{{2 +function! s:hgFunctions.Diff(argList) + if len(a:argList) == 0 + let revOptions = [] + let caption = '' + elseif len(a:argList) <= 2 && match(a:argList, '^-') == -1 + let revOptions = ['-r' . join(a:argList, ':')] + let caption = '(' . a:argList[0] . ' : ' . get(a:argList, 1, 'current') . ')' + else + " Pass-through + let caption = join(a:argList, ' ') + let revOptions = a:argList + endif + + let hgDiffExt = VCSCommandGetOption('VCSCommandHGDiffExt', '') + if hgDiffExt == '' + let diffExt = [] + else + let diffExt = ['--diff-cmd ' . hgDiffExt] + endif + + let hgDiffOpt = VCSCommandGetOption('VCSCommandHGDiffOpt', '') + if hgDiffOpt == '' + let diffOptions = [] + else + let diffOptions = ['-x -' . hgDiffOpt] + endif + + let resultBuffer = s:DoCommand(join(['diff'] + diffExt + diffOptions + revOptions), 'diff', caption, {}) + if resultBuffer > 0 + set filetype=diff + else + if hgDiffExt == '' + echomsg 'No differences found' + endif + endif + return resultBuffer +endfunction + +" Function: s:hgFunctions.Info(argList) {{{2 +function! s:hgFunctions.Info(argList) + return s:DoCommand(join(['log --limit 1'] + a:argList, ' '), 'log', join(a:argList, ' '), {}) +endfunction + +" Function: s:hgFunctions.GetBufferInfo() {{{2 +" Provides version control details for the current file. Current version +" number and current repository version number are required to be returned by +" the vcscommand plugin. +" Returns: List of results: [revision, repository, branch] + +function! s:hgFunctions.GetBufferInfo() + let originalBuffer = VCSCommandGetOriginalBuffer(bufnr('%')) + let fileName = bufname(originalBuffer) + let statusText = s:VCSCommandUtility.system(s:Executable() . ' status -- "' . fileName . '"') + if(v:shell_error) + return [] + endif + + " File not under HG control. + if statusText =~ '^?' + return ['Unknown'] + endif + + let parentsText = s:VCSCommandUtility.system(s:Executable() . ' parents -- "' . fileName . '"') + let revision = matchlist(parentsText, '^changeset:\s\+\(\S\+\)\n')[1] + + let logText = s:VCSCommandUtility.system(s:Executable() . ' log -- "' . fileName . '"') + let repository = matchlist(logText, '^changeset:\s\+\(\S\+\)\n')[1] + + if revision == '' + " Error + return ['Unknown'] + elseif statusText =~ '^A' + return ['New', 'New'] + else + return [revision, repository] + endif +endfunction + +" Function: s:hgFunctions.Log(argList) {{{2 +function! s:hgFunctions.Log(argList) + if len(a:argList) == 0 + let options = [] + let caption = '' + elseif len(a:argList) <= 2 && match(a:argList, '^-') == -1 + let options = ['-r' . join(a:argList, ':')] + let caption = options[0] + else + " Pass-through + let options = a:argList + let caption = join(a:argList, ' ') + endif + + let resultBuffer = s:DoCommand(join(['log', '-v'] + options), 'log', caption, {}) + return resultBuffer +endfunction + +" Function: s:hgFunctions.Revert(argList) {{{2 +function! s:hgFunctions.Revert(argList) + return s:DoCommand('revert', 'revert', '', {}) +endfunction + +" Function: s:hgFunctions.Review(argList) {{{2 +function! s:hgFunctions.Review(argList) + if len(a:argList) == 0 + let versiontag = '(current)' + let versionOption = '' + else + let versiontag = a:argList[0] + let versionOption = ' -r ' . versiontag . ' ' + endif + +" let resultBuffer = s:DoCommand('cat --non-interactive' . versionOption, 'review', versiontag, {}) + let resultBuffer = s:DoCommand('cat' . versionOption, 'review', versiontag, {}) + if resultBuffer > 0 + let &filetype = getbufvar(b:VCSCommandOriginalBuffer, '&filetype') + endif + return resultBuffer +endfunction + +" Function: s:hgFunctions.Status(argList) {{{2 +function! s:hgFunctions.Status(argList) + let options = ['-u', '-v'] + if len(a:argList) == 0 + let options = a:argList + endif + return s:DoCommand(join(['status'] + options, ' '), 'status', join(options, ' '), {}) +endfunction + +" Function: s:hgFunctions.Update(argList) {{{2 +function! s:hgFunctions.Update(argList) + return s:DoCommand('update', 'update', '', {}) +endfunction + +" Annotate setting {{{2 +let s:hgFunctions.AnnotateSplitRegex = '\d\+: ' + +" Section: Plugin Registration {{{1 +let s:VCSCommandUtility = VCSCommandRegisterModule('HG', expand(''), s:hgFunctions, []) + +let &cpo = s:save_cpo diff --git a/vim/plugin/vcssvk.vim b/vim/plugin/vcssvk.vim index f79f578..c1142d7 100644 --- a/vim/plugin/vcssvk.vim +++ b/vim/plugin/vcssvk.vim @@ -60,12 +60,19 @@ let s:svkFunctions = {} " Section: Utility functions {{{1 +" Function: s:Executable() {{{2 +" Returns the executable used to invoke SVK suitable for use in a shell +" command. +function! s:Executable() + return shellescape(VCSCommandGetOption('VCSCommandSVKExec', 'svk')) +endfunction + " Function: s:DoCommand(cmd, cmdName, statusText, options) {{{2 " Wrapper to VCSCommandDoCommand to add the name of the SVK executable to the " command argument. function! s:DoCommand(cmd, cmdName, statusText, options) if VCSCommandGetVCSType(expand('%')) == 'SVK' - let fullCmd = VCSCommandGetOption('VCSCommandSVKExec', 'svk') . ' ' . a:cmd + let fullCmd = s:Executable() . ' ' . a:cmd return VCSCommandDoCommand(fullCmd, a:cmdName, a:statusText, a:options) else throw 'SVK VCSCommand plugin called on non-SVK item.' @@ -82,7 +89,7 @@ function! s:svkFunctions.Identify(buffer) else let directoryName = fnamemodify(fileName, ':p:h') endif - let statusText = system(VCSCommandGetOption('VCSCommandSVKExec', 'svk') . ' info "' . directoryName . '"') + let statusText = s:VCSCommandUtility.system(s:Executable() . ' info -- "' . directoryName . '"', "no") if(v:shell_error) return 0 else @@ -138,7 +145,7 @@ endfunction " Function: s:svkFunctions.Diff(argList) {{{2 function! s:svkFunctions.Diff(argList) if len(a:argList) == 0 - let revOptions = [] + let revOptions = [] let caption = '' elseif len(a:argList) <= 2 && match(a:argList, '^-') == -1 let revOptions = ['-r' . join(a:argList, ':')] @@ -167,7 +174,7 @@ endfunction function! s:svkFunctions.GetBufferInfo() let originalBuffer = VCSCommandGetOriginalBuffer(bufnr('%')) let fileName = resolve(bufname(originalBuffer)) - let statusText = system(VCSCommandGetOption('VCSCommandSVKExec', 'svk') . ' status -v "' . fileName . '"') + let statusText = s:VCSCommandUtility.system(s:Executable() . ' status -v -- "' . fileName . '"') if(v:shell_error) return [] endif @@ -257,6 +264,6 @@ function! s:svkFunctions.Update(argList) endfunction " Section: Plugin Registration {{{1 -call VCSCommandRegisterModule('SVK', expand(''), s:svkFunctions, []) +let s:VCSCommandUtility = VCSCommandRegisterModule('SVK', expand(''), s:svkFunctions, []) let &cpo = s:save_cpo diff --git a/vim/plugin/vcssvn.vim b/vim/plugin/vcssvn.vim index 646b1c0..da738ee 100644 --- a/vim/plugin/vcssvn.vim +++ b/vim/plugin/vcssvn.vim @@ -67,12 +67,19 @@ let s:svnFunctions = {} " Section: Utility functions {{{1 +" Function: s:Executable() {{{2 +" Returns the executable used to invoke git suitable for use in a shell +" command. +function! s:Executable() + return shellescape(VCSCommandGetOption('VCSCommandSVNExec', 'svn')) +endfunction + " Function: s:DoCommand(cmd, cmdName, statusText, options) {{{2 " Wrapper to VCSCommandDoCommand to add the name of the SVN executable to the " command argument. function! s:DoCommand(cmd, cmdName, statusText, options) if VCSCommandGetVCSType(expand('%')) == 'SVN' - let fullCmd = VCSCommandGetOption('VCSCommandSVNExec', 'svn') . ' ' . a:cmd + let fullCmd = s:Executable() . ' ' . a:cmd return VCSCommandDoCommand(fullCmd, a:cmdName, a:statusText, a:options) else throw 'SVN VCSCommand plugin called on non-SVN item.' @@ -148,7 +155,7 @@ endfunction " Function: s:svnFunctions.Diff(argList) {{{2 function! s:svnFunctions.Diff(argList) if len(a:argList) == 0 - let revOptions = [] + let revOptions = [] let caption = '' elseif len(a:argList) <= 2 && match(a:argList, '^-') == -1 let revOptions = ['-r' . join(a:argList, ':')] @@ -193,7 +200,7 @@ endfunction function! s:svnFunctions.GetBufferInfo() let originalBuffer = VCSCommandGetOriginalBuffer(bufnr('%')) let fileName = bufname(originalBuffer) - let statusText = system(VCSCommandGetOption('VCSCommandSVNExec', 'svn') . ' status --non-interactive -vu "' . fileName . '"') + let statusText = s:VCSCommandUtility.system(s:Executable() . ' status --non-interactive -vu -- "' . fileName . '"') if(v:shell_error) return [] endif @@ -277,12 +284,16 @@ endfunction function! s:svnFunctions.Unlock(argList) return s:DoCommand(join(['unlock --non-interactive'] + a:argList, ' '), 'unlock', join(a:argList, ' '), {}) endfunction + " Function: s:svnFunctions.Update(argList) {{{2 function! s:svnFunctions.Update(argList) return s:DoCommand('update --non-interactive', 'update', '', {}) endfunction +" Annotate setting {{{2 +let s:svnFunctions.AnnotateSplitRegex = '\s\+\S\+\s\+\S\+ ' + " Section: Plugin Registration {{{1 -call VCSCommandRegisterModule('SVN', expand(''), s:svnFunctions, []) +let s:VCSCommandUtility = VCSCommandRegisterModule('SVN', expand(''), s:svnFunctions, []) let &cpo = s:save_cpo diff --git a/vim/syntax/HGAnnotate.vim b/vim/syntax/HGAnnotate.vim new file mode 100644 index 0000000..cee9a23 --- /dev/null +++ b/vim/syntax/HGAnnotate.vim @@ -0,0 +1,40 @@ +" Vim syntax file +" Language: HG annotate output +" Maintainer: Bob Hiestand +" Remark: Used by the vcscommand plugin. +" License: +" Copyright (c) 2010 Bob Hiestand +" +" Permission is hereby granted, free of charge, to any person obtaining a copy +" of this software and associated documentation files (the "Software"), to +" deal in the Software without restriction, including without limitation the +" rights to use, copy, modify, merge, publish, distribute, 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 PARTICULAR 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 CONTRACT, TORT OR OTHERWISE, ARISING +" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +" IN THE SOFTWARE. + +if exists("b:current_syntax") + finish +endif + +syn match hgVer /\d\+/ contained +syn match hgName /^\s*\S\+/ contained +syn match hgHead /^\s*\S\+\s\+\d\+:/ contains=hgVer,hgName + +if !exists("did_hgannotate_syntax_inits") + let did_hgannotate_syntax_inits = 1 + hi link hgName Type + hi link hgVer Statement +endif + +let b:current_syntax="hgAnnotate" diff --git a/vim/syntax/gitAnnotate.vim b/vim/syntax/gitAnnotate.vim new file mode 100644 index 0000000..932342d --- /dev/null +++ b/vim/syntax/gitAnnotate.vim @@ -0,0 +1,44 @@ +" Vim syntax file +" Language: git annotate output +" Maintainer: Bob Hiestand +" Remark: Used by the vcscommand plugin. +" License: +" Copyright (c) 2009 Bob Hiestand +" +" Permission is hereby granted, free of charge, to any person obtaining a copy +" of this software and associated documentation files (the "Software"), to +" deal in the Software without restriction, including without limitation the +" rights to use, copy, modify, merge, publish, distribute, 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 PARTICULAR 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 CONTRACT, TORT OR OTHERWISE, ARISING +" FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +" IN THE SOFTWARE. + +if exists("b:current_syntax") + finish +endif + +syn region gitName start="(\@<=" end="\( \d\d\d\d-\)\@=" contained +syn match gitCommit /^\^\?\x\+/ contained +syn match gitDate /\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d [+-]\d\d\d\d/ contained +syn match gitLineNumber /\d\+)\@=/ contained +syn region gitAnnotation start="^" end=") " oneline keepend contains=gitCommit,gitLineNumber,gitDate,gitName + +if !exists("did_gitannotate_syntax_inits") + let did_gitannotate_syntax_inits = 1 + hi link gitName Type + hi link gitCommit Statement + hi link gitDate Comment + hi link gitLineNumber Label +endif + +let b:current_syntax="gitAnnotate" diff --git a/vim/vimrc b/vim/vimrc index df1d452..9b2380b 100644 --- a/vim/vimrc +++ b/vim/vimrc @@ -11,7 +11,7 @@ set viminfo='20,\"50,f10 set history=50 set nohlsearch set nostartofline -"set paste +" set paste set ruler set cmdheight=1 @@ -24,6 +24,18 @@ set expandtab set softtabstop=4 set autoindent set smartindent +" For highlighted numbers: +let python_highlight_numbers = 1 +" +" For highlighted builtin functions: +let python_highlight_builtins = 1 +" +" For highlighted standard exceptions: +let python_highlight_exceptions = 1 +" +" Highlight erroneous whitespace: +let python_highlight_space_errors = 1 + " End Python settings set nofoldenable @@ -38,18 +50,20 @@ set encoding=utf-8 set listchars=tab:->,trail:.,eol:$ set smartcase set errorbells -"set visualbell +" set visualbell set showcmd " Show (partial) command in status line. set showmatch " Show matching brackets. set ignorecase " Do case insensitive matching set incsearch " Incremental search set autowrite " Automatically save before commands like :next and :make -"set statusline=%<%f\ %H%m%r%=%-14.(%l,%c%)\ %P\ Buf.%n +" set statusline=%<%f\ %H%m%r%=%-14.(%l,%c%)\ %P\ Buf.%n +set showtabline=0 set backupcopy=yes set fileformats=unix,mac,dos set fileformat=unix set mouse=a -colorscheme inkpot +set printfont=Monaco:h14 +colorscheme wombat256 " """"""""" " User Info @@ -134,6 +148,22 @@ nnoremap V vnoremap j vnoremap k +" Terminal/Filemanager integration +nnoremap :OpenTerminal +nnoremap :OpenFilemanager + +" Tab selection by number +nnoremap 1gt +nnoremap 2gt +nnoremap 3gt +nnoremap 4gt +nnoremap 5gt +nnoremap 6gt +nnoremap 7gt +nnoremap 8gt +nnoremap 9gt +nnoremap 10gt + " Vim5 comes with syntaxhighlighting. If you want to enable syntaxhightlighting " by default uncomment the next three lines. if has("syntax") @@ -152,100 +182,9 @@ if has("autocmd") au BufNewFile,BufRead *.mako setf mako endif - -"recalculate the trailing whitespace warning when idle, and after saving -autocmd cursorhold,bufwritepost * unlet! b:statusline_trailing_space_warning - -"return '[\s]' if trailing white space is detected -"return '' otherwise -function! StatuslineTrailingSpaceWarning() - if !exists("b:statusline_trailing_space_warning") - if search('\s\+$', 'nw') != 0 - let b:statusline_trailing_space_warning = '[\s]' - else - let b:statusline_trailing_space_warning = '' - endif - endif - return b:statusline_trailing_space_warning -endfunction - - -" """""""""""" -" Status Line -" """""""""""" - -" Some useful functions -"return the syntax highlight group under the cursor '' -function! StatuslineCurrentHighlight() - let name = synIDattr(synID(line('.'),col('.'),1),'name') - if name == '' - return '' - else - return '[' . name . ']' - endif -endfunction - -"recalculate the tab warning flag when idle and after writing -autocmd cursorhold,bufwritepost * unlet! b:statusline_tab_warning - -"return '[&et]' if &et is set wrong -"return '[mixed-indenting]' if spaces and tabs are used to indent -"return an empty string if everything is fine -function! StatuslineTabWarning() - if !exists("b:statusline_tab_warning") - let tabs = search('^\t', 'nw') != 0 - let spaces = search('^ ', 'nw') != 0 - - if tabs && spaces - let b:statusline_tab_warning = '[mixed-indenting]' - elseif (spaces && !&et) || (tabs && &et) - let b:statusline_tab_warning = '[&et]' - else - let b:statusline_tab_warning = '' - endif - endif - return b:statusline_tab_warning -endfunction - -" Real Status line definition -set statusline=%t\ "tail of the filename - -"display a warning if fileformat isnt unix -set statusline+=%#warningmsg# -set statusline+=%{&ff!='unix'?'['.&ff.']':''} -set statusline+=%* - -"display a warning if file encoding isnt utf-8 -set statusline+=%#warningmsg# -set statusline+=%{(&fenc!='utf-8'&&&fenc!='')?'['.&fenc.']':''} -set statusline+=%* - -set statusline+=%h "help file flag -set statusline+=%y "filetype -set statusline+=%r "read only flag -set statusline+=%m "modified flag - -"display a warning if &et is wrong, or we have mixed-indenting -set statusline+=%#error# -set statusline+=%{StatuslineTabWarning()} -set statusline+=%* - -set statusline+=%{StatuslineTrailingSpaceWarning()} - -"display a warning if &paste is set -set statusline+=%#error# -set statusline+=%{&paste?'[paste]':'[nopaste]'} -set statusline+=%* - -set statusline+=%= "left/right separator -set statusline+=%{StatuslineCurrentHighlight()}\ \ "current highlight -set statusline+=%02c, "cursor column -set statusline+=%03l/%03L "cursor line/total lines -set statusline+=\ hex:\ 0x%02B -set statusline+=\ %P "percent through file - " User customizations are held in file ~/.vim/vimrc.local if filereadable($HOME."/.vim/vimrc.local") source $HOME/.vim/vimrc.local endif +" vim: set ts=4 sw=4 tw=0 ft=vim :