/vim

my vim plugins and vimrc

Primary LanguageVimL

" 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() ]}
"}}}