そろそろvimrcを晒してみたい

時々やってる人を見てて、人に見せても恥ずかしくなくなってきたらやろうと思ってたんです。こまめにコメント入れてるので解説はいいかなー。

## vimrc

```vim:vimrc
" ディレクトリ設定せんとなんか怖くない？
if ( has('win32') && !has('nvim') )
	cd ~/vimfiles
elseif has('nvim')
	cd ~/AppData/Local/nvim
elseif has('unix')
	cd ~/.vim
endif

let $VIMFILES=getcwd()

" 文字コード関係
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,cp932,iso-2022-jp,euc-jisx0213,euc-jp,guess
if has ('win32')
	set fileformat=dos
	set fileformats=dos,unix,mac
elseif has ('unix')
	set fileformat=unix
	set fileformats=unix,dos,mac
endif

" 検索周り
set ignorecase smartcase
set hlsearch

" diff関連
if has ('win32')
	set diffexpr=MyDiff()
endif

function! MyDiff()
	let opt = ""
	if &diffopt =~ "icase"
		let opt = opt . "-i "
	endif
	if &diffopt =~ "iwhite"
		let opt = opt . "-b "
	endif
	silent execute '!diff.exe -a --binary ' . opt . v:fname_in . ' ' . v:fname_new . '" > "' . v:fname_out
endfunction

set diffopt=filler,vertical

" 編集関係
set autoindent
set backspace=indent,eol,start
set wildmenu
set clipboard+=unnamed

" 画面表示
set tabstop=4
set shiftwidth=4
set number
set ruler
set list
set listchars=tab:>-,trail:-
set wrap
set laststatus=2
set cmdheight=2
set showcmd
set title
set cursorline
set splitbelow
set splitright
set noequalalways
set winwidth=1
set winminwidth=1
set winheight=1
set winminheight=1
set scrolloff=5
" カラースキーム設定はvim-plugのあとに行きました。

"lightline用だけどvimネイティブの機能なので…
set statusline=2

" guioption関係（多いのでまとめ）
set guioptions-=T
set guioptions-=l
set guioptions-=r
set guioptions-=L
set guioptions-=R

set mouse=nr

" バックアップ
set backup
if has('win32')
	set backupdir=E:/document/backup
elseif has('unix')
	set backupdir=~/backup
endif
set undodir=./autogen

" viminfo
if ( has('win32') && !has('nvim') )
	set viminfo='100,<50,s10,h,rA:,rB:
	let &viminfofile = $VIMFILES.'/viminfo.win'
elseif has('nvim')
	set viminfo='100,<50,s10,h,rA:,rB:./nviminfo.nvim
elseif has('unix')
	set viminfo='100,<50,s10,h,rA:,rB:n~/.vim/viminfo.bow
endif

" 開いたファイルのディレクトリに自動で移動する
set autochdir

" シェル設定
if has('win32')
	set shell=powershell
	set shellcmdflag=-c
	set shellquote=\"
	set shellxquote=
endif

" 日本語の文章構造に対応するやつ
set matchpairs+=（:）,「:」,『:』,【:】,［:］,＜:＞
" 三点リードおかしいやん…
set ambiwidth=double

" 日本語入力の便宜 (thanks, kaoriya.)
if has('multi_byte_ime') || has('xim')
	" IME ON時のカーソルの色を設定(設定例:紫)
	" highlight CursorIM guibg=Purple guifg=NONE
	" 挿入モード・検索モードでのデフォルトのIME状態設定
	set iminsert=0 imsearch=0
	if has('xim') && has('GUI_GTK')
		" XIMの入力開始キーを設定:
		" 下記の s-space はShift+Spaceの意味でkinput2+canna用設定
		set imactivatekey=s-space
	endif
	" 挿入モードでのIME状態を記憶させない場合、次行のコメントを解除
	inoremap <silent> <ESC> <ESC>:set iminsert=0<CR>
endif

" 脱初心者を目指すVimmerに|ススメしたいVimプラグインや.vimrcの設定
" https://qiita.com/jnchito/items/5141b3b01bced9f7f48fr最後のカーソル位置を復元する
if has("autocmd")
	autocmd BufReadPost *
	\ if line("'\"") > 0 && line ("'\"") <= line("$") |
	\	 exe "normal! g'\"" |
	\ endif
endif

" netrw.vim用
let g:netrw_liststyle = 1
let g:netrw_mousemaps = 0

"他のファイル読まないように…

if !exists('s:isReload')
	" vim-plug
	let $MYPLUG=$VIMFILES.'/vim-plug/vim-plug.conf.vim'
	source $MYPLUG

	" 自作コマンド/リマップ群のローダー
	source remap.vim
	runtime! command.d/*.vim
endif

let s:isReload = 1
```

