" vm: foldmethod=marker "general settings {{{ set number set scrolloff=1 set incsearch set hlsearch "enhanced completion in cmd line set wildmenu set shiftwidth=4 set tabstop=4 set expandtab set smarttab set autoread set smartindent set autowrite syntax on set mouse=a set cursorline set cursorcolumn set display+=lastline "highlight the 80th char in a line highlight rightMargin cterm=bold ctermfg=red match rightMargin /\%<81v.\%>80v/ "Completion popup menu color highlight Pmenu ctermbg=brown highlight PmenuSel ctermbg=blue set foldmethod=syntax set foldlevelstart=99 filetype indent plugin on "speed up external commands by skipping the shell rc set shell=/bin/bash\ -f "fileencodings for recognition, fileencoding for writting set fileencodings-=latin1 set fileencodings+=gb18030 set fileencodings+=latin1 "}}} "dictionary completion <C-X><C-K> {{{ set dictionary+=/usr/share/dict/cracklib-small set iskeyword+=- "}}} "forget-those {{{ " inoremap <ESC> <NOP> "}}} " "shortcuts {{{ let mapleader = "," let maplocalleader = ",\\" nnoremap <F5> :make<CR> nnoremap <leader>t "=strftime("%c")<CR>P if has("gui_running") "{{{ noremap <A-q> :NERDTreeToggle<CR> else "Explanation: I want to use <A-q> as NERDTree, but my xfce-terminal modified "the key sequence(learn more in help :map-alt-keys), so I have to use <C-v><A-q>. noremap �q :NERDTreeToggle<CR> endif "}}} "use <space> to open or close folds nnoremap <SPACE> za "n/v/o mode mappings {{{ noremap H ^ noremap L $ noremap Y y$ "}}} "normal mode mappings {{{ nnoremap <leader>] :tn<CR> nnoremap <leader>[ :tN<CR> nnoremap g] :tjump<CR> nnoremap \ gt nnoremap <tab> gT nnoremap <C-b>n :bnext<CR> nnoremap <C-b>p :bprev<CR> nnoremap <leader>q :q<CR> nnoremap <C-a> ggVG"+y nnoremap <C-n> :tabnew<SPACE> nnoremap <C-l> :nohlsearch<CR> nnoremap <C-h> :help<SPACE> nnoremap _ ddkP nnoremap - ddp nnoremap <leader>rc :vsp $MYVIMRC<CR> nnoremap <leader>src :source $MYVIMRC<CR> nnoremap <leader>o o<ESC>k nnoremap <leader><space> a<space><ESC> "nnoremap <C-?> ?\v "it's <C-/> actually "nnoremap � /\v "gj and gk work better when a long line is wrapped nnoremap j gj nnoremap k gk "}}} "insert mode mappings {{{ inoremap jk <esc> inoremap <C-Z> <ESC>zza inoremap <C-u> <ESC>mzgUiw`za inoremap <C-j> <ESC>mzb~`za "make <C-c> trigger LeaveInsert autocmd event inoremap <C-c> <ESC> inoremap <C-t> \(\)<ESC>hi "}}} "surround the word {{{ nnoremap <leader>" viw<esc>a"<esc>hbi"<esc>lel nnoremap <leader>( viw<esc>a)<esc>hbi(<esc>lel vnoremap <leader>" <esc>`>a"<esc>`<i"<esc> vnoremap <leader>( <esc>`>a)<esc>`<i(<esc> "}}} "operator-pending mappings {{{ "these motions are very similar to the defaul i( or i" motions, but they "allow you to select the block when the cousor is outside the block. "So, they are called i(nner) n(ext)/l(ast) (/" onoremap in( :<C-u>normal! f(vi(<CR> onoremap il( :<C-u>normal! F)vi(<CR> onoremap in" :<C-u>normal! f"vi"<CR> onoremap il" :<C-u>normal! F"vi"<CR> "}}} "quickfix mappings {{{ nnoremap <leader>n :cnext<CR> nnoremap <leader>p :cprev<CR> nnoremap <leader>co :cwin<CR> nnoremap <leader>cc :cclose<CR> "}}} "taglist mappings {{{ nnoremap <leader>tl :Tlist<CR> "}}} "}}} "smooth scroll {{{ nnoremap <C-U> <C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y> nnoremap <C-D> <C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E> "}}} "pathogen {{{ runtime bundle/vim-pathogen/autoload/pathogen.vim call pathogen#infect() "}}} "airline {{{ set nocompatible set t_Co=256 set laststatus=2 let g:airline_powerline_fonts = 1 let g:airline_theme = "murmur" "}}} "ctrlp {{{ set runtimepath^=~/.vim/bundle/ctrlp.vim "}}} "ruby {{{ augroup rubyindent autocmd! autocmd FileType ruby set softtabstop=2 | set shiftwidth=2 augroup END "}}} "javascript {{{ augroup jscmd autocmd! "yes, I always forget semicons in js autocmd Filetype javascript,html inoremap <leader>kc <ESC>kA;<CR> augroup END "}}} "fcitx {{{ let g:prev_status = 0 function! Fcitx2en() let g:prev_status = system("fcitx-remote") if g:prev_status == 2 call system("fcitx-remote -c") endif endfunction function! Fcitx2zh() if g:prev_status == 2 call system("fcitx-remote -o") endif endfunction augroup fcitx_aucmd autocmd! autocmd InsertLeave * call Fcitx2en() autocmd InsertEnter * call Fcitx2zh() augroup END "}}} "ibus {{{ " let g:ibus_prev_status = 0 " function! Ibus2en() " let g:ibus_prev_status = ibus#is_enabled() " if g:ibus_prev_status == 1 " call ibus#disable() " endif " endfunction " " function! Ibus2zh() " if g:ibus_prev_status == 1 " call ibus#enable() " endif " endfunction " " augroup ibus_aucmd " autocmd! " autocmd InsertLeave * call Ibus2en() " autocmd InsertEnter * call Ibus2zh() " augroup END "}}} "html_preview {{{ augroup html_aucmd autocmd! autocmd FileType html nnoremap <leader>fp :!google-chrome % <CR><CR> augroup END "}}} "c++/c autocmds {{{ "Since I write single file programs most of the time, it's more convenient to "use g++/gcc directly as the makeprg function! SetMakeprg(compiler) let l:option = printf('setlocal makeprg=%s\ %s\ -o\ %s\ -lm\ -O2\ ', a:compiler, @%, fnamemodify(@%, ':t:r')) execute l:option endfunction augroup c_aucmd autocmd! autocmd FileType c call SetMakeprg("clang") autocmd FileType cpp call SetMakeprg('clang++\ -Wno-unused-result') augroup END "}}} "lisp settings {{{ function! SetDictionary() let l:option = printf("set dictionary=%s,%s", '$HOME/.vim/scheme-word-list', &dictionary) execute l:option "let g:is_chicken=1 endfunction augroup lisp_aucmd autocmd! autocmd FileType scheme call SetDictionary() augroup END let g:check_balanced = 0 let g:paredit_shortmaps = 1 "}}} "show space as dot {{{ set listchars=tab:▸\ ,trail:· set list "}}} "fold column toggle key {{{ function! FoldColumnToggle() if &foldcolumn setlocal foldcolumn=0 else setlocal foldcolumn=1 endif endfunction nnoremap <leader>f :call FoldColumnToggle()<CR> "}}} "autocmds for scratch files{{{ augroup scratch autocmd! autocmd QuitPre * if @% == "" | setlocal nomodified | endif augroup END "}}} "taglist plugin{{{ let Tlist_Exit_OnlyWindow=1 "}}} "slimv{{{ let g:lisp_rainbow=1 "let g:slimv_swank_cmd='! xterm -e scheme --load /home/yangzx/.vim/bundle/slimv.git/slime/contrib/swank-mit-scheme.scm &' let g:slimv_leader=",," "}}} "colorscheme {{{ set background=dark colorscheme vividchalk if has("gui_running") set background=light colorscheme solarized endif "}}} "writebackup{{{ let g:WriteBackup_BackupDir='~/.vimbackup' autocmd BufReadPre,FileReadPre ?* WriteBackup "}}} " fenview{{{ " let g:fencview_autodetect = 1 " let g:fencview_auto_patterns = '*' "}}} " "haskell{{{ let g:haddock_browser = "google-chrome" "}}} " "easytag{{{ let g:easytags_auto_highlight = 0 "let g:easytags_updatetime_min = 10000 "}}} "for TOOL{{{ set lispwords+=define-method "}}} "haskell{{{ let g:syntastic_haskell_checkers = ['hlint'] highlight ghcmodType ctermbg=blue let g:ghcmod_type_highlight = 'ghcmodType' nnoremap <leader>tt :GhcModType<CR> nnoremap <leader>tc :GhcModTypeClear<CR> "}}} "promptline{{{ let g:promptline_preset = { \'b' : [ promptline#slices#user() ], \'c' : [ promptline#slices#cwd() ], \'y' : [ promptline#slices#vcs_branch() ], \'warn' : [ promptline#slices#last_exit_code() ]} "}}}