Vim
vimrc
dein.vim

vim歴半年の初心者がvimrc晒す

環境

vim 8.0.596

意識してること

  • 使っているMBAが古い(mid 2011)ので、ラグがなるべく出ないようにする。
  • rails使ってバックエンド開発が本業なので、若干ruby・rails寄り。
  • win・mac・linuxで環境依存出さないようにしたい(あくまで希望)。
  • 以前使ってたsublime textもリスペクトしてる。

本題

「これ、もっとこうできますよ」的なアドバイスいただけると非常に助かります。

vimrc
if $compatible
  set nocompatible " Be iMproved
endif

set rtp+=~/.vim/dein/repos/github.com/Shougo/dein.vim

"プラグイン管理(dein)
call dein#begin(expand('~/.vim/dein'))

"powerline系
call dein#add('vim-airline/vim-airline')
"powerline系テーマ
call dein#add('vim-airline/vim-airline-themes')
set laststatus=2
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#buffer_idx_mode = 1
let g:airline#extensions#whitespace#mixed_indent_algo = 1
let g:airline_theme = 'dark'

"Filer関係
call dein#add('Shougo/denite.nvim')
call dein#add('Shougo/unite.vim')
call dein#add('ujihisa/unite-colorscheme')
call dein#add('Shougo/vimfiler.vim')

"vimfiler設定
augroup vimfiler
  autocmd!
  autocmd FileType vimfiler call s:vimfiler_settings()
augroup END

"ウィンドウを分割して開く
function! s:vimfiler_settings()
  nnoremap <silent><buffer><expr> s vimfiler#do_switch_action('split')
  nnoremap <silent><buffer><expr> v vimfiler#do_switch_action('vsplit')
endfunction

"vimfilerのアイコン設定
let g:vimfiler_as_default_explorer=1
let g:vimfiler_safe_mode_by_default = 0
let g:vimfiler_tree_leaf_icon = " "
let g:vimfiler_tree_opened_icon = '▾'
let g:vimfiler_tree_closed_icon = '▸'
let g:vimfiler_file_icon = '-'
let g:vimfiler_marked_file_icon = '✓'
let g:vimfiler_readonly_file_icon = '✗'
let g:vimfiler_ignore_pattern = '^\%(.git\|.DS_Store\)$'

" vimfilerショートカット
nnoremap fi :VimFilerBufferDir<CR>
nnoremap fe :VimFilerExplorer  -split -winwidth=35 -toggle -no-quit<CR>

"アイコン表示
call dein#add('ryanoasis/vim-devicons')
let g:WebDevIconsUnicodeDecorateFolderNodes = 1
let g:DevIconsEnableFoldersOpenClose = 1
let g:WebDevIconsUnicodeDecorateFolderNodesDefaultSymbol = ''
let g:DevIconsDefaultFolderOpenSymbol = ''
"file-icons
let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols = {}
let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['html'] = ''
let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['css'] = ''
let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['md'] = ''
let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['txt'] = ''

"補完
call dein#add('Shougo/neosnippet.vim')
call dein#add('Shougo/neosnippet-snippets')
call dein#add('Shougo/neocomplete.vim')
call dein#add('Shougo/deoplete.nvim')
call dein#add('Shougo/neco-vim')
call dein#add('Shougo/neco-syntax')
call dein#add('ujihisa/neco-look')

"複数カーソル検索
call dein#add('terryma/vim-multiple-cursors')
nnoremap :mmm :MultipleCursorsFind
vnoremap :mmm :MultipleCursorsFind
function! Multiple_cursors_before()
  if exists(':NeoCompleteLock')==2
    exe 'NeoCompleteLock'
  endif
endfunction

function! Multiple_cursors_after()
  if exists(':NeoCompleteUnlock')==2
    exe 'NeoCompleteUnlock'
  endif
endfunction

"コマンドでgit add,commit,push
call dein#add('tpope/vim-fugitive')
let g:airline#extensions#branch#enabled = 1

"gitの編集状態をgutterに表示
call dein#add('airblade/vim-gitgutter')

"vimスクリプト補完
call dein#add('Shougo/neocomplcache')
let g:acp_enableAtStartup = 0
let g:neocomplcache_enable_at_startup = 1
let g:neocomplcache_enable_smart_case = 1
let g:neocomplcache_min_syntax_length = 3
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
let g:neocomplcache_dictionary_filetype_lists = {
    \ 'default' : ''
    \ }
inoremap <expr><C-g>     neocomplcache#undo_completion()
inoremap <expr><C-l>     neocomplcache#complete_common_string()
inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
function! s:my_cr_function()
  return neocomplcache#smart_close_popup() . "\<CR>"
