This commit is contained in:
Julian Ospald 2020-10-11 13:50:17 +02:00
parent 8143c60b21
commit 8350566c14
No known key found for this signature in database
GPG Key ID: 511B62C09D50CD28
7 changed files with 599 additions and 232 deletions

View File

@ -9,6 +9,7 @@ call CmdAlias('hasktags', '!hasktags -c .<CR>')
" from " from
" https://raw.githubusercontent.com/begriffs/haskell-vim-now/master/git-hscope " 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('codex', 'call system("haskell-ctags")<CR><CR>call LoadHscope()<CR>')
call CmdAlias('Cc', 'Clap commits<CR>')
map <leader>ctg :codex<CR> map <leader>ctg :codex<CR>
@ -18,7 +19,6 @@ set tags=tags;/,codex.tags;/
" nnoremap <leader>gd <C-]> " nnoremap <leader>gd <C-]>
" nnoremap <silent> <leader>cgd :cs find g <C-R>=expand("<cword>")<CR><CR> " 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> nnoremap <silent> <C-\> :cs find c <C-R>=expand("<cword>")<CR><CR>
set cscopeprg=do_at_stack_root\ hscope 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_arrowsyntax = 1
" let g:haskell_enable_pattern_synonyms = 1 " let g:haskell_enable_pattern_synonyms = 1
" let g:haskell_enable_typeroles = 1 " let g:haskell_enable_typeroles = 1
" let g:haskell_indent_if = 3 let g:haskell_indent_if = 0
" let g:haskell_indent_case = 5 let g:haskell_indent_case = 4
" let g:haskell_indent_let = 4 let g:haskell_indent_let = 4
let g:haskell_indent_where = 2 let g:haskell_indent_where = 6
" let g:haskell_indent_do = 3 let g:haskell_indent_before_where = 2
" let g:haskell_indent_in = 1 let g:haskell_indent_after_bare_where = 2
let g:haskell_disable_TH = 1 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 " haskellmode-vim
function! HaskellDocCurrentWord() function! HaskellDocCurrentWord()
@ -73,8 +83,8 @@ endfunction
" done by LSP now " done by LSP now
nmap <F7> :call HaskellDocCurrentWord()<CR><CR> nmap <F7> :call HaskellDocCurrentWord()<CR><CR>
nmap <silent> <F3> :silent update <bar> HsimportModule<CR> " nmap <silent> <F3> :silent update <bar> HsimportModule<CR>
nmap <silent> <F4> :silent update <bar> HsimportSymbol<CR> " nmap <silent> <F4> :silent update <bar> HsimportSymbol<CR>
" liquid-types " liquid-types
@ -94,30 +104,6 @@ let g:vim_annotations_offset = '/.liquid/'
" endfunction " 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 $'] let g:ghcmod_hlint_options = ['--ignore=Eta reduce $']
" ALE " 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_warn_level = 10
let g:ale_haskell_argon_info_level = 6 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'] 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 " LSP
let g:LanguageClient_rootMarkers = ['cabal.project', '*.cabal', 'stack.yaml'] let g:LanguageClient_rootMarkers = ['cabal.project', '*.cabal', 'stack.yaml']
" \ 'haskell': ['ghcide', "--lsp"], " \ 'haskell': ['ghcide', "--lsp"],
let g:LanguageClient_serverCommands = { let g:LanguageClient_serverCommands = {
\ 'haskell': ['hie-wrapper', '--lsp'], \ 'haskell': ['haskell-language-server-wrapper', '--lsp'],
\ } \ }
@ -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%']

View File

