-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path.vimrc
219 lines (183 loc) · 7.78 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
" Install vim-plug if not installed
if empty(glob('~/.vim/autoload/plug.vim'))
silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif
call plug#begin('~/.vim/plugged')
Plug 'airblade/vim-gitgutter' " Show sign column for git diff
Plug 'bogado/file-line' " Open files using foo.rb:42 syntax
Plug 'elixir-lang/vim-elixir' " Elixir support
Plug 'janko-m/vim-test'
Plug 'jparise/vim-graphql'
Plug 'junegunn/fzf' " Basic fzf wrapper
Plug 'junegunn/fzf.vim' " Fuzzy file finder
Plug 'kassio/neoterm'
Plug 'leafgarland/typescript-vim' " Typescript syntax highlighting
Plug 'nanotech/jellybeans.vim' " Jellybeans color scheme
Plug 'rhysd/devdocs.vim'
Plug 'SirVer/ultisnips' " Snippets
Plug 'Townk/vim-autoclose' " Insert matching pair () {} []
Plug 'tpope/vim-bundler'
Plug 'tpope/vim-commentary' " Toggle comments easily
Plug 'tpope/vim-endwise' " Add end after ruby blocks
Plug 'tpope/vim-fugitive' " Git wrapper
Plug 'tpope/vim-rails' " Rails support
Plug 'tpope/vim-rhubarb' " Needed by fugitive for Gbrowse
Plug 'tpope/vim-surround' " Easily change quotes/bracket pairs
Plug 'tpope/vim-unimpaired' " Misc mappings like ]<space> or ]c
Plug 'vim-airline/vim-airline'
Plug 'vim-ruby/vim-ruby' " Ruby support
call plug#end()
colorscheme jellybeans
set autoindent " Indent: Copy indent from current line when starting new line
set expandtab " Tab settings - Use spaces to insert a tab
set backupdir=~/.vim/tmp " Don't clutter my dirs with swp/tmp files
set colorcolumn=80,120 " Show vertical bar to indicate 80/120 chars
set directory=~/.tmp " Don't clutter my dirs with swp/tmp files
set fillchars+=vert:│ " Make vertical separator a continuous line
set grepprg=rg\ --vimgrep " Use ripgrep for file search
set hlsearch " Search: Highlight results
set ignorecase smartcase " Search: ignore case, unless uppercase chars given
set incsearch " Search: Show results as you type
set laststatus=2 " Always show status line
set list " Show tabs and trailing whitespace
set listchars=tab:>-,trail:· " Set chars to show for tabs or trailing whitespace
set nofoldenable " Disable code folding
set relativenumber number " Line numbers: Show current #, but use relative #s elsewhere
set rtp+=/usr/local/opt/fzf " Set fzf path
set shiftround " Indentation: When at 3 spaces, >> takes to 4, not 5
set shiftwidth=2 " Tab settings - Use 2 spaces for each indent level
set softtabstop=2 " Tab settings - Count 2 spaces in editing operations
set splitbelow " Open new split panes below
set splitright " Open new split panes to the right
set t_Co=256 " Use 256 colors in tmux
set tags=$HOME/.tags_cache " Keep tags file in a single place
set updatetime=100 " Gitgutter waits this long to update hunk markers
set wildmode=list:full " Command mode tab completion - complete upto ambiguity
" Enable extended matching with %
runtime macros/matchit.vim
" Hide ~ in line number columns after end of buffer
highlight EndOfBuffer ctermfg=bg
let g:markdown_fenced_languages = ['ruby', 'elixir']
let g:markdown_minlines = 100
" Run tests in vertical neoterm pane
let g:neoterm_default_mod = 'vertical'
let test#strategy = 'neoterm'
" if filereadable('dev.yml')
" let test#ruby#rails#executable = 'dev test'
" endif
let g:gitgutter_sign_added = '•'
let g:gitgutter_sign_modified = '•'
let g:gitgutter_sign_removed = '•'
let g:gitgutter_sign_removed_first_line = '•↑'
let g:gitgutter_sign_modified_removed = '•'
hi DiffAdd ctermfg=148 ctermbg=NONE cterm=bold guifg=#f8f8f2 guibg=#46830c gui=bold
hi DiffDelete ctermfg=197 ctermbg=NONE cterm=bold guifg=#8b0807 guibg=NONE gui=NONE
hi DiffChange ctermfg=208 ctermbg=NONE cterm=bold guifg=#f8f8f2 guibg=#243955 gui=NONE
hi DiffText ctermfg=231 ctermbg=24 cterm=bold guifg=#f8f8f2 guibg=#204a87 gui=bold
" Create a directory for the current file if it does not exist.
augroup Mkdir
autocmd!
autocmd BufWritePre *
\ if !isdirectory(expand("<afile>:p:h")) |
\ call mkdir(expand("<afile>:p:h"), "p") |
\ endif
augroup END
" Make sorbet sigs look like comments
augroup format_ruby
autocmd Syntax ruby syn region sorbetSig start='sig {' end='}'
autocmd Syntax ruby hi def link sorbetSig Comment
autocmd Syntax ruby syn region sorbetSigDo start='sig do' end='end'
autocmd Syntax ruby hi def link sorbetSigDo Comment
augroup END
" Rebalance panes on resize
autocmd VimResized * :wincmd =
function! FindAndReplaceAll()
let orig = input('Original string')
let new = input('New string')
exec 'silent grep ' . orig . ' | silent cfdo %s/' . orig . '/' . new . '/ | write'
endfunction
function! RenameFile()
let old_name = expand('%')
let new_name = input('New file name: ', expand('%'), 'file')
if new_name != '' && new_name != old_name
exec ':saveas ' . new_name
exec ':silent !rm ' . old_name
redraw!
endif
endfunction
noremap Q @q
nnoremap <C-h> <C-w><C-h>
nnoremap <C-j> <C-w><C-j>
nnoremap <C-k> <C-w><C-k>
nnoremap <C-l> <C-w><C-l>
map <C-s> <esc>:w<CR>
imap <C-s> <esc>:w<CR>
" Disable arrow keys
map <up> <nop>
imap <up> <nop>
map <down> <nop>
imap <down> <nop>
map <left> <nop>
imap <left> <nop>
map <right> <nop>
imap <right> <nop>
" I often mistype Q and Wq
command! Q q
command! Wq wq
noremap <silent> j gj
noremap <silent> k gk
nmap K <Plug>(devdocs-under-cursor)
command! -bang -nargs=* Rg
\ call fzf#vim#grep(
\ 'rg --column --line-number --no-heading --color=always '.shellescape(<q-args>), 1,
\ <bang>0 ? fzf#vim#with_preview('up:60%')
\ : fzf#vim#with_preview('right:50%:hidden', '?'),
\ <bang>0)
" Leader key settings
let mapleader = ","
noremap <leader>, :Files<cr>
noremap <leader>. :w<cr>:TestLast<cr>
noremap <leader>bb :Buffers<cr>
noremap <leader>bi :source ~/.vimrc<cr>:PlugInstall<cr>
noremap <leader>fd :Rg def <C-r><C-w><cr>
noremap <leader>ff :Rg<space>
noremap <leader>fr :call FindAndReplaceAll()<cr>
noremap <leader>fw :Rg <C-r><C-w>
noremap <leader>fW :Rg \b<C-r><C-w>\b
noremap <leader>gbl :Git blame<cr>
noremap <leader>gbr :GBrowse<cr>
noremap <leader>gg :tabe ~/Dropbox/scratchpad.md<cr>
noremap <leader>ghp :!/opt/dev/bin/dev open pr &<cr><cr>
noremap <leader>ghs :GitGutterStageHunk<cr>
noremap <leader>ghu :GitGutterUndoHunk<cr>
noremap <leader>gs :Git<cr>
noremap <leader>mv :call RenameFile()<cr>
noremap <leader>nh :nohl<cr>
noremap <leader>o :only<cr>
noremap <leader>pp "+p
noremap <leader>q :bd<cr>
noremap <leader>rc :Econtroller
noremap <leader>rm :!rm %
noremap <leader>rv :Eview
noremap <leader>s :A<cr>
noremap <leader>tc :Tclear<cr>
noremap <leader>tf :w<cr>:TestFile<cr>
noremap <leader>tl :w<cr>:T dev test --include-branch-commits<cr>
noremap <leader>tn :w<cr>:TestNearest<cr>
noremap <leader>to :Ttoggle<cr>
noremap <leader>ts :w<cr>:TestSuite<cr>
noremap <leader>tt :w<cr>:TestLast<cr>
noremap <leader>ty :w<cr>:T srb typecheck<cr>
noremap <leader>vi :tabe ~/.vimrc<cr>
noremap <leader>vv :vnew<cr>
vnoremap <leader>yy "+y
if has('nvim')
tnoremap <C-o> <C-\><C-n>
tnoremap <C-h> <C-\><C-n><C-w>h
tnoremap <C-j> <C-\><C-n><C-w>j
tnoremap <C-k> <C-\><C-n><C-w>k
tnoremap <C-l> <C-\><C-n><C-w>l
tnoremap <leader>q <C-\><C-n>:Ttoggle<cr>
endif