endfunction
inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
inoremap <expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><C-y>  neocomplcache#close_popup()
inoremap <expr><C-e>  neocomplcache#cancel_popup()
let g:loaded_matchparen = 1

"閉じ括弧に下線
call dein#add('itchyny/vim-parenmatch')

"同じ単語に下線
call dein#add('itchyny/vim-cursorword')

"シンタックスハイライトをHTML5に対応
call dein#add('othree/html5.vim')
let g:html5_event_handler_attributes_complete = 1
let g:html5_rdfa_attributes_complete = 1
let g:html5_microdata_attributes_complete = 1
let g:html5_aria_attributes_complete = 1

"コメントアウトショートカット
call dein#add('tomtom/tcomment_vim')
nmap ww gcc
vmap ww gcc
if !exists('g:tcomment_types')
    let g:tcomment_types = {}
endif
let g:tcomment_types['eruby'] = '<%# %s %>'
let g:tcomment_types['erb'] = '<%# %s %>'
let g:tcomment_types['scss'] = '/* %s */'

"閉じタグ自動補完
call dein#add('alvan/vim-closetag')
let g:closetag_filenames = '*.html,*.xhtml,*.phtml,*.erb,*.php'

"rubyのシンタックスや補完
call dein#add('vim-ruby/vim-ruby')

"railsの補完やシンタックスハイライト
call dein#add('tpope/vim-rails')

"railsのdef...endを補完
call dein#add('alpaca-tc/vim-endwise.git')
let g:endwise_no_mappings=1

"バッファリストを表示
call dein#add('mikoto2000/buffer_selector.vim')
noremap <Space><Space> <Esc>:call buffer_selector#OpenBufferSelector()<Enter>

"javascriptシンタックス
call dein#add('jelera/vim-javascript-syntax')

"jadeシンタックス
call dein#add('digitaltoad/vim-pug')

"css3シンタックス
call dein#add('hail2u/vim-css3-syntax')

"色表示
call dein#add('lilydjwg/colorizer')

"scssシンタックス
call dein#add('cakebaker/scss-syntax.vim')

"slimシンタックス
call dein#add('slim-template/vim-slim')

"vueシンタックス
call dein#add('posva/vim-vue')

"htmlコーディング
call dein#add('mattn/emmet-vim')
let g:user_emmet_leader_key='<c-t>'

"ファイルタイプ判定
call dein#add('Shougo/context_filetype.vim')
call dein#add('osyo-manga/vim-precious')

"インデントの可視化
call dein#add('nathanaelkane/vim-indent-guides')
let g:indent_guides_enable_on_vim_startup=1
let g:indent_guides_auto_colors = 0
let g:indent_guides_exclude_filetypes = ['help', 'vimfiler']

" ファイル横断検索
call dein#add('yegappan/grep')

" マークダウン編集
call dein#add('plasticboy/vim-markdown')
call dein#add('kannokanno/previm')
call dein#add('tyru/open-browser.vim')
au BufRead,BufNewFile *.md set filetype=markdown
let g:previm_open_cmd = 'open -a Safari'
" プレビュー起動コマンド :PrevimOpen

call dein#end()

"エンコード系
set encoding=utf-8
set fileencoding=utf-8
set termencoding=utf-8

"ファイルフォーマット
set fileformat=unix

"ビープ音を消す
set belloff=all

"スクロール時に一番下までカーソルが移動しない
set scrolloff=5

"シンタックスハイライト
syntax on

"配色設定
set t_Co=256
autocmd ColorScheme * highlight Normal ctermbg=none
autocmd ColorScheme * highlight LineNr ctermbg=none

"カラースキーマ
colorscheme Benokai

"行番号表示
set number

"行の相対表示をやめる
set norelativenumber

"backspaceの機能設定(字下げ、行末、挿入の開始点を超えて削除)
set backspace=2

"カーソルがある行をハイライト表示
set cursorline

"カーソル位置のカラムをハイライト表示しない
set nocursorcolumn

"左右のカーソル移動で行移動
set whichwrap=b,s,h,l,<,>,[,]

"swapfileを生成しない
set noswapfile

"Always display the statusline in all windows
set laststatus=2

"Always display the tabline, even if there is only one tab
set showtabline=2

"検索したワードをハイライト
set hlsearch

"モード表示をOFF
set noshowmode

" クリップボード
set clipboard+=unnamed,autoselect

"Don't autofold anything
set foldlevel=100

"対応括弧に<>を追加
set matchpairs& matchpairs+=<:>

"対応括弧をハイライト表示する
set showmatch

