Update
This commit is contained in:
		
							parent
							
								
									8143c60b21
								
							
						
					
					
						commit
						8350566c14
					
				| @ -9,6 +9,7 @@ call CmdAlias('hasktags', '!hasktags -c .<CR>') | ||||
| " from | ||||
| " https://raw.githubusercontent.com/begriffs/haskell-vim-now/master/git-hscope | ||||
| call CmdAlias('codex', 'call system("haskell-ctags")<CR><CR>call LoadHscope()<CR>') | ||||
| call CmdAlias('Cc', 'Clap commits<CR>') | ||||
| 
 | ||||
| 
 | ||||
| map <leader>ctg :codex<CR> | ||||
| @ -18,7 +19,6 @@ set tags=tags;/,codex.tags;/ | ||||
| " nnoremap <leader>gd <C-]> | ||||
| 
 | ||||
| " nnoremap <silent> <leader>cgd :cs find g <C-R>=expand("<cword>")<CR><CR> | ||||
| nnoremap <silent> <leader>cgd :Tags <C-R>=expand("<cword>")<CR><CR> | ||||
| nnoremap <silent> <C-\> :cs find c <C-R>=expand("<cword>")<CR><CR> | ||||
| 
 | ||||
| set cscopeprg=do_at_stack_root\ hscope | ||||
| @ -55,14 +55,24 @@ let g:haskell_indent_disable = 0 | ||||
| " 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 | ||||
| let g:haskell_indent_where = 2 | ||||
| " let g:haskell_indent_do = 3 | ||||
| " let g:haskell_indent_in = 1 | ||||
| let g:haskell_disable_TH = 1 | ||||
| let g:haskell_indent_if = 0 | ||||
| let g:haskell_indent_case = 4 | ||||
| let g:haskell_indent_let = 4 | ||||
| let g:haskell_indent_where = 6 | ||||
| let g:haskell_indent_before_where = 2 | ||||
| let g:haskell_indent_after_bare_where = 2 | ||||
| let g:haskell_indent_do = 4 | ||||
| let g:haskell_indent_in = 0 | ||||
| let g:haskell_indent_guard = 4 | ||||
| " let g:haskell_disable_TH = 1 | ||||
| 
 | ||||
| " vim-hindent | ||||
| let g:hindent_on_save = 0 | ||||
| let g:hindent_indent_size = 4 | ||||
| let g:hindent_line_length = 80 | ||||
| 
 | ||||
| " vim-stylishhask | ||||
| let g:stylishask_on_save = 0 | ||||
| 
 | ||||
| " haskellmode-vim | ||||
| function! HaskellDocCurrentWord() | ||||
| @ -73,8 +83,8 @@ endfunction | ||||
| " done by LSP now | ||||
| nmap <F7> :call HaskellDocCurrentWord()<CR><CR> | ||||
| 
 | ||||
| nmap <silent> <F3> :silent update <bar> HsimportModule<CR> | ||||
| nmap <silent> <F4> :silent update <bar> HsimportSymbol<CR> | ||||
| " nmap <silent> <F3> :silent update <bar> HsimportModule<CR> | ||||
| " nmap <silent> <F4> :silent update <bar> HsimportSymbol<CR> | ||||
| 
 | ||||
| 
 | ||||
| " liquid-types | ||||
| @ -94,30 +104,6 @@ let g:vim_annotations_offset = '/.liquid/' | ||||
| " endfunction | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| " nnoremap <leader>ld :call LanguageClient#textDocument_definition()<CR> | ||||
| " nnoremap <leader>lr :call LanguageClient#textDocument_rename()<CR> | ||||
| " nnoremap <leader>lf :call LanguageClient#textDocument_formatting()<CR> | ||||
| " nnoremap <leader>lt :call LanguageClient#textDocument_typeDefinition()<CR> | ||||
| " nnoremap <leader>lx :call LanguageClient#textDocument_references()<CR> | ||||
| " nnoremap <leader>la :call LanguageClient_workspace_applyEdit()<CR> | ||||
| " nnoremap <leader>lc :call LanguageClient#textDocument_completion()<CR> | ||||
| " nnoremap <leader>lh :call LanguageClient#textDocument_hover()<CR> | ||||
| " nnoremap <leader>ls :call LanguageClient_textDocument_documentSymbol()<CR> | ||||
| " nnoremap <leader>lm :call LanguageClient_contextMenu()<CR> | ||||
| " nnoremap <F6> :call LanguageClient#textDocument_hover()<CR> | ||||
| 
 | ||||
| 
 | ||||
| " deoplete | ||||
| "call deoplete#custom#option('sources',{ | ||||
| "	\ '_': ['buffer'], | ||||
| "	\ 'haskell': ['neosnippet', 'buffer', 'file', 'neco-ghc'] | ||||
| "	\ }) | ||||
| "	" \ 'haskell': ['neosnippet', 'buffer', 'file', 'neco-ghc'] | ||||
| "call deoplete#enable() | ||||
| "call deoplete#enable_logging('DEBUG', $HOME . '/deoplete.log') | ||||
| "" inoremap <expr><tab> pumvisible() ? "\<c-n>" : "\<tab>" | ||||
| 
 | ||||
| let g:ghcmod_hlint_options = ['--ignore=Eta reduce $'] | ||||
| 
 | ||||
| " ALE | ||||
| @ -132,73 +118,17 @@ let g:ale_haskell_argon_error_level = 14 | ||||
| let g:ale_haskell_argon_warn_level = 10 | ||||
| let g:ale_haskell_argon_info_level = 6 | ||||
| 
 | ||||
| " completion | ||||
| " | ||||
| " neco-ghc | ||||
| " let g:necoghc_enable_detailed_browse = 1 | ||||
| " let g:haskellmode_completion_ghc = 0 | ||||
| " autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc | ||||
| " let g:ycm_semantic_triggers = {'haskell' : ['.']} | ||||
| 
 | ||||
| " let g:ycm_language_server = [ { 'name': 'haskell', 'filetypes': [ 'haskell', 'hs', 'lhs' ], 'cmdline': [ 'hie-wrapper' ], 'project_root_files': [ '.stack.yaml', 'cabal.config', 'package.yaml', 'cabal.project' ] } ] | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| " clear search | ||||
| " nmap <F2> :noh<CR>:GhcModTypeClear<CR> | ||||
| " imap <F2> <C-O>:noh<CR>:GhcModTypeClear<CR> | ||||
| 
 | ||||
| " unmap <F3> | ||||
| " unmap <F4> | ||||
| 
 | ||||
| " nmap <F6> :GhcModType<CR> | ||||
| 
 | ||||
| " for intero | ||||
| " if has("nvim") | ||||
| 	" let g:ale_enabled = 0 | ||||
| 
 | ||||
| 	" " let g:intero_backend = { | ||||
| 			" " \ 'command': 'cabal new-repl', | ||||
| 			" " \ 'options': '', | ||||
| 			" " \ 'cwd': expand('%:p:h'), | ||||
| 			" " \} | ||||
| 
 | ||||
| 	" " 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 | ||||
| 
 | ||||
| 	" " let g:intero_ghci_options = '-dynamic' | ||||
| 
 | ||||
| 	" " OPTIONAL: Make the update time shorter, so the type info will trigger faster. | ||||
| 	" set updatetime=1000 | ||||
| 
 | ||||
| let g:neoformat_enabled_haskell = ['brittany'] | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 	" map <silent> <leader>t <Plug>InteroGenericType | ||||
| 	" nnoremap <silent> <leader>jd :InteroGoToDef<CR> | ||||
| 	" map <silent> <leader>T <Plug>InteroType | ||||
| 	" nnoremap <silent> <leader>it :InteroTypeInsert<CR> | ||||
| 	" nnoremap <leader>ist :InteroSetTargets<SPACE> | ||||
| " endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| " LSP | ||||
| let g:LanguageClient_rootMarkers = ['cabal.project', '*.cabal', 'stack.yaml'] | ||||
| 
 | ||||
| " \ 'haskell': ['ghcide', "--lsp"], | ||||
| let g:LanguageClient_serverCommands = { | ||||
| 	\ 'haskell': ['hie-wrapper', '--lsp'], | ||||
| 	\ 'haskell': ['haskell-language-server-wrapper', '--lsp'], | ||||
|     \ } | ||||
| 
 | ||||
| 
 | ||||
| @ -207,8 +137,8 @@ let g:echodoc#enable_at_startup = 1 | ||||
| 
 | ||||
