-
Notifications
You must be signed in to change notification settings - Fork 0
/
.vimrc
416 lines (357 loc) · 12.8 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
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
set encoding=utf-8
scriptencoding utf-8
"====================================
" Plugin
"====================================
call plug#begin('~/.vim/plugged')
" スタート画面
Plug 'mhinz/vim-startify'
" -- Font
Plug 'lambdalisue/nerdfont.vim'
Plug 'ryanoasis/vim-devicons'
" -- Color scheme
Plug 'cocopon/iceberg.vim'
" StatusLineで使用
Plug 'arcticicestudio/nord-vim'
" -- Appearance
Plug 'itchyny/lightline.vim'
Plug 'rickhowe/diffchar.vim'
" Plug 'Yggdroot/indentLine'
Plug 'preservim/vim-indent-guides'
" -- Window
Plug 'simeji/winresizer'
" -- Movement
Plug 'easymotion/vim-easymotion'
" -- git
Plug 'airblade/vim-gitgutter'
Plug 'tpope/vim-fugitive'
Plug 'junegunn/gv.vim'
" git blame の情報をバッファの右側に表示
Plug 'APZelos/blamer.nvim'
" -- Filer
Plug 'lambdalisue/fern.vim'
Plug 'lambdalisue/fern-git-status.vim'
Plug 'lambdalisue/fern-renderer-nerdfont.vim'
" -- fzf
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
" -- LSP
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" -- Lint
Plug 'dense-analysis/ale'
" -- Common to each language
Plug 'mattn/emmet-vim'
Plug 'tpope/vim-repeat'
Plug 'tpope/vim-surround'
Plug 'tpope/vim-commentary'
Plug 'bronson/vim-trailing-whitespace'
Plug 'jiangmiao/auto-pairs'
Plug 'https://github.com/wolandark/vim-live-server.git'
Plug 'markonm/traces.vim'
" -- HTML
Plug 'othree/html5.vim'
Plug 'AndrewRadev/tagalong.vim'
" -- Sass
Plug 'JulesWang/css.vim'
Plug 'cakebaker/scss-syntax.vim'
Plug 'tpope/vim-haml'
" -- JavaScript
" JavaScript syntax
Plug 'othree/yajs.vim'
Plug 'HerringtonDarkholme/yats.vim'
Plug 'yuezk/vim-js'
Plug 'maxmellon/vim-jsx-pretty'
" EJS syntax
Plug 'nikvdp/ejs-syntax'
" JSON
Plug 'elzr/vim-json'
" -- PHP
Plug 'captbaritone/better-indent-support-for-php-with-html'
Plug 'hesselbom/vim-hsftp'
Plug 'oprogramador/vim-ftp'
call plug#end()
"====================================
" Basic setting
"====================================
set backspace=indent,eol,start " BackSpaceで削除ができない場合に追加
set number " 行番号を表示
set relativenumber " カーソル行からの相対的な行番号を表示
set linespace=2
set wrap " 画面の端で行を折り返す
set display=lastline " 省略されずに表示
set title " 編集中ファイル名の表示
set vb t_vb= " beep音を止めて、画面の点滅もさせない
set noerrorbells " エラーメッセージの表示時にビープを鳴らさない
set cmdheight=2 " メッセージ表示欄を2行確保
set laststatus=2 " ステータスを表示
set ambiwidth=double " ○や□などの文字が重ならないようにする
set fenc=utf-8 " 文字コードをUFT-8に設定
set list listchars=tab:▸\ ,eol:↲,extends:»,precedes:«,nbsp:% " 不可視文字の指定
set guioptions+=a " yでコピーした時にクリップボードに入る
set clipboard=unnamed,autoselect " ヤンクでクリップボードにコピー
" -- Save
set nobackup " バックアップファイルを作らない
set noswapfile " スワップファイルを作らない
set autoread " 編集中のファイルが変更されたら自動で読み直す
set hidden " バッファが編集中でもその他のファイルを開けるように
set nowritebackup " ファイルを上書きする前にバックアップを作ることを無効化
" -- Command complement
set showcmd " 入力中のコマンドをステータスに表示する
set wildmode=list:longest " コマンドラインの補完
set pumheight=10 " 補完メニューの高さ
" -- Tab / Indent
set expandtab " Tabを半角スペースに変換
set tabstop=2 " 行頭以外のTab文字の表示幅(スペースいくつ分)
set softtabstop=2 " タブキー押下時に挿入される文字幅を指定
set breakindent " 折り返した際のインデント位置を合わせる
set autoindent " 改行時に前の行のインデントを継続する
set smartindent " 改行時に前の行の構文をチェックし次の行のインデントを増減する。smartindentは、autoindentが設定済みの場合に限って有効
set shiftwidth=2 " 行頭でのTab文字の表示幅
" -- Window
set splitbelow " 新しいウィンドウを下に開く
set splitright " 新しいウィンドウを右に開く
" -- Cursor
set ruler " カーソル位置を表示
set cursorline " カーソル行を強調表示
" ビジュアルモードでのヤンク後にカーソルを選択前の位置に戻さない
vnoremap y y`>
if has('vim_starting')
let &t_SI .= "\e[5 q" " 挿入モード時に非点滅の縦棒タイプのカーソル
let &t_EI .= "\e[1 q" " ノーマルモード時に非点滅のブロックタイプのカーソル
let &t_SR .= "\e[3 q" " 置換モード時に非点滅の下線タイプのカーソル
endif
" -- Mouse
set mouse=a " 4モードでマウス操作が可能
set ttymouse=xterm2 " ホイールの使用が可能
" -- Search
set ignorecase " 大文字、小文字の区別をしない
set smartcase " 大文字が含まれている場合は区別する
set wrapscan " 検索時に最後まで行ったら最初に戻る
set hlsearch " 検索語をハイライト表示
set incsearch " 検索文字列入力時に順次対象文字列にヒットさせる
" -- Jump
set showmatch matchtime=1 " 括弧入力時の対応する括弧を表示
source $VIMRUNTIME/macros/matchit.vim " ノーマルモード時に「%」で対応するカッコにジャンプ
" -- Complement
set completeopt=menuone,noinsert " 補完ウィンドウが表示された時に最初の1件目を選択状態にする
let g:is_macos = has('mac')
function! Disable() abort
if g:is_macos
call system('/path/to/im-select com.apple.keylayout.ABC')
else
call system('fcitx5-remote -c')
endif
endfunction
augroup IME_autotoggle
autocmd InsertLeave * call Disable()
augroup END
augroup UnnecessarySpace
autocmd!
" 全角スペースに色を付ける
autocmd ColorScheme * highlight IdeographicSpace ctermbg=24 guibg=#6b7089
" 行末の空白に色を付ける
autocmd ColorScheme * highlight ExtraWhitespace ctermbg=darkred guibg=darkred
" 全角スペースを強調表示
autocmd VimEnter,WinEnter * match IdeographicSpace / /
augroup END
augroup SyntaxControl
autocmd!
autocmd FileType html,jsp,asp,php,xml,perl syntax sync minlines=500 maxlines=1000
augroup END
augroup Diff
autocmd!
autocmd ColorScheme * highlight DiffAdd ctermfg=NONE guifg=NONE
autocmd ColorScheme * highlight DiffDelete ctermfg=NONE guifg=NONE
autocmd ColorScheme * highlight DiffText ctermfg=NONE guifg=NONE
autocmd ColorScheme * highlight DiffChange ctermfg=NONE guifg=NONE
autocmd WinEnter * if &diff | set wrap | endif
autocmd WinLeave * if &diff | set wrap | endif
augroup END
" -- Syntax highlight
syntax enable
set termguicolors
colorscheme iceberg
set background=dark
if has('gui_running')
set guioptions+=a
endif
"====================================
" Key mapping
"====================================
let mapleader = "\<Space>"
" -- キーの無効化
noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>
inoremap <Up> <Nop>
inoremap <Down> <Nop>
inoremap <Left> <Nop>
inoremap <Right> <Nop>
nnoremap s <Nop>
" -- jキーを二度押しでESCキー
inoremap <silent> jj <ESC>
inoremap <silent> っj <ESC>
inoremap <silent> jj <ESC>
" -- Vimの終了
nnoremap <Leader>w :w<CR>
nnoremap <Leader>q :q<CR>
" -- Redo
nnoremap U <C-r>
" -- 全選択
noremap <Leader>a ggVG
" カーソル位置から行末までをコピー
nnoremap Y y$
" カーソルを表示行で移動
nnoremap k gk
nnoremap j gj
" -- Scroll
nnoremap zk zt
nnoremap zj zb
" -- 検索ハイライトを消す
noremap <C-n> :noh<ESC>
" -- ウィンドウの分割
noremap ss <C-w>s
noremap sv <C-w>v
" -- ウィンドウ間のカーソル移動
noremap sk <C-w>k
noremap sj <C-w>j
noremap sh <C-w>h
noremap sl <C-w>l
" -- Tab
nnoremap gh gT
nnoremap gl gt
"設定ファイル読み込み
nnoremap <F5> :source ~/.vimrc<Enter>
nnoremap sou :source ~/.vimrc<Enter>
"------------------------------------
" Yggdroot/indentLine
"------------------------------------
let g:indentLine_char_list = ['¦']
"------------------------------------
" itchyny/lightline.vim
"------------------------------------
if !has('gui_running')
set t_Co=256
endif
set noshowmode "ステータスライン下の`-- INSERT --`表示を非表示にする
set statusline^=%{coc#status()}
let g:lightline = {
\ 'colorscheme': 'nord',
\ 'active': {
\ 'left': [ [ 'mode', 'paste' ],
\ [ 'gitbranch', 'readonly', 'filename', 'modified' ] ]
\ },
\ 'component_function': {
\ 'gitbranch': 'FugitiveHead'
\ },
\ }
"------------------------------------
" preservim/vim-indent-guides
"------------------------------------
let g:indent_guides_enable_on_vim_startup = 1
"------------------------------------
" ryanoasis/vim-devicons
"------------------------------------
"------------------------------------
" vim-gitgutter
"------------------------------------
set updatetime=100 " 更新が反映されるまでの時間を短く設定
set signcolumn=yes " 未修正の状態でもvim-gitgutterラインを常に表示させて画面のズレを無くす
"------------------------------------
" APZelos/blamer.nvim
"------------------------------------
let g:blamer_enabled = 0 "blallerを有効化
let g:blamer_delay = 500 "メッセージが表示されるまでのミリ秒単位の遅延
"------------------------------------
" mattn/emmet-vim
"------------------------------------
" インデントの問題を回避
imap <expr> <tab> emmet#expandAbbrIntelligent("\<tab>")
let g:user_emmet_settings = {
\ 'variables': {'lang': 'ja'},
\ 'html': {
\ 'default_attributes': {
\ 'option': {'value': v:null},
\ 'textarea': {'id': v:null, 'name': v:null, 'cols': 10, 'rows': 10},
\ },
\ 'snippets': {
\ 'html:5': "<!DOCTYPE html>\n"
\ ."<html lang=\"${lang}\">\n"
\ ."<head>\n"
\ ."\t<meta charset=\"${charset}\">\n"
\ ."\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n"
\ ."\t<meta name=\"description\" content=\"\">\n"
\ ."\t<meta name=\"author\" content=\"\">\n"
\ ."\t<meta name=\"og:type\" content=\"\">\n"
\ ."\t<meta name=\"og:title\" content=\"\">\n"
\ ."\t<meta name=\"og:image\" content=\"\">\n"
\ ."\t<meta name=\"og:site_name\" content=\"\">\n"
\ ."\t<title></title>\n"
\ ."\t<link rel=\"canonical\" href=\"\">\n"
\ ."\t<link rel=\"stylesheet\" href=\"\">\n"
\ ."</head>\n"
\ ."<body>\n\t${child}|\n</body>\n"
\ ."</html>",
\ },
\ },
\}
"------------------------------------
" lambdalisue/fern.vim
"------------------------------------
nnoremap <Leader>n :Fern . -reveal=%<CR>
let g:fern_disable_startup_warnings = 1 " 警告メッセージを無効にする
let g:fern#default_hidden=1 " 隠しファイルを表示する
let g:fern#renderer = "nerdfont" "アイコン表示
"------------------------------------
" junegunn/fzf.vim
"------------------------------------
nnoremap <Leader>; :Files<CR>
"------------------------------------
" neoclide/coc.nvim
"------------------------------------
" -- autocomplete
inoremap <silent><expr> <C-j> coc#pum#visible() ? coc#pum#next(1) : "\<C-j>"
inoremap <silent><expr> <C-k> coc#pum#visible() ? coc#pum#prev(1) : "\<C-k>"
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() : "\<CR>"
highlight CocSearch ctermfg=181 guifg=#e2a478
autocmd CursorHold * silent call CocActionAsync('highlight')
"------------------------------------
" vim-easy-align
"------------------------------------
xmap ga <Plug>(EasyAlign)
nmap ga <Plug>(EasyAlign)
"------------------------------------
" ale
"------------------------------------
let g:ale_fix_on_save = 1
" -- 特定のツールのみを使用
let g:ale_fixers = {
\ '*': ['remove_trailing_lines', 'trim_whitespace'],
\ 'javascript': ['eslint'],
\}
let g:ale_fix_on_save = 1
"------------------------------------
" JulesWang/css.vim
" cakebaker/scss-syntax.vim
"------------------------------------
au BufRead,BufNewFile *.scss set filetype=scss.css
autocmd FileType scss set iskeyword+=-
"------------------------------------
" heavenshell/vim-jsdoc
"------------------------------------
" キーマッピングの有効化
let g:jsdoc_enable_key_mappings = 1
" lehreのパスを指定
let g:jsdoc_tool_path_lehre = '/usr/local/bin/lehre' " lehreの実行ファイルのパスに置き換える
"------------------------------------
" nikvdp/ejs-syntax
"------------------------------------
autocmd BufNewFile,BufRead *.ejs set filetype=ejs
autocmd BufNewFile,BufRead *._ejs set filetype=ejs
function! s:DetectEjs()
if getline(1) =~ '^#!.*\<ejs\>'
set filetype=ejs
endif
endfunction
autocmd BufNewFile,BufRead * call s:DetectEjs()