@ -41,12 +41,12 @@ let g:tagbar_ctags_bin = '/usr/bin/exuberant-ctags'
" let g:autofmt_autosave = 0 " let g:autofmt_autosave = 0
" deoplete " deoplete
call deoplete#custom#option('sources',{ " call deoplete#custom#option('sources',{
\ '_': ['buffer'], " \ '_': ['buffer'],
\ 'rust': ['ultisnips', 'buffer', 'file', 'LanguageClient'] " \ 'rust': ['ultisnips', 'buffer', 'file', 'LanguageClient']
\ }) " \ })
inoremap <expr><tab> pumvisible() ? "\<c-n>" : "\<tab>" " inoremap <expr><tab> pumvisible() ? "\<c-n>" : "\<tab>"
call deoplete#enable() " call deoplete#enable()
let g:LanguageClient_serverCommands = { let g:LanguageClient_serverCommands = {
\ 'rust': ['~/.cargo/bin/ra_lsp_server'], \ 'rust': ['~/.cargo/bin/ra_lsp_server'],

View File

@ -4,16 +4,155 @@ let g:echodoc#enable_at_startup = 1
let g:echodoc#type = 'signature' 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 "LanguageClient-neovim
" Required for operations modifying multiple buffers like rename. " Required for operations modifying multiple buffers like rename.
set hidden 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_autoStart = 0
let g:LanguageClient_diagnosticsEnable = 1 let g:LanguageClient_diagnosticsEnable = 1
let g:LanguageClient_diagnosticsList = "Quickfix"
let g:LanguageClient_diagnosticsDisplay = { let g:LanguageClient_diagnosticsDisplay = {
\ 1: { \ 1: {
\ "name": "Error", \ "name": "Error",
@ -58,13 +197,6 @@ let g:LanguageClient_loggingFile = expand('~/LanguageClient.log')
let g:LanguageClient_serverStderr = expand('~/LanguageServer.log') let g:LanguageClient_serverStderr = expand('~/LanguageServer.log')
if !has("nvim")
" lj
let g:LustyJugglerSuppressRubyWarning = 1
endif
" neosnippet " neosnippet
" Plugin key-mappings. " Plugin key-mappings.
" Note: It must be "imap" and "smap". It uses <Plug> 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='/usr/bin/firefox'
let g:haddock_browser_callformat='%s file://%s >/dev/null 2>&1 &' 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 " fzf
" --column: Show column number " --column: Show column number
" --line-number: Show line number " --line-number: Show line number
@ -180,7 +307,6 @@ command! -nargs=* Rag
" fastfold " fastfold
nmap zuz <Plug>(FastFoldUpdate)
let g:fastfold_savehook = 1 let g:fastfold_savehook = 1
let g:fastfold_fold_command_suffixes = ['x','X','a','A','o','O','c','C'] let g:fastfold_fold_command_suffixes = ['x','X','a','A','o','O','c','C']
let g:fastfold_fold_movement_commands = [']z', '[z', 'zj', 'zk'] 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:NERDTreeMapActivateNode = '<CR>'
let g:NERDTreeMapCustomOpen = '' let g:NERDTreeMapCustomOpen = ''
let g:NERDTreeMapOpenExpl = 'n' let g:NERDTreeMapOpenExpl = 'n'
let g:NERDTreeMapJumpNextSibling = ''
" let g:NERDTreeMapOpenSplit = '' " 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 " overwrite nonsense from editorconfig
let g:EditorConfig_max_line_indicator = 'none' let g:EditorConfig_max_line_indicator = 'none'
" let g:EditorConfig_preserve_formatoptions = 1 " 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

View File

@ -179,7 +179,7 @@ function! s:define_commands()
endif endif
if has('win32') if has('win32')
\ && &shellslash \ && &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.') return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.')
endif endif
if !has('nvim') if !has('nvim')
@ -251,7 +251,7 @@ endfunction
function! plug#end() function! plug#end()
if !exists('g:plugs') if !exists('g:plugs')
return s:err('Call plug#begin() first') return s:err('plug#end() called without calling plug#begin() first')
endif endif
if exists('#PlugLOD') if exists('#PlugLOD')
@ -372,7 +372,7 @@ endfunction
function! s:git_version_requirement(...) function! s:git_version_requirement(...)
if !exists('s:git_version') 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 endif
return s:version_requirement(s:git_version, a:000) return s:version_requirement(s:git_version, a:000)
endfunction endfunction
@ -419,7 +419,7 @@ if s:is_win
let batchfile = s:plug_tempname().'.bat' let batchfile = s:plug_tempname().'.bat'
call writefile(s:wrap_cmds(a:cmd), batchfile) call writefile(s:wrap_cmds(a:cmd), batchfile)
let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0}) let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0})
if &shell =~# 'powershell\.exe' if &shell =~# 'powershell\(\.exe\)\?$'
let cmd = '& ' . cmd let cmd = '& ' . cmd
endif endif
return [batchfile, cmd] return [batchfile, cmd]
@ -632,17 +632,39 @@ function! plug#(repo, ...)
let g:plugs[name] = spec let g:plugs[name] = spec
let s:loaded[name] = get(s:loaded, name, 0) let s:loaded[name] = get(s:loaded, name, 0)
catch catch
return s:err(v:exception) return s:err(repo . ' ' . v:exception)
endtry endtry
endfunction endfunction
function! s:parse_options(arg) function! s:parse_options(arg)
let opts = copy(s:base_spec) let opts = copy(s:base_spec)
let type = type(a:arg) let type = type(a:arg)
let opt_errfmt = 'Invalid argument for "%s" option of :Plug (expected: %s)'
if type == s:TYPE.string if type == s:TYPE.string
if empty(a:arg)
throw printf(opt_errfmt, 'tag', 'string')
endif
let opts.tag = a:arg let opts.tag = a:arg
elseif type == s:TYPE.dict elseif type == s:TYPE.dict
call extend(opts, a:arg) 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') if has_key(opts, 'dir')
let opts.dir = s:dirpath(s:plug_expand(opts.dir)) let opts.dir = s:dirpath(s:plug_expand(opts.dir))
endif endif
@ -864,8 +886,15 @@ endfunction
function! s:chsh(swap) function! s:chsh(swap)
let prev = [&shell, &shellcmdflag, &shellredir] let prev = [&shell, &shellcmdflag, &shellredir]
if !s:is_win && a:swap if !s:is_win
set shell=sh shellredir=>%s\ 2>&1 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 endif
return prev return prev
endfunction endfunction
@ -898,7 +927,7 @@ function! s:regress_bar()
endfunction endfunction
function! s:is_updated(dir) 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 endfunction
function! s:do(pull, force, todo) function! s:do(pull, force, todo)
@ -935,6 +964,7 @@ function! s:do(pull, force, todo)
endif endif
elseif type == s:TYPE.funcref elseif type == s:TYPE.funcref
try try
call s:load_plugin(spec)
let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged') let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged')
call spec.do({ 'name': name, 'status': status, 'force': a:force }) call spec.do({ 'name': name, 'status': status, 'force': a:force })
catch catch
@ -961,7 +991,7 @@ endfunction
function! s:checkout(spec) function! s:checkout(spec)
let sha = a:spec.commit 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]) if !v:shell_error && !s:hash_match(sha, s:lines(output)[0])
let output = s:system( let output = s:system(
\ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir) \ '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 normal! 2G
silent! redraw silent! redraw
let s:clone_opt = get(g:, 'plug_shallow', 1) ? let s:clone_opt = []
\ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : '' 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') 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 endif
let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : '' 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 endfunction
function! s:nvim_cb(job_id, data, event) dict abort 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_out_cb', self, 0, join(a:data, "\n")) :
\ s:job_cb('s:job_exit_cb', self, 0, a:data) \ s:job_cb('s:job_exit_cb', self, 0, a:data)
endfunction endfunction
@ -1273,12 +1308,15 @@ function! s:spawn(name, cmd, opts)
let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''], let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''],
\ 'new': get(a:opts, 'new', 0) } \ 'new': get(a:opts, 'new', 0) }
let s:jobs[a:name] = job 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 s:nvim
if has_key(a:opts, 'dir')
let job.cwd = a:opts.dir
endif
let argv = a:cmd
call extend(job, { call extend(job, {
\ 'on_stdout': function('s:nvim_cb'), \ 'on_stdout': function('s:nvim_cb'),
\ 'on_stderr': function('s:nvim_cb'),
\ 'on_exit': function('s:nvim_cb'), \ 'on_exit': function('s:nvim_cb'),
\ }) \ })
let jid = s:plug_call('jobstart', argv, job) 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)'] \ 'Invalid arguments (or job table is full)']
endif endif
elseif s:vim8 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, { let jid = job_start(s:is_win ? join(argv, ' ') : argv, {
\ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]), \ '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]), \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]),
\ 'err_mode': 'raw',
\ 'out_mode': 'raw' \ 'out_mode': 'raw'
\}) \})
if job_status(jid) == 'run' if job_status(jid) == 'run'
@ -1304,7 +1349,7 @@ function! s:spawn(name, cmd, opts)
let job.lines = ['Failed to start job'] let job.lines = ['Failed to start job']
endif endif
else 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.error = v:shell_error != 0
let job.running = 0 let job.running = 0
endif endif
@ -1401,8 +1446,14 @@ while 1 " Without TCO, Vim stack is bound to explode
let [error, _] = s:git_validate(spec, 0) let [error, _] = s:git_validate(spec, 0)
if empty(error) if empty(error)
if pull if pull
let fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : '' let cmd = ['git', 'fetch']
call s:spawn(name, printf('git fetch %s %s 2>&1', fetch_opt, prog), { 'dir': spec.dir }) 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 else
let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 } let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 }
endif 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 } let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 }
endif endif
else else
call s:spawn(name, let cmd = ['git', 'clone']
\ printf('git clone %s %s %s %s 2>&1', if !has_tag
\ has_tag ? '' : s:clone_opt, call extend(cmd, s:clone_opt)
\ prog, endif
\ plug#shellescape(spec.uri, {'script': 0}), if !empty(prog)
\ plug#shellescape(s:trim(spec.dir), {'script': 0})), { 'new': 1 }) call add(cmd, prog)
endif
call s:spawn(name, extend(cmd, [spec.uri, s:trim(spec.dir)]), { 'new': 1 })
endif endif
if !s:jobs[name].running 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_PULL = vim.eval('s:update.pull') == '1'
G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1 G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1
G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)')) 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_PROGRESS = vim.eval('s:progress_opt(1)')
G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads')) G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads'))
G_STOP = thr.Event() G_STOP = thr.Event()
@ -1989,7 +2042,7 @@ function! s:update_ruby()
end end
} if VIM::evaluate('s:mac_gui') == 1 } 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)') progress = VIM::evaluate('s:progress_opt(1)')
nthr.times do nthr.times do
mtx.synchronize do mtx.synchronize do
@ -2055,13 +2108,29 @@ function! s:shellesc_sh(arg)
return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'" return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'"
endfunction 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, ...) 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 opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {}
let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh') let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh')
let script = get(opts, 'script', 1) let script = get(opts, 'script', 1)
if shell =~# 'cmd\.exe' if shell =~# 'cmd\(\.exe\)\?$'
return s:shellesc_cmd(a:arg, script) 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) return s:shellesc_ps1(a:arg)
endif endif
return s:shellesc_sh(a:arg) return s:shellesc_sh(a:arg)
@ -2105,8 +2174,24 @@ function! s:system(cmd, ...)
let batchfile = '' let batchfile = ''
try try
let [sh, shellcmdflag, shrd] = s:chsh(1) let [sh, shellcmdflag, shrd] = s:chsh(1)
let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd if type(a:cmd) == s:TYPE.list
if s:is_win " 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) let [batchfile, cmd] = s:batchfile(cmd)
endif endif
return system(cmd) return system(cmd)
@ -2159,9 +2244,10 @@ function! s:git_validate(spec, check_branch)
\ branch, a:spec.branch) \ branch, a:spec.branch)
endif endif
if empty(err) if empty(err)
let [ahead, behind] = split(s:lastline(s:system(printf( let [ahead, behind] = split(s:lastline(s:system([
\ 'git rev-list --count --left-right HEAD...origin/%s', \ 'git', 'rev-list', '--count', '--left-right',
\ a:spec.branch), a:spec.dir)), '\t') \ printf('HEAD...origin/%s', a:spec.branch)
\ ], a:spec.dir)), '\t')
if !v:shell_error && ahead if !v:shell_error && ahead
if behind if behind
" Only mention PlugClean if diverged, otherwise it's likely to be " Only mention PlugClean if diverged, otherwise it's likely to be
@ -2185,7 +2271,9 @@ endfunction
function! s:rm_rf(dir) function! s:rm_rf(dir)
if isdirectory(a: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 endif
endfunction endfunction
@ -2267,6 +2355,7 @@ endfunction
function! s:delete(range, force) function! s:delete(range, force)
let [l1, l2] = a:range let [l1, l2] = a:range
let force = a:force let force = a:force
let err_count = 0
while l1 <= l2 while l1 <= l2
let line = getline(l1) let line = getline(l1)
if line =~ '^- ' && isdirectory(line[2:]) 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 answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1)
let force = force || answer > 1 let force = force || answer > 1
if answer if answer
call s:rm_rf(line[2:]) let err = s:rm_rf(line[2:])
setlocal modifiable setlocal modifiable
if empty(err)
call setline(l1, '~'.line[1:]) call setline(l1, '~'.line[1:])
let s:clean_count += 1 let s:clean_count += 1
call setline(4, printf('Removed %d directories.', s:clean_count)) 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 setlocal nomodifiable
endif endif
endif endif
@ -2294,7 +2394,7 @@ function! s:upgrade()
let new = tmp . '/plug.vim' let new = tmp . '/plug.vim'
try 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 if v:shell_error
return s:err('Error upgrading vim-plug: '. out) return s:err('Error upgrading vim-plug: '. out)
endif endif
@ -2489,11 +2589,13 @@ function! s:diff()
call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:') call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:')
for [k, v] in plugs for [k, v] in plugs
let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..' let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..'
let cmd = 'git log --graph --color=never ' let cmd = ['git', 'log', '--graph', '--color=never']
\ . (s:git_version_requirement(2, 10, 0) ? '--no-show-signature ' : '') if s:git_version_requirement(2, 10, 0)
\ . join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)')) 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') if has_key(v, 'rtp')
let cmd .= ' -- '.plug#shellescape(v.rtp) call extend(cmd, ['--', v.rtp])
endif endif
let diff = s:system_chomp(cmd, v.dir) let diff = s:system_chomp(cmd, v.dir)
if !empty(diff) if !empty(diff)
@ -2561,7 +2663,7 @@ function! s:snapshot(force, ...) abort
let names = sort(keys(filter(copy(g:plugs), let names = sort(keys(filter(copy(g:plugs),
\'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)'))) \'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)')))
for name in reverse(names) 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) if !empty(sha)
call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha)) call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha))
redraw redraw

