最近使って感動したvimプラグインとvimrcの公開!

15 min read読了の目安(約14300字 2

かなり定まってきたため紹介します
僕のおすすめプラグインは以下の3つです

  • yuttie/comfortable-motion.vim
  • junegunn/fzf.vim
  • easymotion/vim-easymotion
    ぜひ使ってみてください

最後にvimrc公開しておきます。

もし気になる点などあれば教えて下さい待ってます

fzf, cocが少し起動だったり、動きが遅くて困っています

mkdir ~/.vim/plugged
mkdir ~/.vim/autoload/
"" ----------------------------------------
""  Plugin
"" ----------------------------------------
let s:plugdir = '~/.vim/plugged'
let s:plugfile = '~/.vim/autoload/plug.vim'
let s:plugurl  = 'https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

if empty(glob(s:plugfile))
  silent !echo '[Downloading vim-plug] ...'
  silent execute '!mkdir -p ' . s:vimdir . 'autoload'
  if executable('curl')
    silent execute '!curl -sLo ' . s:plugfile ' ' . s:plugurl
  elseif executable('wget')
    silent execute '!wget -q -O ' . s:plugfile ' ' . s:plugurl
  else
    silent !echo 'vim-plug failed: you need either wget or curl'
    cquit
  endif
  autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

call plug#begin(s:plugdir)

  " タグ生成
  Plug 'mattn/emmet-vim'
  " カラーテーマ
  Plug 'ayu-theme/ayu-vim'
  Plug 'vim-airline/vim-airline'
  " モーションなめらか化
  Plug 'yuttie/comfortable-motion.vim'
  " スペース可視化
  Plug 'bronson/vim-trailing-whitespace'
  " シンタックス/ colorを可視化
  Plug 'sheerun/vim-polyglot'
  Plug 'ap/vim-css-color'
  Plug 'scrooloose/syntastic'
  Plug 'jelera/vim-javascript-syntax'
  " indents guides
  Plug 'nathanaelkane/vim-indent-guides'
  " カッコの自動補完/カッコつけたりする
  Plug 'cohama/lexima.vim'
  Plug 'machakann/vim-sandwich'
  "gitをvim上で/ conflict解消 / git マーク
  Plug 'tpope/vim-fugitive'
  Plug 'rhysd/conflict-marker.vim'
  Plug 'airblade/vim-gitgutter'
  " 最強補完と補完と情報表示
  Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}
  " fzf
  Plug 'junegunn/fzf.vim' | Plug 'junegunn/fzf', {'do': { -> fzf#install() }}
  " 初期画面
  Plug 'mhinz/vim-startify'
  " twitter
  Plug 'twitvim/twitvim'
  " マークダウン
  Plug 'iamcco/mathjax-support-for-mkdp'
  Plug 'iamcco/markdown-preview.vim'
  " go
  Plug 'fatih/vim-go'
  "移動最強
  Plug 'easymotion/vim-easymotion'
  "snippet
  Plug 'SirVer/ultisnips'
  Plug 'honza/vim-snippets'


call plug#end()

runtime! config/*.vim



"" ----------------------------------------
""  Option
"" ----------------------------------------
set number
" 検索でカレント以下にする
set path+=$PWD/**
" 編集中でもファイルを開けるように
set hidden
" 他で編集したファイルを自動で再読み込み
set autoread
" スクロール時の余白行数
set scrolloff=5
set sidescrolloff=6
" バックスペースでなんでも消せるように
set backspace=indent,eol,start
" テキスト整形オプション
set formatoptions=lmq
autocmd Filetype * setlocal formatoptions-=ro
" ビープ無効
set visualbell t_vb=
" 現在のディレクトリから開始
set browsedir=buffer
" カーソルを行をまたいで移動
"set whichwrap=b,s,h,l,<,>,[,]
" コマンドをステータスに表示
set showcmd
" 現在のモードを非表示
set noshowmode
" viminfoの設定
set viminfo='50,<1000,s100,\"50
" モードラインを無効
set modelines=0
" タイトルを変更させない
set notitle
" コマンドモードで補完を使用
set wildmode=longest:full,full
set wildmenu
set wildignorecase
" スワップファイルを作らない
"set noswapfile
" バックアップを作成しない
"set nobackup
" dont make undo file
" set noundofile
" swpファイル出力先
set directory=~/.vimfile/
" バックアップファイル出力先
set backupdir=~/.vimfile/
" undoファイル出力先
set undodir=~/.vimfile/
" ルーラーを表示
set ruler
" 不可視文字を表示
set list
" 不可視文字の設定
set listchars=tab:▹\ ,trail:-,extends:»,precedes:«,eol:\ ,nbsp:%
" 開始時の挨拶を表示しない
set shortmess+=I
" 検索ループ時のメッセージを表示しない
set shortmess+=s
" カレント行のハイライト
"set cursorline
" 対応する括弧をハイライト表示する
set showmatch
" 括弧のハイライト表示の秒数を設定
set matchtime=3
" コマンド実行中は再描画しない
set lazyredraw
" 高速ターミナル接続を行う
set ttyfast
" tabの幅
set tabstop=2
" tabをスペースにする
set expandtab
" スマートインデント
set smartindent
" オートインデント
set autoindent
" キーボードから入力した場合のtabの幅
set softtabstop=2
" 自動で挿入/削除されるインデントの量
set shiftwidth=2
" 折りたたみ
set foldmethod=marker
set foldlevel=1
set foldcolumn=0
" 検索で大文字小文字を区別しない
set ignorecase
" 検索文字に大文字があるときは大文字小文字を区別する
set smartcase
" インクリメンタルサーチ
set incsearch
" 検索文字列をハイライト表示
set hlsearch
set modifiable
" grep
if has('win32')
  set grepprg=jvgrep
endif
" タグファイルを指定
set tags+=.tags,./.tags
" 補完時に1行まるごと補完
set showfulltag
" タグから補完リストに追加
set wildoptions=tagfile
" 文字コード関係
set fileencoding=utf-8 fileencodings=utf-8,cp932,euc-jp,iso-20220-jp,default,latin,sjis
set fileformats=unix,dos,mac
" undofile
set undofile
" タブライン表示
set showtabline=2
"bomb作らない
set nobomb
"キーをspaceに
let mapleader="\<Space>"
"ステータス常時見せる
set laststatus=0
set statusline=%F         " ファイル名表示
set statusline+=%m        " 変更のチェック表示
set statusline+=%r        " 読み込み専用かどうか表示
set statusline+=%h        " ヘルプページなら[HELP]と表示
set statusline+=%w\       " プレビューウインドウなら[Prevew]と表示
set rulerformat=%40(%1*%=%l,%-(%c%V%)\ %=%t%)%*
" ピープ音停止
set noerrorbells visualbell t_vb=
"" ----------------------------------------
""  Plugin
"" ----------------------------------------
"-------------------------------------------------------------------------------
" コマンド       ノーマルモード 挿入モード コマンドラインモード ビジュアルモード
" map/noremap           @            -              -                  @
" nmap/nnoremap         @            -              -                  -
" imap/inoremap         -            @              -                  -
" cmap/cnoremap         -            -              @                  -
" vmap/vnoremap         -            -              -                  @
" map!/noremap!         -            @              @                  -
"-------------------------------------------------------------------------------

""let mapleader="\<Space>"

"" normal モード
" Shift + 矢印でウィンドウサイズを変更
" nnoremap <S-Left>  <C-w><
" nnoremap <S-Right> <C-w>>
" nnoremap <S-Up>    <C-w>-
" nnoremap <S-Down>  <C-w>+
" nnoremap tig :tabnew<CR>:term<CR>i tig<CR>
" " 行番号の相対表示:絶対表示の切り替え
" nnoremap <F3> :<C-u>setlocal relativenumber!<CR>
" split
" nnoremap <Space>s :<C-u>new<CR>
" nnoremap <Space>v :<C-u>vnew<CR>
" 移動を直感的に
nnoremap j gj
nnoremap k gk
" Sft + y => yunk to EOL
" nmap <S-h> 15<Left>
" ターミナル
" nn <Leader>term :split<CR>:terminal<CR>

"" insertモード

"" terminalモード
" <ESC>: terminalモードからコマンドモードに変更
"tnoremap <silent> <ESC> <C-\><C-n>

" 無効化
nnoremap <C-j> j
"" ----------------------------------------
""  Cloer
"" ----------------------------------------
"配色設定
let ayucolor='dark' | colo ayu
set termguicolors
syntax on

"配色・ハイライト設定
hi Comment ctermfg=239
hi Number ctermfg=09
hi LineNr ctermfg=07
hi Directory ctermfg=118
hi RubyInstanceVariable ctermfg=208
hi htmlTag ctermfg=15
hi htmlEndTag ctermfg=15
hi Search term=reverse ctermfg=black ctermbg=248
"補完の配色
hi Pmenu ctermbg=239
hi PmenuSel ctermbg=6
hi PMenuSbar ctermbg=239

"全角スペースをハイライト表示
function! ZenkakuSpace()
  hi ZenkakuSpace cterm=reverse ctermfg=DarkMagenta gui=reverse guifg=DarkMagenta
endfunction
if has('syntax')
  augroup ZenkakuSpace
  autocmd!
  autocmd ColorScheme       * call ZenkakuSpace()
  autocmd VimEnter,WinEnter * match ZenkakuSpace / /
  augroup END
  call ZenkakuSpace()
endif

"" ----------------------------------------
""  PluginSetting
"" ----------------------------------------
"" ========== VimPlug ==========
nn <Leader>clean :PlugClean<CR>
nn <Leader>install :PlugInstall<CR>
nn <Leader>update :PlugUpgrade \| PlugUpdate<CR>

"" ========== Fzf ==========
" nn <Leader>rg :call Rg()<CR>
" let g:fzf_layout={'right': '~50%'}
" com! -bang -nargs=* History call fzf#vim#history(fzf#vim#with_preview('down:50%'))
" com! -bang -nargs=? -complete=dir Files call fzf#vim#files(<q-args>, fzf#vim#with_preview('down:50%'), <bang>0)
" fun! Rg()
"   let string=input('Search String: ')
"   call fzf#run(fzf#wrap({
"     \ 'source': 'rg -lin ' . string,
"     \ 'options': '--preview-window bottom:50% --preview "rg -in --color=always ' . string . ' {}"'
"   \ }))
" endfun
"
"
let g:fzf_buffers_jump = 1
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, fzf#vim#with_preview('right:50%', 'ctrl-p'), <bang>0)
nnoremap <Space>fi :Files<CR>
nnoremap <Space>hist :History<CR>
nnoremap <Space>b :Buffers<CR>
nnoremap <Space>l :BLines<CR>
nnoremap <Space>gf :GFiles<CR>
nnoremap <Space>gs :GFiles?<CR>
nnoremap <Space>gl :BCommits<CR>
nnoremap <Space>gla :Commits<CR>
command! -bang -nargs=? -complete=dir GFiles
\ call fzf#vim#gitfiles(<q-args>, fzf#vim#with_preview(), <bang>0)
nnoremap <C-s> :GFiles?<CR>
command! -bang -nargs=* Ag
\ call fzf#vim#ag(<q-args>,
\                 <bang>0 ? fzf#vim#with_preview('up:60%')
\                         : fzf#vim#with_preview('right:50%:hidden', '?'),
\                 <bang>0)
nnoremap <C-g> :Ag<Space>

"" ========== coc ==========
let g:coc_global_extensions = [
      \ 'coc-json'
      \, 'coc-html'
      \, 'coc-css'
      \, 'coc-tsserver'
      \, 'coc-snippets'
      \, 'coc-go'
      \, 'coc-phpls'
      \ ]

"スペースhでHover
nmap <silent> <space>hint :<C-u>call CocAction('doHover')<cr>
"スペースdfでDefinition
nmap <silent> <space>df <Plug>(coc-definition)
"スペースrfでReferences
nmap <silent> <space>rf <Plug>(coc-references)
"スペースrnでRename
nmap <silent> <space>rn <Plug>(coc-rename)
"スペースfmtでFormat
nmap <silent> <space>fmt <Plug>(coc-format)


"" ========== Emmet ==========
let g:user_emmet_settings = {
  \ 'typescript' : { 'extends' : 'jsx' },
  \ 'javascript.jsx' : { 'extends' : 'jsx' }
\ }

"" ========== vim-airline ==========
" Smarter tab line有効化
let g:airline#extensions#tabline#enabled = 1
" powerline font入れないと若干ダサい
let g:airline_powerline_fonts = 0

"" ========== vim-fugitive ==========
"set diffopt+=vertical
nn <Leader>gd :Gdiff<CR>
nn <Leader>ga :Gwrite<CR>
nn <Leader>gb :Gblame<CR>
nn <Leader>gs :Gstatus<CR>
nn <Leader>du :diffupdate<CR>
nn <Leader>gm :Gdiffsplit!<CR>
nn <Leader>dp :diffput 1 \| diffupdate<CR>
nn <Leader>dgl :diffget //2 \| diffupdate<CR>
nn <Leader>dgr :diffget //3 \| diffupdate<CR>


"" ========== ConflictMarker ==========
hi ConflictMarkerEnd guibg=#2f628e
hi ConflictMarkerOurs guibg=#2e5049
hi ConflictMarkerBegin guibg=#2f7366
hi ConflictMarkerTheirs guibg=#344f69
hi ConflictMarkerCommonAncestorsHunk guibg=#754a81
let g:conflict_marker_end = '^>>>>>>> .*$'
let g:conflict_marker_begin = '^<<<<<<< .*$'

"" ========== Vim-trailing-space ==========
nn <Leader>trim :FixWhitespace<CR>

let g:comfortable_motion_scroll_down_key = "j"
let g:comfortable_motion_scroll_up_key = "k"
let g:comfortable_motion_friction = 0.0
let g:comfortable_motion_air_drag = 4.0

"" ==========  vim-startify ==========
let g:startify_files_number = 5
let g:startify_list_order = [
        \ ['♻  最近使ったファイル:'],
        \ 'files',
        \ ['♲  最近使ったファイル(カレントディレクトリ下):'],
        \ 'dir',
        \ ['⚑  sessions:'],
        \ 'sessions',
        \ ['☺  bookmark:'],
        \ 'bookmarks',
        \ ]
" let g:startify_bookmarks = ["~/.vim/config/plug.rc.vim", "~/.vimrc", "~/.zshrc", "~/.vim/config/keymap.rc.vim", "~/.vim/config/options.rc.vim"]

" ASCII ARTを真ん中寄せする
function! s:center(lines) abort
  let longest_line   = max(map(copy(a:lines), 'strwidth(v:val)'))
  let centered_lines = map(copy(a:lines),
        \ 'repeat(" ", (&columns / 2) - (longest_line / 2)) . v:val')
  return centered_lines
endfunction

let g:startify_custom_header = s:center([
    \ 'もっとはやく!!!!!!!!!!!',
    \ ])

" twivim
let twitvim_browser_cmd = 'open' " for Mac
let twitvim_force_ssl = 1
let twitvim_count = 40
nnoremap ,tp :<C-u>PosttoTwitter<CR>
nnoremap ,tf :<C-u>FriendsTwitter<CR><C-w>k
nnoremap ,tr :<C-u>RepliesTwitter<CR><C-w>k
nnoremap ,tn :<C-u>NextTwitter<CR>
nnoremap ,tb :<C-u>PreviousTwitter<CR>
autocmd FileType twitvim call s:twitvim_my_settings()
function! s:twitvim_my_settings()
  set nowrap
endfunction

" easy motion
map <Leader> <Plug>(easymotion-prefix)
let g:EasyMotion_do_mapping = 0 " Disable default mappings
nmap <Leader>s <Plug>(easymotion-overwin-f2)

" Turn on case insensitive feature
let g:EasyMotion_smartcase = 1

" JK motions: Line motions
map <Leader>j <Plug>(easymotion-j)
map <Leader>k <Plug>(easymotion-k)

"syntax
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
let g:syntastic_error_symbol='✗'
let g:syntastic_warning_symbol='⚠'
let g:syntastic_style_error_symbol = '✗'
let g:syntastic_style_warning_symbol = '⚠'

" go-vim
let g:go_hi_functions = 1
let g:go_hi_methods = 1
let g:go_hi_structs = 1
set runtimepath+=/usr/local/go/misc/vim

" netrw.vim
"ls -alな表示
let g:netrw_liststyle=3
let g:netrw_altv = 1
let g:netrw_preview=1


" git guitter
nmap ]c <Plug>(GitGutterNextHunk)
nmap [c <Plug>(GitGutterPrevHunk)
let g:gitgutter_sign_added = '○'
let g:gitgutter_sign_modified = '△'
let g:gitgutter_sign_removed = '☓'
set updatetime=250
let g:gitgutter_max_signs = 500
let g:gitgutter_map_keys = 0
let g:gitgutter_override_sign_column_hi = 0

" vim-indent-guides
let g:indent_guides_enable_on_vim_startup = 1
let g:indent_guides_auto_colors = 0
let g:indent_guides_guide_size = 1
" 奇数インデントのカラー
autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd  guibg=#666666 ctermbg=235
" 偶数インデントのカラー
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven guibg=#2c2c2c ctermbg=240

"ultisnip
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
let g:UltiSnipsEditSplit="vertical"
let g:UltiSnipsSnippetsDir = '~/.vim/snippets'
set runtimepath+=~/.vim/snippets

"" ----------------------------------------
""  my function
"" ----------------------------------------
"space + gtで tag作成
"function! s:generateCtags()
"  let s:options = readfile('~/.tags/') "ctagsの設定ファイルへのパス
"  let s:command = [
"    \'ctags',
"    \'-R',
"    \'-f',
"    \'~/.tags/.tags', "tagsファイルへのパス
"  \]
"  let s:command += s:options
"  call job_start(s:command)
"endfunction
"nnoremap <silent> <Leader>gt :<C-u>call <SID>generateCtags()<CR>

let g:pid = getpid()
let g:tag_file_path = "/tmp/" . g:pid . "_tags"
function! _CtagsUpdate()
    exe '!ctags -R -f '.g:tag_file_path.' `pwd` &'
    exe 'set tags='.g:tag_file_path
endfunction
command! CtagsUpdate call _CtagsUpdate()

function! _CtagsRemove()
    exe '!rm '.g:tag_file_path
endfunction
command! CtagsRemove call _CtagsRemove()

let current_path = expand("%:p")
let match_idx = match(current_path, "/dev")
if match_idx != -1
    autocmd VimEnter * silent! :CtagsUpdate
    autocmd BufWrite * silent! :CtagsUpdate
    autocmd VimLeave * silent! :CtagsRemove
endif
"augroup ctags
"  autocmd!
"  autocmd BufWritePost * silent !ctags -R -f .tags
"augroup END