## gvimrc

```vim:gvimrc
" 変数定義
let s:winfont = 'Ricty_Diminished_for_Powerline:h12'
let s:unixfont = 'a14,r14,k14'

let s:winprintfont = s:winfont
let s:unixprintfont = s:unixfont

" フォント
if has('win32')
	let &guifont = s:winfont
	set linespace=1
elseif has('xfontset')
	let &guifontset = s:unixfont
endif

" 印刷関係
if has('printer')
	if has('win32')
		let &printfont = s:winprintfont
	endif
endif

" Hack #120: gVim でウィンドウの位置とサイズを記憶する
" http://vim-jp.org/vim-users-jp/2010/01/28/Hack-120.html
let g:save_window_file = expand($VIMFILES.'/.vimwinpos')
augroup SaveWindow
	autocmd!
	autocmd VimLeavePre * call s:save_window()
	function! s:save_window()
		let options = [
			\ 'set columns=' . &columns,
			\ 'set lines=' . &lines,
			\ 'winpos ' . getwinposx() . ' ' . getwinposy(),
			\ ]
		call writefile(options, g:save_window_file)
	endfunction
augroup END

if filereadable(g:save_window_file)
	execute 'source' g:save_window_file
endif
```

## remap.vim

```vim:remap.vim
" 甘えるな、hjklを使え
noremap <Left> <Nop>
noremap <Down> <Nop>
noremap <Up> <Nop>
noremap <Right> <Nop>

inoremap <Left> <Nop>
inoremap <Down> <Nop>
inoremap <Up> <Nop>
inoremap <Right> <Nop>

nnoremap <Down> :<Down>
nnoremap <Up> :<Up>
nnoremap <S-Down> /<Down>
nnoremap <S-Up> /<Up>

" 赤鼻がうっさい
map <MiddleMouse> <Nop>
imap <MiddleMouse> <Nop>
cmap <MiddleMouse> <Nop>

" 試しにリーダーキーを変えてみる
let mapleader = "\<Space>"

" 検索を必ずVeryMagicに
nnoremap / /\v

" ハイライトうざったいんじゃ！
noremap <Esc><Esc> :noh<CR>

" ggVGがめんどい
nnoremap g<C-a> ggVG

" 個人的にこれが一番直交感ある
vnoremap v <Esc>V

" インサートモード中の^Hに対応して^Lで<Del>させる様に
inoremap <C-l> <Del>

" 短縮入力用
"どっちにしても遠すぎるわ
inoremap <C-]><C-]> \|

" Markdownの作表
inoremap <C-]>ll :--\|
inoremap <C-]>cc :-:\|
inoremap <C-]>rr --:\|

" htmlのエスケープ
inoremap <C-]><Space> &nbsp;
inoremap <C-]>& &amp;
inoremap <C-]>< &lt;
inoremap <C-]>, &lt;
inoremap <C-]>> &gt;
inoremap <C-]>. &gt;
inoremap <C-]>" &quot;

" <Leader>関係
" 普通のキーマップはあまり汚さないように

" 句読点を強引に挿入
nnoremap <Leader>, i,<Esc>
nnoremap <Leader>. i.<Esc>
nnoremap <Leader>? i?<Esc>
nnoremap <Leader>! i!<Esc>
nnoremap <Leader>/ i/<Esc>
nnoremap <Leader>\ i\<Esc>
nnoremap <Leader>: i:<Esc>
nnoremap <Leader><Space> i <Esc>
nnoremap <Leader><S-Space> i…<Esc>

" IMEのモードを指定して挿入モードに入れないだろうか？
nnoremap <Leader>i i^^
nnoremap <Leader>a a^^
nnoremap <Leader>I I^^
nnoremap <Leader>A A^^
nnoremap <Leader>o o^^
nnoremap <Leader>O O^^
" indent guidesとバッティングしたので
nmap <silent> <Leader><C-i> <Plug>IndentGuidesToggle

nnoremap <Leader>h ^
nnoremap <Leader>l $

" Leaderメニュー
noremap <Leader>ff :Ex 
noremap <Leader>mm :Pipe marks<CR>
noremap <Leader>cc :Pipe changes<CR>
noremap <Leader>jj :Pipe jumps<CR>
" 以下2つは recents.vim 参照
noremap <Leader>rr :Pipe! RRoldfiles \v
noremap <Leader>bb :Pipe BBls \v

" 設定ファイル読み込み用
" キーマップの為に一部ファイルのパスを環境変数に
let $MYCOMMAND = $VIMFILES.'/command.d'
let $MYREMAP = $VIMFILES.'/remap.vim'

noremap <Leader>vv :e $MYVIMRC<CR>
noremap <Leader>vg :e $MYGVIMRC<CR>
noremap <Leader>vc :e $MYCOMMAND<CR>
noremap <Leader>vc<CR> :e $MYCOMMAND<CR>
noremap <Leader>vr :e $MYREMAP<CR>
noremap <Leader>vp :e $MYPLUG<CR>
noremap <Leader>vv! :e! $MYVIMRC<CR>
noremap <Leader>vg! :e! $MYGVIMRC<CR>
noremap <Leader>vc! :e! $MYCOMMAND<CR>
noremap <Leader>vr! :e! $MYREMAP<CR>
noremap <Leader>vp! :e! $MYPLUG<CR>

" バッファ増えすぎ問題
nnoremap <Leader>bd :%bdelete
nnoremap <Leader>bw :%bwipeout

" source読み込み用
noremap <Leader>ss :source<Space>%<CR>

" vim-plug用
noremap <leader>pp :PlugInstall<CR>

" MarkDown Preview
noremap <Leader>md :!start "vivaldi.exe" "%"<CR>

" Width=80想定のドキュメントのウィンドウサイズを読みやすく
noremap <Leader>ww :vert res 80<CR>

" qiitactl用
noremap <Leader>qq :QiitaFiles<CR>

" collar.vim
nnoremap <silent> <Leader><CR> :DeStain<CR>
```