114
coc-settings.json Normal file
View 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
}

View File

@ -165,6 +165,10 @@ nmap <leader>pc <Esc>:pc<CR>
" inoremap <silent> <A-e> <Esc>:wincmd j<CR> " inoremap <silent> <A-e> <Esc>:wincmd j<CR>
" inoremap <silent> <A-n> <Esc>:wincmd h<CR> " inoremap <silent> <A-n> <Esc>:wincmd h<CR>
" inoremap <silent> <A-i> <Esc>:wincmd l<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-Up> :wincmd k<CR>
nnoremap <silent> <A-Down> :wincmd j<CR> nnoremap <silent> <A-Down> :wincmd j<CR>
nnoremap <silent> <A-Left> :wincmd h<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> nmap <S-F4> :split<CR>:exec("tjump ".expand("<cword>"))<CR>
" trigger NERDTree, Tagbar $ Co. " trigger NERDTree, Tagbar $ Co.
nmap <leader>n <Esc>:NERDTreeToggle<CR> " nmap <leader>n <Esc>:NERDTreeToggle<CR>
nmap <leader>t <Esc>:TagbarToggle<CR> " nmap <leader>t <Esc>:TagbarToggle<CR>
" nmap <leader>f "zyaw :exe ":Ack ".@z.""<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 " grep word under cursor
nnoremap <silent><leader>f :lgr! "\b<C-R><C-W>\b"<CR>:cw<CR> 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 " F keys
nmap <F2> :noh<CR> " nmap <F2> :noh<CR>
imap <F2> <C-O>: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>
noremap <F5> :FufBuffer<CR> noremap <F5> :FufBuffer<CR>
nmap <F7> :call ManCurrentWord()<CR><CR> nmap <F7> :call ManCurrentWord()<CR><CR>
nmap <F8> :call DevHelpCurrentWord()<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 <F4> <C-]> " 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 " remap visual block
nnoremap <S-C> <c-v> nnoremap <S-C> <c-v>
@ -280,52 +271,113 @@ inoremap <C-V> <C-O>:call Paste("i")<CR>
nnoremap <C-A> ggVG<CR> nnoremap <C-A> ggVG<CR>
inoremap <C-A> <C-O>:call Select()<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 " fzf
nnoremap <leader>ag :call fzf#vim#ag(expand('<cword>'), WithGitRoot())<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 <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 " gitgutter
nmap <leader>ggt <Esc>:GitGutterToggle<CR> nmap <leader>ggt <Esc>:GitGutterToggle<CR>
nmap <leader>nh <Plug>(GitGutterNextHunk) nmap <leader>nh <Plug>(GitGutterNextHunk)
nmap <leader>bh <Plug>(GitGutterPrevHunk) nmap <leader>bh <Plug>(GitGutterPrevHunk)
" ctrlp " tig
let g:ctrlp_prompt_mappings = { " let g:tig_explorer_keymap_edit = '<C-x>'
\ 'PrtBS()': ['<bs>', '<c-]>'], " let g:tig_explorer_keymap_tabedit = '<C-t>'
\ 'PrtDelete()': ['<del>'], " let g:tig_explorer_keymap_split = '<C-s>'
\ 'PrtDeleteWord()': ['<c-w>'], " let g:tig_explorer_keymap_vsplit = '<C-v>'
\ 'PrtClear()': ['<c-u>'], " nnoremap <Leader>T :TigOpenCurrentFile<CR>
\ 'PrtSelectMove("j")': ['<c-e>', '<down>'], " nnoremap <Leader>t :TigOpenProjectRootDir<CR>
\ 'PrtSelectMove("k")': ['<c-o>', '<up>'], " nnoremap <Leader>g :TigGrep<CR>
\ 'PrtSelectMove("t")': ['<Home>', '<kHome>'], " nnoremap <Leader>r :TigGrepResume<CR>
\ 'PrtSelectMove("b")': ['<End>', '<kEnd>'], " vnoremap <Leader>g y:TigGrep<Space><C-R>"<CR>
\ 'PrtSelectMove("u")': ['<PageUp>', '<kPageUp>'], " nnoremap <Leader>cg :<C-u>:TigGrep<Space><C-R><C-W><CR>
\ 'PrtSelectMove("d")': ['<PageDown>', '<kPageDown>'], " nnoremap <Leader>b :TigBlame<CR>
\ '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>'],
\ }
" 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>

