-
Notifications
You must be signed in to change notification settings - Fork 2
/
.vimrc
423 lines (343 loc) · 10.4 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
417
418
419
420
421
422
" ====================================================
" Basic settings
" ====================================================
"
scriptencoding utf-8
set fileencodings=iso-2022-jp,utf-8,euc-jp,cp932,ucs-bom,default,latin1
set enc=utf-8
set ambiwidth=double
set nowritebackup
set nobackup
set noswapfile
set ignorecase
set smartcase
set incsearch
set hlsearch
set nowrapscan
set autoindent
set smartindent
set cindent
set tabstop=4
set shiftwidth=4
set expandtab
set list
set listchars=tab:»-,trail:-,extends:»,precedes:«,nbsp:%
set number
set noruler
set showmatch
set wrap
set textwidth=0
set title
set showcmd
set cmdheight=2
set laststatus=2
set statusline=%F%m%r%h%w\ [%{&ff}][%{&fenc!=''?&fenc:&enc}][%Y][pos:%04l,%04v][%p%%][rows:%L]
set wildmenu
set nocursorline
set backspace=2
set scrolloff=5
set formatoptions+=mM
set history=1000
set mouse=a
" set autochdir
set restorescreen
set hidden
set browsedir=current
set t_vb=
set novisualbell
set noerrorbells
" set tags=~/dev/study/_vim/.tags
set imdisable
set iminsert=1
set imsearch=1
set splitbelow "Open new window below
set splitright "Open new window right
colorscheme murphy
let g:mapleader = ','
" ====================================================
" Dein @see https://github.com/Shougo/dein.vim
" ====================================================
if &compatible
set nocompatible
endif
let s:dein_dir = expand('~/dev/dotfiles/vendor/dein')
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
execute 'set runtimepath^=' . fnamemodify(s:dein_repo_dir, ':p')
let g:rc_dir = expand('~/dev/dotfiles/.vim/rc')
let s:toml = g:rc_dir . '/dein.toml'
let s:lazy_toml = g:rc_dir . '/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 dein#check_install()
call dein#install()
endif
syntax on
syntax enable
function! EditToml()
execute 'edit ' . s:toml
endfunction
function! EditTomlLazy()
execute 'edit ' . s:lazy_toml
endfunction
" ====================================================
" File type settings
" ====================================================
filetype indent on
filetype plugin indent on
filetype plugin on
augroup vimrc_file_type
autocmd!
autocmd BufNewFile,BufRead *.pm set filetype=perl
autocmd BufNewFile,BufRead *.scala set filetype=scala
autocmd BufNewFile,BufRead app/*/*.rhtml set ft=mason fenc=utf-8
autocmd BufNewFile,BufRead app/**/*.rb set ft=ruby fenc=utf-8
autocmd BufNewFile,BufRead app/**/*.yml set ft=ruby fenc=utf-8
autocmd BufNewFile,BufRead *.twig set syntax=htmldjango
autocmd FileType ruby set tabstop=4 tw=0 sw=4 expandtab
autocmd FileType eruby set tabstop=2 tw=0 sw=2 expandtab
autocmd FileType html set tabstop=2 tw=0 sw=2 fenc=utf-8 expandtab
autocmd FileType javascript set tabstop=4 tw=0 sw=4 fenc=utf-8 expandtab
autocmd FileType coffee set tabstop=4 tw=0
autocmd FileType python set fenc=utf-8
autocmd FileType rst set fenc=utf-8
autocmd FileType php set tabstop=4 tw=0 sw=4 fenc=utf-8 expandtab
autocmd FileType perl set tabstop=4 tw=0 sw=4 fenc=utf-8 expandtab
autocmd FileType scss set fenc=utf-8 tw=0 sw=4
autocmd FileType yaml set tabstop=2 fenc=utf-8 tw=0 sw=2
" Also python settings are ftplygin/python
autocmd FileType c hi Comment ctermfg=darkcyan
autocmd FileType cpp hi Comment ctermfg=darkcyan
autocmd FileType cpp set tabstop=4 tw=0 sw=4 fenc=utf-8 expandtab
autocmd FileType GITCOMMIT set fenc=utf-8
autocmd BufRead /tmp/crontab.* :set nobackup nowritebackup
augroup END
" path
let &path="~/dev/workspace,~"
set rtp+=/usr/local/Cellar/go/1.2/libexec/misc/vim
exe "set rtp+=".globpath($GOPATH, "src/github.com/nsf/gocode/vim")
" ====================================================
" Key Mappings
" ====================================================
nnoremap <Space>w :<C-u>update<CR>
nnoremap <Space>q :<C-u>quit<CR>
nnoremap <Space>. :<C-u>edit $MYVIMRC<Enter>
nnoremap <Space>s. :<C-u>source $MYVIMRC<Enter>
inoremap jj <Esc>
" clear highlight
nmap <ESC><ESC> :nohlsearch<CR><ESC>
" help
nnoremap <expr> <Space>h ':<C-u>help ' . expand('<cword>') . '<CR>'
" Directory Tree
nnoremap <Leader>e :<C-u>VimFilerExplorer<CR>
" Quickrun
nnoremap <Leader>q :<C-u>QuickRun<CR>
" line feed
noremap j gj
noremap k gk
noremap gj j
noremap gk k
" scratch.vim
nnoremap <leader>so :<C-u>ScratchOpen<CR>
nnoremap <leader>sc :<C-u>ScratchClose<CR>
" undo
nnoremap <leader>gl :<C-u>GundoToggle<CR>
" Use ClipBoard
vmap <silent> sy :!pbcopy; pbpaste<CR>
map <silent> sp v:!pbpaste<CR>
augroup vimrc_file_type_nmap
autocmd!
" javascript
" autocmd FileType javascript nnoremap ,jsl :!gjslint --custom_jsdoc_tags 'xtype,event,singleton' %<CR>
autocmd FileType javascript nnoremap ,jsl :SyntasticCheck<CR>
autocmd FileType javascript nnoremap ,jsf :!fixjsstyle --custom_jsdoc_tags 'xtype,event,singleton' %<CR>
autocmd FileType javascript inoremap <buffer> fff function(
autocmd FileType javascript inoremap <buffer> eee assert.equal(
autocmd FileType javascript inoremap <buffer> iie console.error();<LEFT><LEFT>
autocmd FileType javascript inoremap <buffer> iii console.log();<LEFT><LEFT>
autocmd FileType javascript inoremap <buffer> iid console.dir();<LEFT><LEFT>
" perl
autocmd FileType perl inoremap <buffer> iii use Data::Dumper; warn Dumper
" python
autocmd FileType python nnoremap <leader>py :<C-u>!python %<Enter>
function! s:snowflake_after(...)
execute ':QuickfixStatusEnable'
execute ':HierUpdate'
endfunction
let g:snowflake_callbacks = {
\ 'after_run': function('s:snowflake_after')
\ }
"autocmd BufWritePost *.py call snowflake#run()
"autocmd InsertLeave *.py call snowflake#run()
autocmd FileType python nnoremap <leader>ln :call snowflake#run()<CR>
"@autocmd FileType python nnoremap <leader>ln :call Flake8()<CR>
autocmd FileType python inoremap <buffer> ccc # coding=utf-8
autocmd FileType python inoremap <buffer> iid logger.debug()<LEFT>
autocmd FileType python inoremap <buffer> iii logger.info()<LEFT>
autocmd FileType python inoremap <buffer> iiw logger.warning()<LEFT>
autocmd FileType python inoremap <buffer> iie logger.error()<LEFT>
autocmd FileType python inoremap <buffer> iic logger.critical()<LEFT>
augroup END
" insert date
inoremap <expr> ,df strftime('%Y-%m-%dT%H:%M:%S')
inoremap <expr> ,dd strftime('%Y-%m-%d')
inoremap <expr> ,dt strftime('%H:%M:%S')
" select last changed text
nnoremap gc `[v`]
vnoremap gc :<C-u>normal gc<Enter>
onoremap gc :<C-u>normal gc<Enter>
" memo
nnoremap <leader>sn :<C-u>edit ~/dev/dotfiles/snippets/<Enter>
" search
nmap n nzz
nmap N Nzz
nmap * *zz
nmap # #zz
nmap g* g*zz
nmap g# g#zz
" Auto complete
vnoremap ` "zdi`<C-R>z`<ESC>
vnoremap { "zdi{<C-R>z}<ESC>
vnoremap [ "zdi[<C-R>z]<ESC>
vnoremap ( "zdi(<C-R>z)<ESC>
vnoremap " "zdi"<C-R>z"<ESC>
vnoremap ' "zdi'<C-R>z'<ESC>
" buffer control
nnoremap <C-N> :bn<CR>
nnoremap <C-P> :bp<CR>
" nnoremap <C-W> :bd<CR>
" window move
nnoremap <C-J> <C-W>j
nnoremap <C-B> <C-W>j
nnoremap <C-K> <C-W>k
nnoremap <C-L> <C-W>l
nnoremap <C-H> <C-W>h
" window resize
nnoremap + <C-W>>
nnoremap ; <C-W><
nnoremap = <C-W>+
nnoremap - <C-W>-
" tab
nnoremap <Space>n :<C-u>tabn<CR>
nnoremap <Space>p :<C-u>tabp<CR>
" hg
nnoremap <leader>hd :<C-u>HgDiff<CR>
" quickrun
nnoremap <leader>q :<C-u>QuickRun<CR>
" makefile
nnoremap <leader>mc :<C-u>!make concat<CR>
nnoremap <leader>mt :<C-u>!make test<CR>
autocmd BufRead svn* call TemplateSVN()
function! TemplateSVN()
set fileencoding=utf-8
endfunction
" ====================================================
" Commands
" ====================================================
command! -nargs=1 -complete=file Rename f <args>|call delete(expand('#'))
" edit binary file
"augroup BinaryXXD
" autocmd!
" autocmd BufReadPre *.bin let &binary =1
" autocmd BufReadPost * if &binary | silent %!xxd -g 1
" autocmd BufReadPost * set ft=xxd | endif
" autocmd BufWritePre * if &binary | %!xxd -r | endif
" autocmd BufWritePost * if &binary | silent %!xxd -g 1
" autocmd BufWritePost * set nomod | endif
"augroup END
"
"
" create directory automatically
augroup vimrc-auto-mkdir
autocmd!
autocmd BufWritePre * call s:auto_mkdir(expand('<afile>:p:h'), v:cmdbang)
function! s:auto_mkdir(dir, force)
if !isdirectory(a:dir) && (a:force ||
\ input(printf('"%s" does not exist. Create? [y/N]', a:dir)) =~? '^y\%[es]$')
call mkdir(iconv(a:dir, &encoding, &termencoding), 'p')
endif
endfunction
augroup END
augroup vimrc-auto-cursorline
autocmd!
autocmd CursorMoved,CursorMovedI * call s:auto_cursorline('CursorMoved')
autocmd CursorHold,CursorHoldI * call s:auto_cursorline('CursorHold')
autocmd WinEnter * call s:auto_cursorline('WinEnter')
autocmd WinLeave * call s:auto_cursorline('WinLeave')
let s:cursorline_lock = 0
function! s:auto_cursorline(event)
if a:event ==# 'WinEnter'
setlocal cursorline
let s:cursorline_lock = 2
elseif a:event ==# 'WinLeave'
setlocal nocursorline
elseif a:event ==# 'CursorMoved'
if s:cursorline_lock
if 1 < s:cursorline_lock
let s:cursorline_lock = 1
else
setlocal nocursorline
let s:cursorline_lock = 0
endif
endif
elseif a:event ==# 'CursorHold'
setlocal cursorline
let s:cursorline_lock = 1
endif
endfunction
augroup END
" ===================================
" memo
" ===================================
" show messages
" :messages
"
" show quickfixlist (mypy ....)
" :copen
"
" Git commands
" :Gbrame
" :Gstatus
" :Gwrite -> git add
" :Gremove -> git rm
" :Gdiff
" :Gcommit
" See http://yuku-tech.hatenablog.com/entry/20110427/1303868482
" autocmd QuickFixCmdPost grep,vimgrep cw
"
" Reopen current file by other encoding
" :e ++enc=cp932
"
" Vim Tree
" gs: Go out from safe mode
" N: Create New file
" r: rename
"
" 一括置換
" :args *.py
" :args
" :argdo %s/import/immmmm/g | update
"
" Jump to next char
" f<char>
" Jump to previous char
" F<char>
" Delete words until white spase
" dw
" dW
"
" 改行置換(CRコードは ctrl-v ctrl-m で入力)
" :%s/ / /g
"
" JSON Format
" :%!python -m json.tool
" JSON veirfy
" !cat % | json_verify
"
" Check key binds
" :map