539 lines
14 KiB
VimL
539 lines
14 KiB
VimL
" ===== hasufell's vimrc ))))
|
|
|
|
" no ATTENTION messages when swap file is already found
|
|
set shortmess+=A
|
|
|
|
" plugin stuff
|
|
filetype plugin on
|
|
filetype indent on
|
|
|
|
|
|
|
|
" vim-plug settings (Plugin declaration)
|
|
call plug#begin('~/.vim/plugged')
|
|
|
|
Plug 'mileszs/ack.vim'
|
|
Plug 'vim-scripts/cmdalias.vim'
|
|
Plug 'Raimondi/delimitMate'
|
|
Plug 'vim-scripts/genindent.vim'
|
|
Plug 'sjl/gundo.vim'
|
|
Plug 'idris-hackers/idris-vim'
|
|
Plug 'yegappan/mru'
|
|
Plug 'scrooloose/nerdcommenter'
|
|
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
|
|
Plug 'vim-scripts/promela.vim'
|
|
Plug 'AndrewRadev/simple_bookmarks.vim'
|
|
Plug 'Keithbsmiley/swift.vim'
|
|
Plug 'majutsushi/tagbar'
|
|
Plug 'ternjs/tern_for_vim'
|
|
Plug 'xolox/vim-easytags'
|
|
Plug 'nathanaelkane/vim-indent-guides'
|
|
Plug 'xolox/vim-misc'
|
|
Plug 'Shougo/vimproc.vim', {'do' : 'make'}
|
|
Plug 'tpope/vim-rhubarb'
|
|
Plug 'sjbach/lusty'
|
|
Plug 'vim-airline/vim-airline'
|
|
Plug 'vim-airline/vim-airline-themes'
|
|
Plug 'kien/ctrlp.vim'
|
|
Plug 'nixprime/cpsm', { 'do': 'PY3=ON ./install.sh' }
|
|
Plug 'junegunn/fzf', { 'do': './install --bin' }
|
|
Plug 'junegunn/fzf.vim'
|
|
Plug 'sbdchd/neoformat'
|
|
Plug 'AndrewRadev/bufferize.vim'
|
|
Plug 'vimwiki/vimwiki'
|
|
|
|
" scm
|
|
Plug 'tpope/vim-fugitive'
|
|
Plug 'tpope/vim-rhubarb'
|
|
Plug 'airblade/vim-gitgutter'
|
|
Plug 'tommcdo/vim-fubitive'
|
|
|
|
" local_vimrc
|
|
Plug 'LucHermitte/lh-vim-lib'
|
|
Plug 'LucHermitte/local_vimrc'
|
|
|
|
" completion
|
|
" Plug 'Valloric/YouCompleteMe', { 'do': './install.py --clang-completer --go-completer --rust-completer --system-boost --system-libclang',
|
|
" \ 'for': ['c', 'python', 'sh', 'go', 'clojure'],
|
|
" \ }
|
|
" deoplete for haskell
|
|
if has('nvim')
|
|
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins',
|
|
\ }
|
|
else
|
|
Plug 'Shougo/deoplete.nvim'
|
|
Plug 'roxma/nvim-yarp'
|
|
Plug 'roxma/vim-hug-neovim-rpc'
|
|
endif
|
|
|
|
" snippets
|
|
Plug 'Shougo/neosnippet.vim'
|
|
Plug 'honza/vim-snippets'
|
|
|
|
" LSP
|
|
" setting this per-language breaks "let g:LanguageClient_autoStart = 1",
|
|
Plug 'autozimu/LanguageClient-neovim', {
|
|
\ 'branch': 'next',
|
|
\ 'do': 'bash install.sh',
|
|
\ }
|
|
|
|
" linting/compilation
|
|
Plug 'w0rp/ale', {
|
|
\ 'do': 'bash -c \"cp -R ~/.vim/ale_linters .\"',
|
|
\ }
|
|
|
|
" haskell
|
|
" if has("nvim")
|
|
" Plug 'parsonsmatt/intero-neovim'
|
|
" endif
|
|
" Plug 'eagletmt/ghcmod-vim', { 'for': 'haskell' }
|
|
" completion based on ghc-mod, not LSP
|
|
" Plug 'eagletmt/neco-ghc', { 'for': 'haskell' }
|
|
Plug 'lukerandall/haskellmode-vim', { 'for': 'haskell' }
|
|
Plug 'neovimhaskell/haskell-vim', { 'for': ['haskell', 'cabal'] }
|
|
" Plug 'ucsd-progsys/liquid-types.vim', { 'for': 'haskell' }
|
|
Plug 'bitc/lushtags', {
|
|
\ 'do': 'bash -c \"stack install\"',
|
|
\ 'for': 'haskell',
|
|
\ }
|
|
" Plug 'timmytofu/vim-cabal-context', { 'for': 'haskell' }
|
|
Plug 'itchyny/vim-haskell-indent', { 'for': 'haskell' }
|
|
Plug 'dan-t/vim-hsimport', { 'for': 'haskell' }
|
|
Plug 'Twinside/vim-hoogle', { 'for': 'haskell' }
|
|
|
|
" clojure
|
|
" Plug '~/.vim/unmanaged-vim-plug/tslime', { 'for': 'clojure' }
|
|
" Plug 'guns/vim-slamhound', {'for': 'clojure'}
|
|
" Plug 'guns/vim-sexp', {'for': 'clojure'}
|
|
" Plug 'tpope/vim-sexp-mappings-for-regular-people', {'for': 'clojure'}
|
|
" Plug 'kovisoft/paredit', {'for': 'clojure'}
|
|
Plug 'luochen1990/rainbow', { 'for': ['clojure', 'haskell', 'python'] }
|
|
" Plug 'typedclojure/vim-typedclojure', {'for': 'clojure'}
|
|
" heavy clojurescript
|
|
" Plug 'tpope/vim-classpath', { 'for': 'clojure' }
|
|
Plug 'guns/vim-clojure-static', { 'for': 'clojure' }
|
|
Plug 'tpope/vim-salve', { 'for': 'clojure' }
|
|
Plug 'tpope/vim-projectionist', { 'for': 'clojure' }
|
|
Plug 'tpope/vim-dispatch', { 'for': 'clojure' }
|
|
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
|
|
Plug 'venantius/vim-cljfmt', {'for': 'clojure'}
|
|
|
|
|
|
" go
|
|
Plug 'garyburd/go-explorer', { 'for': 'go' }
|
|
Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries', 'for': 'go' }
|
|
|
|
" rust
|
|
Plug 'rhysd/rust-doc.vim', { 'for': 'rust' }
|
|
Plug 'rust-lang/rust.vim', { 'for': 'rust' }
|
|
|
|
" javascript
|
|
Plug 'moll/vim-node', { 'for': 'javascript' }
|
|
Plug 'pangloss/vim-javascript', { 'for': 'javascript' }
|
|
|
|
" python
|
|
Plug 'icedwater/vimpython', { 'for': 'python' }
|
|
Plug 'zchee/deoplete-jedi', { 'for': 'python' }
|
|
Plug 'davidhalter/jedi-vim', { 'for': 'python' }
|
|
Plug 'manicmaniac/coconut.vim'
|
|
Plug 'alfredodeza/pytest.vim'
|
|
Plug 'idanarye/vim-vebugger', { 'for': 'python' }
|
|
|
|
" scala
|
|
Plug 'derekwyatt/vim-scala', { 'for': 'scala' }
|
|
|
|
" typescript
|
|
Plug 'leafgarland/typescript-vim', { 'for': 'typescript' }
|
|
Plug 'Quramy/tsuquyomi', { 'for': 'typescript' }
|
|
|
|
" color and beauty
|
|
Plug 'tomasiser/vim-code-dark'
|
|
Plug 'romainl/Apprentice'
|
|
Plug 'chriskempson/base16-vim'
|
|
Plug 'fneu/breezy'
|
|
Plug 'romainl/Disciple'
|
|
Plug 'wimstefan/Lightning'
|
|
Plug 'NLKNguyen/papercolor-theme'
|
|
Plug 'flazz/vim-colorschemes'
|
|
Plug 'altercation/vim-colors-solarized'
|
|
Plug 'reedes/vim-colors-pencil'
|
|
Plug 'whatyouhide/vim-gotham'
|
|
if has("nvim")
|
|
Plug 'iCyMind/NeoSolarized'
|
|
endif
|
|
Plug 'noahfrederick/vim-hemisu'
|
|
Plug 'morhetz/gruvbox'
|
|
|
|
" unmanaged
|
|
Plug '~/.vim/unmanaged-vim-plug/bufonly'
|
|
Plug '~/.vim/unmanaged-vim-plug/colorschemedegrade'
|
|
Plug '~/.vim/unmanaged-vim-plug/fuzzyfinder'
|
|
Plug '~/.vim/unmanaged-vim-plug/L9'
|
|
Plug '~/.vim/unmanaged-vim-plug/log'
|
|
Plug '~/.vim/unmanaged-vim-plug/ScrollColor'
|
|
Plug '~/.vim/unmanaged-vim-plug/txtfmt'
|
|
if !has("nvim")
|
|
Plug '~/.vim/unmanaged-vim-plug/fontzoom'
|
|
endif
|
|
|
|
|
|
" Initialize plugin system
|
|
call plug#end()
|
|
|
|
|
|
" ===== further plugin initialization and default config =====
|
|
so ~/.vim/plugged/cmdalias.vim/plugin/cmdalias.vim
|
|
|
|
|
|
if !has("nvim")
|
|
" lj
|
|
let g:LustyJugglerSuppressRubyWarning = 1
|
|
endif
|
|
|
|
" lustyexplorer
|
|
set hidden
|
|
|
|
|
|
" neosnippet
|
|
" Plugin key-mappings.
|
|
" Note: It must be "imap" and "smap". It uses <Plug> mappings.
|
|
imap <C-k> <Plug>(neosnippet_expand_or_jump)
|
|
smap <C-k> <Plug>(neosnippet_expand_or_jump)
|
|
xmap <C-k> <Plug>(neosnippet_expand_target)
|
|
|
|
" SuperTab like snippets behavior.
|
|
" Note: It must be "imap" and "smap". It uses <Plug> mappings.
|
|
imap <expr><tab> neosnippet#expandable_or_jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "\<c-n>" : "\<tab>"
|
|
smap <expr><tab> neosnippet#expandable_or_jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : "\<tab>"
|
|
|
|
" For conceal markers.
|
|
if has('conceal')
|
|
set conceallevel=2 concealcursor=niv
|
|
endif
|
|
" Enable snipMate compatibility feature.
|
|
let g:neosnippet#enable_snipmate_compatibility = 1
|
|
let g:neosnippet#snippets_directory='~/.vim/custom-snippets'
|
|
|
|
|
|
" rainbow
|
|
let g:rainbow_conf = {
|
|
\ 'guifgs': ['#DC322F', 'royalblue3', 'darkorange3', 'seagreen3'],
|
|
\ 'ctermfgs': ['lightred', 'lightblue', 'lightyellow', 'lightcyan', 'lightmagenta'],
|
|
\}
|
|
let g:rainbow_active = 1
|
|
|
|
|
|
" vim airline
|
|
" let g:airline#extensions#tabline#enabled = 1
|
|
|
|
|
|
" LSP
|
|
let g:LanguageClient_autoStart = 0
|
|
|
|
" deoplete
|
|
let g:deoplete#enable_at_startup = 1
|
|
|
|
" ==== delimitMate ====
|
|
let g:delimitMate_matchpairs = "(:),[:],{:}"
|
|
let g:delimitMate_expand_cr = 1
|
|
let g:delimitMate_expand_space = 1
|
|
let g:delimitMate_autoclose = 1
|
|
|
|
|
|
" Solarized stuff
|
|
" let g:solarized_termtrans=0
|
|
" let g:solarized_degrade=0
|
|
" let g:solarized_bold=1
|
|
" let g:solarized_underline=1
|
|
" let g:solarized_italic=1
|
|
" let g:solarized_termcolors=16
|
|
" let g:solarized_contrast="normal"
|
|
let g:solarized_visibility="high"
|
|
" let g:solarized_diffmode="normal"
|
|
" let g:solarized_hitrail=0
|
|
let g:solarized_menu=1
|
|
|
|
|
|
" youcompleteme
|
|
let g:ycm_filetype_blacklist = {
|
|
\ 'notes' : 1,
|
|
\ 'markdown' : 1,
|
|
\ 'text' : 1,
|
|
\ 'java' : 1,
|
|
\}
|
|
let g:ycm_confirm_extra_conf = 0
|
|
let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
|
|
let g:ycm_collect_identifiers_from_tags_files = 1
|
|
let g:ycm_seed_identifiers_with_syntax = 0
|
|
" let g:ycm_always_populate_location_list = 1
|
|
let g:ycm_autoclose_preview_window_after_completion = 1
|
|
let g:ycm_key_invoke_completion = '<C-Space>'
|
|
let g:ycm_key_list_select_completion = ['<TAB>']
|
|
let g:ycm_key_list_previous_completion = ['<S-TAB>']
|
|
" nnoremap <F4> :YcmCompleter GoToDefinition<CR>
|
|
let g:ycm_server_log_level = 'error'
|
|
let g:ycm_semantic_triggers = {'haskell' : ['. ', '$ ']}
|
|
let g:ycm_goto_buffer_command = 'horizontal-split'
|
|
|
|
|
|
" commenting
|
|
let NERDSpaceDelims=1
|
|
let NERDCreateDefaultMappings=0
|
|
|
|
" haskellmode, needs to load early
|
|
let g:haddock_browser='/usr/bin/firefox'
|
|
let g:haddock_browser_callformat='%s file://%s >/dev/null 2>&1 &'
|
|
|
|
" ctrlp
|
|
let g:ctrlp_user_command = 'fd --type f --color=never "" %s'
|
|
let g:ctrlp_use_caching = 1
|
|
let g:ctrlp_match_func = { 'match': 'cpsm#CtrlPMatch' }
|
|
|
|
" fzf
|
|
" --column: Show column number
|
|
" --line-number: Show line number
|
|
" --no-heading: Do not show file headings in results
|
|
" --fixed-strings: Search term as a literal string
|
|
" --ignore-case: Case insensitive search
|
|
" --no-ignore: Do not respect .gitignore, etc...
|
|
" --hidden: Search hidden files and folders
|
|
" --follow: Follow symlinks
|
|
" --glob: Additional conditions for search (in this case ignore everything in the .git/ folder)
|
|
" --color: Search color options
|
|
command! -bang -nargs=* Find call fzf#vim#grep('rg --column --line-number --no-heading --fixed-strings --ignore-case --no-ignore --hidden --follow --glob "!.git/*" --color "always" '.shellescape(<q-args>), 1, <bang>0)
|
|
|
|
function! WithGitRoot()
|
|
let groot = systemlist('git -C ' . expand('%:p:h') . ' rev-parse --show-toplevel')[0]
|
|
return v:shell_error ? {} : {'dir': groot}
|
|
endfunction
|
|
|
|
command! -nargs=* Rag
|
|
\ call fzf#vim#ag(<q-args>, WithGitRoot())
|
|
|
|
|
|
" ==== conque ====
|
|
" command aliases
|
|
call CmdAlias('t','tabnew')
|
|
" call CmdAlias('cmd','ConqueTermSplit')
|
|
" call CmdAlias('bash','ConqueTermSplit bash<CR>')
|
|
call CmdAlias('openall','tab sball')
|
|
call CmdAlias('stripw','call StripTrailingWhitespaces()<CR>')
|
|
call CmdAlias('hotkeys', 'tabnew ~/.vim/hotkeys')
|
|
call CmdAlias('TC', 'call ToggleComment()<CR>')
|
|
call CmdAlias('TF', 'call ToggleFoldText()<CR>')
|
|
call CmdAlias('ctags', '!/usr/bin/ctags -R --langmap=c:.c.h --c++-kinds=+p --c-kinds=+p+x --fields=+i+a+S+t+l+m+n --extra=+q .<CR>')
|
|
|
|
|
|
|
|
" global settings
|
|
set foldmethod=syntax "fold based on indent
|
|
set foldnestmax=10 "deepest fold is 10 levels
|
|
set nofoldenable "dont fold by default
|
|
set foldlevel=1 "this is just what i useset directory=~/.vimtmp
|
|
set mouse=a
|
|
set autoread
|
|
set number
|
|
set encoding=utf8
|
|
set guifont=Monospace\ 14
|
|
set clipboard=unnamedplus
|
|
set textwidth=0
|
|
set tabstop=4
|
|
set shiftwidth=4
|
|
set directory=~/.vimtmp
|
|
set modeline
|
|
set modelines=1
|
|
|
|
let g:nickID = "hasufell"
|
|
|
|
" don't yank to buffer on deletion
|
|
" vnoremap d "_d
|
|
" nnoremap d "_d
|
|
vnoremap x "_x
|
|
nnoremap x "_x
|
|
|
|
" Syntax
|
|
syntax on
|
|
|
|
" pane navigation
|
|
" Use ctrl-[hjkl] to select the active split!
|
|
let g:C_Ctrl_j = 'off'
|
|
let g:BASH_Ctrl_j = 'off'
|
|
|
|
try
|
|
lang en_US
|
|
catch
|
|
endtry
|
|
|
|
" ==========colors===========
|
|
"set t_Co=256
|
|
"let g:solarized_termcolors=256
|
|
if has('gui_running')
|
|
set background=dark
|
|
colorscheme solarized
|
|
else
|
|
set background=dark
|
|
colorscheme solarized
|
|
endif
|
|
|
|
if has("nvim")
|
|
if exists('g:GtkGuiLoaded')
|
|
let g:neosolarized_contrast = "normal"
|
|
let g:neosolarized_visibility = "normal"
|
|
let g:neosolarized_vertSplitBgTrans = 0
|
|
let g:neosolarized_bold = 1
|
|
let g:neosolarized_underline = 1
|
|
let g:neosolarized_italic = 1
|
|
set background=dark
|
|
colorscheme NeoSolarized
|
|
else
|
|
let g:neosolarized_contrast = "normal"
|
|
let g:neosolarized_visibility = "normal"
|
|
let g:neosolarized_vertSplitBgTrans = 0
|
|
let g:neosolarized_bold = 1
|
|
let g:neosolarized_underline = 1
|
|
let g:neosolarized_italic = 1
|
|
set background=dark
|
|
colorscheme NeoSolarized
|
|
endif
|
|
endif
|
|
|
|
" ===========================
|
|
|
|
|
|
|
|
|
|
|
|
" Disable annoying auto line break
|
|
fu! DisableBr()
|
|
set wrap
|
|
set linebreak
|
|
set nolist " list disables linebreak
|
|
set textwidth=0
|
|
set wrapmargin=0
|
|
set fo-=t
|
|
endfu
|
|
|
|
" Disable line breaks for all file types
|
|
au BufNewFile,BufRead *.* call DisableBr()
|
|
|
|
|
|
" ==========copy/paste===========
|
|
function! Paste(mode)
|
|
if a:mode == "v"
|
|
normal gv
|
|
normal "_d
|
|
normal "+gP
|
|
normal l
|
|
elseif a:mode == "i"
|
|
set virtualedit=all
|
|
normal `^"+gP
|
|
let &virtualedit = ""
|
|
endif
|
|
endfunction
|
|
|
|
|
|
" ======select all=======
|
|
function! Select()
|
|
set virtualedit=all
|
|
normal `^ggVG
|
|
let &virtualedit = ""
|
|
endfunction
|
|
" =======================
|
|
|
|
|
|
|
|
" ====== traling whitespace =====
|
|
fun! ShowTrailingWhitespace(pattern)
|
|
if &ft == 'conque_term'
|
|
call clearmatches()
|
|
return
|
|
endif
|
|
if &ft == 'diff'
|
|
call clearmatches()
|
|
return
|
|
endif
|
|
let str=a:pattern
|
|
if str == '1'
|
|
match ExtraWhitespace /\s\+$/
|
|
elseif str == '2'
|
|
call clearmatches()
|
|
" match ExtraWhitespace /\s\+\%#\@<!$/
|
|
elseif str == '3'
|
|
match ExtraWhitespace /\s\+$/
|
|
endif
|
|
endfun
|
|
|
|
|
|
highlight ExtraWhitespace ctermbg=red guibg=red
|
|
match ExtraWhitespace /\s\+$/
|
|
autocmd BufWinEnter * call ShowTrailingWhitespace('1')
|
|
autocmd InsertEnter * call ShowTrailingWhitespace('2')
|
|
autocmd InsertLeave * call ShowTrailingWhitespace('3')
|
|
autocmd BufWinLeave * call clearmatches()
|
|
|
|
|
|
fun! StripTrailingWhitespaces()
|
|
let l = line(".")
|
|
let c = col(".")
|
|
%s/\s\+$//e
|
|
call cursor(l, c)
|
|
endfun
|
|
|
|
|
|
" ===========================
|
|
|
|
|
|
" comment hiding
|
|
func! IsComment( lnum )
|
|
return synIDattr(synID(a:lnum, match(getline(a:lnum),'\S')+1, 1),"name") =~? 'comment'
|
|
endfun
|
|
|
|
|
|
"set fdm=expr
|
|
set fde=IsComment(v:lnum)?1:IsComment(prevnonblank(v:lnum))?1:IsComment(nextnonblank\(v:lnum))?1:0
|
|
|
|
|
|
" light #073642 dark #002b36 grey #586e75
|
|
highlight Folded gui=NONE guifg=#586e75 guibg=#002b36
|
|
set foldtext='\ '
|
|
|
|
|
|
let g:folded = 0
|
|
function! ToggleComment()
|
|
if (g:folded == 0)
|
|
highlight Comment guifg=#002b36
|
|
let g:folded=1
|
|
else
|
|
highlight Comment guifg=#586e75
|
|
let g:folded=0
|
|
endif
|
|
endfunction
|
|
|
|
|
|
let g:myfoldtext = 0
|
|
function! ToggleFoldText()
|
|
if (g:myfoldtext == 0)
|
|
set foldtext='--'.v:folddashes.'\ '.getline(v:foldstart).'\ '
|
|
let g:myfoldtext=1
|
|
else
|
|
set foldtext='\ '
|
|
let g:myfoldtext=0
|
|
endif
|
|
endfunction
|
|
|
|
|
|
""""""""""""""""""""""""""""""
|
|
" vim macro to jump to devhelp topics.
|
|
""""""""""""""""""""""""""""""
|
|
function! DevHelpCurrentWord()
|
|
let word = expand("<cword>")
|
|
exe "!devhelp -s " . word . " &"
|
|
endfunction
|
|
|
|
function! ManCurrentWord()
|
|
let word = expand("<cword>")
|
|
exe "!man 3 " . word
|
|
endfunction
|
|
|
|
" vim:foldmethod=marker:foldlevel=0
|