"対応括弧の表示秒数を3秒にする
set matchtime=3

"改行時に前の行のインデントを計測
set autoindent

"改行時に入力された行の末尾に合わせて次の行のインデントを増減する
set smartindent

"新しい行を作った時に高度な自動インデントを行う
set smarttab

"タブをスペースに変換
set expandtab

"ファイル上のタブ文字の見た目の幅
set tabstop=4

"自動インデント時に挿入されるスペース量
set shiftwidth=2

"tabを押した時に挿入されるスペース量
set softtabstop=2

"高速ターミナル接続を行う
set ttyfast

"マクロなどの途中経過を描写しない
set lazyredraw

"prefix
nnoremap FF <C-w>

"Escape
inoremap ff <Esc>
vnoremap ff <Esc>

"ノーマルモードで行のどこにいても改行
nnoremap <CR> A<CR><Esc>

"上スライド
nnoremap MM ddkkp

"下スライド
nnoremap mm ddp

"一行選択(sublimetext風)
"nnoremap <C-L> 0v$

"行複製
nnoremap tt Yp
vnoremap tt yP

"shift+dでvisualモードで単語選択
nnoremap D viw

"閉じ括弧自動保管
inoremap { {}<LEFT>
inoremap [ []<LEFT>
inoremap ( ()<LEFT>
inoremap " ""<LEFT>
inoremap ' ''<LEFT>

"カーソル上の単語検索
nnoremap <C-j> g*:noh<Enter>
nnoremap <C-k> g#:noh<Enter>

"ウインドウサイズ変更
"カレントウインドウの幅を増やす
nnoremap > <C-w>5>
"カレントウインドウの幅を減らす
nnoremap < <C-w>5<

"ハイライト切り替え
nnoremap <F3> :set hlsearch!<CR>

"ハイライト消す
nnoremap noh :noh<CR>

"タブリファクタリング
nnoremap tab :set expandtab<Enter>:retab<Enter>:w<Enter>

"設定ファイル読み込み
nnoremap <F5> :source ~/_vimrc<Enter>
nnoremap sou :source ~/_vimrc<Enter>

"ファイル横断検索
nnoremap <expr> gr ':set modifiable<Enter>:set write<Enter>:Rgrep<CR>'

"文頭・文末
nnoremap H ^
vnoremap H ^
nnoremap L $
vnoremap L $

"配色・ハイライト設定
highlight Comment ctermfg=239
highlight Number ctermfg=09
highlight LineNr ctermfg=07
highlight Directory ctermfg=118
highlight RubyInstanceVariable ctermfg=208
highlight htmlTag ctermfg=15
highlight htmlEndTag ctermfg=15
highlight Search term=reverse ctermfg=black ctermbg=248

"タブ、空白、改行の可視化
set list
set listchars=tab:>.,trail:_,eol:,extends:>,precedes:<,nbsp:%

"ファイルを開いたときにタブ文字があったらスペースに変換
autocmd BufNewFile,BufRead * set expandtab
autocmd BufNewFile,BufRead * retab

"シンタックスハイライト(syntax onより前に書かない)
autocmd User Rails.view*                 NeoSnippetSource ~/.vim/snippet/ruby.rails.view.snip
autocmd User Rails.controller*           NeoSnippetSource ~/.vim/snippet/ruby.rails.controller.snip
autocmd User Rails/db/migrate/*          NeoSnippetSource ~/.vim/snippet/ruby.rails.migrate.snip
autocmd User Rails/config/routes.rb      NeoSnippetSource ~/.vim/snippet/ruby.rails.route.snip

" 奇数インデントのカラー
autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd  guibg=#333333 ctermbg=235
" 偶数インデントのカラー
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven guibg=#2c2c2c ctermbg=240

autocmd FileType vue syntax sync fromstart
autocmd BufNewFile,BufRead *.vue setfiletype=html
autocmd BufNewFile,BufRead *.{html,htm} setfiletype=html
autocmd BufNewFile,BufRead *.{pug*} setfiletype=pug
autocmd BufNewFile,BufRead *.{jade*} setfiletype=pug
autocmd BufRead,BufNewFile *.scss set filetype=sass
autocmd BufRead,BufNewFile *.rb setfiletype=ruby
autocmd BufRead,BufNewFile *.slim setfiletype slim
autocmd BufRead,BufNewFile *.js setfiletype=javascript
autocmd BufRead,BufNewFile jquery.*.js setfiletype=javascript syntax=jquery
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\""

"全角スペースをハイライト表示
function! ZenkakuSpace()
  highlight 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
if dein#check_install()
  call dein#install()
endif