" ====================================== deni.vim settings ====================================== if &compatible set nocompatible endif " install dir let s:dein_dir = expand('~/.cache/dein') let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim' " dein installation check if &runtimepath !~# '/dein.vim' if !isdirectory(s:dein_repo_dir) execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_dir endif execute 'set runtimepath^=' . fnamemodify(s:dein_repo_dir, ':p') endif " begin settings if dein#load_state(s:dein_dir) call dein#begin(s:dein_dir) " .toml file let g:rc_dir = expand('~/.vim') let s:toml = g:rc_dir . '/dein.toml' let s:lazy_toml = g:rc_dir . '/dein_lazy.toml' " read toml and cache call dein#load_toml(s:toml, {'lazy': 0}) call dein#load_toml(s:lazy_toml, {'lazy': 1}) " end settings call dein#end() call dein#save_state() endif " plugin installation check if dein#check_install() call dein#install() endif " ====================================== general settings ====================================== " https://vim-jp.org/vimdoc-ja/map.html#mapleader " Leaderキーをスペースに設定 let mapleader = "\" " シンタックスを有効にする syntax on " https://vim-jp.org/vimdoc-ja/filetype.html#:filetype-plugin-on " https://vim-jp.org/vimdoc-ja/filetype.html#:filetype-indent-on " ファイル形式別プラグインとインデントを有効にする " これがないとvim-goなどが動作しない filetype plugin indent on " https://github.com/posva/vim-vue#my-syntax-highlighting-stops-working-randomly " vueファイルのシンタックスが効かなくなる問題対応 au FileType vue syntax sync fromstart " バックスペースとCtrl+hで削除を有効にする set backspace=2 " 改行時自動インデント set smartindent " 行番号を表示 set number " カーソルから相対的な行数を表示する set relativenumber " https://vim-jp.org/vimdoc-ja/options.html#'tabstop' " タブでも常に空白を挿入 set tabstop=4 set shiftwidth=4 set expandtab " インクリメントサーチを有効にする set incsearch " https://vim-jp.org/vimdoc-ja/options.html#'ignorecase' " 検索時大文字小文字を区別しない set ignorecase " https://vim-jp.org/vimdoc-ja/options.html#'smartcase' " 検索時に大文字を入力した場合ignorecaseが無効になる set smartcase " ハイライトサーチを有効にする set hlsearch " undoできる最大数 set undolevels=1000 " mac os のクリップボードを共有 set clipboard+=unnamed " カーソルが常に中央に来るようにする set scrolloff=100 " スワップファイルに書き込まれる時間(ミリ秒単位) set updatetime=450 set lazyredraw set ttyfast " 一行が長いファイルをsyntaxを制御することで軽くする set synmaxcol=256 " カーソルラインを表示する set cursorline " https://vim-jp.org/vimdoc-ja/pi_netrw.html#g:netrw_liststyle " netrwツリー表示を有効にする let g:netrw_liststyle = 3 " 拡張子ごとのインデントを指定する augroup fileTypeIndent autocmd! autocmd BufNewFile,BufRead *.html setlocal tabstop=4 softtabstop=4 shiftwidth=4 autocmd BufNewFile,BufRead *.js setlocal tabstop=2 softtabstop=2 shiftwidth=2 autocmd BufNewFile,BufRead *.vue setlocal tabstop=2 softtabstop=2 shiftwidth=2 augroup END " https://vim-jp.org/vimdoc-ja/options.html#'wildmode' " wildmenuを有効にする set wildmenu set wildmode=full " grepした結果をquickfixに表示する au QuickFixCmdPost *grep* cwindow " ====================================== key mappings ====================================== " ファイル保存と終了 nmap w :w nmap q :q! " 検索 nmap :Ggrep " 置換 nmap re :%s;;g; " visualで選択したテキストを置換する vnoremap re y:%s/=substitute(@", "", "\\\\n", "g")//g " ハイライトを削除する nmap :nohlsearch " 画面移動 nmap h nmap j nmap k nmap l " vimrcを開く nmap . :e ~/.vimrc " Ctrl+cでnormalモード nmap " text object key mapping " cut nmap c8 ci( nmap c2 ci" nmap c7 ci' nmap c@ ci` nmap c[ ci[ nmap c{ ci{ nmap ca8 ca( nmap ca2 ca" nmap ca7 ca' nmap ca@ ca` nmap ca[ ca[ nmap ca{ ca{ " delete nmap d8 di( nmap d2 di" nmap d7 di' nmap d@ di` nmap d[ di[ nmap d{ di{ nmap da8 da( nmap da2 da" nmap da7 da' nmap da@ da` nmap da[ da[ nmap da{ da{ " yank nmap y8 yi( nmap y2 yi" nmap y7 yi' nmap y@ yi` nmap y[ yi[ nmap y{ yi{ nmap ya8 ya( nmap ya2 ya" nmap ya7 ya' nmap ya@ ya` nmap ya[ ya[ nmap ya{ ya{ " visual nmap v8 vi( nmap v2 vi" nmap v7 vi' nmap v@ vi` nmap v[ vi[ nmap v{ vi{ nmap va8 va( nmap va2 va" nmap va7 va' nmap va@ va` nmap va[ va[ nmap va{ va{ " カーソルラインの位置を保存する if has("autocmd") autocmd BufReadPost * \ if line("'\"") > 0 && line ("'\"") <= line("$") | \ exe "normal! g'\"" | \ endif endif " undoの保存先 if has('persistent_undo') set undodir=~/.vim/undo set undofile endif " numberとrelativenumberの切り替え function! ToggleRelativenumber() abort if &relativenumber == 1 setlocal norelativenumber else setlocal relativenumber endif endfunction nnoremap n :call ToggleRelativenumber() " 自作アプリケーションランチャー nnoremap l :belowright term ++close gol -f " visual paste vnoremap "0p " ターミナルを下部で開く nnoremap te :belowright term " ====================================== vim-go settings ====================================== " ファイル保存時go importを実行する let g:go_fmt_command = "goimports" " ファイル保存時、linterを実行する let g:go_metalinter_autosave = 1 " linter実行時、go vetのみを実行する let g:go_metalinter_autosave_enabled = ['vet'] " vim-lspをしようするので、vim-goの`Ctrl+]`を無効にする let g:go_def_mapping_enabled = 0 " GoRunやGoTest時の画面分割方法変更 let g:go_term_mode = 'split' " key mapping au FileType go nmap c (go-coverage) au FileType go nmap r (go-run) au FileType go nmap t (go-test) au FileType go nmap c (go-coverage) au FileType go nmap at :GoAddTags au FileType go nmap rt :GoRemoveTags au FileType go nmap fs :GoFillStruct au FileType go nmap ki :GoKeyify au FileType go nmap dd :GoDeclsDir au FileType go nmap dl :GoDecls au FileType go nmap ip :GoImpl au FileType go nmap rn :GoRename au FileType go nmap :GoDebugStart au FileType go nmap :GoDebugStop " ====================================== fzf settings ====================================== nmap :GFiles " ====================================== lsp settings ====================================== nmap :LspDefinition nmap rf :LspReferences nmap im :LspImplementation " 非同期補完を有効にする let g:lsp_async_completion = 1 " ====================================== lsp golang settings ====================================== " https://github.com/saibing/bingo/wiki/Install if executable('bingo') au User lsp_setup call lsp#register_server({ \ 'name': 'bingo', \ 'cmd': {server_info->['bingo', '-mode', 'stdio', '-logfile', '/Users/skanehira/bingo.log']}, \ 'whitelist': ['go'], \ }) endif let g:lsp_log_verbose = 1 let g:lsp_log_file = expand('~/vim-lsp.log') " ====================================== lsp php settings ====================================== au User lsp_setup call lsp#register_server({ \ 'name': 'php-language-server', \ 'cmd': {server_info->['php', expand('~/.cache/dein/repos/github.com/felixfbecker/php-language-server/bin/php-language-server.php')]}, \ 'whitelist': ['php'], \ }) " ====================================== lsp js settings ====================================== if executable('flow-language-server') au User lsp_setup call lsp#register_server({ \ 'name': 'flow-language-server', \ 'cmd': {server_info->[&shell, &shellcmdflag, 'flow-language-server --stdio']}, \ 'root_uri':{server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), '.flowconfig'))}, \ 'whitelist': ['javascript', 'javascript.jsx'], \ }) endif " ====================================== lsp docker settings ====================================== if executable('docker-langserver') au User lsp_setup call lsp#register_server({ \ 'name': 'docker-langserver', \ 'cmd': {server_info->[&shell, &shellcmdflag, 'docker-langserver --stdio']}, \ 'whitelist': ['dockerfile'], \ }) endif " ====================================== lsp css settings ====================================== if executable('css-languageserver') au User lsp_setup call lsp#register_server({ \ 'name': 'css-languageserver', \ 'cmd': {server_info->[&shell, &shellcmdflag, 'css-languageserver --stdio']}, \ 'whitelist': ['css', 'less', 'sass'], \ }) endif " ====================================== asyncomplete settings ====================================== inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" " ====================================== vim-markdown settings ====================================== " mdを開くときの折りたたみを無効にする let g:vim_markdown_folding_disabled = 1 " ====================================== vim-surround settings ====================================== nmap 7 ysiw' nmap 2 ysiw" nmap ` ysiw` nmap 8 ysiw) nmap [ ysiw] nmap { ysiw} " ====================================== ultisnips settings ====================================== let g:UltiSnipsExpandTrigger="" let g:UltiSnipsJumpForwardTrigger="" let g:UltiSnipsJumpBackwardTrigger="" " ultisnipes自動補完 if has('python3') call asyncomplete#register_source(asyncomplete#sources#ultisnips#get_source_options({ \ 'name': 'ultisnips', \ 'whitelist': ['*'], \ 'completor': function('asyncomplete#sources#ultisnips#completor'), \ })) endif " ====================================== profiling ====================================== " vim +'call ProfileCursorMove()' <カーソルを動かすのが重いファイル> function! ProfileCursorMove() abort let profile_file = expand('./vim-profile.log') if filereadable(profile_file) call delete(profile_file) endif normal! gg normal! zR execute 'profile start ' . profile_file profile func * profile file * augroup ProfileCursorMove autocmd! autocmd CursorHold profile pause | q augroup END for i in range(1000) call feedkeys('j') endfor endfunction " ====================================== emment ====================================== let g:user_emmet_install_global = 0 let g:user_emmet_settings = { \ 'variables': { \ 'lang' : 'ja' \ } \} au FileType html,css,vue EmmetInstall au FileType html,css,vue imap , " ====================================== vim-keymaps ====================================== imap KeyMapRotate let g:keymaps = [ \ { \ 'name': 'normal', \ }, \ { \ 'name': 'coding', \ 'keymap': { \ 'inoremap': { \ '1': '!', \ '!': '1', \ '2': '"', \ '"': '2', \ '3': '#', \ '#': '3', \ '4': '$', \ '$': '4', \ '5': '%', \ '%': '5', \ '6': '&', \ '&': '6', \ '7': "'", \ "'": '7', \ '8': '(', \ '(': '8', \ '9': ')', \ ')': '9', \ '@': '`', \ '`': '@', \ '-': '=', \ '=': '-', \ }, \ }, \ }, \] " ====================================== lightline ====================================== set laststatus=2 if !has('gui_running') set t_Co=256 endif " ====================================== ale ====================================== let g:ale_sign_error = 'xx' let g:ale_sign_warning = '!!' let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' let g:ale_set_highlights = 0