vimrcの設定や利用プラグインを見直す

# 目的
年度が変わったので、vimrcを全体的に見直します。
以前は、全くコメントを書いておらず、コマンドが何を意味しているか分からなくなりそうなので、全体的にコメントも記載しました。

# 以前のvimrc
何となく分かるけども、ぱっと見よくわかりません。使ってないのもあるし。。。
コメントは書いたほうがいいことがわかります。

<details><summary>以前のvimrc</summary><div>

```vim
set term=screen-256color 
set fenc=utf-8
set ambiwidth=double
set nobackup
set noswapfile
set autoread
set hidden
set showcmd
set cursorline
set cursorcolumn
set smartindent
set showmatch
set laststatus=2
set cmdheight=2
if !has('gui_running')
  set mouse=
  set ttimeoutlen=0
  if $COLORTERM == "truecolor"
    set termguicolors
  endif
endif
set nofixendofline
set formatoptions+=mM
set tabstop=2
set shiftwidth=2
set expandtab

set ignorecase
set smartcase
set incsearch
set wrapscan
set hlsearch
set ruler
let &colorcolumn=join(range(121,999),",")
hi ColorColumn ctermbg=235 guibg=#2c2d27 
nmap <Esc><Esc> :nohlsearch<CR><Esc>
noremap!  

call plug#begin('~/.vim/plugged')
  Plug 'junegunn/vim-plug',
       \ {'dir': '~/.vim/plugged/vim-plug/autoload'}
  Plug 'fatih/vim-go'
  Plug 'nsf/gocode', { 'rtp': 'vim', 'do': '~/.vim/plugged/gocode/vim/symlink.sh' }
call plug#end()

" vim-go設定
au FileType go nmap <leader>r <Plug>(go-run)
au FileType go nmap <leader>b <Plug>(go-build)
au FileType go nmap <leader>t <Plug>(go-test)
au FileType go nmap <leader>c <Plug>(go-coverage)
au FileType go nmap <Leader>i <Plug>(go-info)

au FileType go nmap <Leader>gd <Plug>(go-doc)
au FileType go nmap <Leader>gv <Plug>(go-doc-vertical)
au FileType go nmap <Leader>gb <Plug>(go-doc-browser)

au FileType go :highlight goErr cterm=bold ctermfg=214
au FileType go :match goErr /\<err\>/

let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_structs = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1
let g:go_fmt_fail_silently = 1
let g:go_fmt_autosave = 1
let g:go_fmt_command = "goimports"
```
</div></details>

# vimrc見直した
大体はコメント書きました。コメントがあるのと無いのでは、雲泥の差がありますねえ。

<details><summary>見直し後のvimrc</summary><div>