44
vimrc
View File

@ -7,10 +7,11 @@ set shortmess+=A
filetype plugin on filetype plugin on
filetype indent 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 set cmdheight=1
let g:ctrlp_map = '<c-j>' set wildmenu
" set wildmode=longest,list,full
" vim-plug settings (Plugin declaration) " vim-plug settings (Plugin declaration)
call plug#begin('~/.vim/plugged') call plug#begin('~/.vim/plugged')
@ -23,11 +24,12 @@ Plug 'vim-scripts/genindent.vim'
" Plug 'idris-hackers/idris-vim' " Plug 'idris-hackers/idris-vim'
"Plug 'yegappan/mru' "Plug 'yegappan/mru'
Plug 'scrooloose/nerdcommenter' 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 'vim-scripts/promela.vim'
"Plug 'AndrewRadev/simple_bookmarks.vim' "Plug 'AndrewRadev/simple_bookmarks.vim'
"Plug 'Keithbsmiley/swift.vim' "Plug 'Keithbsmiley/swift.vim'
Plug 'majutsushi/tagbar' " Plug 'majutsushi/tagbar'
"Plug 'ternjs/tern_for_vim' "Plug 'ternjs/tern_for_vim'
Plug 'xolox/vim-easytags' Plug 'xolox/vim-easytags'
Plug 'xolox/vim-misc' Plug 'xolox/vim-misc'
@ -36,10 +38,10 @@ Plug 'Shougo/vimproc.vim', {'do' : 'make'}
Plug 'sjbach/lusty' Plug 'sjbach/lusty'
" Plug 'vim-airline/vim-airline' " Plug 'vim-airline/vim-airline'
" Plug 'vim-airline/vim-airline-themes' " Plug 'vim-airline/vim-airline-themes'
Plug 'kien/ctrlp.vim'
Plug 'nixprime/cpsm', { 'do': 'PY3=ON ./install.sh' } Plug 'nixprime/cpsm', { 'do': 'PY3=ON ./install.sh' }
Plug 'junegunn/fzf', { 'do': './install --bin' } " Plug 'junegunn/fzf', { 'do': './install --bin' }
Plug 'junegunn/fzf.vim' " Plug 'junegunn/fzf.vim'
Plug 'liuchengxu/vista.vim'
Plug 'sbdchd/neoformat' Plug 'sbdchd/neoformat'
Plug 'AndrewRadev/bufferize.vim' Plug 'AndrewRadev/bufferize.vim'
" Plug 'vimwiki/vimwiki' " Plug 'vimwiki/vimwiki'
@ -49,6 +51,13 @@ Plug 'tpope/vim-scriptease'
Plug 'Konfekt/FastFold' Plug 'Konfekt/FastFold'
" Plug 'lambdalisue/vim-fullscreen' " Plug 'lambdalisue/vim-fullscreen'
Plug 'editorconfig/editorconfig-vim' 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 " scm
@ -101,6 +110,7 @@ Plug 'w0rp/ale', {
" completion based on ghc-mod, not LSP " completion based on ghc-mod, not LSP
" Plug 'eagletmt/neco-ghc', { 'for': 'haskell' } " Plug 'eagletmt/neco-ghc', { 'for': 'haskell' }
" Plug 'lukerandall/haskellmode-vim', { 'for': 'haskell' } " Plug 'lukerandall/haskellmode-vim', { 'for': 'haskell' }
" Plug 'axelf4/vim-haskell'
Plug 'neovimhaskell/haskell-vim', { 'for': ['haskell', 'cabal']} Plug 'neovimhaskell/haskell-vim', { 'for': ['haskell', 'cabal']}
" Plug 'ucsd-progsys/liquid-types.vim', { 'for': 'haskell' } " Plug 'ucsd-progsys/liquid-types.vim', { 'for': 'haskell' }
Plug 'bitc/lushtags', { Plug 'bitc/lushtags', {
@ -111,7 +121,9 @@ Plug 'bitc/lushtags', {
" Plug 'itchyny/vim-haskell-indent', { 'for': 'haskell' } " Plug 'itchyny/vim-haskell-indent', { 'for': 'haskell' }
" Plug 'dan-t/vim-hsimport', { 'for': 'haskell' } " Plug 'dan-t/vim-hsimport', { 'for': 'haskell' }
Plug 'Twinside/vim-hoogle', { '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'] } Plug 'luochen1990/rainbow', { 'for': ['clojure', 'haskell', 'python'] }
@ -160,6 +172,21 @@ endif
" Plug 'noahfrederick/vim-hemisu' " Plug 'noahfrederick/vim-hemisu'
" Plug 'morhetz/gruvbox' " 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 " unmanaged
Plug '~/.vim/unmanaged-vim-plug/bufonly' Plug '~/.vim/unmanaged-vim-plug/bufonly'
Plug '~/.vim/unmanaged-vim-plug/colorschemedegrade' Plug '~/.vim/unmanaged-vim-plug/colorschemedegrade'
@ -227,6 +254,7 @@ set shiftwidth=4
set directory=~/.vimtmp set directory=~/.vimtmp
set modeline set modeline
set modelines=1 set modelines=1
set autoindent
let g:nickID = 'hasufell' let g:nickID = 'hasufell'