" ---------------------------------------- " Author: Rintaro Okamura " Source: https://github.com/rinx/dotfiles " ---------------------------------------- " not vi compatible if &compatible set nocompatible endif " encoding set encoding=utf-8 scriptencoding utf-8 set fileencodings=ucs-bom,utf-8,iso-2022-jp,euc-jp,cp932,sjis " Anywhere SID. function! s:SID_PREFIX() return matchstr(expand(''), '\d\+_\zeSID_PREFIX$') endfunction let g:vimrc_private = {} let s:vimrc_private_filename = '~/.vimrc_private' if filereadable(expand(s:vimrc_private_filename)) execute 'source' expand(s:vimrc_private_filename) else call system('touch ' . expand(s:vimrc_private_filename)) endif unlet s:vimrc_private_filename if has('nvim') if executable('python2') let g:python_host_prog = substitute(system('which python2'),"\n","","") endif if executable('python3') let g:python3_host_prog = substitute(system('which python3'),"\n","","") endif endif " --- Plugin settings if has('nvim') function! s:init_deoplete_hook_source() abort let g:deoplete#enable_at_startup = 1 let g:deoplete#enable_ignore_case = 1 let g:deoplete#enable_smart_case = 1 let g:deoplete#enable_camel_case = 1 let g:deoplete#enable_reflesh_always = 0 let g:deoplete#auto_complete_start_length = 2 let g:deoplete#auto_complete_delay = 0 let g:deoplete#enable_profile = 0 let g:deoplete#max_list = 300 let g:deoplete#max_abbr_width = 100 let g:deoplete#max_menu_width = 60 let g:deoplete#auto_refresh_delay = 50 let g:deoplete#keyword_patterns = {} let g:deoplete#keyword_patterns.tex = '\\?[a-zA-Z_]\w*' let g:deoplete#keyword_patterns.clojure = '[\w!$%&*+/:<=>?@\^_~\-\.#]*' let g:deoplete#omni_patterns = {} endfunction function! s:init_deoplete_hook_add() abort inoremap deoplete#manual_complete() inoremap l deoplete#manual_complete(['look']) inoremap deoplete#undo_completion() inoremap deoplete#complete_common_string() endfunction else function! s:init_neocomplete_hook_source() abort let g:neocomplete#enable_at_startup = 1 let g:neocomplete#min_keyword_length = 3 let g:neocomplete#sources#syntax#min_keyword_length = 3 let g:neocomplete#auto_completion_start_length = 2 let g:neocomplete#manual_completion_start_length = 0 let g:neocomplete#enable_smart_case = 1 let g:neocomplete#enable_camel_case = 1 let g:neocomplete#enable_fuzzy_completion = 1 let g:neocomplete#enable_auto_select = 0 let g:neocomplete#enable_refresh_always = 0 let g:neocomplete#enable_cursor_hold_i = 0 let g:neocomplete#enable_auto_delimiter = 1 let g:neocomplete#max_list = 80 if !exists('g:neocomplete#keyword_patterns') let g:neocomplete#keyword_patterns = {} endif let g:neocomplete#keyword_patterns._ = '\h\w*' if !exists('g:neocomplete#sources#omni#input_patterns') let g:neocomplete#sources#omni#input_patterns = {} endif let g:neocomplete#sources#omni#input_patterns.ruby = '[^. *\t]\.\h\w*\|\h\w*::' if !exists('g:neocomplete#force_omni_input_patterns') let g:neocomplete#force_omni_input_patterns = {} endif let g:neocomplete#force_omni_input_patterns.ruby = '[^. *\t]\.\h\w*\|\h\w*::' if !exists('g:neocomplete#sources#dictionary#dictionaries') let g:neocomplete#sources#dictionary#dictionaries = {} endif let g:neocomplete#enable_auto_close_preview = 1 let g:neocomplete#text_mode_filetypes = { \ 'hybrid' : 1, \ 'text' : 1, \ 'help' : 1, \ 'tex' : 1, \ 'latex' : 1, \ 'plaintex' : 1, \ 'gitcommit' : 1, \ 'gitrebase' : 1, \ 'vcs-commit' : 1, \ 'markdown' : 1, \ 'mkd' : 1, \ 'textile' : 1, \ 'creole' : 1, \ 'org' : 1, \ 'rdoc' : 1, \ 'mediawiki' : 1, \ 'rst' : 1, \ 'asciidoc' : 1, \ 'pod' : 1, \ 'gita-commit' : 1, \ 'gina-commit' : 1, \} endfunction function! s:init_neocomplete_hook_add() abort inoremap neocomplete#start_manual_complete() inoremap neocomplete#undo_completion() inoremap neocomplete#complete_common_string() inoremap l neocomplete#start_manual_complete('look') endfunction endif function! s:init_deoplete_clang_hook_source() abort if has('mac') let g:deoplete#sources#clang#libclang_path = '/usr/local/opt/llvm/lib/libclang.dylib' let g:deoplete#sources#clang#clang_header = '/usr/local/opt/llvm/lib/clang' elseif has('unix') let g:deoplete#sources#clang#libclang_path = '/usr/lib64/llvm/libclang.so' let g:deoplete#sources#clang#clang_header = '/usr/lib/clang' endif endfunction function! s:init_neosnippet_hook_add() abort imap (neosnippet_expand_or_jump) smap (neosnippet_expand_or_jump) " Tell Neosnippet about the other snippets if has('nvim') let reporoot = '~/.config/nvim/dein' else let reporoot = '~/.vim/dein' endif let g:neosnippet#snippets_directory = [ \ expand(reporoot . '/repos/github.com/honza/vim-snippets/snippets'), \ expand(reporoot . '/repos/github.com/Shougo/neosnippet-snippets/neosnippets'), \ expand('~/.vim/my-snippets'), \] unlet reporoot let g:neosnippet#enable_snipmate_compatibility = 1 let g:neosnippet#disable_runtime_snippets = { \ "_": 1, \} augroup vimrc-neosnippet autocmd FileType neosnippet setlocal noexpandtab augroup END endfunction function! s:init_vaffle_hook_add() abort nnoremap [vaffle] nmap ,v [vaffle] nnoremap [vaffle] :Vaffle let g:vaffle_auto_cd = 0 let g:vaffle_force_delete = 0 let g:vaffle_show_hidden_files = 1 let g:vaffle_use_default_mappings = 1 endfunction function! s:init_arpeggio_hook_add() abort call arpeggio#load() endfunction " denite.nvim and unite.vim configures if has('mac') let s:copyToClipboardCommand = 'w !pbcopy' elseif has('unix') let s:copyToClipboardCommand = 'w !xsel --clipboard --input' endif let s:unite_denite_shortcut_candidates = [ \ ['quickrun', 'QuickRun'], \ ['make(quickrun)', 'QuickRun make'], \ ['watchdogs', 'WatchdogsRun'], \ ['UNDOtree', 'UndotreeToggle'], \ ['NERDTree', 'NERDTreeToggle'], \ ['map', 'Denite output:map'], \ ['register', 'Denite output:register'], \ ['reload .vimrc', 'source ~/.vimrc'], \ ['make Session.vim', 'mks!'], \ ['toggle-options', 'Denite menu:toggle'], \ ['denite neosnippet', 'Denite unite:neosnippet'], \ ['denite gista', 'Denite unite:gista'], \ ['denite codic', 'Denite unite:codic'], \ ['denite radiko', 'Denite unite:radiko'], \ ['stop radiko', 'RadikoStop'], \ ['denite RN2-musics', 'Denite unite:rn2musics'], \ ['skk-kutouten-type-en', 'let g:skk_kutouten_type = "en"'], \ ['skk-kutouten-type-jp', 'let g:skk_kutouten_type = "jp"'], \ ['PreVim open', 'PreVimOpen'], \ ['copy buffer into clipboard', s:copyToClipboardCommand], \] let s:unite_denite_kaomoji_dictionary = [ \ ["wahhab", "( っ'ヮ'c)"], \ ["wahhab", "三( っ'ヮ'c)"], \ ["wahhab", "(っ'ヮ')っ"], \ ["wahhab", "(((っ'ヮ')っ"], \ ["wahhab", "( っ'ヮ'c)❤"], \ ["talk", "( っ'ヮ'c)💬"], \ ["sing", "( っ'ヮ'c)~♪"], \ ["thinking", "( っ˘ヮ˘c).。oO(…)"], \ ["thinking", "( っ˘ヮ˘c)💭"], \ ["sleep", "( っ˘ヮ˘c)💤"], \ ["sunglasses", "( っ🕶c)"], \ ["no smoking", "(っ'ヮ')っ🚭"], \ ["", "( 'ω').。oO(…)"], \ ["kyun", "(*/ω\*)"], \ ["kyun", "(っ´ω`c)♡"], \ ["namida", "\.˚‧º·(´ฅωฅ`)‧º·˚."], \ ["namida", "(☍﹏⁰)"], \ ["namida", "( ˃﹏˂ഃ )"], \ ["hawawa", "。゚(゚∩´﹏`∩゚)゚。"], \ ["hawawa", "\:;( っ'﹏'c);:"], \ ["hawawa", "\:;( っ'ω'c);:"], \ ["hawawa", "\:;(∩´﹏`∩);:"], \ ["hawawa", "。+゚(∩´﹏`∩)゚+。"], \ ["dame", "(乂'ω')"], \ ["hawawa", "(っ´﹏`c)"], \ ["hawawa", "(。>﹏<。)"], \ ["awawa", "ヾ(∂╹Δ╹)ノ”"], \ ["firstspring", "(╯•﹏•╰)"], \ ["fuee", "ヾ(。>﹏<)ノ\""], \ ["fuee", "✧*。ヾ(。>﹏<。)ノ゙。*✧"], \ ["ja-n", "٩( 'ω' )و"], \ ["ja-n", "٩(*'ω'*)و"], \ ["ja-n", "\\\\٩( 'ω' )و ///"], \ ["crow", "( っ'ω'c)"], \ ["crow", "三( っ'ω'c)"], \ ["crow", "( っ˘ω˘c)"], \ ["poyo", "(。・﹏・。)"], \ ["mogumogu", "(∩´〰`∩)"], \ ["mogumogu", "ŧ‹\"ŧ‹\"(๑´ㅂ`๑)ŧ‹\"ŧ‹\""], \ ["pero", "(๑´ڡ`๑)"], \ ["juru", "(๑╹﹃╹)"], \ ["makimono", "(๑╹◡╹)o[]o"], \ ["matomo", "σ(o'v'o)まとも"], \ ["pei", "(っ`ω´c)"], \ ["chu", "(っ>ω<c)"], \ ["chu", "°+♡:.(っ>ω! set ? let s:unite_denite_toggle_options = [ \ "paste", \ "rule", \ "number", \ "relativenumber", \ "list", \ "hlsearch", \ "wrap", \ "spell", \ "cursorline", \ "cursorcolumn", \] function! s:init_denite_hook_source() abort if !exists('s:denite_source_menu') let s:denite_source_menu = {} endif let s:denite_source_menu.shortcut = { \ 'description' : 'shortcut' \} function! s:denite_source_menu_shortcut_mapper(value) let [word, value] = a:value if isdirectory(value) return [word, value] elseif !empty(glob(value)) return [word, value] elseif value =~ '^\(http\|https\|ftp\).*' return [word, 'OpenBrowser' . value] else return [word, value] endif endfunction let s:denite_source_menu.shortcut.command_candidates = \ map(copy(s:unite_denite_shortcut_candidates), 's:denite_source_menu_shortcut_mapper(v:val)') let s:denite_source_menu.toggle = { \ 'description' : 'toggle menus', \} let s:denite_source_menu.toggle.command_candidates = \ map(copy(s:unite_denite_toggle_options), '[v:val, "ToggleOption " . v:val]') let s:denite_source_menu.kaomoji = { \ 'description' : 'kaomoji dictionary', \} function! s:denite_source_menu_kaomoji_mapper(value) let [word, value] = a:value if !empty(word) let _ = "[" . word . "] " else let _ = "[no pronounciation] " endif return [_ . value, "call append(line('.'), \"" . escape(value, "/\"'") . "\")"] endfunction let s:denite_source_menu.kaomoji.command_candidates = \ map(copy(s:unite_denite_kaomoji_dictionary), 's:denite_source_menu_kaomoji_mapper(v:val)') call denite#custom#var('menu', 'menus', s:denite_source_menu) call denite#custom#alias('source', 'file/rec/git', 'file/rec') call denite#custom#var('file/rec/git', 'command', ['git', 'ls-files', '-co', '--exclude-standard']) call denite#custom#alias('source', 'file/rec/all', 'file/rec') if executable('rg') call denite#custom#var('file/rec', 'command', \ ['rg', '--files', '--glob', '!.git']) call denite#custom#var('file/rec/all', 'command', \ ['rg', '--files', '--no-ignore', '--hidden']) call denite#custom#var('grep', 'command', \ ['rg', '--threads', '1']) call denite#custom#var('grep', 'recursive_opts', []) call denite#custom#var('grep', 'final_opts', []) call denite#custom#var('grep', 'separator', ['--']) call denite#custom#var('grep', 'default_opts', \ ['--vimgrep', '--no-heading']) endif " custom key mappings call denite#custom#map('insert', '', '') call denite#custom#map('insert', '', '') call denite#custom#map('insert', '', '') call denite#custom#map('insert', '', '') call denite#custom#map('normal', 'sh', '') call denite#custom#map('normal', 'sj', '') call denite#custom#map('normal', 'sk', '') call denite#custom#map('normal', 'sl', '') call denite#custom#map('normal', 'sw', '') call denite#custom#map('normal', 'sW', '') call denite#custom#map('normal', 'st', '') call denite#custom#map('normal', 'sb', '') call denite#custom#map('normal', 'sp', '') call denite#custom#option('default', 'auto_accel', v:true) call denite#custom#option('default', 'auto_resize', v:true) call denite#custom#option('default', 'vertical_preview', v:true) call denite#custom#option('default', 'prompt', '>') endfunction function! s:init_denite_hook_add() abort nnoremap [denite] nmap ,u [denite] " buffer nnoremap [denite]b :Denite buffer " command hisotory & commands nnoremap [denite]c :Denite command_history command " file under current directory nnoremap [denite]f :Denite file/rec nnoremap [denite]pf :Denite file/rec -auto-preview nnoremap [denite]gf :Denite file/rec/git nnoremap [denite]af :Denite file/rec/all " recently files nnoremap [denite]mr :Denite file_mru " buffer and file nnoremap [denite]o :Denite buffer file/rec " register nnoremap [denite]r :Denite register " menu nnoremap [denite]ms :Denite menu:shortcut nnoremap [denite]mk :Denite menu:kaomoji " jumps nnoremap [denite]j :Denite jump -auto-highlight " line search nnoremap [denite]/ :Denite line -buffer-name=search -auto-highlight nnoremap [denite]r/ :Denite line -buffer-name=search -auto-highlight -resume -refresh " grep nnoremap [denite]g :Denite grep -buffer-name=grep nnoremap [denite]rg :Denite grep -buffer-name=grep -resume " filetype nnoremap [denite]t :Denite filetype endfunction function! s:init_unite_hook_source() abort let g:unite_force_overwrite_statusline = 0 let g:unite_enable_start_insert = 0 let g:unite_source_history_yank_enable = 1 let g:unite_source_history_yank_limit = 1000 let g:unite_prompt = '> ' if !exists('g:unite_source_menu_menus') let g:unite_source_menu_menus = {} endif let g:unite_source_menu_menus.shortcut = { \ 'description' : 'shortcut' \} let g:unite_source_menu_menus.shortcut.candidates = s:unite_denite_shortcut_candidates function! g:unite_source_menu_menus.shortcut.map(key, value) let [word, value] = a:value if isdirectory(value) return { \ 'word' : '[directory] '.word, \ 'kind' : 'directory', \ 'action__directory' : value, \} elseif !empty(glob(value)) return { \ 'word' : '[file] '.word, \ 'kind' : 'file', \ 'default_action' : 'tabdrop', \ 'action__path' : value, \} elseif value =~ '^\(http\|https\|ftp\).*' return { \ 'word' : '[url] '.word, \ 'kind' : 'command', \ 'action__command' : 'OpenBrowser '.value, \} else return { \ 'word' : '[command] '.word, \ 'kind' : 'command', \ 'action__command' : value, \} endif endfunction let g:unite_source_menu_menus.toggle = { \ 'description' : 'toggle menus', \} let g:unite_source_menu_menus.toggle.command_candidates = {} for opt in s:unite_denite_toggle_options let g:unite_source_menu_menus.toggle.command_candidates[opt] = "ToggleOption " . opt endfor let g:unite_source_menu_menus.kaomoji = { \ 'description' : 'kaomoji dictionary', \} let g:unite_source_menu_menus.kaomoji.candidates = s:unite_denite_kaomoji_dictionary function! g:unite_source_menu_menus.kaomoji.map(key, value) let [word, value] = a:value if !empty(word) return { \ 'word' : '[' .word .'] ' .value, \ 'kind' : 'word', \ 'action__text' : value, \} else return { \ 'word' : '[no pronounciation] ' .value, \ 'kind' : 'word', \ 'action__text' : value, \} endif endfunction endfunction function! s:init_unite_hook_add() abort nnoremap [unite] nmap ,uu [unite] " buffer nnoremap [unite]b :Unite buffer " commands nnoremap [unite]c :Unite command " tab nnoremap [unite]t :Unite tab " file nnoremap [unite]f :UniteWithBufferDir -buffer-name=files file nnoremap [unite]fr :Unite file_rec " resume nnoremap [unite]r :UniteResume " register nnoremap [unite]rr :Unite -buffer-name=register register " recently files nnoremap [unite]mm :Unite file_mru:short nnoremap [unite]ml :Unite file_mru:long " menu nnoremap [unite]ms :Unite menu:shortcut nnoremap [unite]msd :Unite menu:shortcut -input=[directory]\ nnoremap [unite]msf :Unite menu:shortcut -input=[file]\ nnoremap [unite]msc :Unite menu:shortcut -input=[command]\ nnoremap [unite]msu :Unite menu:shortcut -input=[url]\ nnoremap [unite]mk :Unite menu:kaomoji -start-insert " source nnoremap [unite]s :Unite source " history nnoremap [unite]hy :Unite history/yank " thinca/vim-unite-history nnoremap [unite]hc :Unite history/command nnoremap [unite]hs :Unite history/search " Shougo/unite-outline nnoremap [unite]o :Unite outline nnoremap [unite]oq :Unite -no-quit -buffer-name=outline outline " tsukkee/unite-help nnoremap [unite]he :Unite -start-insert help " rinx/radiko nnoremap [unite]rdk :Unite radiko -no-quit nnoremap [unite]rn2 :Unite rn2musics -no-quit endfunction function! s:init_skk_hook_add() abort let g:skk_jisyo = '~/.skk-jisyo' if has('mac') let g:skk_large_jisyo = '/Library/Dictionaries/SKK/SKK-JISYO.L' elseif has('unix') let g:skk_large_jisyo = '/usr/share/skk/SKK-JISYO.L' endif let g:skk_auto_save_jisyo = 1 let g:skk_manual_save_jisyo_keys = "" let g:skk_external_prog = "" let g:skk_control_j_key = "" let g:skk_keep_state = 1 let g:skk_egg_like_newline = 1 let g:skk_show_annotation = 0 let g:skk_use_face = 0 let g:skk_initial_mode = "hira" let g:skk_marker_white = ">" let g:skk_marker_black = ">>" let g:skk_marker_okuri = "*" let g:skk_start_henkan_key = " " let g:skk_prev_cand_key = "x" let g:skk_purge_cand_key = "X" let g:skk_show_candidates_count = 3 let g:skk_completion_key = "\" let g:skk_next_comp_key = "." let g:skk_prev_comp_key = "," let g:skk_special_midasi_keys = "<>?" let g:skk_henkan_point_keys = "ABCDEFGHIJKMNOPRSTUVWYZ" let g:skk_select_cand_keys = "ASDFJKL" let g:skk_use_color_cursor = 0 let g:skk_cursor_hira_color = '#ff0000' let g:skk_cursor_kata_color = '#00ff00' let g:skk_cursor_zenei_color = '#ffcc00' let g:skk_cursor_ascii_color = '#ffffff' let g:skk_cursor_addrev_color = '#0000ff' let g:skk_sticky_key = ';' let g:skk_imdisable_state = 1 let g:skk_ascii_mode_string = 'aA' let g:skk_hira_mode_string = 'あ' let g:skk_kata_mode_string = 'ア' let g:skk_zenei_mode_string = 'A' let g:skk_abbrev_mode_string = 'aあ' let g:skk_kutouten_type = "en" let g:skk_kutouten_jp = "。、" let g:skk_kutouten_en = ".," " toggle skk-kutouten-type nnoremap k :call toggle_skk_kutouten_type() function! s:toggle_skk_kutouten_type() if g:skk_kutouten_type == "en" let g:skk_kutouten_type = "jp" echo "g:skk_kutouten_type has been changed as 'jp'" else let g:skk_kutouten_type = "en" echo "g:skk_kutouten_type has been changed as 'en'" endif endfunction endfunction function! s:init_eskk_hook_add() abort let g:eskk#dictionary = { \ 'path' : '~/.skk-jisyo', \ 'sorted' : 0, \ 'encoding' : 'euc_jp', \} if has('mac') let g:eskk#large_dictionary = { \ 'path' : '/Library/Dictionaries/SKK/SKK-JISYO.L', \ 'sorted' : 0, \ 'encoding' : 'euc_jp', \} elseif has('unix') let g:eskk#large_dictionary = { \ 'path' : '/usr/share/skk/SKK-JISYO.L', \ 'sorted' : 0, \ 'encoding' : 'euc_jp', \} endif let g:eskk#auto_save_dictionary_at_exit = 1 let g:eskk#dictionary_save_count = 10 let g:eskk#select_cand_keys = "asdfjkl" let g:eskk#show_candidates_count = 3 let g:eskk#kata_convert_to_hira_at_henkan = 1 let g:eskk#kata_convert_to_hira_at_completion = 1 let g:eskk#show_annotation = 0 let g:eskk#kakutei_when_unique_candidate = 1 let g:eskk#no_default_mappings = 0 let g:eskk#dont_map_default_if_already_mapped = 0 let g:eskk#statusline_mode_strings = { \ 'hira' : 'あ', \ 'kata' : 'ア', \ 'ascii' : 'aA', \ 'zenei' : 'a', \ 'hankata' : 'ァア', \ 'abbrev' : 'aあ', \} let g:eskk#marker_henkan = ">" let g:eskk#marker_okuri = "*" let g:eskk#marker_henkan_select =">>" let g:eskk#marker_jisyo_touroku = "?" let g:eskk#enable_completion = 1 let g:eskk#max_candidates = 15 let g:eskk#start_completion_length = 4 let g:eskk#register_completed_word = 1 let g:eskk#use_color_cursor = 0 " Maybe conflict with arpeggio.vim " let g:eskk#keep_state = 1 endfunction function! s:init_quickrun_hook_add() abort Arpeggio nmap qr (quickrun) let g:quickrun_config = { \ '_' : { \ 'outputter' : 'error', \ 'outputter/error/success' : 'buffer', \ 'outputter/error/error' : 'quickfix', \ 'outputter/buffer/close_on_empty' : 1, \ 'outputter/buffer/split' : ':botright 8sp', \ 'outputter/buffer/running_mark' : "now running...ヾ(⌒(_*'ω'*)_", \ 'runner' : 'vimproc', \ 'runner/vimproc/updatetime' : 60 \ }, \ 'cpp' : { \ 'type' : 'cpp/g++', \ }, \ 'cpp/clang++' : { \ 'hook/time/enable' : 1, \ }, \ 'cpp/g++' : { \ 'hook/time/enable' : 1, \ }, \ 'elm' : { \ 'command' : 'elm make', \ 'exec' : '%c %o', \ 'runner' : 'vimproc', \ }, \ 'fortran' : { \ 'type' : 'fortran/gfortran', \ }, \ 'fortran/gfortran' : { \ 'hook/time/enable' : 1, \ }, \ 'go' : { \ 'hook/time/enable' : 1, \ }, \ 'haskell' : { \ 'type' : 'haskell/runghc', \ }, \ 'haskell/ghc' : { \ 'hook/time/enable' : 1, \ }, \ 'haskell/runghc' : { \ 'hook/time/enable' : 1, \ }, \ 'lisp' : { \ 'hook/time/enable' : 1, \ }, \ 'make' : { \ 'command' : 'make', \ 'exec' : '%c %o', \ 'runner' : 'vimproc', \ }, \ 'markdown' : { \ 'type' : 'markdown/pandoc', \ 'outputter' : 'browser', \ }, \ 'python' : { \ 'hook/time/enable' : 1, \ }, \ 'ruby' : { \ 'hook/time/enable' : 1, \ }, \ 'tex' : { \ 'command' : 'latexmk', \ 'exec' : ['%c %o %s'], \ }, \ 'watchdogs_checker/_' : { \ 'outputter' : 'quickfix', \ 'runner/vimproc/updatetime' : 40, \ }, \} function! s:init_quickrun_haskell_stack_hook() abort if len(findfile('stack.yaml', '.;', -1)) let b:quickrun_config = { \ 'command' : 'stack', \ 'exec' : ['%c run'], \} endif endfunction augroup vimrc-init_quickrun_haskell_stack_hook autocmd! autocmd FileType haskell call init_quickrun_haskell_stack_hook() augroup END function! s:init_quickrun_rust_cargo_hook() abort if len(findfile('Cargo.toml', '.;', -1)) let b:quickrun_config = { \ 'command' : 'cargo', \ 'exec' : ['%c run'], \} endif endfunction augroup vimrc-init_quickrun_rust_cargo_hook autocmd! autocmd FileType rust call init_quickrun_rust_cargo_hook() augroup END endfunction function! s:init_quickrun_hook_post_source() abort nnoremap quickrun#is_running() ? quickrun#sweep_sessions() : "\" augroup vimrc-forQuickRun autocmd! autocmd WinEnter * if (winnr('$') == 1) && (getbufvar(winbufnr(0), '&filetype')) == 'quickrun' | q | endif augroup END endfunction function! s:init_ale_hook_add() abort let g:ale_lint_on_enter = 0 let g:ale_lint_on_filetype_changed = 0 let g:ale_lint_on_save = 1 let g:ale_lint_on_text_changed = 0 let g:ale_lint_on_insert_leave = 0 let g:ale_fix_on_save = 1 let g:ale_set_quickfix = 1 let g:ale_set_loclist = 0 let g:ale_open_list = 1 let g:ale_warn_about_trailing_blank_lines = 1 let g:ale_warn_about_trailing_whitespace = 1 let g:ale_linters = { \} let g:ale_fixers = { \ '*': ['remove_trailing_lines', 'trim_whitespace'], \} augroup vimrc-init_ale_hook autocmd! autocmd FileType proto let b:ale_fixers = ['clang-format'] augroup END endfunction function! s:init_watchdogs_hook_add() abort call watchdogs#setup(g:quickrun_config) let g:watchdogs_check_BufWritePost_enable = 1 let g:watchdogs_check_BufWritePost_enables = { \ 'go': 0, \} let g:watchdogs_check_BufWritePost_enable_on_wq = 0 let g:watchdogs_check_CursorHold_enable = 0 let g:watchdogs_check_CursorHold_enables = { \} endfunction function! s:init_lexima_hook_post_source() abort let g:lexima_no_default_rules = 1 call lexima#set_default_rules() let g:lexima_map_escape = '' let g:lexima_enable_basic_rules = 1 let g:lexima_enable_newline_rules = 1 let g:lexima_enable_space_rules = 1 let g:lexima_enable_endwise_rules = 1 " TeX call lexima#add_rule({'char': '$', 'input_after': '$', 'filetype': ['tex','latex','plaintex']}) call lexima#add_rule({'char': '$', 'at': '\%#\$', 'leave': 1, 'filetype': ['tex','latex','plaintex']}) call lexima#add_rule({'char': '', 'at': '\$\%#\$', 'delete': 1, 'filetype': ['tex','latex','plaintex']}) call lexima#add_rule({'char': '', 'at': '^\s*%\s.*\%#', 'input': '% ', 'filetype': ['tex','latex','plaintex']}) " Fortran call lexima#add_rule({'char': '', 'at': '^\s*if\>.*then\%#', 'input_after': 'end if', 'filetype': ['fortran']}) call lexima#add_rule({'char': '', 'at': '^\s*do.*\%#', 'input_after': 'end do', 'filetype': ['fortran']}) call lexima#add_rule({'char': '', 'at': '^\s*select\s*case\s*.*\%#', 'input_after': 'end select', 'filetype': ['fortran']}) call lexima#add_rule({'char': '', 'at': '^\s*!\s.*\%#', 'input': '! ', 'filetype': ['fortran']}) " IDL call lexima#add_rule({'char': '', 'at': '^\s*if\>.*then\s*begin\%#', 'input_after': 'endif', 'filetype': ['idlang']}) call lexima#add_rule({'char': '', 'at': '^\s*endif\s*else\s*begin\%#', 'input_after': 'endelse', 'filetype': ['idlang']}) call lexima#add_rule({'char': '', 'at': '^\s*for\s*\>.*do\s*begin\%#', 'input_after': 'endfor', 'filetype': ['idlang']}) call lexima#add_rule({'char': '', 'at': '^\s*case\>.*of\%#', 'input_after': 'endcase', 'filetype': ['idlang']}) call lexima#add_rule({'char': '', 'at': '^\s*\;\s.*\%#', 'input': '; ', 'filetype': ['idlang']}) " markdown call lexima#add_rule({'char': '**', 'input_after': '**', 'filetype': ['markdown']}) call lexima#add_rule({'char': '', 'at': '\*\%#\*', 'delete': 1, 'filetype': ['markdown']}) call lexima#add_rule({'char': '__', 'input_after': '__', 'filetype': ['markdown']}) call lexima#add_rule({'char': '', 'at': '_\%#_', 'delete': 1, 'filetype': ['markdown']}) call lexima#add_rule({'char': '~~', 'input_after': '~~', 'filetype': ['markdown']}) call lexima#add_rule({'char': '', 'at': '\~\%#\~', 'delete': 1, 'filetype': ['markdown']}) call lexima#add_rule({'char': '', 'at': '^\s*\*\s.*\%#', 'input': '* ', 'filetype': ['markdown']}) call lexima#add_rule({'char': '', 'at': '^\s*+\s.*\%#', 'input': '+ ', 'filetype': ['markdown']}) call lexima#add_rule({'char': '', 'at': '^\s*-\s.*\%#', 'input': '- ', 'filetype': ['markdown']}) endfunction function! s:init_gitgutter_hook_add() abort let g:gitgutter_max_signs = 10000 let g:gitgutter_map_keys = 0 let g:gitgutter_sign_added = '+' let g:gitgutter_sign_modified = '*' let g:gitgutter_sign_removed = '-' let g:gitgutter_sign_modified_removed = '~' endfunction function! s:init_undotree_hook_add() abort nnoremap :UndotreeToggle endfunction function! s:init_undotree_hook_source() abort let g:undotree_WindowLayout = 1 let g:undotree_SplitWidth = 50 let g:undotree_DiffpanelHeight = 10 let g:undotree_DiffAutoOpen = 1 let g:undotree_SetFocusWhenToggle = 0 let g:undotree_HighlightChangedText = 1 endfunction function! s:init_nerdtree_hook_add() abort nnoremap :NERDTreeToggle endfunction function! s:init_nerdtree_hook_source() abort augroup vimrc-nerdtree autocmd! autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif autocmd WinEnter * if (winnr('$') == 1) && (getbufvar(winbufnr(0), '&filetype')) == 'nerdtree' | q | endif augroup END endfunction function! s:init_yankround_hook_add() abort nmap p (yankround-p) nmap P (yankround-P) nmap gp (yankround-gp) nmap gP (yankround-gP) nmap (yankround-prev) nmap (yankround-next) endfunction function! s:init_yankround_hook_source() abort let g:yankround_max_history = 35 let g:yankround_use_region_hl = 1 endfunction function! s:init_asterisk_hook_add() abort map * (asterisk-*)(anzu-update-search-status-with-echo) map # (asterisk-#)(anzu-update-search-status-with-echo) map g* (asterisk-g*)(anzu-update-search-status-with-echo) map g# (asterisk-g#)(anzu-update-search-status-with-echo) map z* (asterisk-z*)(anzu-update-search-status-with-echo) map gz* (asterisk-gz*)(anzu-update-search-status-with-echo) map z# (asterisk-z#)(anzu-update-search-status-with-echo) map gz# (asterisk-gz#)(anzu-update-search-status-with-echo) endfunction function! s:init_incsearch_hook_add() abort function! s:init_incsearch_hook_add_autocmd() abort " except for let _ = [ \ 'markdown', \ 'latex', \ 'tex', \ 'plaintex', \ ] if index(_, &ft) < 0 map / (incsearch-forward) map ? (incsearch-backward) map g/ (incsearch-stay) endif endfunction augroup vimrc-incsearch autocmd! autocmd FileType * call s:init_incsearch_hook_add_autocmd() augroup END endfunction function! s:init_auto_programming_hook_add() abort set completefunc=autoprogramming#complete endfunction function! s:init_anzu_hook_add() abort nmap n (anzu-n)zz nmap N (anzu-N)zz augroup vimrc-anzu autocmd! autocmd CursorHold,CursorHoldI,WinLeave,Tableave * call anzu#clear_search_status() augroup END endfunction function! s:init_cleverf_hook_add() abort let g:clever_f_not_overwrites_standard_mappings = 1 let g:clever_f_across_no_line = 0 let g:clever_f_ignore_case = 0 let g:clever_f_smart_case = 0 let g:clever_f_use_migemo = 1 let g:clever_f_fix_key_direction = 0 let g:clever_f_show_prompt = 0 let g:clever_f_chars_match_any_signs = '' let g:clever_f_mark_cursor = 1 let g:clever_f_mark_cursor_color = 'Cursor' let g:clever_f_hide_cursor_on_cmdline = 1 let g:clever_f_timeout_ms = 0 let g:clever_f_mark_char = 1 let g:clever_f_mark_char_color = 'CleverFDefaultLabel' let g:clever_f_repeat_last_char_inputs = ["\"] nmap f (clever-f-f) nmap F (clever-f-F) nmap t (clever-f-t) nmap T (clever-f-T) nmap (clever-f-reset) endfunction function! s:init_jplus_hook_add() abort nmap J (jplus) vmap J (jplus) nmap J (jplus-getchar) vmap J (jplus-getchar) nmap J (jplus-getchar-with-space) vmap J (jplus-getchar-with-space) let g:jplus#config = { \ 'sh' : { \ 'left_matchstr_pattern' : '^.\{-}\%(\ze\s*\\$\|$\)', \ 'ignore_pattern' : '^\s*#', \ }, \ 'vim' : { \ 'ignore_pattern' : '^\s*"', \ }, \} let g:jplus#input_config = { \ '__DEFAULT__' : { \ 'delimiter_format' : ' %d ', \ }, \ '__EMPTY__' : { \ 'delimiter_format' : '%d', \ }, \ ',' : { \ 'delimiter_format' : '%d ', \ }, \} endfunction function! s:init_quickhl_hook_add() abort nmap m (quickhl-manual-this) xmap m (quickhl-manual-this) nmap M (quickhl-manual-reset) xmap M (quickhl-manual-reset) endfunction function! s:init_indentLine_hook_source() abort let g:indentLine_enabled = 1 let g:indentLine_setConceal = 0 endfunction function! s:init_niji_hook_source() abort let g:niji_matching_filetypes = [ \ 'lisp', \ 'scheme', \ 'clojure', \ ] endfunction function! s:init_easy_align_hook_add() abort nmap ga (EasyAlign) xmap ga (EasyAlign) endfunction " operator function! s:init_operator_replace_hook_add() abort Arpeggio map or (operator-replace) endfunction function! s:init_caw_comment_hook_add() abort let g:caw_no_default_keymappings = 1 Arpeggio map oc (caw:hatpos:toggle:operator) Arpeggio map od (caw:hatpos:uncomment:operator) Arpeggio map oe (caw:zeropos:toggle:operator) endfunction function! s:init_operator_surround_hook_add() abort map Sa (operator-surround-append) map Sd (operator-surround-delete) map Sr (operator-surround-replace) endfunction " textobj function! s:init_textobj_jabraces_hook_add() abort let g:textobj_jabraces_no_default_key_mappings = 1 " the mappings are defined in multitextobj group A endfunction function! s:init_textobj_between_hook_add() abort let g:textobj_between_no_default_key_mappings = 1 omap ac (textobj-between-a) omap ic (textobj-between-i) vmap ac (textobj-between-a) vmap ic (textobj-between-i) endfunction function! s:init_textobj_multiblock_hook_add() abort omap ab (textobj-multiblock-a) omap ib (textobj-multiblock-i) vmap ab (textobj-multiblock-a) vmap ib (textobj-multiblock-i) function! s:init_textobj_multiblock_hook_add_tex() abort let b:textobj_multiblock_blocks = [ \ ['\$', '\$', 1], \ ['\$\$', '\$\$', 1], \ ] endfunction function! s:init_textobj_multiblock_hook_add_markdown() abort let b:textobj_multiblock_blocks = [ \ ['`', '`', 1], \ ['```', '```'], \ ] endfunction function! s:init_textobj_multiblock_hook_add_ruby() abort let b:textobj_multiblock_blocks = [ \ ['/', '/', 1], \ ] endfunction augroup vimrc-init_multiblock_hook_add autocmd! autocmd FileType tex,latex,plaintex call init_textobj_multiblock_hook_add_tex() autocmd FileType markdown call init_textobj_multiblock_hook_add_markdown() autocmd FileType ruby call init_textobj_multiblock_hook_add_ruby() augroup END endfunction function! s:init_textobj_multitextobj_hook_add() abort let g:textobj_multitextobj_textobjects_i = [ \ '(textobj-url-i)', \ '(textobj-multiblock-i)', \ '(textobj-function-i)', \ '(textobj-entire-i)', \] let g:textobj_multitextobj_textobjects_a = [ \ '(textobj-url-a)', \ '(textobj-multiblock-a)', \ '(textobj-function-a)', \ '(textobj-entire-a)', \] omap amt (textobj-multitextobj-a) omap imt (textobj-multitextobj-i) vmap amt (textobj-multitextobj-a) vmap imt (textobj-multitextobj-i) " jabraces let g:textobj_multitextobj_textobjects_group_i = {} let g:textobj_multitextobj_textobjects_group_i.A = [ \ '(textobj-jabraces-sumi-kakko-i)', \ '(textobj-jabraces-parens-i)', \ '(textobj-jabraces-kakko-i)', \ '(textobj-jabraces-double-kakko-i)', \ ] let g:textobj_multitextobj_textobjects_group_a = {} let g:textobj_multitextobj_textobjects_group_a.A = [ \ '(textobj-jabraces-sumi-kakko-a)', \ '(textobj-jabraces-parens-a)', \ '(textobj-jabraces-kakko-a)', \ '(textobj-jabraces-double-kakko-a)', \ ] map (textobj-multitextobj-jabraces-i) (textobj-multitextobj-A-i) map (textobj-multitextobj-jabraces-a) (textobj-multitextobj-A-a) omap ajb (textobj-multitextobj-jabraces-a) omap ijb (textobj-multitextobj-jabraces-i) vmap ajb (textobj-multitextobj-jabraces-a) vmap ijb (textobj-multitextobj-jabraces-i) endfunction function! s:init_textobj_ruby_hook_source() abort let g:textobj_ruby_more_mappings = 1 endfunction function! s:init_capture_hook_source() abort augroup vimrc-capture autocmd! autocmd FileType capture nnoremap q :q autocmd WinEnter * if (winnr('$') == 1) && (getbufvar(winbufnr(0), '&filetype')) == 'capture' | q | endif augroup END endfunction function! s:init_openbrowser_hook_add() abort if has('mac') let g:openbrowser_browser_commands = [ \{ \ 'name' : 'open', \ 'args' : ['{browser}', '{uri}'] \}] elseif has('unix') let g:openbrowser_browser_commands = [ \{ \ 'name' : 'chromium', \ 'args' : ['{browser}', '{uri}'] \}] endif let g:openbrowser_search_engines = extend( \get(g:, 'openbrowser_search_engines', {}), \{ \ 'weblio' : 'http://ejje.weblio.jp/content/{query}', \ 'yahoojp': 'http://search.yahoo.co.jp/search?p={query}', \}, \) nmap ,op (openbrowser-smart-search) vmap ,op (openbrowser-smart-search) nnoremap ,og :OpenBrowserSearch -google nnoremap ,oy :OpenBrowserSearch -yahoojp nnoremap ,ow :OpenBrowserSearch -weblio nnoremap ,oa :OpenBrowserSearch -alc call altercmd#define('google', 'OpenBrowserSearch -google') call altercmd#define('yahoo', 'OpenBrowserSearch -yahoojp') call altercmd#define('weblio', 'OpenBrowserSearch -weblio') call altercmd#define('alc', 'OpenBrowserSearch -alc') endfunction function! s:init_gfm_syntax_hook_source() abort let g:gfm_syntax_emoji_conceal = 1 endfunction function! s:init_github_complete_hook_source() abort let g:github_complete_enable_neocomplete = 1 let g:github_complete_enable_omni_completion = 0 imap e (github-complete-manual-completion) endfunction " function! s:init_lldb_hook_source() abort " nmap LLBreakSwitch " vmap LLStdInSelected " nnoremap :LLstdin " nnoremap :LLmode debug " nnoremap :LLmode code " nnoremap :LL continue " nnoremap :LL process interrupt " nnoremap :LL print =expand('') " vnoremap :LL print =lldb#util#get_selection() " endfunction function! s:init_haskell_vim_hook_source() abort let g:haskell_enable_quantification = 1 " to enable highlighting of `forall` let g:haskell_enable_recursivedo = 1 " to enable highlighting of `mdo` and `rec` let g:haskell_enable_arrowsyntax = 1 " to enable highlighting of `proc` let g:haskell_enable_pattern_synonyms = 1 " to enable highlighting of `pattern` let g:haskell_enable_typeroles = 1 " to enable highlighting of type roles let g:haskell_enable_static_pointers = 1 " to enable highlighting of `static` let g:haskell_backpack = 1 " to enable highlighting of backpack keywords let g:haskell_indent_if = 4 let g:haskell_indent_case = 4 let g:haskell_indent_let = 4 let g:haskell_indent_before_where = 0 let g:haskell_indent_after_bare_where = 4 let g:haskell_indent_do = 4 let g:haskell_indent_in = 1 let g:haskell_indent_guard = 4 let g:haskell_indent_case_alternative = 4 let g:cabal_indent_section = 2 endfunction function! s:init_ref_hoogle_hook_add() abort call altercmd#define('hoogle', 'Ref hoogle') nnoremap [ref]hg :Ref hoogle endfunction function! s:init_yesod_hook_source() abort let g:yesod_disable_maps = 1 endfunction function! s:init_elm_hook_source() abort let g:elm_jump_to_error = 0 let g:elm_setup_keybindings = 0 let g:elm_make_show_warnings = 1 let g:elm_detailed_complete = 1 let g:elm_format_fail_silently = 1 nmap d (elm-show-docs) endfunction function! s:init_iron_hook_source() abort let g:iron_map_defaults=0 endfunction function! s:init_acid_hook_source() abort let g:acid_no_default_keymappings = 1 nnoremap [acid] nmap ,a [acid] nmap gd (acid-go-to) nmap K (acid-docs) nmap cp (acid-motion-op) nmap cpp (acid-eval-expr) nmap cqp (acid-eval-print) nmap [acid]x (acid-eval-cmdline) nmap [acid]ll (acid-virtualtext-clear-line) nmap [acid]ln (acid-virtualtext-toggle) nmap [acid]la (acid-virtualtext-clear-all) command! AcidSetNsStrategy let b:acid_ns_strategy='ns:' . input('namespace: ') command! AcidConnectToRemoteREPL \ call luaeval("require('acid.nrepl').start({pwd='" . expand('%:p:h') \ . "', bind='" . input('host: ') \ . "', port=" . input('port: ') . "})") endfunction function! s:init_iced_hook_source() abort let g:iced#paredit#slurp_max_depth = 5 let g:iced#format#rule = { \ 'merr.core/let': '[[:block 2] [:inner 1]]', \ } nmap cp (iced_eval) endfunction function! s:init_sexp_hook_source() abort let g:sexp_filetypes = 'clojure,scheme,lisp,timl' let g:sexp_enable_insert_mode_mappings = 0 let g:sexp_insert_after_wrap = 0 let g:sexp_mappings = { \ 'sexp_emit_head_element': '>(', \ 'sexp_emit_tail_element': '<)', \ 'sexp_capture_prev_element': '<(', \ 'sexp_capture_next_element': '>)', \} endfunction function! s:init_slime_hook_source() abort if has('nvim') let g:slime_target = "neovim" else let g:slime_target = "vimterminal" endif " execute 'echo b:terminal_job_id' to get jobid let g:slime_paste_file = "$HOME/.slime_paste" let g:slime_no_mappings = 1 xmap s SlimeRegionSend nmap s SlimeParagraphSend endfunction function! s:init_go_hook_source() abort augroup vimrc-golang autocmd! autocmd FileType go setlocal noexpandtab autocmd FileType go setlocal sw=8 autocmd FileType go setlocal ts=8 autocmd FileType go compiler go augroup END let g:go_fmt_command = 'goimports' let g:go_gocode_propose_builtins = 0 let g:go_def_mapping_enabled = 0 endfunction function! s:init_racer_hook_source() abort set hidden let g:racer_cmd = expand('~/.cargo/bin/racer') let g:racer_experimental_completer = 1 endfunction function! s:init_nim_hook_source() abort endfunction function! s:init_LanguageClient_hook_add() abort let s:clojure_lsp_path = expand('~/.config/vim/clojure-lsp') let s:clojure_lsp_executable_path = s:clojure_lsp_path . '/clojure-lsp' if has('mac') let s:jdtls_os = 'mac' elseif has('unix') let s:jdtls_os = 'linux' endif let s:jdtls_path = expand('~/.config/vim/jdtls') let s:jdtls_data_path = expand('~/.config/vim/jdtls-data') function! s:LanguageClient_find_jdtls_launcher() abort return substitute(system('find ' . s:jdtls_path . ' -name "org.eclipse.equinox.launcher_*.jar" | head -1'), '\n\+$', '', '') endfunction endfunction function! s:init_LanguageClient_hook_source() abort let g:LanguageClient_serverCommands = {} "clojure if executable('java') if !isdirectory(s:clojure_lsp_path) call mkdir(s:clojure_lsp_path, 'p') endif if !executable(s:clojure_lsp_executable_path) call s:update_LanguageClient_hook_post_update() endif let g:LanguageClient_serverCommands['clojure'] = [ \ 'java', \ '-Xmx1G', \ '-server', \ '-jar', \ s:clojure_lsp_executable_path] function! s:LanguageClient_clojure_expand(exp) abort let l:result = expand(a:exp) return l:result ==# '' ? '' : "file://" . l:result endfunction nnoremap crcc :call LanguageClient#workspace_executeCommand('cycle-coll', [LanguageClient_clojure_expand('%:p'), line('.') - 1, col('.') - 1]) nnoremap crth :call LanguageClient#workspace_executeCommand('thread-first', [LanguageClient_clojure_expand('%:p'), line('.') - 1, col('.') - 1]) nnoremap crtt :call LanguageClient#workspace_executeCommand('thread-last', [LanguageClient_clojure_expand('%:p'), line('.') - 1, col('.') - 1]) nnoremap crtf :call LanguageClient#workspace_executeCommand('thread-first-all', [LanguageClient_clojure_expand('%:p'), line('.') - 1, col('.') - 1]) nnoremap crtl :call LanguageClient#workspace_executeCommand('thread-last-all', [LanguageClient_clojure_expand('%:p'), line('.') - 1, col('.') - 1]) nnoremap crml :call LanguageClient#workspace_executeCommand('move-to-let', [LanguageClient_clojure_expand('%:p'), line('.') - 1, col('.') - 1, input('Binding name: ')]) nnoremap cril :call LanguageClient#workspace_executeCommand('introduce-let', [LanguageClient_clojure_expand('%:p'), line('.') - 1, col('.') - 1, input('Binding name: ')]) nnoremap crel :call LanguageClient#workspace_executeCommand('expand-let', [LanguageClient_clojure_expand('%:p'), line('.') - 1, col('.') - 1]) nnoremap cram :call LanguageClient#workspace_executeCommand('add-missing-libspec', [LanguageClient_clojure_expand('%:p'), line('.') - 1, col('.') - 1]) endif "java if executable('java') if !isdirectory(s:jdtls_path) call mkdir(s:jdtls_path, 'p') endif if empty(s:LanguageClient_find_jdtls_launcher()) call s:update_LanguageClient_hook_post_update() endif if !isdirectory(s:jdtls_data_path) call mkdir(s:jdtls_data_path, 'p') endif let g:LanguageClient_serverCommands['java'] = [ \ 'java', \ '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044', \ '-Declipse.application=org.eclipse.jdt.ls.core.id1', \ '-Dosgi.bundles.defaultStartLevel=4', \ '-Declipse.product=org.eclipse.jdt.ls.core.product', \ '-Dlog.protocol=true', \ '-Dlog.level=ALL', \ '-noverify', \ '-Xmx1G', \ '-jar', \ s:LanguageClient_find_jdtls_launcher(), \ '-configuration', \ s:jdtls_path . '/config_' . s:jdtls_os, \ '-data', \ s:jdtls_data_path, \] endif "go if executable('bingo') let g:LanguageClient_serverCommands['go'] = ['bingo'] elseif executable('go-langserver') let g:LanguageClient_serverCommands['go'] = ['go-langserver'] elseif executable('golsp') let g:LanguageClient_serverCommands['go'] = ['golsp'] endif "vue if executable('vls') let g:LanguageClient_serverCommands['vue'] = ['vls'] endif let g:LanguageClient_autoStart = 1 let g:LanguageClient_diagnosticsEnable = 0 let g:LanguageClient_loggingLevel = 'INFO' let g:LanguageClient_loggingFile = expand('~/.local/share/nvim/LanguageClient.log') let g:LanguageClient_serverStderr = expand('~/.local/share/nvim/LanguageServer.log') nnoremap K :call LanguageClient_textDocument_hover() nnoremap gd :call LanguageClient_textDocument_definition() nnoremap d :call LanguageClient_textDocument_typeDefinition() nnoremap i :call LanguageClient_textDocument_implementation() nnoremap :call LanguageClient_textDocument_rename() nnoremap :call LanguageClient_textDocument_references() nnoremap [denite]lm :Denite contextMenu nnoremap [denite]lds :Denite documentSymbol nnoremap [denite]lws :Denite workspaceSymbol nnoremap [denite]lr :Denite references endfunction function! s:update_LanguageClient_hook_post_update() abort if executable('java') "clojure if !isdirectory(s:clojure_lsp_path) call mkdir(s:clojure_lsp_path, 'p') endif if !executable(s:clojure_lsp_executable_path) let l:clojure_lsp_release = 'https://github.com/snoe/clojure-lsp/releases/download/release-20190331T074339/clojure-lsp' call system('curl --silent -fSL -o ' . s:clojure_lsp_executable_path . ' ' . l:clojure_lsp_release) call system('chmod 755 ' . s:clojure_lsp_executable_path) endif "java if !isdirectory(s:jdtls_path) call mkdir(s:jdtls_path, 'p') endif let l:jdtls_launcher_path = s:LanguageClient_find_jdtls_launcher() if !executable(l:jdtls_launcher_path) let l:jdtls_latest = system('curl -fSL --silent https://download.eclipse.org/jdtls/snapshots/latest.txt') call system('curl --silent -fSL -o /tmp/tmp_jdt_lsp.tar.gz https://download.eclipse.org/jdtls/snapshots/' . l:jdtls_latest) call system('tar xf /tmp/tmp_jdt_lsp.tar.gz -C ' . s:jdtls_path) call system('rm /tmp/tmp_jdt_lsp.tar.gz') endif endif endfunction function! s:init_ref_hook_add() abort let g:ref_source_webdict_sites = { \ 'je' : { \ 'url' : 'http://dictionary.infoseek.ne.jp/jeword/%s', \ }, \ 'ej' : { \ 'url' : 'http://dictionary.infoseek.ne.jp/ejword/%s', \ }, \ 'wiki' : { \ 'url' : 'http://ja.wikipedia.org/wiki/%s', \ }, \} let g:ref_source_webdict_sites.default = 'ej' function! g:ref_source_webdict_sites.je.filter(output) return join(split(a:output, "\n")[15 :], "\n") endfunction function! g:ref_source_webdict_sites.ej.filter(output) return join(split(a:output, "\n")[15 :], "\n") endfunction function! g:ref_source_webdict_sites.wiki.filter(output) return join(split(a:output, "\n")[5 :], "\n") endfunction augroup vimrc-ref autocmd! autocmd FileType ref-* nnoremap q :q augroup END nnoremap [ref] nmap ,r [ref] nnoremap [ref]ej :Ref webdict ej nnoremap [ref]je :Ref webdict je nnoremap [ref]wk :Ref webdict wiki call altercmd#define('ejdic', 'Ref webdict ej') call altercmd#define('jedic', 'Ref webdict je') call altercmd#define('wiki', 'Ref webdict wiki') endfunction function! s:init_translategoogle_hook_add() abort let g:translategoogle_languages = ["ja", "en"] let g:translategoogle_default_sl = "en" let g:translategoogle_default_tl = "ja" let g:translategoogle_default_ie = "UTF-8" let g:translategoogle_default_oe = "UTF-8" let g:translategoogle_default_opener_before = "8split" let g:translategoogle_default_opener_after = "rightbelow vsplit" let g:translategoogle_default_opener_retrans = "rightbelow vsplit" let g:translategoogle_enable_retranslate = 0 let g:translategoogle_mapping_close = "q" endfunction function! s:init_gina_hook_source() abort call gina#custom#command#option('log', '--opener', 'vsplit') endfunction function! s:init_gista_hook_source() abort let g:gista#github_user = 'rinx' endfunction function! s:init_radiko_hook_add() abort let g:radiko#is_loaded = 0 let g:radiko#cache_dir = expand("~/.cache/radiko-vim") function! s:radiko_echo_rn2_musics() let playing = radiko#get_playing_rn2_music() let nextone = radiko#get_next_rn2_music() return '[Now playing]: ' . playing[0] . ' - ' . playing[1] \ . ' [Next]: ' . nextone[0] . ' - ' . nextone[1] endfunction command! RadikoRN2Musics echo radiko_echo_rn2_musics() endfunction function! s:init_radiko_hook_source() abort let g:radiko#is_loaded = 1 endfunction function! s:init_yj_proofreading_hook_add() abort if exists('g:vimrc_private["yahoo_proofreader_apikey"]') let g:yj_proofreading#yahoo_apikey = g:vimrc_private['yahoo_proofreader_apikey'] endif endfunction function! s:init_submode_hook_add() abort call submode#enter_with('bufmove', 'n', '', 's>', '>') call submode#enter_with('bufmove', 'n', '', 's<', '<') call submode#enter_with('bufmove', 'n', '', 's+', '+') call submode#enter_with('bufmove', 'n', '', 's-', '-') call submode#map('bufmove', 'n', '', '>', '>') call submode#map('bufmove', 'n', '', '<', '<') call submode#map('bufmove', 'n', '', '+', '+') call submode#map('bufmove', 'n', '', '-', '-') endfunction function! s:init_hybrid_hook_add() abort set background=dark let g:hybrid_custom_term_colors = 1 let g:hybrid_reduced_contrast = 1 " Remove this line if using the default palette. augroup vimrc-colorscheme-hybrid autocmd! autocmd VimEnter * nested colorscheme hybrid augroup END highlight Normal ctermbg=none endfunction function! s:init_gruvbox_hook_add() abort set background=dark augroup vimrc-colorscheme-gruvbox autocmd! autocmd VimEnter * nested colorscheme gruvbox autocmd ColorScheme * highlight Normal guibg=NONE ctermbg=NONE augroup END endfunction " --- plugin loading with dein.vim if has('nvim') let s:dein_dir = '~/.config/nvim/dein' else let s:dein_dir = '~/.vim/dein' endif let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim' if !isdirectory(expand(s:dein_repo_dir)) call system('git clone https://github.com/Shougo/dein.vim ' . shellescape(s:dein_repo_dir)) endif if v:version >= 800 || has('nvim') && dein#load_state(s:dein_dir) if has('vim_starting') execute 'set runtimepath+=' . s:dein_repo_dir endif call dein#begin(expand(s:dein_dir . '/')) call dein#add('Shougo/dein.vim') call dein#add('haya14busa/dein-command.vim') call dein#config('dein-command.vim', { \ 'lazy': 1, \ 'on_cmd': [ \ 'Dein', \ ], \}) call dein#add('Shougo/vimproc.vim') call dein#config('vimproc.vim', { \ 'build': 'make', \}) if has('nvim') call dein#add('Shougo/deoplete.nvim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_deoplete_hook_add()', \ }) call dein#config('deoplete.nvim', { \ 'lazy': 1, \ 'on_i': 1, \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_deoplete_hook_source()', \}) else call dein#add('Shougo/neocomplete.vim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_neocomplete_hook_add()', \ }) call dein#config('neocomplete.vim', { \ 'lazy': 1, \ 'on_i': 1, \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_neocomplete_hook_source()', \}) endif " neocomplete/deoplete sources call dein#add('ujihisa/neco-look') call dein#config('neco-look', { \ 'lazy' : 1, \ 'on_i' : 1, \}) call dein#add('Shougo/neco-syntax') call dein#config('neco-syntax', { \ 'lazy' : 1, \ 'on_i' : 1, \}) call dein#add('Shougo/neco-vim') call dein#config('neco-vim', { \ 'lazy' : 1, \ 'on_ft' : [ \ 'vim', \ ], \}) call dein#add('eagletmt/neco-ghc') call dein#config('neco-ghc', { \ 'lazy': 1, \ 'on_ft': [ \ 'haskell', \ ], \}) " deoplete sources (only for neovim) if dein#tap('deoplete.nvim') call dein#add('rinx/deoplete-auto-programming') call dein#config('deoplete-auto-programming', { \ 'lazy': 1, \ 'on_i': 1, \}) call dein#add('fishbullet/deoplete-ruby') call dein#config('deoplete-ruby', { \ 'lazy': 1, \ 'on_ft': [ \ 'ruby', \ ], \}) call dein#add('sebastianmarkow/deoplete-rust') call dein#config('deoplete-rust', { \ 'lazy': 1, \ 'on_ft': [ \ 'rust', \ ], \}) call dein#add('pbogut/deoplete-elm') call dein#config('deoplete-elm', { \ 'lazy': 1, \ 'on_ft': [ \ 'elm', \ ], \}) call dein#add('zchee/deoplete-clang') call dein#config('deoplete-clang', { \ 'lazy': 1, \ 'on_ft': [ \ 'c', \ 'cpp', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_deoplete_clang_hook_source()', \}) call dein#add('mitsuse/autocomplete-swift') call dein#config('autocomplete-swift', { \ 'lazy': 1, \ 'on_ft': [ \ 'swift', \ ], \ 'on_path': [ \ '.*.swift$', \ ], \}) endif call dein#add('Shougo/neosnippet', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_neosnippet_hook_add()', \}) call dein#config('neosnippet', { \ 'lazy': 1, \ 'on_i' : 1, \ 'on_ft' : [ \ 'neosnippet', \ ], \}) call dein#add('Shougo/neosnippet-snippets') call dein#config('neosnippet-snippets', { \ 'lazy': 1, \ 'on_i': 1, \}) call dein#add('honza/vim-snippets') call dein#config('vim-snippets', { \ 'lazy': 1, \ 'on_i': 1, \}) call dein#add('cocopon/vaffle.vim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_vaffle_hook_add()', \}) call dein#config('vaffle.vim', { \ 'lazy': 1, \ 'on_cmd' : [ \ 'Vaffle', \ ], \}) call dein#add('kana/vim-submode', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_submode_hook_add()', \}) call dein#add('kana/vim-arpeggio', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_arpeggio_hook_add()', \}) call dein#add('kana/vim-altercmd') call dein#add('Shougo/denite.nvim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_denite_hook_add()', \}) call dein#config('denite.nvim', { \ 'lazy': 1, \ 'on_cmd' : [ \ 'Denite', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_denite_hook_source()', \}) call dein#add('Shougo/unite.vim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_unite_hook_add()', \}) call dein#config('unite.vim', { \ 'lazy': 1, \ 'on_cmd' : [ \ 'Unite', \ 'UniteWithBufferDir', \ 'UniteWithCurrentDir', \ 'UniteResume', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_unite_hook_source()', \ 'on_func': [ \ 'unite', \ ], \}) call dein#add('Shougo/neomru.vim') call dein#config('neomru.vim', { \ 'lazy': 1, \ 'on_source': [ \ 'denite.nvim', \ 'unite.vim', \ ], \}) call dein#add('thinca/vim-unite-history') call dein#config('vim-unite-history', { \ 'lazy': 1, \ 'on_source': [ \ 'unite.vim', \ ], \}) call dein#add('Shougo/unite-outline') call dein#config('unite-outline', { \ 'lazy': 1, \ 'on_source': [ \ 'unite.vim', \ ], \}) call dein#add('tsukkee/unite-help') call dein#config('unite-help', { \ 'lazy': 1, \ 'on_source': [ \ 'unite.vim', \ ], \}) call dein#add('osyo-manga/unite-filetype') call dein#config('unite-filetype', { \ 'lazy': 1, \ 'on_source': [ \ 'unite.vim', \ ], \}) call dein#add('tacroe/unite-mark') call dein#config('unite-mark', { \ 'lazy': 1, \ 'on_source': [ \ 'unite.vim', \ ], \}) call dein#add('moznion/unite-git-conflict.vim') call dein#config('unite-git-conflict.vim', { \ 'lazy': 1, \ 'on_source': [ \ 'unite.vim', \ ], \}) call dein#add('pasela/unite-webcolorname') call dein#config('unite-webcolorname', { \ 'lazy': 1, \ 'on_source': [ \ 'unite.vim', \ ], \}) call dein#add('itchyny/lightline.vim') if has('nvim') let s:enable_eskk = 1 else let s:enable_eskk = 0 endif if s:enable_eskk call dein#add('tyru/eskk.vim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_eskk_hook_add()', \}) else call dein#add('tyru/skk.vim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_skk_hook_add()', \}) endif call dein#add('thinca/vim-quickrun', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_quickrun_hook_add()', \}) call dein#config('vim-quickrun', { \ 'lazy': 1, \ 'on_cmd': [ \ 'QuickRun', \ ], \ 'on_map': [ \ '(quickrun', \ ], \ 'hook_post_source': 'call ' . s:SID_PREFIX() . 'init_quickrun_hook_post_source()', \}) call dein#add('osyo-manga/unite-quickrun_config') call dein#config('unite-quickrun_config', { \ 'lazy': 1, \ 'on_source': [ \ 'unite.vim', \ ], \}) if has('nvim') || has('job') && has('channel') && has('timers') call dein#add('w0rp/ale', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_ale_hook_add()', \}) else call dein#add('osyo-manga/vim-watchdogs', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_watchdogs_hook_add()', \}) endif call dein#add('jceb/vim-hier') call dein#config('vim-hier', { \ 'lazy': 1, \ 'on_cmd': [ \ 'HierStart', \ 'HierStop', \ 'HierUpdate', \ 'HierClear', \ ], \}) call dein#add('vim-jp/vim-vimlparser') call dein#add('syngan/vim-vimlint') call dein#add('thinca/vim-themis', {'lazy': 1}) call dein#add('tmhedberg/matchit') call dein#add('tpope/vim-repeat') call dein#add('cohama/lexima.vim') call dein#config('lexima.vim', { \ 'lazy': 1, \ 'on_i': 1, \ 'hook_post_source': 'call ' . s:SID_PREFIX() . 'init_lexima_hook_post_source()', \}) call dein#add('airblade/vim-gitgutter', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_gitgutter_hook_add()', \}) call dein#add('mbbill/undotree', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_undotree_hook_add()', \}) call dein#add('mbbill/undotree', { \ 'lazy': 1, \ 'on_cmd': [ \ 'UndotreeToggle', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_undotree_hook_source()', \}) call dein#add('scrooloose/nerdtree', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_nerdtree_hook_add()', \}) call dein#config('nerdtree', { \ 'lazy': 1, \ 'on_cmd': [ \ 'NERDTree', \ 'NERDTreeFromBookmark', \ 'NERDTreeToggle', \ 'NERDTreeMirror', \ 'NERDTreeClose', \ 'NERDTreeFind', \ 'NERDTreeCWD', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_nerdtree_hook_source()', \}) call dein#add('LeafCage/yankround.vim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_yankround_hook_add()', \}) call dein#config('yankround.vim', { \ 'lazy': 1, \ 'on_map': [ \ '(yankround-', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_yankround_hook_source()', \}) call dein#add('haya14busa/vim-asterisk', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_asterisk_hook_add()', \}) call dein#config('vim-asterisk', { \ 'lazy': 1, \ 'on_map': [ \ '(asterisk-', \ ], \}) call dein#add('haya14busa/incsearch.vim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_incsearch_hook_add()', \}) call dein#config('incsearch.vim', { \ 'lazy': 1, \ 'on_map': [ \ '(incsearch-', \ ], \}) call dein#add('haya14busa/vim-migemo') call dein#config('vim-migemo', { \ 'lazy': 1, \ 'on_map': [ \ '(migemo-', \ ], \ 'on_func': [ \ 'migemo', \ ], \}) if dein#tap('neocomplete.vim') call dein#add('haya14busa/vim-auto-programming', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_auto_programming_hook_add()', \}) call dein#config('vim-auto-programming', { \ 'lazy': 1, \ 'on_i': 1, \}) endif call dein#add('osyo-manga/vim-anzu', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_anzu_hook_add()', \}) call dein#config('vim-anzu', { \ 'lazy': 1, \ 'on_map': [ \ '(anzu-', \ ], \ 'on_func': [ \ 'anzu', \ ], \ 'on_event': [ \ 'TabLeave', \ ], \}) call dein#add('osyo-manga/vim-over') call dein#config('vim-over', { \ 'lazy': 1, \ 'on_func': [ \ 'over', \ ], \ 'on_cmd': [ \ 'OverCommandLine', \ ], \}) call dein#add('rhysd/clever-f.vim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_cleverf_hook_add()', \}) call dein#config('clever-f.vim', { \ 'lazy': 1, \ 'on_i': 1, \}) call dein#add('osyo-manga/vim-jplus', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_jplus_hook_add()', \}) call dein#config('vim-jplus', { \ 'lazy': 1, \ 'on_map': [ \ '(jplus)', \ '(jplus-', \ ], \}) call dein#add('thinca/vim-qfreplace') call dein#config('vim-qfreplace', { \ 'lazy': 1, \ 'on_cmd': [ \ 'Qfreplace', \ ], \}) call dein#add('t9md/vim-quickhl', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_quickhl_hook_add()', \}) call dein#config('vim-quickhl', { \ 'lazy': 1, \ 'on_map': [ \ '(quickhl-', \ ], \}) call dein#add('Yggdroot/indentLine') call dein#config('indentLine', { \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_indentLine_hook_source()', \}) call dein#add('spinningarrow/vim-niji') call dein#config('vim-niji', { \ 'lazy': 1, \ 'on_ft': [ \ 'lisp', \ 'scheme', \ 'clojure', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_niji_hook_source()', \}) call dein#add('Konfekt/FastFold') call dein#add('junegunn/vim-easy-align', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_easy_align_hook_add()', \}) call dein#config('vim-easy-align', { \ 'lazy': 1, \ 'on_map': [ \ '(EasyAlign)', \ ], \ 'on_cmd': [ \ 'EasyAlign', \ ], \}) " operator reference " : replace " : comment toggle " : uncomment " : comment toggle (zeropos) " Sa: surround-append " Sd: surround-delete " Sr: surround-replace call dein#add('kana/vim-operator-user') call dein#add('kana/vim-operator-replace', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_operator_replace_hook_add()', \}) call dein#add('tyru/caw.vim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_caw_comment_hook_add()', \}) call dein#add('rhysd/vim-operator-surround', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_operator_surround_hook_add()', \}) " textobj reference " ai, ii: indent " af, if: function " ae, ie: entire " al, il: line " ajb, ijb: ja-braces " ac, ic: between " au, iu: url " ab, ib: multiblock " amt, imt: multitextobj (url, multiblock, function, entire) " av, iv: variable segment " ar, ir: ruby call dein#add('kana/vim-textobj-user') call dein#add('kana/vim-textobj-indent') call dein#add('kana/vim-textobj-function') call dein#add('kana/vim-textobj-entire') call dein#add('kana/vim-textobj-line') call dein#add('kana/vim-textobj-jabraces', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_textobj_jabraces_hook_add()', \}) call dein#add('thinca/vim-textobj-between', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_textobj_between_hook_add()', \}) call dein#add('mattn/vim-textobj-url') call dein#add('osyo-manga/vim-textobj-multiblock', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_textobj_multiblock_hook_add()', \}) call dein#add('osyo-manga/vim-textobj-multitextobj', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_textobj_multitextobj_hook_add()', \}) call dein#add('Julian/vim-textobj-variable-segment') call dein#add('rhysd/vim-textobj-ruby') call dein#config('vim-textobj-ruby', { \ 'lazy': 1, \ 'on_ft': [ \ 'ruby', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_textobj_ruby_hook_source()', \}) call dein#add('tyru/capture.vim') call dein#config('capture.vim', { \ 'lazy': 1, \ 'on_cmd': [ \ 'Capture', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_capture_hook_source()', \}) call dein#add('tyru/open-browser.vim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_openbrowser_hook_add()', \}) call dein#config('open-browser.vim', { \ 'lazy': 1, \ 'on_cmd': [ \ 'OpenBrowser', \ 'OpenBrowserSearch', \ ], \ 'on_func': [ \ 'openbrowser', \ ], \ 'on_ft': [ \ 'markdown', \ ], \ 'on_map': [ \ '(openbrowser-', \ ], \}) call dein#add('tyru/open-browser-github.vim') call dein#config('open-browser-github.vim', { \ 'lazy': 1, \ 'on_cmd': [ \ 'OpenGithubFile', \ 'OpenGithubIssue', \ 'OpenGithubPullReq', \ ], \}) call dein#add('kannokanno/previm') call dein#config('previm', { \ 'lazy': 1, \ 'on_ft': [ \ 'markdown', \ ], \ 'on_cmd': [ \ 'PrevimOpen', \ ], \}) call dein#add('rhysd/vim-gfm-syntax') call dein#config('vim-gfm-syntax', { \ 'lazy': 1, \ 'on_ft': [ \ 'markdown', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_gfm_syntax_hook_source()', \}) call dein#add('rhysd/github-complete.vim') call dein#config('github-complete.vim', { \ 'lazy': 1, \ 'on_i': 1, \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_github_complete_hook_source()', \}) " if has('nvim') " call dein#add('dbgx/lldb.nvim') " call dein#config('lldb.nvim', { " \ 'lazy': 1, " \ 'on_ft': [ " \ 'c', " \ 'cpp', " \ ], " \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_lldb_hook_source()', " \}) " endif call dein#add('basyura/unite-rails') call dein#config('unite-rails', { \ 'lazy': 1, \ 'on_ft': [ \ 'ruby', \ ], \}) call dein#add('eagletmt/ghcmod-vim') call dein#config('ghcmod-vim', { \ 'lazy': 1, \ 'on_ft' : [ \ 'haskell', \ ], \}) call dein#add('neovimhaskell/haskell-vim') call dein#config('haskell-vim', { \ 'lazy': 1, \ 'on_ft': [ \ 'haskell', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_haskell_vim_hook_source()', \}) call dein#add('ujihisa/ref-hoogle', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_ref_hoogle_hook_add()', \}) call dein#config('ref-hoogle', { \ 'lazy': 1, \ 'on_ft': [ \ 'haskell', \ ], \}) call dein#add('ujihisa/unite-haskellimport') call dein#config('unite-haskellimport', { \ 'lazy': 1, \ 'on_source': [ \ 'unite.vim', \ ], \}) call dein#add('alx741/yesod.vim') call dein#config('yesod.vim', { \ 'lazy': 1, \ 'on_ft': [ \ 'haskell', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_yesod_hook_source()', \}) call dein#add('pbrisbin/html-template-syntax') call dein#config('html-template-syntax', { \ 'lazy': 1, \ 'on_ft': [ \ 'hamlet', \ 'cassius', \ 'lucius', \ 'julius', \ ], \ 'on_path': [ \ '.*.hamlet$', \ '.*.cassius$', \ '.*.lucius$', \ '.*.julius$', \ ], \}) call dein#add('ElmCast/elm-vim') call dein#config('elm-vim', { \ 'lazy': 1, \ 'on_ft': [ \ 'elm', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_elm_hook_source()', \}) if has('nvim') call dein#add('BurningEther/iron.nvim') call dein#config('BurningEther/iron.nvim', { \ 'lazy': 1, \ 'on_ft': [ \ 'clojure', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_iron_hook_source()', \}) call dein#add('clojure-vim/acid.nvim') call dein#config('acid.nvim', { \ 'lazy': 1, \ 'on_ft': [ \ 'clojure', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_acid_hook_source()', \}) call dein#add('clojure-vim/async-clj-omni') call dein#config('async-clj-omni', { \ 'lazy': 1, \ 'on_ft': [ \ 'clojure', \ ], \}) else call dein#add('liquidz/vim-iced') call dein#config('vim-iced', { \ 'lazy': 1, \ 'on_ft': [ \ 'clojure', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_iced_hook_source()', \}) endif call dein#add('guns/vim-sexp') call dein#config('vim-sexp', { \ 'lazy': 1, \ 'on_ft': [ \ 'lisp', \ 'scheme', \ 'clojure', \ ], \ 'on_map': [ \ '(sexp_', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_sexp_hook_source()', \}) call dein#add('jpalardy/vim-slime') call dein#config('vim-slime', { \ 'lazy': 1, \ 'on_ft': [ \ 'lisp', \ 'scheme', \ 'clojure', \ 'haskell', \ 'ruby', \ 'python', \ 'javascript', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_slime_hook_source()', \}) call dein#add('fatih/vim-go') call dein#config('vim-go', { \ 'lazy': 1, \ 'on_ft': [ \ 'go', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_go_hook_source()', \}) call dein#add('vim-jp/vim-go-extra') call dein#config('vim-go-extra', { \ 'lazy': 1, \ 'on_ft': [ \ 'go', \ ], \}) call dein#add('rust-lang/rust.vim') call dein#config('rust.vim', { \ 'lazy': 1, \ 'on_ft': [ \ 'rust', \ ], \}) call dein#add('racer-rust/vim-racer') call dein#config('vim-racer', { \ 'lazy': 1, \ 'on_ft': [ \ 'rust', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_racer_hook_source()', \}) call dein#add('baabelfish/nvim-nim') call dein#config('nvim-nim', { \ 'lazy': 1, \ 'on_ft': [ \ 'nim', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_nim_hook_source()', \}) call dein#add('keith/swift.vim') call dein#config('swift.vim', { \ 'lazy': 1, \ 'on_ft': [ \ 'swift', \ ], \ 'on_path': [ \ '.*.swift$', \ ], \}) call dein#add('posva/vim-vue') call dein#config('vim-vue', { \ 'lazy': 1, \ 'on_ft': [ \ 'vue', \ ], \ 'on_path': [ \ '.*.vue$', \ ], \}) call dein#add('autozimu/LanguageClient-neovim') call dein#config('LanguageClient-neovim', { \ 'lazy': 1, \ 'rev': 'next', \ 'build': 'bash install.sh', \ 'on_ft': [ \ 'clojure', \ 'go', \ 'java', \ 'vue', \ ], \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_LanguageClient_hook_add()', \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_LanguageClient_hook_source()', \ 'hook_post_update': 'call ' . s:SID_PREFIX() . 'update_LanguageClient_hook_post_update()', \}) call dein#add('mattn/emmet-vim') call dein#config('emmet-vim', { \ 'lazy': 1, \ 'on_ft': [ \ 'html', \ 'xhtml', \ 'css', \ 'sass', \ 'scss', \ 'xml', \ 'markdown', \ ], \}) call dein#add('elzr/vim-json') call dein#config('vim-json', { \ 'lazy': 1, \ 'on_ft': [ \ 'json', \ 'jsonp', \ ], \ 'on_path': [ \ '.*.json$', \ '.*.jsonp$', \ ], \}) call dein#add('stephpy/vim-yaml') call dein#config('vim-yaml', { \ 'lazy': 1, \ 'on_ft': [ \ 'yaml', \ ], \}) call dein#add('tmux-plugins/vim-tmux') call dein#config('vim-tmux', { \ 'lazy': 1, \ 'on_ft': [ \ 'tmux', \ ], \ 'on_path': [ \ 'tmux.conf', \ ], \}) call dein#add('thinca/vim-ref', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_ref_hook_add()', \}) call dein#config('vim-ref', { \ 'lazy': 1, \ 'on_cmd': [ \ 'Ref', \ ], \ 'on_map': [ \ '(ref-', \ ], \}) call dein#add('daisuzu/translategoogle.vim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_translategoogle_hook_add()', \}) call dein#config('translategoogle.vim', { \ 'lazy': 1, \ 'on_cmd': [ \ 'TranslateGoogle', \ 'TranslateGoogleCmd', \ 'TranslateGoogleCmdReverse', \ ], \}) call dein#add('mattn/webapi-vim') call dein#config('webapi-vim', { \ 'lazy': 1, \ 'on_func': [ \ 'webapi', \ ], \}) call dein#add('lambdalisue/gina.vim') call dein#config('gina.vim', { \ 'lazy': 1, \ 'on_cmd': [ \ 'Gina', \ ], \ 'on_map': [ \ '(gina-', \ ], \ 'on_func': [ \ 'gina', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_gina_hook_source()', \}) call dein#add('lambdalisue/vim-gista') call dein#config('vim-gista', { \ 'lazy': 1, \ 'on_cmd': [ \ 'Gista', \ ], \ 'on_map': [ \ '(gista-', \ ], \ 'on_source': [ \ 'unite.vim', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_gista_hook_source()', \}) call dein#add('koron/codic-vim') call dein#config('codic-vim', { \ 'lazy': 1, \ 'on_cmd': [ \ 'Codic', \ ], \ 'on_source' : [ \ 'unite.vim', \ ], \ 'on_func': [ \ 'codic', \ ], \}) call dein#add('rhysd/unite-codic.vim') call dein#config('unite-codic.vim', { \ 'lazy': 1, \ 'on_source' : [ \ 'unite.vim', \ ], \}) call dein#add('rinx/radiko.vim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_radiko_hook_add()', \}) call dein#config('radiko.vim', { \ 'lazy': 1, \ 'on_source': [ \ 'unite.vim', \ ], \ 'on_cmd': [ \ 'RadikoPlay', \ 'RadikoUpdateStations', \ 'RadikoStop', \ ], \ 'on_func': [ \ 'radiko', \ ], \ 'hook_source': 'call ' . s:SID_PREFIX() . 'init_radiko_hook_source()', \}) call dein#add('rinx/yj-proofreading.vim', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_yj_proofreading_hook_add()', \}) call dein#config('yj-proofreading.vim', { \ 'lazy': 1, \ 'on_cmd': [ \ 'YahooProofReader', \ ], \ 'on_func': [ \ 'yjproofreading', \ ], \}) if has('nvim') call dein#add('morhetz/gruvbox', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_gruvbox_hook_add()', \}) else call dein#add('w0ng/vim-hybrid', { \ 'hook_add': 'call ' . s:SID_PREFIX() . 'init_hybrid_hook_add()', \}) call dein#add('cocopon/lightline-hybrid.vim') endif call dein#add('vim-jp/vital.vim') call dein#config('vital.vim', { \ 'lazy': 1, \ 'on_cmd': [ \ 'Vitalize', \ ], \ 'on_func': [ \ 'vital', \ ], \}) call dein#end() call dein#save_state() if has('vim_starting') && dein#check_install() call dein#install() if has('nvim') call dein#remote_plugins() endif endif else echo "If you want to use plugins, you should use VIM 8.0, newer one, or NVIM." endif set viminfo='1000,<100,f1,h,s100 set history=300 set bs=indent,eol,start set ruler set number " set cursorline " set cursorcolumn set cmdheight=2 set wildmenu set wildchar= set wildmode=longest:full,full set imdisable set incsearch set ignorecase set smartcase filetype plugin indent on set autoindent set smartindent set breakindent " unsaved buffer warning set confirm if has('nvim') set clipboard+=unnamed,unnamedplus else set clipboard+=unnamed,autoselect endif set mouse=a if !has('nvim') set ttymouse=xterm2 endif set foldmethod=marker set virtualedit=block set expandtab set smarttab set tabstop=8 set shiftwidth=4 set softtabstop=4 if &term=="xterm" set t_Co=256 set t_Sb=[4%dm set t_Sf=[3%dm endif syntax on set hlsearch set termguicolors let &t_8f = "\[38;2;%lu;%lu;%lum" let &t_8b = "\[48;2;%lu;%lu;%lum" set visualbell set lazyredraw set ttyfast set sessionoptions+=tabpages set sessionoptions-=options set showmatch set matchtime=3 if v:version >= 703 && !has('nvim') set cryptmethod=blowfish set conceallevel=0 endif set backup set undofile set undolevels=1000 set undoreload=10000 set backupdir=~/.vim/tmp/backup set undodir=~/.vim/tmp/undo set directory=~/.vim/tmp/swap if !isdirectory(expand(&backupdir)) call mkdir(expand(&backupdir), "p") endif if !isdirectory(expand(&undodir)) call mkdir(expand(&undodir), "p") endif if !isdirectory(expand(&directory)) call mkdir(expand(&directory), "p") endif set list set listchars=eol:¬,tab:▸\ ,extends:>,precedes:<,trail:- set noautochdir set autoread set noautowrite set noexrc set nosecure set timeout set timeoutlen=1000 set ttimeoutlen=200 syntax enable " A function to convert csv to markdown table function! s:csv_to_markdown_table () range let lines = getline(a:firstline, a:lastline) let linecount = a:lastline - a:firstline let spacelen = [] let maxrownum = 0 let maxcollen = [] let values = [] for i in range(0, linecount) let linespacelen = [] call add(values, split(substitute(lines[i], '\s*\,\s*', ',', 'g'), ',')) for v in values[i] call add(linespacelen, len(v)) endfor if len(values[i]) > maxrownum let maxrownum = len(values[i]) endif call add(spacelen, linespacelen) unlet linespacelen endfor for i in range(0, linecount) while len(spacelen[i]) < maxrownum call add(spacelen[i], 0) endwhile endfor for i in range(0, maxrownum - 1) call add(maxcollen, 0) for j in range(0, linecount) if spacelen[j][i] > maxcollen[i] let maxcollen[i] = spacelen[j][i] endif endfor endfor for i in range(0, linecount) let aftersbst = "" for j in range(0, len(values[i]) - 1) let aftersbst .= "| " . values[i][j] . repeat(" ", maxcollen[j] - len(values[i][j])) . " " endfor call setline(i + a:firstline, aftersbst . "|") endfor let secondline = "" for i in range(0, len(values[0]) - 1) let secondline .= "|:" . repeat("-", maxcollen[i]) . ":" endfor call append(a:firstline, secondline . "|") endfunction command! -range CsvToMarkdownTable ,call s:csv_to_markdown_table() " A function to convert csv to tex table function! s:csv_to_tex_table() range let lines = getline(a:firstline, a:lastline) let spacelen = [] let maxrownum = 0 let maxcollen = [] let values = [] for i in range(0, a:lastline - a:firstline) let linespacelen = [] call add(values, split(substitute(lines[i], '\s*\,\s*', ',', 'g'), ',')) for v in values[i] call add(linespacelen, len(v)) endfor if len(values[i]) > maxrownum let maxrownum = len(values[i]) endif call add(spacelen, linespacelen) unlet linespacelen endfor for i in range(0, a:lastline - a:firstline) while len(spacelen[i]) < maxrownum call add(spacelen[i], 0) endwhile endfor for i in range(0, maxrownum - 1) call add(maxcollen, 0) for j in range(0, a:lastline - a:firstline) if spacelen[j][i] > maxcollen[i] let maxcollen[i] = spacelen[j][i] endif endfor endfor for i in range(0, a:lastline - a:firstline) let aftersbst = values[i][0] . repeat(" ", maxcollen[0] - len(values[i][0])) . " " for j in range(1, len(values[i]) - 1) let aftersbst .= "& " . values[i][j] . repeat(" ", maxcollen[j] - len(values[i][j])) . " " endfor call setline(i + a:firstline, aftersbst . "\\\\") endfor endfunction command! -range CsvToTexTable ,call s:csv_to_tex_table() " Make new window for Japanese input via skk.vim function! s:make_japanese_input_window() let _ = '' if has('mac') let _ = 'w !pbcopy' augroup vimrc-makeJapaneseInputWindow autocmd! autocmd InsertLeave,FileType input_via_skk \ call cp_from_japanese_input_window('w !pbcopy') augroup END elseif has('unix') let _ = 'w !xsel --clipboard --input' augroup vimrc-makeJapaneseInputWindow autocmd! autocmd InsertLeave,FileType input_via_skk \ call cp_from_japanese_input_window('w !xsel --clipboard --input') augroup END endif let newbufname = 'input_via_skk' silent! execute 'new' newbufname silent! execute 'setlocal' ('filetype=' . newbufname) silent! execute 'nnoremap :' . _ . 'dd' silent! nnoremap q :q! endfunction function! s:cp_from_japanese_input_window(cpcmd) silent! execute a:cpcmd silent! execute "call setline('.', '')" endfunction command! MakeJapaneseInputWindow call s:make_japanese_input_window() function! s:init_rails_routes_quickfix_hook() abort let g:rails_routes_quickfix_cmd = "bin/rake routes" function! s:init_rails_routes_quickfix() abort cexpr system(g:rails_routes_quickfix_cmd) copen endfunction command! RailsRoutesOnQuickfix call init_rails_routes_quickfix() endfunction augroup vimrc-init_rails_routes_quickfix_hook autocmd! autocmd FileType ruby call init_rails_routes_quickfix_hook() augroup END " completion function for fixed candidate list " example: " let testlist = [ " \ ['immobile', 'immobile: 動かせない'], " \ ['immodest', 'immodest: 慎みのない'], " \ ['immoderation', 'immoderation: 過度'], " \ ['immodulated', 'immodulated: 節度のない'], " \] " inoremap a =anything_complete(testlist, '[testlist]') function! s:anything_complete(list, menu) let line = getline('.') let start = match(line, '\k\+$') let candlist = map(copy(a:list), '{ \ "word": v:val[0], \ "abbr": v:val[1], \ "menu": a:menu \}') let cand = s:anything_complete_candidates(candlist, line[start :]) call complete(start +1, cand) return '' endfunction function! s:anything_complete_candidates(list, arglead) return filter(copy(a:list), 'stridx(v:val.word, a:arglead) == 0') endfunction " https://gist.github.com/sgur/4e1cc8e93798b8fe9621 inoremap c =codic_complete() function! s:codic_complete() let line = getline('.') let start = match(line, '\k\+$') let cand = s:codic_candidates(line[start :]) call complete(start +1, cand) return '' endfunction function! s:codic_candidates(arglead) let cand = codic#search(a:arglead, 30) " error if type(cand) == type(0) return [] endif " english -> english terms if a:arglead =~# '^\w\+$' return map(cand, '{"word": v:val["label"], "menu": join(map(copy(v:val["values"]), "v:val.word"), ",")}') endif " japanese -> english terms return s:reverse_candidates(cand) endfunction function! s:reverse_candidates(cand) let _ = [] for c in a:cand for v in c.values call add(_, {"word": v.word, "menu": !empty(v.desc) ? v.desc : c.label }) endfor endfor return _ endfunction " Google suggestions " based on https://github.com/mattn/googlesuggest-complete-vim inoremap g =googlesuggestion_complete() function! s:googlesuggestion_complete() let line = getline('.') let start = match(line, '\k\+$') let cand = s:googlesuggestion_candidates(line[start :]) call complete(start +1, cand) return '' endfunction function! s:googlesuggestion_candidates(arglead) let ret = [] let res = webapi#http#get('http://suggestqueries.google.com/complete/search', { \ "client" : "youtube", \ "q" : a:arglead, \ "hjson" : "t", \ "hl" : "ja", \ "ie" : "UTF8", \ "oe" : "UTF8", \}) let arr = webapi#json#decode(res.content) for m in arr[1] call add(ret, m[0]) endfor return ret endfunction let s:unite_source_googlesuggestion = { \ 'name': 'googlesuggestion', \ 'action_table' : { \ 'google_search' : { \ 'description' : 'google by this word.', \ }, \ }, \ 'default_action' : 'google_search', \} function! s:unite_source_googlesuggestion.action_table.google_search.func(candidate) call dein#source('open-browser.vim') call openbrowser#search(a:candidate.word, 'google') endfunction function! s:unite_source_googlesuggestion.change_candidates(args, context) let word = matchstr(a:context.input, '^\(\S\|\s\)\+') if word == '' return [] endif let cand = s:googlesuggestion_candidates(word) let cand = extend([word], cand) return map(cand, '{ \ "word": v:val, \ }') endfunction augroup vimrc-unite-googlesuggestion-define autocmd! autocmd VimEnter * call unite#define_source(s:unite_source_googlesuggestion) augroup END " visualize ' ' " http://inari.hatenablog.com/entry/2014/05/05/231307 function! s:zenkaku_space() highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=darkgray endfunction if has('syntax') augroup vimrc-zenkaku_space autocmd! autocmd ColorScheme * call zenkaku_space() autocmd VimEnter,WinEnter,BufRead * let w:m1=matchadd('ZenkakuSpace', ' ') augroup END call zenkaku_space() endif let g:mapleader = '\' " reload .vimrc nnoremap :source ~/.vimrc nnoremap ; : nnoremap : ; vnoremap ; : vnoremap : ; " Disable cursor keys nnoremap nnoremap nnoremap nnoremap inoremap inoremap inoremap inoremap " For TMUX nnoremap " Remap to act as expected nnoremap j gj nnoremap k gk nnoremap 0 g0 nnoremap $ g$ vnoremap j gj vnoremap k gk onoremap j gj onoremap k gk nnoremap gj j nnoremap gk k nnoremap g0 0 nnoremap g$ $ vnoremap gj j vnoremap gk k onoremap gj j onoremap gk k " Use Y as y$ nnoremap Y y$ " Access to system clipboard nnoremap ,p "+p nnoremap ,P "+P " yank (copy) and delete (cut) for system clipboard nnoremap ,y "+y nnoremap ,d "+d vnoremap ,y "+y vnoremap ,d "+d " Use history with C-p or C-n on command-mode cnoremap cnoremap " for tabline nnoremap [Tab] nmap ,t [Tab] " for buffer nnoremap [Buf] nmap ,b [Buf] for s:n in range(1, 9) execute 'nnoremap [Tab]'. s:n ':tabnext'. s:n .'' execute 'nnoremap [Buf]'. s:n ':buffer '. s:n .'' endfor nnoremap [Tab]c :tablast tabnew nnoremap [Tab]x :tabclose nnoremap [Tab]n :tabnext nnoremap [Tab]p :tabprevious nnoremap [Tab]l :+tabmove nnoremap [Tab]h :-tabmove if has('nvim') " for terminal tnoremap endif " for window nnoremap s nnoremap sj j nnoremap sk k nnoremap sl l nnoremap sh h nnoremap sJ J nnoremap sK K nnoremap sL L nnoremap sH H nnoremap sr r nnoremap sw w nnoremap s_ _ nnoremap s| | nnoremap so _| nnoremap sO = nnoremap s= = nnoremap ss :sp nnoremap sv :vs " toggle paste mode nnoremap p :setl paste! " toggle relativenumber nnoremap r :setl relativenumber! " toggle spell check nnoremap s :setl spell! " close special windows from another window nnoremap q :call close_special_windows() function! s:close_window(winnr) if winbufnr(a:winnr) !=# -1 execute a:winnr . 'wincmd w' execute 'wincmd c' return 1 else return 0 endif endfunction function! s:close_special_windows() let target_ft = [ \ 'ref', \ 'ref-webdict', \ 'unite', \ 'denite', \ 'vaffle', \ 'qf', \ 'quickrun', \ 'undotree', \ 'nerdtree', \ 'help', \ 'input_via_skk', \ ] let i = 1 while i <= winnr('$') let bufnr = winbufnr(i) if index(target_ft, getbufvar(bufnr, '&filetype')) >= 0 call s:close_window(i) endif let i = i + 1 endwhile endfunction " disable some default mappings nnoremap ZZ nnoremap ZQ nnoremap Q " sticky shift " http://vim-jp.org/vim-users-jp/2009/08/09/Hack-54.html function! s:sticky_func() let l:sticky_table = { \',' : '<', '.' : '>', '/' : '?', \'1' : '!', '2' : '@', '3' : '#', '4' : '$', '5' : '%', \'6' : '^', '7' : '&', '8' : '*', '9' : '(', '0' : ')', '-' : '_', '=' : '+', \';' : ':', '[' : '{', ']' : '}', '`' : '~', "'" : "\"", '\' : '|', \} let l:special_table = { \"\" : "\", "\" : ';', "\" : ";\" \} let l:key = getchar() if nr2char(l:key) =~ '\l' return toupper(nr2char(l:key)) elseif has_key(l:sticky_table, nr2char(l:key)) return l:sticky_table[nr2char(l:key)] elseif has_key(l:special_table, nr2char(l:key)) return l:special_table[nr2char(l:key)] else return '' endif endfunction cnoremap ; sticky_func() let s:sticky_shift_except_for_filetype = [ \ 'c', \ 'cpp', \ 'java', \ 'idlang', \ 'javascript', \ 'clojure', \] function! s:init_sticky_shift_hook_autocmd() abort if index(s:sticky_shift_except_for_filetype, &ft) < 0 inoremap ; sticky_func() snoremap ; sticky_func() else inoremap ; ; snoremap ; ; endif endfunction augroup vimrc-sticky-shift autocmd! autocmd FileType * call s:init_sticky_shift_hook_autocmd() augroup END " QuickFix window augroup vimrc-forQuickFix autocmd! " mappings autocmd FileType qf nnoremap j j autocmd FileType qf nnoremap k k autocmd FileType qf nnoremap 0 0 autocmd FileType qf nnoremap $ $ autocmd FileType qf nnoremap gj gj autocmd FileType qf nnoremap gk gk autocmd FileType qf nnoremap g0 g0 autocmd FileType qf nnoremap g$ g$ " quit QuickFix with q-key autocmd FileType qf nnoremap q :q " autoclose autocmd WinEnter * if (winnr('$') == 1) && (getbufvar(winbufnr(0), '&buftype')) == 'quickfix' | q | endif augroup END " Help window augroup vimrc-forHelpWindow autocmd! " mappings autocmd FileType help nnoremap j j autocmd FileType help nnoremap k k autocmd FileType help nnoremap 0 0 autocmd FileType help nnoremap $ $ autocmd FileType help nnoremap gj gj autocmd FileType help nnoremap gk gk autocmd FileType help nnoremap g0 g0 autocmd FileType help nnoremap g$ g$ autocmd FileType help nnoremap q :q " autoclose autocmd WinEnter * if (winnr('$') == 1) && (getbufvar(winbufnr(0), '&buftype')) == 'help' | q | endif augroup END augroup vimrc-filetype-force-tex autocmd! autocmd FileType latex,plaintex setlocal filetype=tex augroup END set laststatus=2 set showtabline=2 if has('nvim') let lightline_colorscheme = 'default' else let lightline_colorscheme = 'hybrid' endif let g:lightline = { \ 'active': { \ 'left': [ \ [ 'mode', 'paste', 'spell' ], \ [ 'gina', 'filename' ], \ ], \ 'right': [ \ [ 'lineinfo' ], \ [ 'percent' ], \ [ 'skkstatus', 'anzu', 'fileformat', 'fileencoding', 'filetype' ], \ ], \ }, \ 'component_function': { \ 'modified': 'MyModified', \ 'readonly': 'MyReadonly', \ 'gina': 'MyGina', \ 'filename': 'MyFilename', \ 'fileformat': 'MyFileformat', \ 'filetype': 'MyFiletype', \ 'mode': 'MyMode', \ 'skkstatus': 'MySkkgetmode', \ 'anzu': 'anzu#search_status', \ 'tablineabspath': 'MyAbsPath', \ 'tabGina': 'MyGinaInv', \ 'tabradikosta': 'MyRadikoSta', \ }, \ 'component_expand': { \ }, \ 'component_type': { \ }, \ 'inactive' : { \ 'left' : [ \ [ 'filename' ], \ ], \ 'right' : [ \ [ 'lineinfo' ], \ ], \ }, \ 'tabline' : { \ 'left' : [ \ [ 'tabs' ], \ ], \ 'right' : [ \ [ 'tablineabspath', 'tabGina', 'tabradikosta' ], \ ], \ }, \ 'colorscheme' : lightline_colorscheme, \ } unlet lightline_colorscheme function! MyModified() return &ft =~ 'help\|vaffle\|undotree\|nerdtree\|qf\|quickrun' ? '' : &modified ? '+' : &modifiable ? '' : '-' endfunction function! MyReadonly() return &ft !~? 'help\|vaffle\|undotree\|nerdtree\|qf\|quickrun' && &ro ? 'RO' : '' endfunction function! MyGina() try if &ft !~? 'vaffle\|undotree\|nerdtree\|qf\|quickrun' let _ = gina#component#repo#branch() return winwidth('.') > 70 ? strlen(_) ? _ : '' : '' endif catch endtry return '' endfunction function! MyGinaInv() try if &ft !~? 'vaffle\|undotree\|nerdtree\|qf\|quickrun' let _ = gina#component#repo#branch() return winwidth('.') < 70 ? strlen(_) ? _ : '' : '' endif catch endtry return '' endfunction function! MyFileformat() return winwidth('.') > 70 ? &fileformat : '' endfunction function! MyFiletype() return winwidth('.') > 70 ? (strlen(&filetype) ? &filetype : 'no ft') : '' endfunction function! MyFileencoding() return winwidth('.') > 70 ? (strlen(&fenc) ? &fenc : &enc) : '' endfunction function! MyMode() return &ft == 'vaffle' ? 'Vaffle' : \ &ft == 'unite' ? 'Unite' : \ &ft == 'denite' ? 'Denite' : \ &ft == 'undotree' ? 'UNDOtree' : \ &ft == 'nerdtree' ? 'NERDtree' : \ &ft == 'qf' ? 'QuickFix' : \ &ft == 'quickrun' ? '' : \ winwidth('.') > 60 ? lightline#mode() : lightline#mode()[0] endfunction function! MyFilename() return ('' != MyReadonly() ? MyReadonly() . ' ' : '') . \ (&ft == 'unite' ? unite#get_status_string() : \ &ft == 'qf' ? len(getqflist()) . ' fixes' : \ &ft == 'quickrun' ? 'QuickRun' : \ '' != expand('%:t') ? expand('%:t') : '[No Name]') . \ ('' != MyModified() ? ' ' . MyModified() : '') endfunction function! MySkkgetmode() if s:enable_eskk let _ = eskk#get_mode() else let _ = SkkGetModeStr() endif return winwidth('.') > 70 ? strlen(_) ? substitute(_, '\[\|\]', '', 'g') : '' : '' endfunction function! MyAbsPath() let _ = expand('%:p:h') return &ft == 'vaffle' ? '' : \ &ft == 'unite' ? '' : \ &ft == 'denite' ? '' : \ &ft == 'qf' ? '' : \ &ft == 'quickrun' ? '' : \ tabpagenr('$') > 3 ? '' : \ strlen(_) < winwidth('.') / 2 ? _ : '' endfunction function! MyRadikoSta() if g:radiko#is_loaded if radiko#is_playing() let _ = radiko#get_playing_station_id() if winwidth('.') > 70 if _ == 'RN2' let m = radiko#get_playing_rn2_music() if winwidth('.') > 120 let n = radiko#get_next_rn2_music() let _ = strlen(m[0]) ? \ strlen(n[0]) ? \ strlen(expand('%:p:h')) > 40 ? \ m[0] . ' - ' . m[1] : \ '[Now] ' . m[0] . ' - ' . m[1] . \ ' [Next] ' . n[0] . ' - ' . n[1] \ : m[0] . ' - ' . m[1] : '' else let _ = strlen(m[0]) ? m[0] . ' - ' . m[1] : '' endif else let _ = radiko#get_playing_station() endif endif else let _ = '' endif else let _ = '' endif return winwidth('.') > 30 ? strlen(_) ? '♪' . _ : '' : '' endfunction " when creating new file, if it does not exist directory, " this function will ask you to create new directory. augroup vimrc-auto-mkdir autocmd! autocmd BufWritePre * call auto_mkdir(expand(':p:h'), v:cmdbang) function! s:auto_mkdir(dir, force) if match(a:dir, '\(scp://\|http://\|https://\)') == -1 if !isdirectory(a:dir) && (a:force || \ input(printf('"%s" does not exist. Create? [y/N]', a:dir)) =~? '^y\%[es]$') call mkdir(iconv(a:dir, &encoding, &termencoding), 'p') endif endif endfunction augroup END " load Session.vim augroup vimrc-session-vim-auto-load autocmd! autocmd VimEnter * nested call load_session_vim(expand(':p:h')) augroup END function! s:load_session_vim(loc) let files = findfile('Session.vim', escape(a:loc, ' ') . ';', -1) if !argc() for i in reverse(filter(files, 'filereadable(v:val)')) if input(printf('Session.vim exists in "%s". Load it? [y/N]', i)) =~? '^y\%[es]$' source `=i` endif endfor endif endfunction " load .vimrc.local automatically augroup vimrc-local autocmd! autocmd BufNewFile,BufReadPost * call vimrc_local(expand(':p:h')) augroup END function! s:vimrc_local(loc) let files = findfile('.vimrc.local', escape(a:loc, ' ') . ';', -1) for i in reverse(filter(files, 'filereadable(v:val)')) source `=i` endfor endfunction