## vim-plug.conf.vim

```vim:vim-plug.conf.vim
cd $VIMFILES

let $VIMPLUGGED=$VIMFILES.'/vim-plug'

call plug#begin($VIMPLUGGED)
	Plug 'itchyny/lightline.vim'
	Plug 'simeji/winresizer'
	Plug 'xolox/vim-misc' | Plug 'xolox/vim-session'
"	Plug 'vim-scripts/netrw.vim'
	Plug 'yuratomo/w3m.vim'
"	Plug 'vim-scripts/ViewOutput'
	Plug 'vim-jp/autofmt'
	Plug 'vim-jp/vimdoc-ja'
	Plug 'deton/jasegment.vim'
	Plug 'deton/jasentence.vim'
	Plug 'nathanaelkane/vim-indent-guides'
	Plug 'tpope/vim-surround'
	Plug 'flazz/vim-colorschemes'
"	Plug 'thinca/vim-splash'
"	Plug 'thinca/vim-quickrun'
call plug#end()

" vim-plugロード後の各プラグインの設定
" 多くなりそうならconf.vimへ
" runtimeロードは出来なかったので要source記述

" lightline.vim
source $VIMPLUGGED/lightline.conf.vim

" vim-session
if has ('win32')
	let g:session_directory = $VIMFILES.'/sessions/win'
elseif has ('unix')
	let g:session_directory = $VIMFILES.'/sessions/bow'
endif
if v:servername=~'VIM$'
	let g:session_autosave = 'yes'
	let g:session_autoload = 'yes'
	let g:session_autosave_periodic = 0
else
	let g:session_autosave = 'no'
	let g:session_autoload = 'no'
	let g:session_autosave_periodic = 0
endif

" newrw.vim
"let g:netrw_sort_sequence='[\/]$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$'
"let g:netrw_sort_sequence='[\/]$'
"let g:netrw_sort_options='n'

" w3c-vim
if has('win32')
	let g:w3m#command = 'w3m.exe'
endif
let g:w3m#search_engine = 'http://www.google.co.jp/search?ie=' . &encoding . '&q=%s'
cnoremap wwwm W3m

" vim-indent-guides
let g:indent_guides_enable_on_vim_startup = 0
let g:indent_guides_default_mapping = 0

" vim-surround
" 上から順番に、l, L, 9, 0, ,(comma), .(period), *, &, q
let g:surround_108 = "「\r」"
let g:surround_76  = "『\r』"
let g:surround_57  = "（ \r ）"
let g:surround_48  = "（\r）"
let g:surround_44  = "＜ \r ＞"
let g:surround_46  = "＜\r＞"
let g:surround_42  = "**\r**"
let g:surround_38  = "&lt;\r&gt;"
let g:surround_113 = "&quot;\r&quot;"

" vim-colorschemes
colorscheme janah
```