-
Notifications
You must be signed in to change notification settings - Fork 0
/
.vimrc
279 lines (243 loc) · 9.02 KB
/
.vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
" 画面表示の設定{{{
set number " 行番号を表示する
set cursorline " カーソル行の背景色を変える
set cursorcolumn " カーソル列の背景色を変える
set laststatus=2 " ステータス行を常に表示
set cmdheight=1 " メッセージ表示欄
set showmatch " 対応する括弧を強調表示
set helpheight=999 " ヘルプを画面いっぱいに開く
set list " 不可視文字を表示
"}}}
" 不可視文字の表示記号指定{{{
set listchars=tab:▸\ ,trail:-,eol:↲,extends:❯,precedes:❮
" カーソルの形
if has('vim_starting')
" 挿入モード時に非点滅の縦棒タイプのカーソル
let &t_SI .= "\e[6 q"
" ノーマルモード時に非点滅のブロックタイプのカーソル
let &t_EI .= "\e[2 q"
" 置換モード時に非点滅の下線タイプのカーソル
let &t_SR .= "\e[4 q"
endif
"}}}
" カーソル移動関連の設定{{{
set backspace=indent,eol,start " Backspaceキーの影響範囲に制限を設けない
set whichwrap=b,s,h,l,<,>,[,] " 行頭行末の左右移動で行をまたぐ
set scrolloff=8 " 上下8行の視界を確保
set sidescrolloff=16 " 左右スクロール時の視界を確保
set sidescroll=1 " 左右スクロールは一文字づつ行う
set virtualedit+=block
"}}}
" プレフィックスキー{{{
let g:EasyMotion_leader_key = '<Space><Space>'
let mapleader = "\<Space>"
nnoremap [GitLeader] <Nop>
nmap <Space>g [GitLeader]
"}}}
" ファイル処理関連の設定{{{
set confirm " 保存されていないファイルがあるときは終了前に保存確認
set hidden " 保存されていないファイルがあるときでも別のファイルを開くことが出来る
set autoread " 外部でファイルに変更がされた場合は読みなおす
set nobackup " ファイル保存時にバックアップファイルを作らない
set noswapfile " ファイル編集中にスワップファイルを作らない
set fileencodings=utf-8,cp932,euc-jp,sjis " ファイルを読み込む時の、文字コード自動判別の順番
set fileformats=unix,dos,mac
"}}}
" 検索/置換の設定{{{
set hlsearch " 検索文字列をハイライトする
hi Search ctermbg=Red
hi Search ctermfg=White
set incsearch " インクリメンタルサーチを行う
set ignorecase " 大文字と小文字を区別しない
set smartcase " 大文字と小文字が混在した言葉で検索を行った場合に限り、大文字と小文字を区別する
set wrapscan " 最後尾まで検索を終えたら次の検索で先頭に移る
" set gdefault " 置換の時 g オプションをデフォルトで有効にする
" 常に very magic モードにする
nnoremap / /\v
" ハイライトを消したい時
nnoremap <silent> <Esc><Esc> :noh<CR>
"}}}
" タブ/インデントの設定{{{
set expandtab " タブ入力を複数の空白入力に置き換える
set tabstop=2 " 画面上でタブ文字が占める幅
set shiftwidth=2 " 自動インデントでずれる幅
set softtabstop=2 " 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅
set autoindent " 改行時に前の行のインデントを継続する
set smartindent " 改行時に入力された行の末尾に合わせて次の行のインデントを増減する
"}}}
" 動作環境との統合関連の設定{{{
" OSのクリップボードをレジスタ指定無しで Yank, Put 出来るようにする
set clipboard=unnamed,unnamedplus
" マウスの入力を受け付ける
set mouse=a
" Windows でもパスの区切り文字を / にする
set shellslash
" インサートモードから抜けると自動的にIMEをオフにする
set iminsert=0
set imsearch=-1
"}}}
" コマンドラインの設定{{{
" コマンドラインモードでTABキーによるファイル名補完を有効にする
set wildmenu wildmode=list:longest,full
" コマンドラインの履歴を10000件保存する
set history=10000
"}}}
" ビープの設定{{{
"ビープ音すべてを無効にする
set visualbell t_vb=
set noerrorbells "エラーメッセージの表示時にビープを鳴らさない
"}}}
"Remap{{{
"コロンでコマンドモードに入るようにする。
nnoremap ; :
nnoremap : ;
vnoremap ; :
vnoremap : ;
"JISキーとUSキーの配置のため
inoremap <C-@> <ESC>
"Exコマンドを実装する関数を定義
function! ExecExCommand(cmd)
silent exec a:cmd
return ''
endfunction
"インサートモードで移動
inoremap <C-h> <Left>
inoremap <C-l> <Right>
inoremap <C-k> <Up>
inoremap <C-j> <Down>
inoremap <C-a> <Home>
inoremap <C-e> <End>
"補完せず補完ウィンドウを閉じてから移動
inoremap <silent><expr><C-b> pumvisible() ? "<C-e><C-r>=ExecExCommand('normal b')<CR>" : "<C-r>=ExecExCommand('normal b')<CR>"
inoremap <silent><expr><C-w> pumvisible() ? "<C-e><C-r>=ExecExCommand('normal w')<CR>" : "<C-r>=ExecExCommand('normal w')<CR>"
"方向キーを使用しなくても検索履歴を使用できるようにする。
cnoremap <C-h> <Left>
cnoremap <C-l> <Right>
cnoremap <C-k> <Up>
cnoremap <C-j> <Down>
cnoremap <C-a> <Home>
cnoremap <C-e> <End>
""タブ
nnoremap <silent> <C-h> :tabprevious<CR>
nnoremap <silent> <C-l> :tabnext<CR>
" nnoremap <silent> <C-l> :+tabmove<CR>
" nnoremap <silent> <C-h> :-tabmove<CR>
"}}}
" プラグインマネージャーの設定{{{
" let s:dein_dir = expand('~/.cache/dein')
" let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
"
" if !isdirectory(s:dein_repo_dir)
" call system('git clone https://github.com/Shougo/dein.vim ' . shellescape(s:dein_repo_dir))
" endif
"
" execute 'set runtimepath^=' . s:dein_repo_dir
"
" let s:toml = $DOTFILES_ROOT . '/.dein.toml'
" let s:lazy_toml = $DOTFILES_ROOT . '/.dein_lazy.toml'
" if dein#load_state(s:dein_dir)
" call dein#begin(s:dein_dir)
" call dein#load_toml(s:toml, {'lazy': 0})
" call dein#load_toml(s:lazy_toml, {'lazy': 1})
" call dein#end()
" call dein#save_state()
" endif
"
" if has('vim_starting') && dein#check_install()
" call dein#install()
" endif
"}}}
" deinの処理後でないと機能しない{{{
filetype plugin indent on
syntax enable
"" 補完のポップアップメニューの色
set termguicolors
highlight Pmenu ctermfg=white ctermbg=darkgray
highlight PmenuSel ctermfg=yellow ctermbg=black
highlight CursorLine cterm=NONE ctermfg=NONE ctermbg=darkgray
highlight Normal ctermbg=NONE guibg=NONE
highlight NonText ctermbg=NONE guibg=NONE
highlight LineNr ctermbg=NONE guibg=NONE
highlight Folded ctermbg=NONE guibg=NONE
highlight EndOfBuffer ctermbg=NONE guibg=NONE
"" colorscheme gruvbox用の設定
highlight comment ctermfg=242 guifg=darkcyan
"}}}
" others{{{
if !has('gui_running')
" CUIで入力された<S-CR>が拾えないので
" iTerm2のキー設定を利用して特定の文字入力をmapする
map ✠ <S-CR>
nnoremap <CR> zo<CR>
nnoremap <S-CR> zc<CR>
autocmd BufReadPost quickfix nnoremap <buffer> <CR> <CR>
endif
" 文字削除時にクリップボードコピーしない
" nnoremap d "_d
" xnoremap d "_d
" xnoremap p "_dP
" 選択時に改行を含まない
vnoremap $ g_
" 形式変換
vnoremap camel :s/\%V\(_\\|-\)\(.\)/\u\2/g<CR>
vnoremap snake :s/\%V\([A-Z]\)/_\l\1/g<CR>
vnoremap kebab :s/\%V\([A-Z]\)/-\l\1/g<CR>
" Move current line to up/down
" Ref: https://vim.fandom.com/wiki/Moving_lines_up_or_down
nnoremap <A-j> :m .+1<CR>==
nnoremap <A-k> :m .-2<CR>==
inoremap <A-j> <Esc>:m .+1<CR>==gi
inoremap <A-k> <Esc>:m .-2<CR>==gi
vnoremap <A-j> :m '>+1<CR>gv=gv
vnoremap <A-k> :m '<-2<CR>gv=gv
" When MacOS
" Ref: https://stackoverflow.com/questions/7501092/can-i-map-alt-key-in-vim
if has('macunix')
" Option + J/K
" ∆ == J
" ˚ == K
nnoremap ∆ :m .+1<CR>==
nnoremap ˚ :m .-2<CR>==
inoremap ∆ <Esc>:m .+1<CR>==gi
inoremap ˚ <Esc>:m .-2<CR>==gi
vnoremap ∆ :m '>+1<CR>gv=gv
vnoremap ˚ :m '<-2<CR>gv=gv
endif
" Reload vimrc
command! Vimrc :source ~/.vimrc
" tmuxをDevModeにする
command! TmuxModeDev silent !tmux source-file ${DOTFILES_ROOT} . /.tmux/.tmux.dev.conf
" augroup GrepCmd
" autocmd!
" autocmd QuickFixCmdPost vim,grep,make if len(getqflist()) != 0 | cwindow | endif
" augroup END
autocmd QuickFixCmdPost *grep* copen
" Toggle quickfix
" if exists('g:__QUICKFIX_TOGGLE__')
" finish
" endif
" let g:__QUICKFIX_TOGGLE__ = 1
function! ToggleQuickfix()
let l:nr = winnr('$')
cwindow
let l:nr2 = winnr('$')
if l:nr == l:nr2
cclose
endif
endfunction
nnoremap <script> <silent> <F4> :call ToggleQuickfix()<CR>
autocmd FileType vim setlocal foldmethod=marker
"" https://vim-jp.org/vim-users-jp/2009/10/08/Hack-84.html
" Save fold settings.
autocmd BufWritePost * if expand('%') != '' && &buftype !~ 'nofile' | mkview | endif
autocmd BufRead * if expand('%') != '' && &buftype !~ 'nofile' | silent! loadview | endif
" Don't save options.
set viewoptions-=option
" htmlで対応タグに移動する。
source $VIMRUNTIME/macros/matchit.vim
"}}}
" Local Setting{{{
if filereadable(expand('~/.vim/local.vim'))
source ~/.vim/local.vim
endif
" }}}