" File : .vimrc " Author : dohq " Date : 21.01.2018 " Last Modified Date: 02.03.2018 " Last Modified By : dohq " init {{{ let s:MSWindows = has('win32') if s:MSWindows let $MYVIMDIR = expand($VIM.'/vimfiles') else let $MYVIMDIR = expand('~/.vim') endif " Startup time. if !v:vim_did_enter && has('reltime') let g:startuptime = reltime() augroup vimrc-startuptime autocmd! VimEnter * let g:startuptime = reltime(g:startuptime) \ | redraw \ | echomsg 'startuptime: ' . reltimestr(g:startuptime) augroup END endif " All autocmd reset augroup vimrc autocmd! augroup END " }}} " vimrc_local {{{ augroup vimrc-local autocmd! autocmd BufNewFile,BufReadPost * call s:vimrc_local(expand(':p:h')) augroup END function! s:vimrc_local(loc) let s:files = findfile('.vimrc.local', escape(a:loc, ' ') . ';', -1) for s:i in reverse(filter(s:files, 'filereadable(v:val)')) source `=i` endfor endfunction " }}} call plug#begin($MYVIMDIR.'/plugins') " exTools Plug 'tpope/vim-sensible' Plug 'ervandew/supertab' Plug 'glidenote/memolist.vim', {'on': ['MemoNew', 'MemoList' ,'MemoGrep']} Plug 'itchyny/vim-parenmatch' Plug 'justinmk/vim-dirvish' Plug 'vim-jp/vimdoc-ja' Plug 'mhinz/vim-grepper', {'on': ['Grepper', '(GrepperOperator)']} Plug 'tyru/eskk.vim' " Input Assist if has('nvim') Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } Plug 'Shougo/neco-vim' Plug 'zchee/deoplete-jedi' else Plug 'maralla/completor.vim' endif Plug 'SirVer/ultisnips' Plug 'honza/vim-snippets' Plug 'cohama/lexima.vim' Plug 'bronson/vim-trailing-whitespace', {'on': 'FixWhitespace'} Plug 'mattn/sonictemplate-vim' Plug 'easymotion/vim-easymotion' Plug 'AndrewRadev/switch.vim' Plug 'junegunn/vim-easy-align' Plug 'osyo-manga/vim-over', {'on': 'OverCommandLine'} Plug 'tpope/vim-surround' Plug 'tyru/caw.vim' Plug 'tpope/vim-speeddating' " Plug 'wakatime/vim-wakatime' Plug 'lambdalisue/vim-unified-diff' Plug 'kana/vim-operator-user' Plug 'mbbill/undotree' " Visual Plug 'chriskempson/base16-vim' Plug 'itchyny/lightline.vim' Plug 'felixjung/vim-base16-lightline' Plug 'Yggdroot/indentLine' Plug 'ryanoasis/vim-devicons' Plug 'rhysd/try-colorscheme.vim' Plug 'cocopon/iceberg.vim' Plug 'morhetz/gruvbox' " QuickRun Plug 'thinca/vim-quickrun' Plug 'osyo-manga/shabadou.vim' " Test Plug 'janko-m/vim-test' Plug 'tpope/vim-dispatch' Plug 'tlvince/vim-compiler-python' " Twitter Plug 'basyura/TweetVim' Plug 'basyura/twibill.vim' Plug 'tyru/open-browser.vim' Plug 'mattn/webapi-vim' " Syntax Check Plug 'w0rp/ale' " Git Plug 'airblade/vim-gitgutter' Plug 'tpope/vim-fugitive' Plug 'lambdalisue/vim-gista', {'on': 'Gista'} Plug 'lambdalisue/gina.vim' " CtrlP Plug 'ctrlpvim/ctrlp.vim' Plug 'FelikZ/ctrlp-py-matcher' Plug 'mattn/ctrlp-launcher' Plug 'mattn/ctrlp-register' Plug 'suy/vim-ctrlp-commandline' Plug 'tacahiroy/ctrlp-funky' Plug 'zeero/vim-ctrlp-help' Plug 'mattn/ctrlp-filer' Plug 'mattn/ctrlp-ghq' " Python Plug 'kana/vim-textobj-user' Plug 'bps/vim-textobj-python', {'for': 'python'} Plug 'cjrh/vim-conda', {'for': 'python'} Plug 'hynek/vim-python-pep8-indent', {'for': 'python'} Plug 'jmcantrell/vim-virtualenv', {'for': 'python'} Plug 'lambdalisue/vim-django-support', {'for': 'python'} Plug 'vim-python/python-syntax', {'for': 'python'} Plug 'davidhalter/jedi-vim', {'for': 'python'} " Markdown Plug 'rcmdnk/vim-markdown', {'for': 'markdown'} Plug 'rcmdnk/vim-markdown-quote-syntax', {'for': 'markdown'} Plug 'kazuph/previm', {'for': 'markdown', 'branch': 'feature/add-plantuml-plugin'} " UML Plug 'aklt/plantuml-syntax', {'for': 'plantuml'} " json Plug 'elzr/vim-json', {'for': 'json'} " go Plug 'fatih/vim-go', {'for': 'go', 'do': ':GoInstallBinaries'} " yaml Plug 'chase/vim-ansible-yaml', {'for': 'yml'} Plug 'stephpy/vim-yaml', {'for': 'yml'} " Plug 'thinca/vim-showtime', {'on': 'ShowtimeStart'} Plug 'y0za/vim-reading-vimrc' Plug 'alpertuna/vim-header' call plug#end() "---------------------------------------- " Option Settings "---------------------------------------- " color {{{ set t_Co=256 colorscheme iceberg "}}} " set plugin stop {{{ let g:loaded_matchparen = 1 let g:loaded_gzip = 1 let g:loaded_tar = 1 let g:loaded_tarPlugin = 1 let g:loaded_zip = 1 let g:loaded_zipPlugin = 1 let g:loaded_rrhelper = 1 let g:loaded_2html_plugin = 1 let g:loaded_vimball = 1 let g:loaded_vimballPlugin = 1 let g:loaded_getscript = 1 let g:loaded_getscriptPlugin = 1 let g:loaded_netrw = 1 let g:loaded_netrwPlugin = 1 let g:loaded_netrwSettings = 1 let g:loaded_netrwFileHandlers = 1 " }}} " Encoding {{{ set encoding=utf8 scriptencoding utf-8 set fileencodings=ucs-bom,utf-8,iso-2022-jp,euc-jp,cp932,utf-16le,utf-16,default,latin1,utf-8 " }}} " set opt {{{ set ambiwidth=double set cmdheight=2 set completeopt-=preview set cursorline set display=lastline set expandtab set foldmethod=marker set helplang=ja,en set hlsearch set ignorecase set imdisable set incsearch set list set listchars=tab:>.,extends:>,precedes:<,trail:- set nobackup noswapfile set noequalalways set novisualbell set noautoindent set nosmartindent set nrformats-=octal set shortmess+=atI set smartcase set splitbelow set splitright set tabstop=2 shiftwidth=2 softtabstop=2 set ttyfast set whichwrap=b,s,[,],<,> set wildignore=*.o,*.obj,*.pyc,*.so,*.dll,*.exe,*.xlsx set wildmenu set wildmode=full " use clipboard if has('win32') set clipboard=unnamed, autoselect else set clipboard=unnamedplus endif " For snippet_complete marker. if has('conceal') set conceallevel=2 concealcursor=i endif if has('persistent_undo') set undodir=$MYVIMDIR/.undodir/ set undofile endif if !has('nvim') set termsize=15x0 endif if exists('+breakindent') set breakindent set breakindentopt=sbr set showbreak=< endif " }}} " Keybind {{{ let g:mapleader = ',' inoremap jj " InsertMode move cursor liught inoremap U " replace ; to : nnoremap ; : nnoremap : ; vnoremap ; : vnoremap : ; " disable allow key nnoremap nnoremap nnoremap nnoremap inoremap inoremap inoremap inoremap " buffer nnoremap :bprev nnoremap :bnext " " sudo write cnoremap w!! w !sudo tee > /dev/null % :e! " Move over wrapped lines nnoremap j v:count == 0 ? 'gj' : 'j' nnoremap k v:count == 0 ? 'gk' : 'k' " toggle fold nnoremap za " }}} "---------------------------------------- " Plugin Settings "---------------------------------------- " completor {{{ let g:completor_auto_trigger = 1 let g:completor_refresh_always = 0 let g:completor_set_options = 1 " }}} " deoplete {{{ let g:deoplete#enable_at_startup = 1 " }}} " ultisnips {{{ " Trigger configuration. let g:UltiSnipsExpandTrigger='' let g:UltiSnipsJumpForwardTrigger='' let g:UltiSnipsJumpBackwardTrigger='' " If you want :UltiSnipsEdit to split your window. let g:UltiSnipsEditSplit='vertical' "}}} " Quick-Run {{{ let g:quickrun_config = { \ '_' : { \ 'runner' : 'job', \ 'outputter' : 'error', \ 'hook/neco/enable' : 1, \ 'hook/neco/wait' : 10, \ 'outputter/error/success' : 'buffer', \ 'outputter/error/error' : 'quickfix', \ 'outputter/buffer/split' : ':botright 8sp', \ 'outputter/buffer/close_on_empty' : 1, \ 'outputter/buffer/into' : 1, \ 'outputter/quickfix/into' : 1, \ }, \} if s:MSWindows let g:quickrun_config = { \ 'python' : { \ 'hook/output_encode/enable' : 1, \ 'hook/output_encode/encoding' : 'cp932', \ }, \} endif let g:quickrun_no_default_key_mappings = 1 " Running with close quickfix and save file nnoremap r :cclose:write:QuickRun -mode n xnoremap r :cclose:writegv:QuickRun -mode v nnoremap quickrun#is_running() ? quickrun#sweep_sessions() : "" autocmd vimrc FileType qf nnoremap q :cclose command! -nargs=+ -complete=command Capture QuickRun -type vim -src " }}} " ale {{{ let g:ale_sign_error = '' let g:ale_sign_warning = '' let g:ale_sign_column_always = 1 let g:ale_lint_on_enter = 1 let g:ale_lint_on_save = 1 let g:ale_set_loclist = 0 let g:ale_set_quickfix = 0 let g:ale_open_list = 0 let g:ale_keep_list_window_open = 0 let g:ale_lint_on_text_changed = 'never' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' let g:ale_statusline_format = [' %d', ' %d', ' ok'] let g:ale_pattern_options = { \ '.*\.vim$': {'ale_enabled': 0}, \} nmap [ale] map [ale] " エラー行にジャンプ nmap [ale] (ale_previous) nmap [ale] (ale_next) " " }}} " lightline.vim{{{ let g:lightline = { \ 'colorscheme': 'iceberg', \ 'active': { \ 'left': [['mode', 'paste'], \ ['fugitive', 'filename']], \ 'right': [['lineinfo', 'validator'], \ ['fileformat', 'fileencoding', 'filetype']] \ }, \ 'component_function': { \ 'fugitive': 'Fugitive', \ 'validator': 'ALEGetStatusLine', \ 'filename': 'FileName', \ 'fileformat': 'Fileformat', \ 'filetype': 'FileType', \ 'fileencoding': 'FileEncoding', \ }, \} function! FileName() let s:name = expand('%:t') let s:name = s:name !=# '' ? s:name : '[No Name]' if s:name =~? 'netrw' return 'netrw' endif let s:readonly = &readonly ? ' ' : '' let s:modified = &modified ? ' ' : '' return s:readonly . s:name . s:modified endfunction function! Fugitive() try if &filetype !~? 'vimfiler\|gundo' && exists('*fugitive#head') && strlen(fugitive#head()) return '' . fugitive#head() endif catch endtry return '' endfunction function! FileType() return winwidth(0) > 70 ? (strlen(&filetype) ? &filetype . ' ' . WebDevIconsGetFileTypeSymbol() : 'no ft') : '' endfunction function! Fileformat() return winwidth(0) > 70 ? (&fileformat . ' ' . WebDevIconsGetFileFormatSymbol()) : '' endfunction function! FileEncoding() return winwidth('.') > 70 ? (strlen(&fileencoding) ? &fileencoding : &encoding) : '' endfunction function! ALEGetStatusLine() abort return ale#statusline#Status() endfunction " }}} " EasyAlign{{{ vnoremap :EasyAlign let g:easy_align_bypass_fold = 1 let g:easy_align_delimiters = { \ '>': { 'pattern': '>>\|=>\|>' }, \ '/': { \ 'pattern': '//\+\|/\*\|\*/', \ 'delimiter_align': 'l', \ 'ignore_groups': ['!Comment'] }, \ ']': { \ 'pattern': '[[\]]', \ 'left_margin': 0, \ 'right_margin': 0, \ 'stick_to_left': 0 \ }, \ ')': { \ 'pattern': '[()]', \ 'left_margin': 0, \ 'right_margin': 0, \ 'stick_to_left': 0 \ }, \ 'd': { \ 'pattern': ' \(\S\+\s*[;=]\)\@=', \ 'left_margin': 0, \ 'right_margin': 0 \ } \} " }}} " vim-easymotion{{{ let g:EasyMotion_do_mapping = 0 nmap s (easymotion-overwin-f2) let g:EasyMotion_keys = ';HKLYUIOPNM,QWERTASDGZXCVBJF' let g:EasyMotion_use_upper = 1 let g:EasyMotion_enter_jump_first = 1 let g:EasyMotion_space_jump_first = 1 " }}} " ESKK {{{ let g:eskk#enable_completion = 0 let g:eskk#directory = expand($MYVIMDIR.'/.cache/eskk') let g:eskk#large_dictionary = { \ 'path': $MYVIMDIR.'/skk/SKK-JISYO.L', \ 'sorted': 1, \} " Don't keep state. let g:eskk#keep_state = 0 let g:eskk#show_annotation = 0 let g:eskk_revert_henkan_style = 'okuri' let g:eskk#egg_like_newline = 1 let g:eskk#egg_like_newline_completion = 1 "allow InsertMode toggle ESKK augroup eskk autocmd! autocmd eskk VimEnter * imap (eskk:toggle) autocmd eskk VimEnter * cmap (eskk:toggle) augroup END "}}} " Git {{{ let g:gitgutter_enabled = 1 let g:gitgutter_sign_added = '' let g:gitgutter_sign_modified = '' let g:gitgutter_sign_removed = '' nnoremap [Git] nmap g [Git] nnoremap [Git]g :GitGutterToggle nnoremap [Git]n :GitGutterNextHunk nnoremap [Git]p :GitGutterPrevHunk " vim-fugitive nnoremap [Git]a :Gwrite nnoremap [Git]m :Gcommit -v nnoremap [Git]s :Gstatus nnoremap [Git]d :Gdiff nnoremap [Git]b :Gita branch " }}} " vim-go {{{ " highlight error augroup hierr autocmd! autocmd FileType go :highlight goErr cterm=bold ctermfg=214 autocmd FileType go :match goErr /\/ augroup END let g:go_highlight_functions = 1 let g:go_highlight_methods = 1 let g:go_highlight_structs = 1 let g:go_highlight_interfaces = 1 let g:go_highlight_operators = 1 let g:go_highlight_build_constraints = 1 let g:go_fmt_command = 'goimports' " }}} " vim-indent-line {{{ let g:indentLine_setColors = 1 let g:indentLine_setConceal = 1 let g:indentLine_faster = 1 let g:indentLine_color_term = 111 let g:indentLine_color_gui = '#708090' let g:indentLine_char = '¦' let g:indentLine_fileTypeExclude = ['tweetvim', 'help'] " }}} " over.vim {{{ nnoremap o :OverCommandLine " }}} " Twit {{{ " open-browser.vim let g:netrw_nogx = 1 nmap gx (openbrowser-smart-search) vmap gx (openbrowser-smart-search) autocmd vimrc FileType twitvim call s:twitvim_my_settings() function! s:twitvim_my_settings() set nowrap endfunction let g:tweetvim_display_source = 1 let g:tweetvim_open_buffer_cmd = 'split' let g:tweetvim_display_separator = 1 let g:tweetvim_empty_separator = 1 "KeyMapping nnoremap [TweetVim] nmap w [TweetVim] nnoremap [TweetVim]s :TweetVimSay nnoremap [TweetVim]h :TweetVimHomeTimeline nnoremap [TweetVim]m :TweetVimMentions nnoremap [TweetVim]u :TweetVimUserTimeline dohq nnoremap [TweetVim]f :TweetVimSearch " }}} " Memolist{{{ " The prefix key. nnoremap [memo] nmap m [memo] " unite.vim keymap nnoremap [memo]n :MemoNew nnoremap [memo]l :exe "CtrlP" g:memolist_path nnoremap [memo]g :MemoGrep let g:memolist_memo_suffix = 'md' let g:memolist_path = '~/Dev/memo' let g:memolist_unite = 1 let g:memolist_unite_option = '-start-insert' "}}} "CtrlP {{{ nnoremap [CtrlP] nmap u [CtrlP] nnoremap [CtrlP]u :CtrlP nnoremap [CtrlP]g :CtrlPGhq nnoremap [CtrlP]b :CtrlPBuffer nnoremap [CtrlP]f :CtrlPFunky nnoremap [CtrlP]m :CtrlPMRU nnoremap [CtrlP]r :CtrlPRegister nnoremap [CtrlP]t :CtrlPTag nnoremap [CtrlP]l :CtrlPLauncher nnoremap [CtrlP]h :CtrlPHelp nnoremap [CtrlP]c :call ctrlp#init(ctrlp#commandline#id()) nnoremap [CtrlP]e :e $MYVIMRC let g:ctrlp_use_caching = 0 let g:ctrlp_user_command = 'files -a %s' let g:ctrlp_match_func = { 'match': 'pymatcher#PyMatch' } let g:ctrlp_lazy_update = 0 let g:ctrlp_map = '' " Guess vcs root dir let g:ctrlp_working_path_mode = 'ra' " Open new file in current window let g:ctrlp_open_new_file = 'r' let g:ctrlp_match_window = 'order:ttb,max:10' "}}} " Python {{{ autocmd vimrc FileType python setlocal omnifunc=jedi#completions let g:python_highlight_all = 1 let g:jedi#completions_enabled = 1 let g:jedi#goto_command = 'g' let g:jedi#documentation_command = 'k' let g:jedi#usages_command = 'n' let g:jedi#completions_command = '' let g:jedi#rename_command = 'R' let g:jedi#show_call_signatures = '2' let g:jedi#popup_on_dot = 0 let g:jedi#popup_select_first = 0 " vim-conda let g:conda_startup_msg_suppress = 1 nnoremap s :Switch " }}} " caw.vim {{{ nmap c (caw:hatpos:toggle) vmap c (caw:hatpos:toggle) " }}} " Previm {{{ let g:previm_enable_realtime = 1 let g:netrw_nogx = 1 nmap gx (openbrowser-smart-search) vmap gx (openbrowser-smart-search) if s:MSWindows autocmd BufNewFile,BufRead *.md set shellslash endif " }}} " FixWhitespace {{{ let g:extra_whitespace_ignored_filetypes = ['markdown', 'J6uil', 'vim-plug', 'tweetvim', 'help'] " }}} " SuperTab {{{ let g:SuperTabContextDefaultCompletionType = '' let g:SuperTabDefaultCompletionType = '' " }}} " vim-ref {{{ let g:ref_phpmanual_path = $MYVIMDIR.'/doc/php-chunked-xhtml' " }}} " lexima {{{ inoremap =lexima#insmode#leave(1, 'C-G>URIGHT>') " }}} " Grepper {{{ cnoremap cnoremap let g:grepper = {} let g:grepper.tools = ['rg', 'git', 'pt', 'ag'] let g:grepper.jump = 0 let g:grepper.simple_prompt = 1 let g:grepper.quickfix = 1 " }}} " vim-header {{{ let g:header_field_author = 'dohq' let g:header_field_author_email = 'dorastone@gmail.com' let g:header_auto_add_header = 0 " }}} " user command {{{ " auto-cursorline {{{ augroup vimrc-auto-cursorline autocmd! autocmd CursorMoved,CursorMovedI * call s:auto_cursorline('CursorMoved') autocmd CursorHold,CursorHoldI * call s:auto_cursorline('CursorHold') autocmd WinEnter * call s:auto_cursorline('WinEnter') autocmd WinLeave * call s:auto_cursorline('WinLeave') let s:cursorline_lock = 0 function! s:auto_cursorline(event) if a:event ==# 'WinEnter' setlocal cursorline let s:cursorline_lock = 2 elseif a:event ==# 'WinLeave' setlocal nocursorline elseif a:event ==# 'CursorMoved' if s:cursorline_lock if 1 < s:cursorline_lock let s:cursorline_lock = 1 else setlocal nocursorline let s:cursorline_lock = 0 endif endif elseif a:event ==# 'CursorHold' setlocal cursorline let s:cursorline_lock = 1 endif endfunction augroup END " }}} " past to ix.io {{{ command! -range=% SP execute . "," . . \ "w !curl -F 'f:1=<-' ix.io | tr -d '\\n'" " http://snippetrepo.com/snippets/filter-quickfix-list-in-vim " }}} " disable uncomment newline {{{ augroup auto_comment_off autocmd! autocmd BufEnter * setlocal formatoptions-=ro augroup END " }}} " qf filet {{{ command! -bang -nargs=1 -complete=file QFilter call \ s:FilterQuickfixList(0, ) " }}} " }}} let g:test#strategy = 'dispatch' let g:vim_json_syntax_conceal = 0 let g:vim_markdown_conceal = 0 let g:vim_markdown_folding_disabled = 1 vmap (reading_vimrc-update_clipboard)