読者です 読者をやめる 読者になる 読者になる

Today Fortkle Learned.

知らないことの方が多いので今更調べています。さらに一歩先に行けたら嬉しいです。

年末なのでコピペして使ってきたvimrcを1から見直してみる

事前共有

今まで、なんとなく便利そうなvimプラグインを入れたり、他の人のvimrcからコピペしたりしてvimを使ってきました。これを書いているのはそんなvim初心者です。間違っている点があればコメント等でご指摘いただければ嬉しいです!

方針

  • なるべく高度なことはやらない
  • 理解できないコピペは使わない
  • 小さく始める(完璧なvimrcを目指さない)
  • プラグインは使う

1. 文字コード周り

マルチバイト文字をvimrc内で使用する場合は、 scriptencoding をマルチバイト文字を使う前に宣言する必要があります。ただし、encodingscriptencoding より前に宣言する必要があります。

また、 fileencodingfileencodings の宣言も追加します。これはファイルの読み込み時と書き込み時の設定です。
fileencodings で自動判別の設定を追加できるようですが、utf-8でしかほぼ使わない & 自動判別の挙動が不安定 なので、utf-8固定で文字化けしたら都度fencを変更して再読み込み等することで対応する方針にしました。

vimrc

set encoding=utf-8 
scriptencoding utf-8 
set fileencoding=uft-8   " カレントバッファのファイルの文字エンコーディング 
set fileencodings=uft-8  " 既存のファイルの編集を開始するときに考慮される文字エンコーディングのリスト

※vimrc内のコメントは分かりづらい場合を除き、vimdoc-jaから引用しています

参考

2. プラグイン管理

今まで GitHub - Shougo/neobundle.vim: Next generation Vim package manager を使ってきましたが、一番最初のセットアップ等が面倒なのでインストールまで含めて自動化します。

また、set nocompatible を記述するハックが以前流行っていましたが、最近は不要とする流れが強いのでif 文でチェックするようにしました。

vimrc

"------------------------------------------------------------------------------- 
" Plugin 
"------------------------------------------------------------------------------- 
if has('vim_starting') 
  if &compatible 
    set nocompatible 
  endif 
 
  " Neobundleが未インストールであればgit clone 
  if !isdirectory(expand("~/.vim/bundle/neobundle.vim/")) 
    echo "install neobundle..." 
    :call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim") 
  endif 
 
  set runtimepath+=~/.vim/bundle/neobundle.vim/ 
endif 
 
call neobundle#begin(expand('~/.vim/bundle/')) 
  NeoBundleFetch 'Shougo/neobundle.vim'   " Neobundle自身を管理。その場合はNeoBundleFetch 
  NeoBundle 'ctrlpvim/ctrlp.vim' 
  NeoBundle 'Townk/vim-autoclose' 
  NeoBundle 'scrooloose/syntastic.git' 
  NeoBundle 'PDV--phpDocumentor-for-Vim' 
  NeoBundle 'junegunn/vim-easy-align' 
  NeoBundle 'chriskempson/vim-tomorrow-theme' 
call neobundle#end() 
filetype plugin indent on " Neobundleの読み込み後に実行 
NeoBundleCheck " 未インストールのプラグインがあれば通知

参考

3. vim options

Basic

基本的な設定を追加していきます。

vimrc

"------------------------------------------------------------------------------- 
" Vim Options 
"------------------------------------------------------------------------------- 
" Basic 
syntax on                       " シンタックスハイライトの有効化 
set t_Co=256                    " 256色数に設定
set backspace=indent,eol,start  " Backspaceの有効化 
set whichwrap=b,s,h,l,<,>,[,]   " カーソルが行頭/末にあるときに前/次行に移動できる 
set lazyredraw                  " マクロやコマンドを実行する間、画面を再描画しない(スクロールが重くなる対策) 
set ttyfast                     " 高速ターミナル接続を行う(スクロールが重くなる対策)
set scrolloff=10                " 編集中の箇所の周辺のテキストを見ることができる(スクロールする時に下が見える)
set noswapfile                  " スワップファイルを作成しない 
set nobackup                    " バックアップファイルを作成しない

参考

見た目

見た目に関する設定を追加していきます。

vimrc

" View 
colorscheme Tomorrow-Night-Bright   " テーマの指定
set showmatch                       " 閉じ括弧が入力されたとき、対応する開き括弧にわずかの間ジャンプする 
set matchtime=1                     " マッチしている括弧を表示するための時間を0.1秒単位で指定する 
set number                          " 毎行の前に行番号を表示する 
set list                            " 不可視文字を表示する 
set listchars=tab:»-,eol:\ ,trail:- " 不可視文字の表示設定 
set display=lastline                " テキスト表示の方法を変える(長いテキストを省略せず最後まで表示する) 
set laststatus=2                    " 最下ウィンドウにステータス行を常に表示する 
set statusline=%f%m%=%l,%c\ %{'['.(&fenc!=''?&fenc:&enc).']\ ['.&fileformat.']'}  " ステータス行の表示設定

参考

インデント

タブ派ではなく4スペ派なのでそのように設定をします。 ただし、htmlとjsを編集するときだけ2スペにしたいのでautocmdを設定します。 この際、 autocmd!で再読み込み時にコマンドが重複して設定されないようにします。 また、augroup を設定して autocmd! の適用範囲を明確にします。

vimrc

" Indent
set tabstop=4       " ファイル内の<Tab>が対応する空白の数 
set softtabstop=4   " <Tab>キーを押した際に挿入されるスペース量 
set autoindent      " 新しい行を開始したとき新しい行のインデントを現在行と同じくする 
set shiftwidth=4    " (自動)インデントの各段階に使われる空白の数 
set smartindent     " 新しい行を作ったときに高度な自動インデントを行う(ex. '{'で終わる行で新しい行を作った時は改行)" 
set expandtab       " 挿入モードで <Tab> を挿入するとき、代わりに適切な数の空白を使う

augroup vimrc 
  autocmd! 
  autocmd BufNewFile,BufRead *.ctp set filetype=html 
  autocmd FileType javascript setlocal tabstop=2 softtabstop=2 shiftwidth=2 
  autocmd FileType html setlocal tabstop=2 softtabstop=2 shiftwidth=2 
augroup END

参考

検索

検索周りはほぼ設定なし。後で検索結果のハイライトを消すマッピングを追加します。

vimrc

" Search 
set incsearch  " インクリメンタルサーチを有効化 
set hlsearch   " 検索結果をハイライトする

参考

4. キーマッピング

面倒なのと、なるべくデフォルトで対応するようにしているからか、マッピングはほとんど変えていません。 それでもほんの少しだけ変更しているのでその設定をします。

vimrc

"------------------------------------------------------------------------------- 
" Key Mapping 
"------------------------------------------------------------------------------- 
" ヤンクをコピーの挙動に近づける(連続貼り付け) 
vnoremap pp "0p 
" 検索結果のハイライトを消す 
nnoremap <Esc><Esc> :nohlsearch<CR><Esc>

まとめ

最後に使っているプラグインの設定を追記して完了。 こんな感じになりました。
おつカレー様でした。