| call deoplete#enable() | ||||
| call deoplete#custom#source('LanguageClient', | ||||
|             \ 'min_pattern_length', | ||||
|             \ 2) | ||||
| 			\ 'min_pattern_length', | ||||
| 			\ 2) | ||||
| inoremap <expr><tab> pumvisible() ? "\<c-n>" : "\<tab>" | ||||
| 
 | ||||
| 
 | ||||
| @ -247,3 +177,9 @@ let g:tagbar_type_haskell = { | ||||
|     \ } | ||||
| \ } | ||||
| 
 | ||||
| 
 | ||||
| " vista | ||||
| let g:vista_ctags_cmd = { | ||||
|       \ 'haskell': 'hasktags -x -o - -c', | ||||
|       \ } | ||||
| let g:vista_fzf_preview = ['right:0%'] | ||||
|  | ||||
| @ -41,12 +41,12 @@ let g:tagbar_ctags_bin = '/usr/bin/exuberant-ctags' | ||||
| " let g:autofmt_autosave = 0 | ||||
| 
 | ||||
| " deoplete | ||||
| call deoplete#custom#option('sources',{ | ||||
| 	\ '_': ['buffer'], | ||||
| 	\ 'rust': ['ultisnips', 'buffer', 'file', 'LanguageClient'] | ||||
| 	\ }) | ||||
| inoremap <expr><tab> pumvisible() ? "\<c-n>" : "\<tab>" | ||||
| call deoplete#enable() | ||||
| " call deoplete#custom#option('sources',{ | ||||
| 	" \ '_': ['buffer'], | ||||
| 	" \ 'rust': ['ultisnips', 'buffer', 'file', 'LanguageClient'] | ||||
| 	" \ }) | ||||
| " inoremap <expr><tab> pumvisible() ? "\<c-n>" : "\<tab>" | ||||
| " call deoplete#enable() | ||||
| 
 | ||||