```vim
set term=term-256color              " 256色で表示する
set encoding=utf-8                  " エンコーディングをUTF-8にする
set fileencodings=utf-8,sjis,cp932  " 設定の順番の文字コードでファイルを開く
set fileformats=unix,dos,mac        " 設定の順番で改行コードを開く
set nofixendofline                  " EOFを元のファイルと同じ状態にする

set ambiwidth=double                " ○文字や□文字でもカーソル位置を保持する
set nobackup                        " バックアップファイルは作成しない
set noswapfile                      " スワップファイルは作成しない
set autoread                        " 編集中のファイルが変更された場合、自動で読み直し
" set hidden                          " 未保存のファイルがあっても、別ファイルを開く
set showcmd                         " 入力コマンドをステータスに表示する
set cursorline                      " 現行を強調表示する
set cursorcolumn                    " 現列を強調表示する

if !has('gui_running')              " CUI使用時
  set mouse=                        " マウス操作をOFFにする
  set ttimeoutlen=0                 " insertからnormalに戻るときの遅延を解消する
  set t_Co=256
endif

set autoindent                      " 改行時に前行のインデントを保持する
set smartindent                     " 改行時に前行末尾に合わせて、インデントを増減する
set tabstop=4                       " タブは設定文字数分で表示する
set shiftwidth=4                    " 自動インデントは4文字
set expandtab                       " タブを空白文字にする
set showmatch                       " 対応する括弧を強調表示する

set wildmenu                        " TABでファイル名を補完する
set wildmode=full                   " TABを押すごとに次のファイル名を補完する
set ignorecase                      " 検索に大文字小文字を区別しない
set smartcase                       " 検索に大文字を使うと、大文字小文字を区別する
set incsearch                       " リアルタイム検索する
set wrapscan                        " 最後まで検索すると、最初に戻る
set hlsearch                        " 検索結果をハイライト表示する

set nowrap                          " テキストの折返しをしない
set ruler                           " ルーラーを表示する
" カラムラインを120列目に引く
let &colorcolumn=join(range(121,999),",")
hi ColorColumn ctermbg=235 guibg=#2c2d27
" Esc2回でハイライトを消す
nmap <Esc><Esc> :nohlsearch<CR><Esc>

" Hで行頭へ移動する
map H ^
" Lで行末へ移動する
map L $

" undoを保存する
if has('persistent_undo')
    set undodir=~/.vim/undo
    set undofile
endif

" grepした結果をquickfixに表示する
augroup grepwindow
    autocmd!
    au QuickFixCmdPost *grep* cwindow
augroup END

if filereadable($HOME.'/.vim/autoload/plug.vim')  " vim-plugを利用する
  " curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
  "     https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  " :PlugInstallでインストール
  call plug#begin()
    Plug 'fatih/vim-go'                         " goの機能拡張
    Plug 'SirVer/ultisnips'                     " スニペット
    " goのスニペット -> https://github.com/fatih/vim-go/blob/master/gosnippets/UltiSnips/go.snippets
    Plug 'bronson/vim-trailing-whitespace'      " 行末のスペースをハイライト
    Plug 'Yggdroot/indentLine'                  " インデントを見やすくする
    Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }   " あいまい検索
    Plug 'junegunn/fzf.vim'
    Plug 'cohama/lexima.vim'                    " 括弧の補完
    Plug 'itchyny/lightline.vim'                " ステータスライン拡張
    Plug 'morhetz/gruvbox'                      " カラースキーム
  call plug#end()
endif

syntax enable                       " シンタックスをONにする
set background=dark                 " 背景をダークモードにする
if filereadable($HOME.'/.vim/plugged/gruvbox/autoload/gruvbox.vim')
    colorscheme gruvbox
endif

let g:lightline = {
      \ 'colorscheme': 'wombat',
      \ 'active': {
      \   'left': [ [ 'mode', 'paste'  ],
      \             [ 'gitbranch', 'readonly', 'filename', 'modified'  ] ]
      \ },
      \ 'component_function': {
      \   'linetotal': 'LightLineTotal',
      \   'gitbranch': 'fugitive#head'
      \ },
      \ }
let g:lightline.component = {
    \ 'lineinfo': '[%3l/%3L]:%-2v'
    \ }
set noshowmode                      " vimのモードを非表示にする
set laststatus=2                    " ステータスラインを常に表示する
set cmdheight=2                     " ステータスライン下のメッセージ表示行数

" ペースト時に自動インデントを無効化する
if &term =~ "xterm"
    let &t_SI .= "\e[?2004h"
    let &t_EI .= "\e[?2004l"
    let &pastetoggle = "\e[201~"
    function XTermPasteBegin(ret)
        set paste
        return a:ret
    endfunction

    inoremap <special> <expr> <Esc>[200~ XTermPasteBegin("")
endif

" vim-go設定
let mapleader = "\<Space>"            " <leader>を<Space>にする
au FileType go nmap <leader>r <Plug>(go-run)
au FileType go nmap <leader>b <Plug>(go-build)
au FileType go nmap <leader>t <Plug>(go-test)
au FileType go nmap <leader>c <Plug>(go-coverage)
au FileType go nmap <Leader>i <Plug>(go-info)
au FileType go nmap <leader>s <Plug>(go-def-split)
au FileType go nmap <leader>v <Plug>(go-def-vertical)

au FileType go :highlight goErr cterm=bold ctermfg=214
au FileType go :match goErr /\<err\>/

" ハイライト表示
let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_structs = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1

let g:go_metalinter_autosave = 1    " 保存時にvet, lint errcheckを実行する
let g:go_fmt_autosave = 1           " 保存時にfmtを実行する
let g:go_fmt_fail_silently = 1
let g:go_fmt_command = "goimports"  " 不要なimportを削除する
let g:go_def_mode = 'gopls'
```
</div></details>

