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