| let g:LanguageClient_serverCommands = { | ||||
|    \ 'rust': ['~/.cargo/bin/ra_lsp_server'], | ||||
|  | ||||
| @ -4,16 +4,155 @@ let g:echodoc#enable_at_startup = 1 | ||||
| let g:echodoc#type = 'signature' | ||||
| 
 | ||||
| 
 | ||||
| " function! ConfigureCocNVIM() | ||||
| " " ============ coc.nvim =========== | ||||
| 	" " if hidden is not set, TextEdit might fail. | ||||
| 	" set hidden | ||||
| 
 | ||||
| 	" " Some servers have issues with backup files, see #649 | ||||
| 	" set nobackup | ||||
| 	" set nowritebackup | ||||
| 
 | ||||
| 	" " Better display for messages | ||||
| 	" "set cmdheight=2 | ||||
| 
 | ||||
| 	" " You will have bad experience for diagnostic messages when it's default 4000. | ||||
| 	" set updatetime=300 | ||||
| 
 | ||||
| 	" " don't give |ins-completion-menu| messages. | ||||
| 	" set shortmess+=c | ||||
| 
 | ||||
| 	" " always show signcolumns | ||||
| 	" set signcolumn=yes | ||||
| 
 | ||||
| 	" " Use tab for trigger completion with characters ahead and navigate. | ||||
| 	" " Use command ':verbose imap <tab>' to make sure tab is not mapped by other plugin. | ||||
| 	" inoremap <silent><expr> <TAB> | ||||
| 		  " \ pumvisible() ? "\<C-n>" : | ||||
| 		  " \ <SID>check_back_space() ? "\<TAB>" : | ||||
| 		  " \ coc#refresh() | ||||
| 	" inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>" | ||||
| 
 | ||||
| 	" function! s:check_back_space() abort | ||||
| 	  " let col = col('.') - 1 | ||||
| 	  " return !col || getline('.')[col - 1]  =~# '\s' | ||||
| 	" endfunction | ||||
| 
 | ||||
| 	" " Use <c-space> to trigger completion. | ||||
| 	" inoremap <silent><expr> <c-space> coc#refresh() | ||||
| 
 | ||||
| 	" " Use <cr> to confirm completion, `<C-g>u` means break undo chain at current position. | ||||
| 	" " Coc only does snippet and additional edit on confirm. | ||||
| 	" inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>" | ||||
| 	" " Or use `complete_info` if your vim support it, like: | ||||
| 	" " inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>" | ||||
| 
 | ||||
| 	" " Use `[g` and `]g` to navigate diagnostics | ||||
| 	" nmap <silent> ,g <Plug>(coc-diagnostic-prev) | ||||
| 	" nmap <silent> .g <Plug>(coc-diagnostic-next) | ||||
| 
 | ||||
| 	" " Remap keys for gotos | ||||
| 	" nmap <silent> gd <Plug>(coc-definition) | ||||
| 	" nmap <silent> gy <Plug>(coc-type-definition) | ||||
| 	" nmap <silent> gi <Plug>(coc-implementation) | ||||
| 	" nmap <silent> gr <Plug>(coc-references) | ||||
| 
 | ||||
| 	" " Use K to show documentation in preview window | ||||
| 	" nnoremap <silent> K :call <SID>show_documentation()<CR> | ||||
| 
 | ||||
| 	" function! s:show_documentation() | ||||
| 	  " if (index(['vim','help'], &filetype) >= 0) | ||||
| 		" execute 'h '.expand('<cword>') | ||||
| 	  " else | ||||
| 		" call CocActionAsync('doHover') | ||||
| 	  " endif | ||||
| 	" endfunction | ||||
| 
 | ||||
| 	" " Highlight symbol under cursor on CursorHold | ||||
| 	" autocmd CursorHold * silent call CocActionAsync('highlight') | ||||
| 
 | ||||
| 	" " Remap for rename current word | ||||
| 	" nmap <leader>rn <Plug>(coc-rename) | ||||
| 
 | ||||
| 	" " Remap for format selected region | ||||
| 	" " xmap <leader>f  <Plug>(coc-format-selected) | ||||
| 	" " nmap <leader>f  <Plug>(coc-format-selected) | ||||
| 
 | ||||
| 	" augroup mygroup | ||||
| 	  " autocmd! | ||||
| 	  " " Setup formatexpr specified filetype(s). | ||||
| 	  " autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') | ||||
| 	  " " Update signature help on jump placeholder | ||||
| 	  " autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') | ||||
| 	" augroup end | ||||
| 
 | ||||
| 	" " Remap for do codeAction of selected region, ex: `<leader>aap` for current paragraph | ||||
| 	" xmap <leader>a  <Plug>(coc-codeaction-selected) | ||||
| 	" nmap <leader>a  <Plug>(coc-codeaction-selected) | ||||
| 
 | ||||
| 	" " Remap for do codeAction of current line | ||||
| 	" nmap <leader>ac  <Plug>(coc-codeaction) | ||||
| 	" " Fix autofix problem of current line | ||||
| 	" nmap <leader>qf  <Plug>(coc-fix-current) | ||||
| 
 | ||||
| 	" " Create mappings for function text object, requires document symbols feature of languageserver. | ||||
| 	" xmap if <Plug>(coc-funcobj-i) | ||||
| 	" xmap af <Plug>(coc-funcobj-a) | ||||
| 	" omap if <Plug>(coc-funcobj-i) | ||||
| 	" omap af <Plug>(coc-funcobj-a) | ||||
| 
 | ||||
| 	" " Use <TAB> for select selections ranges, needs server support, like: coc-tsserver, coc-python | ||||
| 	" nmap <silent> <TAB> <Plug>(coc-range-select) | ||||
| 	" xmap <silent> <TAB> <Plug>(coc-range-select) | ||||
| 
 | ||||
| 	" " Use `:Format` to format current buffer | ||||
| 	" command! -nargs=0 Format :call CocAction('format') | ||||
| 
 | ||||
| 	" " Use `:Fold` to fold current buffer | ||||
| 	" command! -nargs=? Fold :call     CocAction('fold', <f-args>) | ||||
| 
 | ||||
| 	" " use `:OR` for organize import of current buffer | ||||
| 	" command! -nargs=0 OR   :call     CocAction('runCommand', 'editor.action.organizeImport') | ||||
| 
 | ||||
| 	" " Add status line support, for integration with other plugin, checkout `:h coc-status` | ||||
| 	" set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} | ||||
| 
 | ||||
| 	" " Using CocList | ||||
| 	" " Show all diagnostics | ||||
| 	" nnoremap <silent> .a        :<C-u>CocList diagnostics<cr> | ||||
| 	" " Manage extensions | ||||
| 	" nnoremap <silent> .e  :<C-u>CocList extensions<cr> | ||||
| 	" " Show commands | ||||
| 	" nnoremap <silent> <space>c  :<C-u>CocList commands<cr> | ||||
| 	" " Find symbol of current document | ||||
| 	" nnoremap <silent> .o  :<C-u>CocList outline<cr> | ||||
| 	" " Search workspace symbols | ||||
| 	" nnoremap <silent> <space>s  :<C-u>CocList -I symbols<cr> | ||||
| 	" " Do default action for next item. | ||||
| 	" nnoremap <silent> <space>j  :<C-u>CocNext<CR> | ||||
| 	" " Do default action for previous item. | ||||
| 	" nnoremap <silent> <space>k  :<C-u>CocPrev<CR> | ||||
| 	" " Resume latest coc list | ||||
| 	" nnoremap <silent> <space>p  :<C-u>CocListResume<CR> | ||||
| " endfunction | ||||
| 
 | ||||
| 
 | ||||
| " autocmd! User coc.nvim call ConfigureCocNVIM() | ||||
| 
 | ||||
| " function s:CocStop() | ||||
| 	" :CocDisable | ||||
| 	" call coc#rpc#start_server() | ||||
| " endfunction | ||||
| 
 | ||||
| " command! -nargs=0 CocStop      :call s:CocStop() | ||||
| 
 | ||||
| "LanguageClient-neovim | ||||
| " Required for operations modifying multiple buffers like rename. | ||||
| set hidden | ||||
| nnoremap <silent> lc :call LanguageClient_contextMenu()<CR> | ||||
| " Or map each action separately | ||||
| nnoremap <silent> T :call LanguageClient#textDocument_hover()<CR> | ||||
| nnoremap <silent> gd :call LanguageClient#textDocument_definition()<CR> | ||||
| nnoremap <silent> <F2> :call LanguageClient#textDocument_rename()<CR> | ||||
| 
 | ||||
| let g:LanguageClient_autoStart = 0 | ||||
| let g:LanguageClient_diagnosticsEnable = 1 | ||||
| let g:LanguageClient_diagnosticsList = "Quickfix" | ||||
| let g:LanguageClient_diagnosticsDisplay = { | ||||
|         \ 1: { | ||||
|         \     "name": "Error", | ||||
| @ -58,13 +197,6 @@ let g:LanguageClient_loggingFile =  expand('~/LanguageClient.log') | ||||
| let g:LanguageClient_serverStderr = expand('~/LanguageServer.log') | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| if !has("nvim") | ||||
| 	" lj | ||||
| 	let g:LustyJugglerSuppressRubyWarning = 1 | ||||
| endif | ||||
| 
 | ||||
| " neosnippet | ||||
| " Plugin key-mappings. | ||||
| " Note: It must be "imap" and "smap".  It uses <Plug> mappings. | ||||
| @ -152,11 +284,6 @@ let NERDCreateDefaultMappings=0 | ||||
| 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 | ||||
| @ -180,7 +307,6 @@ command! -nargs=* Rag | ||||
| 
 | ||||
| 
 | ||||
| " fastfold | ||||
| nmap zuz <Plug>(FastFoldUpdate) | ||||
| let g:fastfold_savehook = 1 | ||||
| let g:fastfold_fold_command_suffixes =  ['x','X','a','A','o','O','c','C'] | ||||
| let g:fastfold_fold_movement_commands = [']z', '[z', 'zj', 'zk'] | ||||
| @ -207,10 +333,19 @@ let g:tagbar_map_togglecaseinsensitive = 'zi' | ||||
| let g:NERDTreeMapActivateNode = '<CR>' | ||||
| let g:NERDTreeMapCustomOpen = '' | ||||
| let g:NERDTreeMapOpenExpl = 'n' | ||||
| let g:NERDTreeMapJumpNextSibling = '' | ||||
| " let g:NERDTreeMapOpenSplit = '' | ||||
| " use NERDTree instead of netrw | ||||
| autocmd StdinReadPre * let s:std_in=1 | ||||
| autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | exe 'cd '.argv()[0] | endif | ||||
| 
 | ||||
| " overwrite nonsense from editorconfig | ||||
| let g:EditorConfig_max_line_indicator = 'none' | ||||
| " let g:EditorConfig_preserve_formatoptions = 1 | ||||
| 
 | ||||
| " vim current word | ||||
| let g:vim_current_word#highlight_current_word = 0 | ||||
| hi default link CurrentWordTwins CursorColumn | ||||
| 
 | ||||
| " vista | ||||
| let g:vista#renderer#enable_icon = 0 | ||||
|  | ||||
| @ -179,7 +179,7 @@ function! s:define_commands() | ||||
|   endif | ||||
|   if has('win32') | ||||
|   \ && &shellslash | ||||
|   \ && (&shell =~# 'cmd\.exe' || &shell =~# 'powershell\.exe') | ||||
|   \ && (&shell =~# 'cmd\(\.exe\)\?$' || &shell =~# 'powershell\(\.exe\)\?$') | ||||
|     return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.') | ||||
|   endif | ||||
|   if !has('nvim') | ||||
| @ -251,7 +251,7 @@ endfunction | ||||
| 
 | ||||
| function! plug#end() | ||||
|   if !exists('g:plugs') | ||||
|     return s:err('Call plug#begin() first') | ||||
|     return s:err('plug#end() called without calling plug#begin() first') | ||||
|   endif | ||||
| 
 | ||||
|   if exists('#PlugLOD') | ||||
| @ -372,7 +372,7 @@ endfunction | ||||
| 
 | ||||
| function! s:git_version_requirement(...) | ||||
|   if !exists('s:git_version') | ||||
|     let s:git_version = map(split(split(s:system('git --version'))[2], '\.'), 'str2nr(v:val)') | ||||
|     let s:git_version = map(split(split(s:system(['git', '--version']))[2], '\.'), 'str2nr(v:val)') | ||||
|   endif | ||||
|   return s:version_requirement(s:git_version, a:000) | ||||
| endfunction | ||||
| @ -419,7 +419,7 @@ if s:is_win | ||||
|     let batchfile = s:plug_tempname().'.bat' | ||||
|     call writefile(s:wrap_cmds(a:cmd), batchfile) | ||||
|     let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0}) | ||||
|     if &shell =~# 'powershell\.exe' | ||||
|     if &shell =~# 'powershell\(\.exe\)\?$' | ||||
|       let cmd = '& ' . cmd | ||||
|     endif | ||||
|     return [batchfile, cmd] | ||||
| @ -632,17 +632,39 @@ function! plug#(repo, ...) | ||||
|     let g:plugs[name] = spec | ||||
|     let s:loaded[name] = get(s:loaded, name, 0) | ||||
|   catch | ||||
|     return s:err(v:exception) | ||||
|     return s:err(repo . ' ' . v:exception) | ||||
|   endtry | ||||
| endfunction | ||||
| 
 | ||||
| function! s:parse_options(arg) | ||||
|   let opts = copy(s:base_spec) | ||||
|   let type = type(a:arg) | ||||
|   let opt_errfmt = 'Invalid argument for "%s" option of :Plug (expected: %s)' | ||||
|   if type == s:TYPE.string | ||||
|     if empty(a:arg) | ||||
|       throw printf(opt_errfmt, 'tag', 'string') | ||||
|     endif | ||||
|     let opts.tag = a:arg | ||||
|   elseif type == s:TYPE.dict | ||||
|     call extend(opts, a:arg) | ||||
|     for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as'] | ||||
|       if has_key(opts, opt) | ||||
|       \ && (type(opts[opt]) != s:TYPE.string || empty(opts[opt])) | ||||
|         throw printf(opt_errfmt, opt, 'string') | ||||
|       endif | ||||
|     endfor | ||||
|     for opt in ['on', 'for'] | ||||
|       if has_key(opts, opt) | ||||
|       \ && type(opts[opt]) != s:TYPE.list | ||||
|       \ && (type(opts[opt]) != s:TYPE.string || empty(opts[opt])) | ||||
|         throw printf(opt_errfmt, opt, 'string or list') | ||||
|       endif | ||||
|     endfor | ||||
|     if has_key(opts, 'do') | ||||
|       \ && type(opts.do) != s:TYPE.funcref | ||||
|       \ && (type(opts.do) != s:TYPE.string || empty(opts.do)) | ||||
|         throw printf(opt_errfmt, 'do', 'string or funcref') | ||||
|     endif | ||||
|     if has_key(opts, 'dir') | ||||
|       let opts.dir = s:dirpath(s:plug_expand(opts.dir)) | ||||
|     endif | ||||
| @ -864,8 +886,15 @@ endfunction | ||||
| 
 | ||||
| function! s:chsh(swap) | ||||
|   let prev = [&shell, &shellcmdflag, &shellredir] | ||||
|   if !s:is_win && a:swap | ||||
|     set shell=sh shellredir=>%s\ 2>&1 | ||||
|   if !s:is_win | ||||
|     set shell=sh | ||||
|   endif | ||||
|   if a:swap | ||||
|     if &shell =~# 'powershell\(\.exe\)\?$' || &shell =~# 'pwsh$' | ||||
|       let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s' | ||||
|     elseif &shell =~# 'sh' || &shell =~# 'cmd\(\.exe\)\?$' | ||||
|       set shellredir=>%s\ 2>&1 | ||||
|     endif | ||||
|   endif | ||||
|   return prev | ||||
| endfunction | ||||
| @ -898,7 +927,7 @@ function! s:regress_bar() | ||||
| endfunction | ||||
| 
 | ||||
| function! s:is_updated(dir) | ||||
|   return !empty(s:system_chomp('git log --pretty=format:"%h" "HEAD...HEAD@{1}"', a:dir)) | ||||
|   return !empty(s:system_chomp(['git', 'log', '--pretty=format:%h', 'HEAD...HEAD@{1}'], a:dir)) | ||||
| endfunction | ||||
| 
 | ||||
| function! s:do(pull, force, todo) | ||||
| @ -935,6 +964,7 @@ function! s:do(pull, force, todo) | ||||
|         endif | ||||
|       elseif type == s:TYPE.funcref | ||||
|         try | ||||
|           call s:load_plugin(spec) | ||||
|           let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged') | ||||
|           call spec.do({ 'name': name, 'status': status, 'force': a:force }) | ||||
|         catch | ||||
| @ -961,7 +991,7 @@ endfunction | ||||
| 
 | ||||
| function! s:checkout(spec) | ||||
|   let sha = a:spec.commit | ||||
|   let output = s:system('git rev-parse HEAD', a:spec.dir) | ||||
|   let output = s:system(['git', 'rev-parse', 'HEAD'], a:spec.dir) | ||||
|   if !v:shell_error && !s:hash_match(sha, s:lines(output)[0]) | ||||
|     let output = s:system( | ||||
|           \ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir) | ||||
| @ -1079,11 +1109,16 @@ function! s:update_impl(pull, force, args) abort | ||||
|   normal! 2G | ||||
|   silent! redraw | ||||
| 
 | ||||
|   let s:clone_opt = get(g:, 'plug_shallow', 1) ? | ||||
|         \ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : '' | ||||
|   let s:clone_opt = [] | ||||
|   if get(g:, 'plug_shallow', 1) | ||||
|     call extend(s:clone_opt, ['--depth', '1']) | ||||
|     if s:git_version_requirement(1, 7, 10) | ||||
|       call add(s:clone_opt, '--no-single-branch') | ||||
|     endif | ||||
|   endif | ||||
| 
 | ||||
|   if has('win32unix') || has('wsl') | ||||
|     let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input' | ||||
|     call extend(s:clone_opt, ['-c', 'core.eol=lf', '-c', 'core.autocrlf=input']) | ||||
|   endif | ||||
| 
 | ||||
|   let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : '' | ||||
| @ -1264,7 +1299,7 @@ function! s:job_cb(fn, job, ch, data) | ||||
| endfunction | ||||
| 
 | ||||
| function! s:nvim_cb(job_id, data, event) dict abort | ||||
|   return a:event == 'stdout' ? | ||||
|   return (a:event == 'stdout' || a:event == 'stderr') ? | ||||
|     \ s:job_cb('s:job_out_cb',  self, 0, join(a:data, "\n")) : | ||||
|     \ s:job_cb('s:job_exit_cb', self, 0, a:data) | ||||
| endfunction | ||||
| @ -1273,12 +1308,15 @@ function! s:spawn(name, cmd, opts) | ||||
|   let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''], | ||||
|             \ 'new': get(a:opts, 'new', 0) } | ||||
|   let s:jobs[a:name] = job | ||||
|   let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir, 0) : a:cmd | ||||
|   let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd] | ||||
| 
 | ||||
