プラグインなしでvimを(比較的)気持ちよく使うvimrc

![06.png](https://qiita-image-store.s3.amazonaws.com/0/258841/782d2400-a25c-09a2-38fc-58737824082e.png)

## 背景

プラグインがどうしても使えない環境でも比較的に使いやすくするためのvimrc
最低限中の最低限を書いただけです。

## 使い方

homeディレクトリ配下に.vimrcというファイルを作成してあとは好きなように設定を入れるだけです

## vimrc

``` vim
" ========== Character code =======
" 文字コードをUFT-8に設定
set fenc=utf-8
set encoding=utf-8
scriptencoding utf-8
" 改行コードの自動判別
set fileformat=unix
" □や○文字が崩れる問題を解決
set ambiwidth=double

" ========== Base Config ==========
" バックアップファイルを作らない
set nobackup

" スワップファイルを作らない
set noswapfile

" バッファが編集中でもその他のファイルを開けるように
set hidden

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

" 改行時自動インデント
set smartindent

" 行番号を表示
set number

" 不可視文字を表示
"set list

" インクリメントサーチを有効にする
set incsearch

" ハイライトサーチを有効にする
set hlsearch

" 検索時大文字小文字を区別しない
set ignorecase

" 検索時に大文字を入力した場合ignorecaseが無効になる
set smartcase

" カーソルラインを表示する
set cursorline

" ファイル更新で自動で読み直す
"set autoread

" 補完ウィンドウの設定
set completeopt=menuone

" ビープ音を可視化
"set visualbell

" 括弧入力時の対応する括弧を表示
set showmatch

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

" ステータスラインを常に表示
set laststatus=2

" 検索時に最後まで行ったら最初に戻る
set wrapscan

" タイトルを表示
set title

" カーソルの行数表示
set cursorline

" カーソルから相対的な行数を表示する
""set relativenumber

" マウス操作を有効にする
""set mouse=a

" 1 tab == 4 spaces
""set shiftwidth=4
""set tabstop=4

" タイムアウト時間設定
set timeout timeoutlen=1000 ttimeoutlen=50

" wildmenuを有効にする
set wildmenu
set wildmode=full

" 保存するコマンド履歴の数
set history=500

" バックスペースキーの有効化
"set backspace=indent,eol,start

" 移動コマンドを使ったとき、行頭に移動しない
set nostartofline

" ========== Key Map ==============

" 入力モード中に素早くJJと入力した場合はESCとみなす
inoremap jj <Esc>

" Escの2回押しでハイライト消去
nnoremap <Esc><Esc> :nohlsearch<CR><ESC>

" 折り返しでも行単位で移動
nnoremap j gj
nnoremap k gk
vnoremap j gj
vnoremap k gk

"インサートモードでも移動
inoremap <c-d> <delete>
inoremap <c-j> <down>
inoremap <c-k> <up>
inoremap <c-h> <left>
inoremap <c-l> <right>

" Shift + 矢印でウィンドウサイズを変更
nnoremap <S-Left>  <C-w><<CR>
nnoremap <S-Right> <C-w><CR>
nnoremap <S-Up>    <C-w>-<CR>
nnoremap <S-Down>  <C-w>+<CR>

" NERDTree用バインド 
nnoremap <silent><C-e> :NERDTreeToggle<CR>

" w!! でスーパーユーザーとして保存
cmap w!! w !sudo tee > /dev/null %

" カーソルラインの位置を保存する
if has("autocmd")
    autocmd BufReadPost *
    \ if line("'\"") > 0 && line ("'\"") <= line("$") |
    \   exe "normal! g'\"" |
    \ endif
endif

" 挿入モードでクリップボードからペーストする時に自動でインデントさせないようにする
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

" マウスでカーソル移動とスクロール
"if has('mouse')
"    set mouse=a
"    if has('mouse_sgr')
"        set ttymouse=sgr
"    elseif v:version > 703 || v:version is 703 && has('patch632')
"        set ttymouse=sgr
"    else
"        set ttymouse=xterm2
"    endif
"endif

```

## vimrcの学習

個人的にvimrcについて調べものするのはネットだが下記の読書会が為になることも多いのでお勧めです。
一番の勉強はやはり人のを読むに限ります。GitHubとかで公開されているdotfilesを読むのもいいですが
詳しい人が解説してくれたり、歴史的経緯などたくさんの学びがあるのでよいです。

[vimrc読書会](https://vim-jp.org/reading-vimrc/)

後はvimは公式ドキュメントやヘルプも充実しているのでそちらを読むのもお勧めします。

## まとめ

個人的に使いやすい設定を列挙しただけの記事で一つでも参考になれば幸いです。
使い捨てマシンとかでプラグインとかインストール不可でササッとコピペする用のvimrcって意外と便利だったりします。
(そもそもvimすら入れれないことも多いのですが、、、)