以前は、コード書くときは横幅を80文字とかしていましたが、今は画面も広いので120文字にしています。
今何列目とかはステータスラインにデフォルトで出ますが、画面上で120文字目以降の範囲は色変えといたほうが分かりやすくて好きです。

```vim
" カラムラインを120列目に引く
let &colorcolumn=join(range(121,999),",")
hi ColorColumn ctermbg=235 guibg=#2c2d27
```

プラグインも見直して、下記を利用するようにしました。

| プラグイン | 概要 |
| --------- | ---- |
| [fatih/vim-go](https://github.com/fatih/vim-go) | goを書くのに必須。<br>自動でgofmtとかgolintをかけてくれるし、様々なショートカットがある。<br>日本語のチュートリアルは[こちら](https://github.com/hnakamur/vim-go-tutorial-ja) |
| [SirVer/ultisnips](https://github.com/SirVer/ultisnips) | 優秀なスニペット。vim-goと組み合わせて使う。<br>例えば、`fn[TAB]`で、`fmt.Println("")`が出る。<br>goで使えるデフォルトのスニペットは[こちら](https://github.com/fatih/vim-go/blob/master/gosnippets/UltiSnips/go.snippets)|
| [bronson/vim-trailing-whitespace](https://github.com/bronson/vim-trailing-whitespace) | 行末のスペースを赤くハイライトしてくれる。<br>`:FixWhitespace`で自動で削除もできる。<br>イメージは[一番最後](#最後に)を参照。 |
| [Yggdroot/indentLine](https://github.com/Yggdroot/indentLine) | インデントをわかりやすく表示してくれる。<br>`set list`とかで自分でやるよりも、わかりやすい。<br>イメージは[一番最後](#最後に)を参照。 |
| [junegunn/fzf](https://github.com/junegunn/fzf) | あいまい検索ができる。<br>`:Commands`とか`:Files`とかで便利。 |
| [cohama/lexima.vim](https://github.com/cohama/lexima.vim) | 自動で括弧を補完してくれる。便利。<br>`(`を入力すると、自動で`)`が付いてくる。 |
| [itchyny/lightline.vim](https://github.com/itchyny/lightline.vim) | ステータスラインを簡単に華やかにできる。<br>ファイルの総行数がデフォルトで無いのは残念。<br>イメージは[一番最後](#最後に)を参照。 |
| [morhetz/gruvbox](https://github.com/morhetz/gruvbox) | 数あるカラースキームの1つ。人の好み。<br>イメージは[一番最後](#最後に)を参照。 |

### 参考
- [vim-goを使うなら使用したいコマンド集と設定 - Qiita](https://qiita.com/gorilla0513/items/a027885d03af0d6d5863)
- [lightline.vimでファイルの総行数が出るように設定した - the code to rock](http://note103.hateblo.jp/entry/2016/04/15/114639#after)
- [Vimメモ : GitHub Trendingで見かけるカラースキーム - もた日記](https://wonderwall.hatenablog.com/entry/2019/02/25/224719)

# 最後に
こんな感じになった。日々見直していきたい。
[config/.vimrc at master · hirano00o/config](https://github.com/hirano00o/config/blob/master/.vimrc)
![vimrc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14266/8fdf53a9-1582-d59a-c019-1ceed604798c.png)