|   if s:nvim | ||||
|     if has_key(a:opts, 'dir') | ||||
|       let job.cwd = a:opts.dir | ||||
|     endif | ||||
|     let argv = a:cmd | ||||
|     call extend(job, { | ||||
|     \ 'on_stdout': function('s:nvim_cb'), | ||||
|     \ 'on_stderr': function('s:nvim_cb'), | ||||
|     \ 'on_exit':   function('s:nvim_cb'), | ||||
|     \ }) | ||||
|     let jid = s:plug_call('jobstart', argv, job) | ||||
| @ -1291,9 +1329,16 @@ function! s:spawn(name, cmd, opts) | ||||
|             \ 'Invalid arguments (or job table is full)'] | ||||
|     endif | ||||
|   elseif s:vim8 | ||||
|     let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"script": 0})')) | ||||
|     if has_key(a:opts, 'dir') | ||||
|       let cmd = s:with_cd(cmd, a:opts.dir, 0) | ||||
|     endif | ||||
|     let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd] | ||||
|     let jid = job_start(s:is_win ? join(argv, ' ') : argv, { | ||||
|     \ 'out_cb':   function('s:job_cb', ['s:job_out_cb',  job]), | ||||
|     \ 'err_cb':   function('s:job_cb', ['s:job_out_cb',  job]), | ||||
|     \ 'exit_cb':  function('s:job_cb', ['s:job_exit_cb', job]), | ||||
|     \ 'err_mode': 'raw', | ||||
|     \ 'out_mode': 'raw' | ||||
|     \}) | ||||
|     if job_status(jid) == 'run' | ||||
| @ -1304,7 +1349,7 @@ function! s:spawn(name, cmd, opts) | ||||
|       let job.lines   = ['Failed to start job'] | ||||
|     endif | ||||
|   else | ||||
|     let job.lines = s:lines(call('s:system', [cmd])) | ||||
|     let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [a:cmd, a:opts.dir] : [a:cmd])) | ||||
|     let job.error = v:shell_error != 0 | ||||
|     let job.running = 0 | ||||
|   endif | ||||
| @ -1401,8 +1446,14 @@ while 1 " Without TCO, Vim stack is bound to explode | ||||
|     let [error, _] = s:git_validate(spec, 0) | ||||
|     if empty(error) | ||||
|       if pull | ||||
|         let fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : '' | ||||
|         call s:spawn(name, printf('git fetch %s %s 2>&1', fetch_opt, prog), { 'dir': spec.dir }) | ||||
|         let cmd = ['git', 'fetch'] | ||||
|         if has_tag && !empty(globpath(spec.dir, '.git/shallow')) | ||||
|           call extend(cmd, ['--depth', '99999999']) | ||||
|         endif | ||||
|         if !empty(prog) | ||||
|           call add(cmd, prog) | ||||
|         endif | ||||
|         call s:spawn(name, cmd, { 'dir': spec.dir }) | ||||
|       else | ||||
|         let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 } | ||||
|       endif | ||||
| @ -1410,12 +1461,14 @@ while 1 " Without TCO, Vim stack is bound to explode | ||||
|       let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 } | ||||
|     endif | ||||
|   else | ||||
|     call s:spawn(name, | ||||
|           \ printf('git clone %s %s %s %s 2>&1', | ||||
|           \ has_tag ? '' : s:clone_opt, | ||||
|           \ prog, | ||||
|           \ plug#shellescape(spec.uri, {'script': 0}), | ||||
|           \ plug#shellescape(s:trim(spec.dir), {'script': 0})), { 'new': 1 }) | ||||
|     let cmd = ['git', 'clone'] | ||||
|     if !has_tag | ||||
|       call extend(cmd, s:clone_opt) | ||||
|     endif | ||||
|     if !empty(prog) | ||||
|       call add(cmd, prog) | ||||
|     endif | ||||
|     call s:spawn(name, extend(cmd, [spec.uri, s:trim(spec.dir)]), { 'new': 1 }) | ||||
|   endif | ||||
| 
 | ||||
|   if !s:jobs[name].running | ||||
| @ -1452,7 +1505,7 @@ G_NVIM = vim.eval("has('nvim')") == '1' | ||||
| G_PULL = vim.eval('s:update.pull') == '1' | ||||
| G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1 | ||||
| G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)')) | ||||
| G_CLONE_OPT = vim.eval('s:clone_opt') | ||||
| G_CLONE_OPT = ' '.join(vim.eval('s:clone_opt')) | ||||
| G_PROGRESS = vim.eval('s:progress_opt(1)') | ||||
| G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads')) | ||||
| G_STOP = thr.Event() | ||||
| @ -1989,7 +2042,7 @@ function! s:update_ruby() | ||||
|     end | ||||
|   } if VIM::evaluate('s:mac_gui') == 1 | ||||
| 
 | ||||
|   clone_opt = VIM::evaluate('s:clone_opt') | ||||
|   clone_opt = VIM::evaluate('s:clone_opt').join(' ') | ||||
|   progress = VIM::evaluate('s:progress_opt(1)') | ||||
|   nthr.times do | ||||
|     mtx.synchronize do | ||||
| @ -2055,13 +2108,29 @@ function! s:shellesc_sh(arg) | ||||
|   return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'" | ||||
| endfunction | ||||
| 
 | ||||
| " Escape the shell argument based on the shell. | ||||
| " Vim and Neovim's shellescape() are insufficient. | ||||
| " 1. shellslash determines whether to use single/double quotes. | ||||
| "    Double-quote escaping is fragile for cmd.exe. | ||||
| " 2. It does not work for powershell. | ||||
| " 3. It does not work for *sh shells if the command is executed | ||||
| "    via cmd.exe (ie. cmd.exe /c sh -c command command_args) | ||||
| " 4. It does not support batchfile syntax. | ||||
| " | ||||
| " Accepts an optional dictionary with the following keys: | ||||
| " - shell: same as Vim/Neovim 'shell' option. | ||||
| "          If unset, fallback to 'cmd.exe' on Windows or 'sh'. | ||||
| " - script: If truthy and shell is cmd.exe, escape for batchfile syntax. | ||||
| function! plug#shellescape(arg, ...) | ||||
|   if a:arg =~# '^[A-Za-z0-9_/:.-]\+$' | ||||
|     return a:arg | ||||
|   endif | ||||
|   let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {} | ||||
|   let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh') | ||||
|   let script = get(opts, 'script', 1) | ||||
|   if shell =~# 'cmd\.exe' | ||||
|   if shell =~# 'cmd\(\.exe\)\?$' | ||||
|     return s:shellesc_cmd(a:arg, script) | ||||
|   elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$' | ||||
|   elseif shell =~# 'powershell\(\.exe\)\?$' || shell =~# 'pwsh$' | ||||
|     return s:shellesc_ps1(a:arg) | ||||
|   endif | ||||
|   return s:shellesc_sh(a:arg) | ||||
| @ -2105,8 +2174,24 @@ function! s:system(cmd, ...) | ||||
|   let batchfile = '' | ||||
|   try | ||||
|     let [sh, shellcmdflag, shrd] = s:chsh(1) | ||||
|     let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd | ||||
|     if s:is_win | ||||
|     if type(a:cmd) == s:TYPE.list | ||||
|       " Neovim's system() supports list argument to bypass the shell | ||||
|       " but it cannot set the working directory for the command. | ||||
|       " Assume that the command does not rely on the shell. | ||||
|       if has('nvim') && a:0 == 0 | ||||
|         return system(a:cmd) | ||||
|       endif | ||||
|       let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})')) | ||||
|       if &shell =~# 'powershell\(\.exe\)\?$' | ||||
|         let cmd = '& ' . cmd | ||||
|       endif | ||||
|     else | ||||
|       let cmd = a:cmd | ||||
|     endif | ||||
|     if a:0 > 0 | ||||
|       let cmd = s:with_cd(cmd, a:1, type(a:cmd) != s:TYPE.list) | ||||
|     endif | ||||
|     if s:is_win && type(a:cmd) != s:TYPE.list | ||||
|       let [batchfile, cmd] = s:batchfile(cmd) | ||||
|     endif | ||||
|     return system(cmd) | ||||
| @ -2159,9 +2244,10 @@ function! s:git_validate(spec, check_branch) | ||||
|               \ branch, a:spec.branch) | ||||
|       endif | ||||
|       if empty(err) | ||||
|         let [ahead, behind] = split(s:lastline(s:system(printf( | ||||
|               \ 'git rev-list --count --left-right HEAD...origin/%s', | ||||
|               \ a:spec.branch), a:spec.dir)), '\t') | ||||
|         let [ahead, behind] = split(s:lastline(s:system([ | ||||
|         \ 'git', 'rev-list', '--count', '--left-right', | ||||
|         \ printf('HEAD...origin/%s', a:spec.branch) | ||||
|         \ ], a:spec.dir)), '\t') | ||||
|         if !v:shell_error && ahead | ||||
|           if behind | ||||
|             " Only mention PlugClean if diverged, otherwise it's likely to be | ||||
| @ -2185,7 +2271,9 @@ endfunction | ||||
| 
 | ||||
| function! s:rm_rf(dir) | ||||
|   if isdirectory(a:dir) | ||||
|     call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . plug#shellescape(a:dir)) | ||||
|     return s:system(s:is_win | ||||
|     \ ? 'rmdir /S /Q '.plug#shellescape(a:dir) | ||||
|     \ : ['rm', '-rf', a:dir]) | ||||
|   endif | ||||
| endfunction | ||||
| 
 | ||||
| @ -2267,6 +2355,7 @@ endfunction | ||||
| function! s:delete(range, force) | ||||
|   let [l1, l2] = a:range | ||||
|   let force = a:force | ||||
|   let err_count = 0 | ||||
|   while l1 <= l2 | ||||
|     let line = getline(l1) | ||||
|     if line =~ '^- ' && isdirectory(line[2:]) | ||||
| @ -2275,11 +2364,22 @@ function! s:delete(range, force) | ||||
|       let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1) | ||||
|       let force = force || answer > 1 | ||||
|       if answer | ||||
|         call s:rm_rf(line[2:]) | ||||
|         let err = s:rm_rf(line[2:]) | ||||
|         setlocal modifiable | ||||
|         call setline(l1, '~'.line[1:]) | ||||
|         let s:clean_count += 1 | ||||
|         call setline(4, printf('Removed %d directories.', s:clean_count)) | ||||
|         if empty(err) | ||||
|           call setline(l1, '~'.line[1:]) | ||||
|           let s:clean_count += 1 | ||||
|         else | ||||
|           delete _ | ||||
|           call append(l1 - 1, s:format_message('x', line[1:], err)) | ||||
|           let l2 += len(s:lines(err)) | ||||
|           let err_count += 1 | ||||
|         endif | ||||
|         let msg = printf('Removed %d directories.', s:clean_count) | ||||
|         if err_count > 0 | ||||
|           let msg .= printf(' Failed to remove %d directories.', err_count) | ||||
|         endif | ||||
|         call setline(4, msg) | ||||
|         setlocal nomodifiable | ||||
|       endif | ||||
|     endif | ||||
| @ -2294,7 +2394,7 @@ function! s:upgrade() | ||||
|   let new = tmp . '/plug.vim' | ||||
| 
 | ||||
|   try | ||||
|     let out = s:system(printf('git clone --depth 1 %s %s', plug#shellescape(s:plug_src), plug#shellescape(tmp))) | ||||
|     let out = s:system(['git', 'clone', '--depth', '1', s:plug_src, tmp]) | ||||
|     if v:shell_error | ||||
|       return s:err('Error upgrading vim-plug: '. out) | ||||
|     endif | ||||
| @ -2489,11 +2589,13 @@ function! s:diff() | ||||
|     call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:') | ||||
|     for [k, v] in plugs | ||||
|       let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..' | ||||
|       let cmd = 'git log --graph --color=never ' | ||||
|       \ . (s:git_version_requirement(2, 10, 0) ? '--no-show-signature ' : '') | ||||
|       \ . join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)')) | ||||
|       let cmd = ['git', 'log', '--graph', '--color=never'] | ||||
|       if s:git_version_requirement(2, 10, 0) | ||||
|         call add(cmd, '--no-show-signature') | ||||
|       endif | ||||
|       call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range]) | ||||
|       if has_key(v, 'rtp') | ||||
|         let cmd .= ' -- '.plug#shellescape(v.rtp) | ||||
|         call extend(cmd, ['--', v.rtp]) | ||||
|       endif | ||||
|       let diff = s:system_chomp(cmd, v.dir) | ||||
|       if !empty(diff) | ||||
| @ -2561,7 +2663,7 @@ function! s:snapshot(force, ...) abort | ||||
|   let names = sort(keys(filter(copy(g:plugs), | ||||
|         \'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)'))) | ||||
|   for name in reverse(names) | ||||
|     let sha = s:system_chomp('git rev-parse --short HEAD', g:plugs[name].dir) | ||||
|     let sha = s:system_chomp(['git', 'rev-parse', '--short', 'HEAD'], g:plugs[name].dir) | ||||
|     if !empty(sha) | ||||
|       call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha)) | ||||
|       redraw | ||||
|  | ||||
							
								
								
									
										114
									
								
								coc-settings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								coc-settings.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,114 @@ | ||||
