Created
August 19, 2019 15:26
-
-
Save bwangelme/836eb8e33319719ae6993eecb5400a0d to your computer and use it in GitHub Desktop.
春哥(章亦春)的Vim配置 https://agentzh.org/misc/.vimrc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" An example for a vimrc file. | |
" | |
" Maintainer: Yichun Zhang <yichun@openresty.com> | |
" Credit: Bram Moolenaar <Bram@vim.org> and Audrey Tang | |
" Last change: 2019 Aug 19 | |
" | |
" To use it, copy it to | |
" for Unix and OS/2: ~/.vimrc | |
" for Amiga: s:.vimrc | |
" for MS-DOS and Win32: $VIM\_vimrc | |
" for OpenVMS: sys$login:.vimrc | |
" When started as "evim", evim.vim will already have done these settings. | |
if v:progname =~? "evim" | |
finish | |
endif | |
set expandtab | |
set shiftwidth=4 | |
set softtabstop=4 | |
set tabstop=4 | |
" Use Vim settings, rather then Vi settings (much better!). | |
" This must be first, because it changes other options as a side effect. | |
set nocompatible | |
" allow backspacing over everything in insert mode | |
set backspace=indent,eol,start | |
if has("vms") | |
set nobackup " do not keep a backup file, use versions instead | |
else | |
set backup " keep a backup file | |
endif | |
set history=500 " keep 50 lines of command line history | |
set ruler " show the cursor position all the time | |
set showcmd " display incomplete commands | |
set incsearch " do incremental searching | |
" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries | |
" let &guioptions = substitute(&guioptions, "t", "", "g") | |
" Don't use Ex mode, use Q for formatting | |
map Q gq | |
" This is an alternative that also works in block mode, but the deleted | |
" text is lost and it only works for putting the current register. | |
"vnoremap p "_dp | |
" Switch syntax highlighting on, when the terminal has colors | |
" Also switch on highlighting the last used search pattern. | |
if &t_Co > 2 || has("gui_running") | |
syntax on | |
set hlsearch | |
endif | |
" Only do this part when compiled with support for autocommands. | |
if has("autocmd") | |
" Enable file type detection. | |
" Use the default filetype settings, so that mail gets 'tw' set to 72, | |
" 'cindent' is on in C files, etc. | |
" Also load indent files, to automatically do language-dependent indenting. | |
filetype plugin indent on | |
" Put these in an autocmd group, so that we can delete them easily. | |
augroup vimrcEx | |
au! | |
" For all text files set 'textwidth' to 78 characters. | |
autocmd FileType text setlocal textwidth=78 | |
" When editing a file, always jump to the last known cursor position. | |
" Don't do it when the position is invalid or when inside an event handler | |
" (happens when dropping a file on gvim). | |
autocmd BufReadPost * | |
\ if line("'\"") > 0 && line("'\"") <= line("$") | | |
\ exe "normal g`\"" | | |
\ endif | |
augroup END | |
else | |
set autoindent " always set autoindenting on | |
endif " has("autocmd") | |
" Metadata: {{{ | |
set nocompatible | |
set title | |
let g:Header_name="Yichun Zhang" | |
let g:Header_email="agentzh@gmail.com" | |
" }}} | |
" Encodings: {{{ | |
set termencoding=utf-8 | |
set encoding=utf-8 | |
set fileencodings=utf8,big5-hkscs,utf-8,iso8859-1 | |
set expandtab | |
set grepprg=grep\ -nH\ $* | |
" ,gbk,euc-jp,euc-kr,utf-bom,iso8859-1 | |
" }}} | |
" Terminal: {{{ | |
"noremap Bs Del | |
"noremap Del Bs | |
"noremap!Bs Del | |
"noremap!Del Bs | |
set bs=2 | |
"noremap! <Del> <BS> | |
"noremap! <BS> <Del> | |
" insert-mode cursors | |
"map! OA ka | |
"map! OB ja | |
"map! OC lli | |
"map! OD i | |
" Alt now serves as window commands (^W) | |
"noremap | |
"norgmap <Tab> p | |
noremap gh <C-W>h | |
noremap gk <C-W>k | |
noremap gl <C-W>l | |
noremap gj <C-W>j | |
noremap F gf | |
" }}} | |
" Utilities: {{{ | |
" }}} | |
" Utilities: {{{ | |
" map <C-A> :!svk add '%' | |
" map <C-D> :!svk di '%' | |
" map <C-U> :!svk pull | |
" map <C-I> :!svk ci | |
"map W :!chmod +w % | |
" }}} | |
" Environment: {{{ | |
"set shiftround | |
set writeany autoread autowrite | |
set tabstop=8 " so tabs look right for us | |
set softtabstop=4 | |
set shiftwidth=4 " so ^T and << are smaller | |
set report=1 " so we our told whenever we affect more than 1 line | |
set nomesg " because being talked to during an edit is aggravating | |
set autoindent " so i don't have to tab in | |
set wrap | |
set breakat= | |
"set wrapmargin=1 " Wrap slightly in from the margin | |
set linebreak | |
"set virtualedit=block " 'Free' editing in visual block mode | |
set dictionary+=/usr/share/dict/words " dictionary | |
set splitbelow " horizontally split below | |
set splitright " vertically split to the right | |
set smartcase " be sensible when searching 'ic' | |
set incsearch | |
set hlsearch | |
"set ttyfast | |
set timeoutlen=500 " Fastish for slow connections | |
" }}} | |
" Shortcuts: {{{ | |
" edit previously editted file | |
"noremap = :MBEbn | |
" write out the file | |
"map :w! | |
" noremap | |
" split line | |
" map * i | |
" because it's easier to type | |
"noremap g G | |
"noremap G g | |
" so we return to exact position | |
map ' ` | |
" so Y is analagous to C and D | |
map Y y$ | |
" single-key save+quit | |
map Q :wq | |
" go to next file in arg list, same position | |
map :n +/ | |
" set textwidth to cursor's column | |
"map #tw :set textwidth=<C-R>=col(".")<C-M> | |
" }}} | |
" Commands: {{{ | |
" Sorting, uniquing and shuffling | |
command -nargs=* -range=% Sort <line1>,<line2>!sort <args> | |
command -nargs=* -range=% Uniq <line1>,<line2>!uniq <args> | |
command -nargs=* -range=% Rand <line1>,<line2>!rand <args> | |
command Nl :if (&nu) <Bar> set nonu <Bar> else <Bar> set nu <Bar> endif | |
command Q :q! | |
command W :w! | |
command Wq :wq! | |
command WQ :wq! | |
" }}} | |
" Perl: {{{ | |
map <C-P> :make | |
map <F4> :call MakeTest() | |
fun! MakeTest() | |
set makeprg=make\ test | |
make | |
set makeprg=perl\ % | |
endfun | |
let current_compiler = "perl" | |
autocmd FileType perl set makeprg=perl\ -w\ % | |
autocmd FileType perl6 set makeprg=pugs\ % | |
autocmd FileType scheme set makeprg=mzscheme\ -g\ -r\ % | |
autocmd FileType scheme set shiftwidth=2 | |
autocmd FileType mzperl set makeprg=mzperl\ % | |
autocmd FileType mzperl set shiftwidth=2 | |
autocmd FileType imc set makeprg=parrot\ % | |
let perl_include_POD=1 | |
let perl_want_scope_in_variables=1 | |
let perl_extended_vars=1 | |
let perl_fold=1 | |
" }}} | |
" Filetypes: {{{ | |
filetype indent on | |
filetype plugin on | |
" Ignore filenames with any of the following suffices | |
set suffixes+=.aux,.bak,.dvi,.gz,.idx,.log,.ps,.swp,.tar,.class.,~ | |
set suffixes+=.o,.bbl,.log,.blg,.ilg,.ind,.toc,.pdf,.lof | |
" Suffices when doing 'gf' stuff. | |
set suffixesadd+=.html,.pl,.pm,.tex,.sty,.css,.xml,.xsd,.txt,.ict | |
set suffixesadd+=.shtml,.phtml,.ehtml,.epl,.rss,.rdf,.pod,.asp | |
if has("wildignore") | set wildignore+=&suffixes | endif | |
fun! FTCheck() | |
let lines = getline(1) | |
if lines =~? "\[<%]\[#&% ]" | |
setf mason | |
elseif lines =~? "--- #YAML:" | |
setf yaml | |
elseif lines =~? "[%" | |
setf tt2 | |
elseif lines =~? "===" | |
setf diff | |
elseif lines =~? "pugs" | |
setf perl6 | |
endif | |
endfun | |
" }}} | |
" Color: {{{ | |
syntax on | |
set bg=dark | |
let html_number_color=1 | |
"colorscheme darkblue | |
"colorscheme ron | |
"colorscheme peachpuff | |
colorscheme delek | |
"colorscheme print_bw | |
"colorscheme habiLight | |
"colorscheme proton | |
"colorscheme blueshift | |
"colorscheme desert | |
" }}} | |
" Folding: {{{ | |
set foldmethod=marker | |
set foldtext=AutFoldText() | |
set nofoldenable | |
function ExpandTo(xlen,xstr) | |
let hey = a:xstr | |
while strlen(hey) < a:xlen | |
let hey = hey . ' ' | |
endwhile | |
return hey | |
endfunction | |
function AutFoldText() | |
let line = getline(v:foldstart) | |
let tail = (v:foldend - v:foldstart + 1) . ' lines' | |
return ExpandTo((winwidth(0) - strlen(tail)), line) . tail | |
endfunction | |
set fillchars=stlnc:-,vert:\|,fold:\ ,diff:- | |
if has("win32") | |
hi Folded ctermbg=blue ctermfg=yellow | |
else | |
hi Folded cterm=underline ctermfg=Gray | |
endif | |
autocmd FileType human syn region FoldMarker start="^[1234567890]" end="^[1234567890]"me=e-1 fold keepend | |
" }}} | |
" Autocommands: {{{ | |
function! CHANGE_CURR_DIR() | |
let _dir = expand("%:p:h") | |
if _dir !~ '^/tmp' | |
exec 'cd ' . _dir | |
endif | |
unlet _dir | |
endfunction | |
"autocmd BufEnter * call CHANGE_CURR_DIR() | |
autocmd BufNewFile,BufRead * set path+=** | |
autocmd BufReadPost * if line("'\"")|execute("normal `\"")|endif | |
"autocmd BufNewFile,BufRead *.t setf perl | |
autocmd BufNewFile,BufRead *.dasc setf c | |
autocmd BufNewFile,BufRead *.y setf c | |
autocmd BufNewFile,BufRead *.yaml,*.yml setf yaml | |
autocmd BufNewFile,BufRead *.ss setf scheme | |
autocmd BufNewFile,BufRead *.c setf c | |
autocmd BufNewFile,BufRead *.sxx setf stp | |
autocmd BufNewFile,BufRead *.stp setf stp | |
autocmd BufNewFile,BufRead *.mzp setf mzperl | |
autocmd BufNewFile,BufRead *.mas setf mason | |
autocmd BufNewFile,BufRead *.hta setf mason | |
autocmd BufNewFile,BufRead *.p6 setf perl6 | |
autocmd BufNewFile,BufRead *.tdy setf perl | |
autocmd BufNewFile,BufRead *.edge setf edge | |
autocmd BufNewFile,BufRead *.el setf edge | |
autocmd BufNewFile,BufRead *.ops setf ops | |
autocmd BufNewFile,BufRead *.pmc setf pmc | |
autocmd BufNewFile,BufRead *.yy setf yacc | |
autocmd BufNewFile,BufRead *.fan setf perl6 | |
autocmd BufNewFile,BufRead * call FTCheck() | |
autocmd BufNewFile,BufRead *.hsc setf haskell | |
autocmd BufNewFile,BufRead *.hs-drift setf haskell | |
autocmd BufNewFile,BufRead *.tt setf tt2 | |
autocmd BufNewFile,BufRead *.emt setf c | |
autocmd BufNewFile,BufRead *.pod hi perlPOD ctermfg=Gray | |
autocmd BufNewFile,BufRead *.0 24 | |
autocmd BufNewFile,BufRead w3m* set fileencoding=utf-8 | |
au BufNewFile,BufRead *.pmc set ft=pmc cindent | |
au BufNewFile,BufRead *.pasm set ft=pasm ai sw=4 | |
au BufNewFile,BufRead *.imc,*.imcc,*.pir set ft=pir ai sw=4 | |
au BufNewFile *.imc,*.imcc,*.pir 0r ~/.vim/skeleton.pir | |
let Tlist_Ctags_Cmd='/usr/local/bin/exctags' | |
let Tlist_Inc_Winwidth=0 | |
highlight WhiteSpaceEOL ctermbg=darkgreen guibg=lightgreen | |
match WhiteSpaceEOL /\s$/ | |
autocmd WinEnter * match WhiteSpaceEOL /\s$/ | |
"set sessionoptions=buffers,help,tabpages,winsize,winpos,sesdir | |
set path+=** | |
set et | |
set smarttab | |
" vim: foldmethod=marker shiftwidth=4 expandtab | |
set guifont=Consolas\ 11 | |
set pastetoggle=<F9> | |
set mouse= | |
imap <F2> <C-R>=strftime("%c")<CR> | |
set wrapscan | |
hi Search cterm=NONE ctermfg=black ctermbg=blue | |
"highlight Search guibg='Purple' guifg='NONE' | |
" Allow saving of files as sudo when I forgot to start vim using sudo. | |
cmap w!! w !sudo tee > /dev/null % | |
" AnsiHighlight: Allows for marking up a file, using ANSI color escapes when | |
" the syntax changes colors, for easy, faithful reproduction. | |
" Author: Matthew Wozniski (mjw@drexel.edu) | |
" Date: Fri, 01 Aug 2008 05:22:55 -0400 | |
" Version: 1.0 FIXME | |
" History: FIXME see :help marklines-history | |
" License: BSD. Completely open source, but I would like to be | |
" credited if you use some of this code elsewhere. | |
" Copyright (c) 2008, Matthew J. Wozniski {{{1 | |
" All rights reserved. | |
" | |
" Redistribution and use in source and binary forms, with or without | |
" modification, are permitted provided that the following conditions are met: | |
" * Redistributions of source code must retain the above copyright | |
" notice, this list of conditions and the following disclaimer. | |
" * Redistributions in binary form must reproduce the above copyright | |
" notice, this list of conditions and the following disclaimer in the | |
" documentation and/or other materials provided with the distribution. | |
" * The names of the contributors may not be used to endorse or promote | |
" products derived from this software without specific prior written | |
" permission. | |
" | |
" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY | |
" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
" DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY | |
" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | |
" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
" SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
" Turn off vi-compatible mode, unless it's already off {{{1 | |
if &cp | |
set nocp | |
endif | |
let s:type = 'cterm' | |
if &t_Co == 0 | |
let s:type = 'term' | |
endif | |
" Converts info for a highlight group to a string of ANSI color escapes {{{1 | |
function! s:GroupToAnsi(groupnum) | |
if ! exists("s:ansicache") | |
let s:ansicache = {} | |
endif | |
let groupnum = a:groupnum | |
if groupnum == 0 | |
let groupnum = hlID('Normal') | |
endif | |
if has_key(s:ansicache, groupnum) | |
return s:ansicache[groupnum] | |
endif | |
let fg = synIDattr(groupnum, 'fg', s:type) | |
let bg = synIDattr(groupnum, 'bg', s:type) | |
let rv = synIDattr(groupnum, 'reverse', s:type) | |
let bd = synIDattr(groupnum, 'bold', s:type) | |
" FIXME other attributes? | |
if rv == "" || rv == -1 | |
let rv = 0 | |
endif | |
if bd == "" || bd == -1 | |
let bd = 0 | |
endif | |
if rv | |
let temp = bg | |
let bg = fg | |
let fg = temp | |
endif | |
if fg == "" || fg == -1 | |
unlet fg | |
endif | |
if !exists('fg') && !groupnum == hlID('Normal') | |
let fg = synIDattr(hlID('Normal'), 'fg', s:type) | |
if fg == "" || fg == -1 | |
unlet fg | |
endif | |
endif | |
if bg == "" || bg == -1 | |
unlet bg | |
endif | |
if !exists('bg') | |
let bg = synIDattr(hlID('Normal'), 'bg', s:type) | |
if bg == "" || bg == -1 | |
unlet bg | |
endif | |
endif | |
let retv = "\<Esc>[efg" | |
if bd | |
let retv .= ";1" | |
endif | |
if exists('fg') && fg < 8 | |
let retv .= ";3" . fg | |
elseif exists('fg') && fg < 16 "use aixterm codes | |
let retv .= ";9" . (fg - 8) | |
elseif exists('fg') "use xterm256 codes | |
let retv .= ";38;5;" . fg | |
else | |
let retv .= ";39" | |
endif | |
if exists('bg') && bg < 8 | |
let retv .= ";4" . bg | |
elseif exists('bg') && bg < 16 "use aixterm codes | |
let retv .= ";10" . (bg - 8) | |
elseif exists('bg') "use xterm256 codes | |
let retv .= ";48;5;" . bg | |
else | |
let retv .= ";49" | |
endif | |
let retv .= "m" | |
let s:ansicache[groupnum] = retv | |
return retv | |
endfunction | |
function! AnsiHighlight(output_file) | |
let retv = [] | |
for lnum in range(1, line('$')) | |
let last = hlID('Normal') | |
let output = s:GroupToAnsi(last) . "\<Esc>[K" " Clear to right | |
" Hopefully fix highlighting sync issues | |
exe "norm! " . lnum . "G$" | |
let line = getline(lnum) | |
for cnum in range(1, col('.')) | |
if synIDtrans(synID(lnum, cnum, 1)) != last | |
let last = synIDtrans(synID(lnum, cnum, 1)) | |
let output .= s:GroupToAnsi(last) | |
endif | |
let output .= matchstr(line, '\%(\zs.\)\{'.cnum.'}') | |
"let line = substitute(line, '.', '', '') | |
"let line = matchstr(line, '^\@<!.*') | |
endfor | |
let retv += [output] | |
endfor | |
" Reset the colors to default after displaying the file | |
let retv[-1] .= "\<Esc>[0m" | |
return writefile(retv, a:output_file) | |
endfunction | |
" See copyright in the vims cript above (for the vim script) and in | |
" vimcat.md for the whole script. | |
" | |
" The list of contributors is at the bottom of the vimpager script in this | |
" project. | |
" | |
"set clipboard=unnamed | |
cmap cs! ConqueTermSplit bash | |
cmap cv! ConqueTermVSplit bash | |
cmap ct! ConqueTerm bash | |
cmap spell! setlocal spell spelllang=en_us | |
set clipboard=unnamedplus | |
"au BufNewFile,BufRead *.edge setf edge | |
au BufRead,BufNewFile *.edge set filetype=edge | |
au BufRead,BufNewFile *.conf set filetype=nginx | |
" | |
" Maintainer: Bram Moolenaar <Bram@vim.org> | |
" Last change: 2002 Sep 19 | |
" | |
" To use it, copy it to | |
" for Unix and OS/2: ~/.vimrc | |
" for Amiga: s:.vimrc | |
" for MS-DOS and Win32: $VIM\_vimrc | |
" for OpenVMS: sys$login:.vimrc | |
" When started as "evim", evim.vim will already have done these settings. | |
if v:progname =~? "evim" | |
finish | |
endif | |
" Use Vim settings, rather then Vi settings (much better!). | |
" This must be first, because it changes other options as a side effect. | |
set nocompatible | |
" allow backspacing over everything in insert mode | |
set backspace=indent,eol,start | |
if has("vms") | |
set nobackup " do not keep a backup file, use versions instead | |
else | |
set backup " keep a backup file | |
endif | |
set history=500 " keep 50 lines of command line history | |
set ruler " show the cursor position all the time | |
set showcmd " display incomplete commands | |
set incsearch " do incremental searching | |
" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries | |
" let &guioptions = substitute(&guioptions, "t", "", "g") | |
" Don't use Ex mode, use Q for formatting | |
map Q gq | |
" This is an alternative that also works in block mode, but the deleted | |
" text is lost and it only works for putting the current register. | |
"vnoremap p "_dp | |
" Switch syntax highlighting on, when the terminal has colors | |
" Also switch on highlighting the last used search pattern. | |
if &t_Co > 2 || has("gui_running") | |
syntax on | |
set hlsearch | |
endif | |
" Only do this part when compiled with support for autocommands. | |
if has("autocmd") | |
" Enable file type detection. | |
" Use the default filetype settings, so that mail gets 'tw' set to 72, | |
" 'cindent' is on in C files, etc. | |
" Also load indent files, to automatically do language-dependent indenting. | |
filetype plugin indent on | |
" Put these in an autocmd group, so that we can delete them easily. | |
augroup vimrcEx | |
au! | |
" For all text files set 'textwidth' to 78 characters. | |
autocmd FileType text setlocal textwidth=78 | |
" When editing a file, always jump to the last known cursor position. | |
" Don't do it when the position is invalid or when inside an event handler | |
" (happens when dropping a file on gvim). | |
autocmd BufReadPost * | |
\ if line("'\"") > 0 && line("'\"") <= line("$") | | |
\ exe "normal g`\"" | | |
\ endif | |
augroup END | |
else | |
set autoindent " always set autoindenting on | |
endif " has("autocmd") | |
" Metadata: {{{ | |
set nocompatible | |
set title | |
let g:Header_name="Yichun Zhang" | |
let g:Header_email="agentzh@gmail.com" | |
" }}} | |
" Encodings: {{{ | |
set termencoding=utf-8 | |
set encoding=utf-8 | |
set fileencodings=utf8,big5-hkscs,utf-8,iso8859-1 | |
set expandtab | |
set grepprg=grep\ -nH\ $* | |
" ,gbk,euc-jp,euc-kr,utf-bom,iso8859-1 | |
" }}} | |
" Terminal: {{{ | |
"noremap Bs Del | |
"noremap Del Bs | |
"noremap!Bs Del | |
"noremap!Del Bs | |
set bs=2 | |
"noremap! <Del> <BS> | |
"noremap! <BS> <Del> | |
" insert-mode cursors | |
"map! OA ka | |
"map! OB ja | |
"map! OC lli | |
"map! OD i | |
" Alt now serves as window commands (^W) | |
"noremap | |
"nmap <F8> :TagbarToggle<CR> | |
"set autoindent | |
"set cindent | |
set expandtab | |
set shiftwidth=4 | |
set softtabstop=4 | |
set tabstop=4 | |
let $BASH_ENV="~/.bash_aliases" | |
" Show trailing whitepace and spaces before a tab: | |
"autocmd BufWinEnter * if line2byte(line("$") + 1) > 1000000 | syntax clear | endif | |
highlight WhiteSpaceEOL ctermbg=darkgreen guibg=lightgreen | |
match WhiteSpaceEOL /\s$/ | |
autocmd WinEnter * match WhiteSpaceEOL /\s$/ | |
autocmd BufNewFile,BufRead *.fan set filetype=perl6 | |
set colorcolumn=81 | |
highlight ColorColumn ctermbg=8 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment