diff --git a/after/ftplugin/haskell.vim b/after/ftplugin/haskell.vim index 0539e7a..017276e 100644 --- a/after/ftplugin/haskell.vim +++ b/after/ftplugin/haskell.vim @@ -1,11 +1,8 @@ -setlocal ts=2 sw=2 expandtab omnifunc=necoghc#omnifunc +setlocal ts=2 sw=2 expandtab "set background=light "set guifont=Neep\ Medium\ Semi-Condensed\ 18 -let g:haskell_classic_highlighting = 1 - - syntax on filetype plugin indent on @@ -13,27 +10,14 @@ filetype plugin indent on call CmdAlias('hasktags', '!/home/jule/.cabal/bin/hasktags -c .') - -function! HaskellDocCurrentWord() - let word = expand("") - exe "IDoc " . word -endfunction - - - -nmap :call HaskellDocCurrentWord() - -nmap :silent update HsimportModule -nmap :silent update HsimportSymbol - " haskell-vim - +let g:haskell_classic_highlighting = 1 +let g:haskell_indent_disable = 1 " let g:haskell_enable_quantification = 1 " let g:haskell_enable_recursivedo = 1 " let g:haskell_enable_arrowsyntax = 1 " let g:haskell_enable_pattern_synonyms = 1 " let g:haskell_enable_typeroles = 1 - " let g:haskell_indent_if = 3 " let g:haskell_indent_case = 5 " let g:haskell_indent_let = 4 @@ -42,6 +26,19 @@ nmap :silent update HsimportSymbol " let g:haskell_indent_in = 1 +" haskellmode-vim +function! HaskellDocCurrentWord() + let word = expand("") + exe "IDoc " . word +endfunction + +" done by LSP now +" nmap :call HaskellDocCurrentWord() + +nmap :silent update HsimportModule +nmap :silent update HsimportSymbol + + " liquid-types let g:vim_annotations_offset = '/.liquid/' @@ -59,68 +56,79 @@ let g:vim_annotations_offset = '/.liquid/' " endfunction -" let g:deoplete#enable_at_startup = 1 -" set hidden +" LSP +let g:LanguageClient_autoStart = 1 +let g:LanguageClient_serverCommands = { + \ 'haskell': ['hie', '--lsp', '-d', '-l', $HOME.'/lang-server.log'], + \ } -" let g:LanguageClient_serverCommands = { - " \ 'haskell': ['hie', '--lsp', '-d', '-l', '/home/hasufell/lang-server.log'], - " \ } +nnoremap :call LanguageClient#textDocument_hover() +nnoremap gd :call LanguageClient#textDocument_definition() +nnoremap :call LanguageClient#textDocument_rename() -" nnoremap K :call LanguageClient#textDocument_hover() -" nnoremap gd :call LanguageClient#textDocument_definition() -" nnoremap :call LanguageClient#textDocument_rename() +" deoplete +call deoplete#custom#option('sources',{ + \ '_': ['buffer'], + \ 'haskell': ['ultisnips', 'buffer', 'file', 'LanguageClient'] + \ }) +call deoplete#enable() -" autocmd VimEnter * LanguageClientStart +let g:ghcmod_hlint_options = ['--ignore=Eta reduce $'] -if has("nvim") - let g:ale_enabled = 0 +" ALE +let g:ale_enabled = 0 " LSP does it +let g:ale_linters = {'haskell':['ghc-mod', 'hdevtools'], 'c':['clang']} +" let g:ale_fixers = { + " \ 'go': ['gofmt', 'goimports'], + " \} +let g:ale_haskell_hdevtools_options = "-g '-Wall' -g '-Wno-orphans'" - " let g:intero_backend = { - " \ 'command': 'cabal new-repl', - " \ 'options': '', - " \ 'cwd': expand('%:p:h'), - " \} +" completion +" +" neco-ghc +" let g:necoghc_enable_detailed_browse = 1 +" let g:haskellmode_completion_ghc = 0 +" let g:necoghc_enable_detailed_browse = 1 +" autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc +" let g:ycm_semantic_triggers = {'haskell' : ['.']} - " Intero starts automatically. Set this if you'd like to prevent that. - let g:intero_start_immediately = 1 - " Enable type information on hover (when holding cursor at point for ~1 second). - let g:intero_type_on_hover = 1 - " Change the intero window size; default is 10. - let g:intero_window_size = 15 - " Sets the intero window to split vertically; default is horizontal - let g:intero_vertical_split = 1 +" clear search +nmap :noh:GhcModTypeClear +imap :noh:GhcModTypeClear - " OPTIONAL: Make the update time shorter, so the type info will trigger faster. - set updatetime=1000 +" unmap +" unmap - map t InteroGenericType -else - let g:ghcmod_hlint_options = ['--ignore=Eta reduce $'] +nmap :GhcModType - " ALE - let g:ale_linters = {'haskell':['ghc-mod', 'hdevtools'], 'c':['clang']} - " let g:ale_fixers = { - " \ 'go': ['gofmt', 'goimports'], - " \} - let g:ale_haskell_hdevtools_options = "-g '-Wall' -g '-Wno-orphans'" +" for intero +" if has("nvim") + " let g:ale_enabled = 0 - " neco-ghc - let g:necoghc_enable_detailed_browse = 1 - let g:haskellmode_completion_ghc = 0 - let g:necoghc_enable_detailed_browse = 1 - autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc - let g:ycm_semantic_triggers = {'haskell' : ['.']} + " " let g:intero_backend = { + " " \ 'command': 'cabal new-repl', + " " \ 'options': '', + " " \ 'cwd': expand('%:p:h'), + " " \} - " clear search - nmap :noh:GhcModTypeClear - imap :noh:GhcModTypeClear + " " Intero starts automatically. Set this if you'd like to prevent that. + " let g:intero_start_immediately = 1 - " unmap - " unmap + " " Enable type information on hover (when holding cursor at point for ~1 second). + " let g:intero_type_on_hover = 1 - nmap :GhcModType -endif + " " Change the intero window size; default is 10. + " let g:intero_window_size = 15 + + " " Sets the intero window to split vertically; default is horizontal + " let g:intero_vertical_split = 1 + + " " OPTIONAL: Make the update time shorter, so the type info will trigger faster. + " set updatetime=1000 + + " map t InteroGenericType +" endif diff --git a/vimrc b/vimrc index d0f1623..628790f 100644 --- a/vimrc +++ b/vimrc @@ -5,10 +5,6 @@ filetype plugin on filetype indent on -" Section pathogen -" let g:pathogen_disabled = [] -" call add(g:pathogen_disabled, 'syntastic') -" call pathogen#infect() " vim-plug settings (Plugin declaration) @@ -61,6 +57,20 @@ endif 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', 'rust'], + \ } +" 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 + " LSP " setting this per-language breaks "let g:LanguageClient_autoStart = 1", Plug 'autozimu/LanguageClient-neovim', { @@ -68,27 +78,18 @@ Plug 'autozimu/LanguageClient-neovim', { \ 'do': 'bash install.sh', \ } " (Optional) Multi-entry selection UI. -" Plug 'junegunn/fzf', { 'for': 'haskell' } -" autocomplet -" Plug 'Shougo/deoplete.nvim', { 'for': 'haskell' } -" Plug 'roxma/nvim-yarp', { 'for': 'haskell' } -" Plug 'roxma/vim-hug-neovim-rpc', { 'for': 'haskell' } +Plug 'junegunn/fzf', { 'for': 'haskell' } " linting/compilation Plug 'w0rp/ale' -" completion -Plug 'Valloric/YouCompleteMe', { 'do': './install.py --clang-completer --go-completer --rust-completer --system-boost --system-libclang', - \ 'for': ['haskell', 'c', 'python', 'sh', 'go', 'clojure', 'rust'], - \ } - " haskell -if has("nvim") - Plug 'parsonsmatt/intero-neovim' -else - Plug 'eagletmt/ghcmod-vim', { 'for': 'haskell' } - Plug 'eagletmt/neco-ghc', { 'for': 'haskell' } -endif +" 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' } Plug 'ucsd-progsys/liquid-types.vim', { 'for': 'haskell' } @@ -150,7 +151,7 @@ endif call plug#end() -" ===== further plugin initialization ===== +" ===== further plugin initialization and default config ===== so ~/.vim/plugged/cmdalias.vim/plugin/cmdalias.vim @@ -166,6 +167,78 @@ if !has("nvim") endif +" LSP +let g:LanguageClient_autoStart = 0 + +" deoplete +let g:deoplete#enable_at_startup = 0 + +" ==== 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 = '' +let g:ycm_key_list_select_completion = [''] +let g:ycm_key_list_previous_completion = [''] +" nnoremap :YcmCompleter GoToDefinition +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 &' + + +" ==== conque ==== +" command aliases +call CmdAlias('t','tabnew') +" call CmdAlias('cmd','ConqueTermSplit') +" call CmdAlias('bash','ConqueTermSplit bash') +call CmdAlias('openall','tab sball') +call CmdAlias('stripw','call StripTrailingWhitespaces()') +call CmdAlias('hotkeys', 'tabnew ~/.vim/hotkeys') +call CmdAlias('TC', 'call ToggleComment()') +call CmdAlias('TF', 'call ToggleFoldText()') +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 .') + + + " global settings set foldmethod=syntax "fold based on indent set foldnestmax=10 "deepest fold is 10 levels @@ -186,30 +259,63 @@ 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 -" haskellmode, needs to load early -let g:haddock_browser='/usr/bin/firefox' -let g:haddock_browser_callformat='%s file://%s >/dev/null 2>&1 &' +" Syntax +syntax enable + +" 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 + +" =========================== -" ==== conque ==== -" command aliases -call CmdAlias('t','tabnew') -" call CmdAlias('cmd','ConqueTermSplit') -" call CmdAlias('bash','ConqueTermSplit bash') -call CmdAlias('openall','tab sball') -call CmdAlias('stripw','call StripTrailingWhitespaces()') -call CmdAlias('hotkeys', 'tabnew ~/.vim/hotkeys') -call CmdAlias('TC', 'call ToggleComment()') -call CmdAlias('TF', 'call ToggleFoldText()') -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 .') - - -" cabbrev git Git - - " Disable annoying auto line break fu! DisableBr() @@ -249,83 +355,6 @@ endfunction " ======================= -" don't yank to buffer on deletion -" vnoremap d "_d -" nnoremap d "_d -vnoremap x "_x -nnoremap x "_x - -" Syntax -syntax enable - - -" ==== delimitMate ==== -let g:delimitMate_matchpairs = "(:),[:],{:}" -let g:delimitMate_expand_cr = 1 -let g:delimitMate_expand_space = 1 -let g:delimitMate_autoclose = 1 - - -" pane navigation -" Use ctrl-[hjkl] to select the active split! -let g:C_Ctrl_j = 'off' -let g:BASH_Ctrl_j = 'off' - - -" ==========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 - -" =========================== - -" 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 - -try - lang en_US -catch -endtry - - " ====== traling whitespace ===== fun! ShowTrailingWhitespace(pattern) @@ -368,37 +397,6 @@ endfun " =========================== -" LSP -let g:LanguageClient_autoStart = 0 - - -" 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 = '' -let g:ycm_key_list_select_completion = [''] -let g:ycm_key_list_previous_completion = [''] -" nnoremap :YcmCompleter GoToDefinition -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 - - " comment hiding func! IsComment( lnum ) return synIDattr(synID(a:lnum, match(getline(a:lnum),'\S')+1, 1),"name") =~? 'comment'