| { | ||||
|   "languageserver": { | ||||
|     "haskell": { | ||||
|       "trace.server": "verbose", | ||||
|       "command": "haskell-language-server-wrapper", | ||||
|       "args": ["--lsp", "-d", "-l", "/home/jule/hls-server.log"], | ||||
|       "rootPatterns": [ | ||||
|         "*.cabal", | ||||
|         "stack.yaml", | ||||
|         "cabal.config", | ||||
|         "cabal.project", | ||||
|         "package.yaml" | ||||
|       ], | ||||
|       "filetypes": [ | ||||
|         "hs", | ||||
|         "lhs", | ||||
|         "haskell" | ||||
|       ], | ||||
|       "initializationOptions": { | ||||
|         "languageServerHaskell": { | ||||
|           "hlintOn": true | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "bash": { | ||||
|       "trace.server": "verbose", | ||||
|       "command": "bash-language-server", | ||||
|       "args": ["start"], | ||||
|       "filetypes": ["sh"], | ||||
|       "ignoredRootPaths": ["~"] | ||||
|     }, | ||||
|     // install: https://github.com/mattn/efm-langserver | ||||
|     //     and: https://github.com/Kuniwak/vint | ||||
|     "efm": { | ||||
|       "command": "efm-langserver", | ||||
|       "args": [], | ||||
|       // custom config path | ||||
|       //"args": ["-c", "/home/jule/.config/efm-langserver/config.yaml"], | ||||
|       "filetypes": ["vim"] | ||||
|     }, | ||||
|     "python": { | ||||
|         "command": "python", | ||||
|         "args": [ | ||||
|           "-mpyls", | ||||
|           "-vv", | ||||
|           "--log-file", | ||||
|           "/tmp/lsp_python.log" | ||||
|         ], | ||||
|         "trace.server": "verbose", | ||||
|         "filetypes": [ | ||||
|           "python" | ||||
|         ], | ||||
|         "settings": { | ||||
|           "pyls": { | ||||
|             "enable": true, | ||||
|             "trace": { | ||||
|               "server": "verbose" | ||||
|             }, | ||||
|             "commandPath": "", | ||||
|             "configurationSources": [ | ||||
|               "pycodestyle" | ||||
|             ], | ||||
|             "plugins": { | ||||
|               "jedi_completion": { | ||||
|                 "enabled": true | ||||
|               }, | ||||
|               "jedi_hover": { | ||||
|                 "enabled": true | ||||
|               }, | ||||
|               "jedi_references": { | ||||
|                 "enabled": true | ||||
|               }, | ||||
|               "jedi_signature_help": { | ||||
|                 "enabled": true | ||||
|               }, | ||||
|               "jedi_symbols": { | ||||
|                 "enabled": true, | ||||
|                 "all_scopes": true | ||||
|               }, | ||||
|               "mccabe": { | ||||
|                 "enabled": true, | ||||
|                 "threshold": 15 | ||||
|               }, | ||||
|               "preload": { | ||||
|                 "enabled": true | ||||
|               }, | ||||
|               "pycodestyle": { | ||||
|                 "enabled": true | ||||
|               }, | ||||
|               "pydocstyle": { | ||||
|                 "enabled": false, | ||||
|                 "match": "(?!test_).*\\.py", | ||||
|                 "matchDir": "[^\\.].*" | ||||
|               }, | ||||
|               "pyflakes": { | ||||
|                 "enabled": true | ||||
|               }, | ||||
|               "rope_completion": { | ||||
|                 "enabled": true | ||||
|               }, | ||||
|               "yapf": { | ||||
|                 "enabled": true | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|   }, | ||||
|   "coc.preferences.hoverTarget": "float", | ||||
|   "diagnostic.virtualText": true, | ||||
|   "diagnostic.enableSign": true, | ||||
|   "suggest.floatEnable": true | ||||
| } | ||||
| 
 | ||||
							
								
								
									
										168
									
								
								plugin/keys.vim
									
									
									
									
									
								
							
							
						
						
									
										168
									
								
								plugin/keys.vim
									
									
									
									
									
								
							| @ -165,6 +165,10 @@ nmap <leader>pc <Esc>:pc<CR> | ||||
| " inoremap <silent> <A-e> <Esc>:wincmd j<CR> | ||||
| " inoremap <silent> <A-n> <Esc>:wincmd h<CR> | ||||
| " inoremap <silent> <A-i> <Esc>:wincmd l<CR> | ||||
| nnoremap <silent> <C-A-o> :wincmd k<CR> | ||||
| nnoremap <silent> <C-A-e> :wincmd j<CR> | ||||
| nnoremap <silent> <C-A-n> :wincmd h<CR> | ||||
| nnoremap <silent> <C-A-i> :wincmd l<CR> | ||||
| nnoremap <silent> <A-Up> :wincmd k<CR> | ||||
| nnoremap <silent> <A-Down> :wincmd j<CR> | ||||
| nnoremap <silent> <A-Left> :wincmd h<CR> | ||||
| @ -187,12 +191,9 @@ nmap <S-F3> :exec("tjump ".expand("<cword>"))<CR> | ||||
| nmap <S-F4> :split<CR>:exec("tjump ".expand("<cword>"))<CR> | ||||
| 
 | ||||
| " trigger NERDTree, Tagbar $ Co. | ||||
| nmap <leader>n <Esc>:NERDTreeToggle<CR> | ||||
| nmap <leader>t <Esc>:TagbarToggle<CR> | ||||
| " nmap <leader>n <Esc>:NERDTreeToggle<CR> | ||||
| " nmap <leader>t <Esc>:TagbarToggle<CR> | ||||
| " nmap <leader>f "zyaw :exe ":Ack ".@z.""<CR> | ||||
| nmap <C-f> :CtrlP<CR> | ||||
| nmap <C-t> :CtrlPTag<CR> | ||||
| nmap <C-b> :CtrlPBuffer<CR> | ||||
| 
 | ||||
| " grep word under cursor | ||||
| nnoremap <silent><leader>f :lgr! "\b<C-R><C-W>\b"<CR>:cw<CR> | ||||
| @ -243,23 +244,13 @@ vnoremap <C-u> 10<C-E> | ||||
| 
 | ||||
| 
 | ||||
| " F keys | ||||
| nmap <F2> :noh<CR> | ||||
| imap <F2> <C-O>:noh<CR> | ||||
| nmap <F3> :YcmCompleter GoToDeclaration<CR> | ||||
| nmap <F4> :YcmCompleter GoTo<CR> | ||||
| nmap <C-F4> :YcmCompleter GoTo<CR>:wincmd o<CR> | ||||
| " nmap <F2> :noh<CR> | ||||
| " imap <F2> <C-O>:noh<CR> | ||||
| noremap <F5> :FufBuffer<CR> | ||||
| nmap <F7> :call ManCurrentWord()<CR><CR> | ||||
| nmap <F8> :call DevHelpCurrentWord()<CR><CR> | ||||
| nnoremap <silent> <F10> :call NERDComment("n", "Toggle")<cr> | ||||
| vnoremap <silent> <F10> <ESC>:call NERDComment("v", "Toggle")<cr> | ||||
| " nmap <F8> :call DevHelpCurrentWord()<CR><CR> | ||||
| " nmap <F4> <C-]> | ||||
| 
 | ||||
| " plugins etc | ||||
| noremap <C-F> :NERDTreeToggle<CR> | ||||
| noremap <C-B> :TagbarToggle<CR> | ||||
| inoremap <C-B> <C-O>:TagbarToggle<CR> | ||||
| 
 | ||||
| " remap visual block | ||||
| nnoremap <S-C> <c-v> | ||||
| 
 | ||||
| @ -280,52 +271,113 @@ inoremap <C-V> <C-O>:call Paste("i")<CR> | ||||
| nnoremap <C-A> ggVG<CR> | ||||
| inoremap <C-A> <C-O>:call Select()<CR> | ||||
| 
 | ||||
| nnoremap <leader>cd :cd %:p:h<CR>:pwd<CR> | ||||
| 
 | ||||
| nnoremap <Leader>cc :cclose<CR> | ||||
| nnoremap <Leader>co :copen<CR> | ||||
| 
 | ||||
| function! ToggleQuickFix() | ||||
|     if empty(filter(getwininfo(), 'v:val.quickfix')) | ||||
|         copen | ||||
|     else | ||||
|         cclose | ||||
|     endif | ||||
| endfunction | ||||
| 
 | ||||
| function! ToggleLocList() | ||||
|     if empty(filter(getwininfo(), 'v:val.loclist')) | ||||
|         lopen | ||||
|     else | ||||
|         lclose | ||||
|     endif | ||||
| endfunction | ||||
| 
 | ||||
| nnoremap <silent> <F3> :call ToggleQuickFix()<CR> | ||||
| nnoremap <silent> <F4> :call ToggleLocList()<CR> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| " PLUGINS | ||||
| 
 | ||||
| 
 | ||||
| " NERDTree | ||||
| noremap <C-j> :NERDTreeToggle<CR> | ||||
| " noremap <C-B> :TagbarToggle<CR> | ||||
| inoremap <C-B> <C-O>:TagbarToggle<CR> | ||||
| 
 | ||||
| " vista | ||||
| nmap <F8> :Vista!!<CR> | ||||
| " nmap <F2> :Vista finder fzf<CR> | ||||
| 
 | ||||
| " NERDComment | ||||
| nnoremap <silent> <F10> :call NERDComment("n", "Toggle")<cr> | ||||
| vnoremap <silent> <F10> <ESC>:call NERDComment("v", "Toggle")<cr> | ||||
| 
 | ||||
| " YCM | ||||
| nmap <C-F4> :YcmCompleter GoTo<CR>:wincmd o<CR> | ||||
| 
 | ||||
| " vim-clap | ||||
| nnoremap <leader>ag :Clap grep2 ++query=<cword><CR> | ||||
| " nnoremap <leader>tg :call fzf#vim#tags(expand('<cword>'), {'options': '--exact --select-1 --exit-0'})<CR> | ||||
| nnoremap <silent> <leader>tg :Clap proj_tags ++query=<cword><CR> | ||||
| nmap <C-f> :Clap files<CR> | ||||
| nmap <C-t> :Clap tags<CR> | ||||
| nmap <C-b> :Clap buffers<CR> | ||||
| 
 | ||||
| " fzf | ||||
| nnoremap <leader>ag :call fzf#vim#ag(expand('<cword>'),  WithGitRoot())<CR> | ||||
| nnoremap <leader>tg :call fzf#vim#tags(expand('<cword>'), {'options': '--exact --select-1 --exit-0'})<CR> | ||||
| " nnoremap <leader>ag :call fzf#vim#ag(expand('<cword>'),  WithGitRoot())<CR> | ||||
| " nnoremap <leader>tg :call fzf#vim#tags(expand('<cword>'), {'options': '--exact --select-1 --exit-0'})<CR> | ||||
| " nnoremap <silent> <leader>tg :Tags <C-R>=expand("<cword>")<CR><CR> | ||||
| " nmap <C-f> :GFiles<CR> | ||||
| " nmap <C-t> :Tags<CR> | ||||
| " nmap <C-b> :Buffers<CR> | ||||
| 
 | ||||
| " gitgutter | ||||
| nmap <leader>ggt <Esc>:GitGutterToggle<CR> | ||||
| nmap <leader>nh <Plug>(GitGutterNextHunk) | ||||
| nmap <leader>bh <Plug>(GitGutterPrevHunk) | ||||
| 
 | ||||
| " ctrlp | ||||
|   let g:ctrlp_prompt_mappings = { | ||||
|     \ 'PrtBS()':              ['<bs>', '<c-]>'], | ||||
|     \ 'PrtDelete()':          ['<del>'], | ||||
|     \ 'PrtDeleteWord()':      ['<c-w>'], | ||||
|     \ 'PrtClear()':           ['<c-u>'], | ||||
|     \ 'PrtSelectMove("j")':   ['<c-e>', '<down>'], | ||||
|     \ 'PrtSelectMove("k")':   ['<c-o>', '<up>'], | ||||
|     \ 'PrtSelectMove("t")':   ['<Home>', '<kHome>'], | ||||
|     \ 'PrtSelectMove("b")':   ['<End>', '<kEnd>'], | ||||
|     \ 'PrtSelectMove("u")':   ['<PageUp>', '<kPageUp>'], | ||||
|     \ 'PrtSelectMove("d")':   ['<PageDown>', '<kPageDown>'], | ||||
|     \ 'PrtHistory(-1)':       ['<c-f>'], | ||||
|     \ 'PrtHistory(1)':        ['<c-p>'], | ||||
|     \ 'AcceptSelection("e")': ['<cr>', '<2-LeftMouse>'], | ||||
|     \ 'AcceptSelection("h")': ['<c-x>', '<c-cr>', '<c-s>'], | ||||
|     \ 'AcceptSelection("t")': ['<c-t>'], | ||||
|     \ 'AcceptSelection("v")': ['<c-v>', '<RightMouse>'], | ||||
|     \ 'ToggleFocus()':        ['<s-tab>'], | ||||
|     \ 'ToggleRegex()':        ['<c-r>'], | ||||
|     \ 'ToggleByFname()':      ['<c-d>'], | ||||
|     \ 'ToggleType(1)':        ['<c-g>', '<c-up>'], | ||||
|     \ 'ToggleType(-1)':       ['<c-b>', '<c-down>'], | ||||
|     \ 'PrtExpandDir()':       ['<tab>'], | ||||
|     \ 'PrtInsert("c")':       ['<MiddleMouse>', '<insert>'], | ||||
|     \ 'PrtInsert()':          ['<c-\>'], | ||||
|     \ 'PrtCurStart()':        ['<c-a>'], | ||||
|     \ 'PrtCurEnd()':          ['<c-k>'], | ||||
|     \ 'PrtCurLeft()':         ['<c-n>', '<left>', '<c-^>'], | ||||
|     \ 'PrtCurRight()':        ['<c-i>', '<right>'], | ||||
|     \ 'PrtClearCache()':      ['<F5>'], | ||||
|     \ 'PrtDeleteEnt()':       ['<F7>'], | ||||
|     \ 'CreateNewFile()':      ['<c-y>'], | ||||
|     \ 'MarkToOpen()':         ['<c-z>'], | ||||
|     \ 'OpenMulti()':          ['<c-l>'], | ||||
|     \ 'PrtExit()':            ['<esc>', '<c-c>', '<c-g>'], | ||||
|     \ } | ||||
| " tig | ||||
| " let g:tig_explorer_keymap_edit    = '<C-x>' | ||||
| " let g:tig_explorer_keymap_tabedit = '<C-t>' | ||||
| " let g:tig_explorer_keymap_split   = '<C-s>' | ||||
| " let g:tig_explorer_keymap_vsplit  = '<C-v>' | ||||
| " nnoremap <Leader>T :TigOpenCurrentFile<CR> | ||||
| " nnoremap <Leader>t :TigOpenProjectRootDir<CR> | ||||
| " nnoremap <Leader>g :TigGrep<CR> | ||||
| " nnoremap <Leader>r :TigGrepResume<CR> | ||||
| " vnoremap <Leader>g y:TigGrep<Space><C-R>"<CR> | ||||
| " nnoremap <Leader>cg :<C-u>:TigGrep<Space><C-R><C-W><CR> | ||||
| " nnoremap <Leader>b :TigBlame<CR> | ||||
| 
 | ||||
| " ghcup | ||||
| " nnoremap <Leader>ghc :GHCup<CR> | ||||
| 
 | ||||
| nnoremap <leader>cd :cd %:p:h<CR>:pwd<CR> | ||||
| " git gutter | ||||
| omap <leader>ic <Plug>(GitGutterTextObjectInnerPending) | ||||
| omap <leader>ac <Plug>(GitGutterTextObjectOuterPending) | ||||
| xmap <leader>ic <Plug>(GitGutterTextObjectInnerVisual) | ||||
| xmap <leader>ac <Plug>(GitGutterTextObjectOuterVisual) | ||||
| 
 | ||||
| " fastfold | ||||
| nmap zuz <Plug>(FastFoldUpdate) | ||||
| 
 | ||||
| "LanguageClient-neovim | ||||
| " Required for operations modifying multiple buffers like rename. | ||||
| set hidden | ||||
| nnoremap <leader>lc :call LanguageClient_contextMenu()<CR> | ||||
| " Or map each action separately | ||||
| nnoremap <silent> T :call LanguageClient#textDocument_hover()<CR> | ||||
| nnoremap <silent> gd :call LanguageClient#textDocument_definition()<CR> | ||||
| " nnoremap <silent> <F2> :call LanguageClient#textDocument_rename()<CR> | ||||
| " nnoremap <leader>ld :call LanguageClient#textDocument_definition()<CR> | ||||
| " nnoremap <leader>lr :call LanguageClient#textDocument_rename()<CR> | ||||
| " nnoremap <leader>lf :call LanguageClient#textDocument_formatting()<CR> | ||||
| " nnoremap <leader>lt :call LanguageClient#textDocument_typeDefinition()<CR> | ||||
| " nnoremap <leader>lx :call LanguageClient#textDocument_references()<CR> | ||||
| " nnoremap <leader>la :call LanguageClient_workspace_applyEdit()<CR> | ||||
| " nnoremap <leader>lc :call LanguageClient#textDocument_completion()<CR> | ||||
| " nnoremap <leader>lh :call LanguageClient#textDocument_hover()<CR> | ||||
| " nnoremap <leader>ls :call LanguageClient_textDocument_documentSymbol()<CR> | ||||
| " nnoremap <leader>lm :call LanguageClient_contextMenu()<CR> | ||||
|  | ||||
							
								
								
									
										54
									
								
								vimrc
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								vimrc
									
									
									
									
									
								
							| @ -7,10 +7,11 @@ set shortmess+=A | ||||
| filetype plugin on | ||||
| filetype indent on | ||||
| 
 | ||||
| set backspace=2 " make backspace work like most other programs | ||||
| set backspace=indent,eol,start " backspace through everything in insert mode | ||||
| set cmdheight=1 | ||||
| 
 | ||||
| let g:ctrlp_map = '<c-j>' | ||||
| set wildmenu | ||||
| " set wildmode=longest,list,full | ||||
| 
 | ||||
| " vim-plug settings (Plugin declaration) | ||||
| call plug#begin('~/.vim/plugged') | ||||
| @ -23,11 +24,12 @@ Plug 'vim-scripts/genindent.vim' | ||||
| " Plug 'idris-hackers/idris-vim' | ||||
| "Plug 'yegappan/mru' | ||||
| Plug 'scrooloose/nerdcommenter' | ||||
| Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' } | ||||
| Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' } | | ||||
| 	\ Plug 'Xuyuanp/nerdtree-git-plugin', { 'on':  'NERDTreeToggle' } | ||||
| "Plug 'vim-scripts/promela.vim' | ||||
| "Plug 'AndrewRadev/simple_bookmarks.vim' | ||||
| "Plug 'Keithbsmiley/swift.vim' | ||||
| Plug 'majutsushi/tagbar' | ||||
| " Plug 'majutsushi/tagbar' | ||||
| "Plug 'ternjs/tern_for_vim' | ||||
| Plug 'xolox/vim-easytags' | ||||
| Plug 'xolox/vim-misc' | ||||
| @ -36,10 +38,10 @@ Plug 'Shougo/vimproc.vim', {'do' : 'make'} | ||||
| 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 'junegunn/fzf', { 'do': './install --bin' } | ||||
| " Plug 'junegunn/fzf.vim' | ||||
| Plug 'liuchengxu/vista.vim' | ||||
| Plug 'sbdchd/neoformat' | ||||
| Plug 'AndrewRadev/bufferize.vim' | ||||
| " Plug 'vimwiki/vimwiki' | ||||
| @ -49,6 +51,13 @@ Plug 'tpope/vim-scriptease' | ||||
| Plug 'Konfekt/FastFold' | ||||
| " Plug 'lambdalisue/vim-fullscreen' | ||||
| Plug 'editorconfig/editorconfig-vim' | ||||
| " Plug 'iberianpig/tig-explorer.vim' | ||||
| Plug 'hasufell/ghcup.vim' | ||||
| Plug 'junegunn/vim-easy-align' | ||||
| Plug 'dominikduda/vim_current_word' | ||||
| 
 | ||||
| " finder | ||||
| Plug 'liuchengxu/vim-clap', { 'do': { -> clap#installer#force_download() } } | ||||
| 
 | ||||
| 
 | ||||
| " scm | ||||
| @ -63,8 +72,8 @@ Plug 'LucHermitte/local_vimrc' | ||||
| 
 | ||||
| " completion | ||||
| Plug 'Valloric/YouCompleteMe', { 'do': './install.py --clang-completer --go-completer --rust-completer --system-boost --system-libclang', | ||||
|     \ 'for': ['c', 'go', 'clojure'], | ||||
|     \ } | ||||
| 	\ 'for': ['c', 'go', 'clojure'], | ||||
| 	\ } | ||||
| " deoplete for haskell | ||||
| if has('nvim') | ||||
|   Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins', | ||||
| @ -83,9 +92,9 @@ endif | ||||
| " setting this per-language breaks "let g:LanguageClient_autoStart = 1", | ||||
| " Use release branch (Recommend) | ||||
| Plug 'autozimu/LanguageClient-neovim', { | ||||
|     \ 'branch': 'next', | ||||
|     \ 'do': 'bash ./install.sh' | ||||
|     \ } | ||||
| 	\ 'branch': 'next', | ||||
| 	\ 'do': 'bash ./install.sh' | ||||
| 	\ } | ||||
| 
 | ||||
| " linting/compilation | ||||
| Plug 'w0rp/ale', { | ||||
| @ -101,6 +110,7 @@ Plug 'w0rp/ale', { | ||||
| " completion based on ghc-mod, not LSP | ||||
| " Plug 'eagletmt/neco-ghc', { 'for': 'haskell' } | ||||
| " Plug 'lukerandall/haskellmode-vim', { 'for': 'haskell' } | ||||
| " Plug 'axelf4/vim-haskell' | ||||
| Plug 'neovimhaskell/haskell-vim', { 'for': ['haskell', 'cabal']} | ||||
| " Plug 'ucsd-progsys/liquid-types.vim', { 'for': 'haskell' } | ||||
| Plug 'bitc/lushtags', { | ||||
| @ -111,7 +121,9 @@ Plug 'bitc/lushtags', { | ||||
| " Plug 'itchyny/vim-haskell-indent', { 'for': 'haskell' } | ||||
| " Plug 'dan-t/vim-hsimport', { 'for': 'haskell' } | ||||
| Plug 'Twinside/vim-hoogle', { 'for': 'haskell' } | ||||
| " Plug 'axelf4/vim-haskell', { 'for': 'haskell' } | ||||
| " Plug 'alx741/vim-hindent', { 'for': 'haskell' } | ||||
| Plug 'alx741/vim-stylishask', { 'for': 'haskell' } | ||||
| 
 | ||||
| 
 | ||||
| Plug 'luochen1990/rainbow', { 'for': ['clojure', 'haskell', 'python'] } | ||||
| 
 | ||||
| @ -160,6 +172,21 @@ endif | ||||
| " Plug 'noahfrederick/vim-hemisu' | ||||
| " Plug 'morhetz/gruvbox' | ||||
| 
 | ||||
| " coc | ||||
| " Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile', 'for': ['haskell', 'rust', 'sh', 'python', 'vim']} | ||||
| " Plug 'neoclide/coc-tsserver', {'do': 'yarn install --frozen-lockfile', 'for': ['typescript']} | ||||
| " "Plug 'neoclide/coc-git', {'do': 'yarn install --frozen-lockfile'} | ||||
| " " Plug 'neoclide/coc-rls', {'do': 'yarn install --frozen-lockfile', 'for': ['rust']} | ||||
| " Plug 'fannheyward/coc-rust-analyzer', {'do': 'yarn install --frozen-lockfile', 'for': ['rust']} | ||||
| " Plug 'neoclide/coc-prettier', {'do': 'yarn install --frozen-lockfile', 'for': ['haskell', 'rust', 'sh']} | ||||
| " " Plug 'neoclide/coc-python', {'do': 'yarn install --frozen-lockfile', 'for': ['python']} | ||||
| " "Plug 'neoclide/coc-vetur', {'do': 'yarn install --frozen-lockfile', 'for': ['haskell']} | ||||
| " Plug 'neoclide/coc-json', {'do': 'yarn install --frozen-lockfile', 'for': ['json']} | ||||
| " " Plug 'neoclide/coc-eslint', {'do': 'yarn install --frozen-lockfile', 'for': ['']} | ||||
| " Plug 'neoclide/coc-yaml', {'do': 'yarn install --frozen-lockfile', 'for': ['yaml']} | ||||
| " " Plug 'neoclide/coc-highlight', {'do': 'yarn install --frozen-lockfile', 'for': ['']} | ||||
| " Plug 'josa42/coc-sh', {'do': 'yarn install --frozen-lockfile', 'for': ['']} | ||||
| 
 | ||||
| " unmanaged | ||||
| Plug '~/.vim/unmanaged-vim-plug/bufonly' | ||||
| Plug '~/.vim/unmanaged-vim-plug/colorschemedegrade' | ||||
| @ -227,6 +254,7 @@ set shiftwidth=4 | ||||
| set directory=~/.vimtmp | ||||
| set modeline | ||||
| set modelines=1 | ||||
| set autoindent | ||||
| 
 | ||||
| let g:nickID = 'hasufell' | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user