-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path_vimrc_bare
More file actions
283 lines (233 loc) · 7.89 KB
/
_vimrc_bare
File metadata and controls
283 lines (233 loc) · 7.89 KB
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
" Bare bones vim settings
"=========================
" This file can be used on a remote server that you don't have a home directory.
" Simply do the following on the server:
"
"$ curl https://raw.github.com/kamykaze/dotfiles/master/_vimrc_bare -o /tmp/_vimrc
"
" This might work if you don't have a .vim/ or .viminfo in the current user's
" home directory
"
"$ export MYVIMRC=/tmp/_vimrc
"$ vim
"
" If this doesn't work, you can call it manually when you use vim
"
"$ vim filename.ext -u /tmp/_vimrc
"-------------------------
set nocompatible "disable vi compatibility for better features
"-- Find --
set path=** "set find path to current directory
set suffixesadd=.py,.html,.css,.js,.scss,.less "add sufixes so you don't have to type whole filenames
"-- Autocomplete on command mode --
set wildmode=full "autocomplete filenames, help, etc.
set wildmenu "shows autocomplete options in a nice menu list
set wildignore=*.swp,*.bak,*.pyc "ignore certain file types in autocompletion
"-- Syntax --
filetype on "auto detect filetype
syntax on "syntax highlighting
"-- Custom leader key mapping --
let mapleader = "," "much easier than \, but you make the default command 'Repeat
"latest f, t, F or T in opposite direction' slower, but that's ok
"-- Spaces and Indenting --
set backspace=indent,eol,start "set backspace behavior (so it can backspace over auto-indent, newline, etc.)
set expandtab "replace tabs with spaces
set tabstop=2 "use 4 spaces to represent a tab
set softtabstop=2
set shiftwidth=2 "use 4 spaces for auto indent (use >> or << to indent current line)
set autoindent
"-- UI --
set shortmess=atI " Don't show the intro message when starting vim
set title " set the terminal title
"set background=dark
set ruler "show status line
set rulerformat=%10(%l,%c%V%)
set laststatus=2 "always show status line
set cursorline "highlight current line
set number "show line numbers
set numberwidth=3
set hlsearch "highlight search keywords
" automatic set relative number for current buffer, and absolute numbers for inactive ones
function! UpdateNumbers(state)
" don't do anything if it's Nerdtree or numbers are off
if buffer_name('%') =~# 'NERD_tree_.\+'
return
endif
" no numbers, so hide any if there was one previously
if (g:numberformat=='none')
set norelativenumber
set nonumber
return
endif
" if absolute numbers, both enter/leave state display
" the same numbers
if (g:numberformat=='absolute')
set norelativenumber
set number
return
endif
" if relative numbers, active buffer shows relative
" but inactive still show absolute numbers
if (g:numberformat=='relative')
if a:state == 'enter'
set number
set relativenumber
else
set number
set norelativenumber
endif
endif
endfunc
autocmd BufEnter * call UpdateNumbers('enter')
autocmd BufLeave * call UpdateNumbers('leave')
let g:numberformat='relative'
" toggle line numbers (loops between relative, absolute, and no numbers)
function! NumberToggle()
" no numbers displayed, show relative numbers
"if (&number==0) && (&relativenumber==0)
if (g:numberformat=='none')
set relativenumber
set number
let g:numberformat='relative'
return
endif
" relative numbers, show absolute numbers
"if (&number==1) && (&relativenumber==1)
if (g:numberformat=='relative')
set number
set norelativenumber
let g:numberformat='absolute'
return
endif
" absolute line numbers, hide numbers
"if (&number==1) && (&relativenumber==0)
if (g:numberformat=='absolute')
set nonumber
set norelativenumber
let g:numberformat='none'
return
endif
"if(&relativenumber == 1)
" set number
"else
" if(&number == 1)
" set invnumber
" else
" set relativenumber
" endif
"endif
endfunc
nnoremap <silent> <leader>r :call NumberToggle()<cr>
" show trailing spaces, tabs, and end of lines
set listchars=tab:>-,trail:.,eol:$,nbsp:_
nmap <silent> <leader>s :set nolist!<CR>
" find and replace all trailing spaces
nmap <leader>sc :%s/\s\+$//gc
" easier completion mode
imap <c-k> <c-x>
" set minimum window height to 0 instead of 1
set wmh=0
"-- Search --
set incsearch "dynamically search term as you type (incremental search)
set ignorecase "case-insensitive search
set smartcase "make search case sensitive if there's an uppercase letter in the keyword
"-- Navigation --
" easier way to get to beginning end of line
map H ^
map L $
" quick way to escape insert mode
inoremap kj <ESC>
" <C-Space> only works with gui
imap <C-SPACE> <ESC>
" in most terminals, Ctrl+Space is sent as a null character
imap <nul> <ESC>
" make <tab> jump you to the matching bracket in normal or visual modes
nmap <tab> %
vmap <tab> %
"--- windows ---
" quick window switching
let g:C_Ctrl_j = 'off'
nnoremap <c-j> <c-w>j
nnoremap <c-k> <c-w>k
nnoremap <c-l> <c-w>l
nnoremap <c-h> <c-w>h
" Zooms/maximize current window. If it's already zoomed, even size all windows
let g:ZoomWin=0
function! ToggleZoom()
if winnr('$') != 1 " only zoom if there's more than one window
if winnr() != g:ZoomWin " and current window is not zoomed
" zoom cur window
let g:ZoomWin = winnr()
exe "normal \<c-w>_\<c-w>|"
else " otherwise restore windows
let g:ZoomWin = 0
exe "normal \<c-w>="
endif
endif
endfunction
map <silent> <Leader>, :call ToggleZoom()<cr>
"--- Tabs ---
nnoremap <leader>[ :tabprevious<CR>
nnoremap <leader>] :tabnext<CR>
"--- Files/Buffers ---
" quicker saving
map <Leader>w :w<cr>
map <Leader>a :saveas <C-R>=expand("%:p:h") . "/" <CR>
" quicker closing of file
map <Leader>q :q<cr>
" quicker way to quit vim (if all files saved)
map <c-d> :qa<cr>
" close file and delete its buffer
map <Leader>d :bd<cr>
" quick list of buffers
map <Leader>b :buffers<cr> ".vimrc will overwrite this with a better plugin
" edit completion with current file's dictory
map <Leader>e :e <C-R>=expand("%:p:h") . "/" <CR>
" toggle diff mode for current buffer // thanks to http://www.bestofvim.com/tip/diff-diff/
nnoremap <silent> <Leader>D :call DiffToggle()<CR>
function! DiffToggle()
if &diff
diffoff
else
diffthis
endif
:endfunction
"-- Command Line -- removed emacs binding. Now I'm using:
"
" <C-b>/<C-e> to go to beggining/end of the line
" <S-Left>/<S-Right> to jump between words
"
" <C-f> to go into a command line buffer mode
" regular vim keys to edit the command (or find previous commands)
" <C-c> to exit and go back into command line
"-- Utilities --
" toggle paste mode
map <Leader>p :set invpaste<CR>
" hide search highlights
nnoremap <silent> <Esc><Esc> :noh<cr>
" keep visual selection after indenting
vnoremap < <gv
vnoremap > >gv
" toggle between UPPER, lower, and Title case
function! TwiddleCase(str)
if a:str ==# toupper(a:str)
let result = tolower(a:str)
elseif a:str ==# tolower(a:str)
let result = substitute(a:str,'\(\<\w\+\>\)', '\u\1', 'g')
else
let result = toupper(a:str)
endif
return result
endfunction
vnoremap ~ ygv"=TwiddleCase(@")<CR>Pgv
" map 'Oo' to return to a newline above your current position
" (useful when you want to close brackets and still continue editing)
inoremap Oo <ESC>ko
" remap Ctrl+A and Ctrl+X to +/- for easy increment/decrement of numbers
nnoremap + <c-a>
nnoremap - <c-x>
" creates a line separator line below the current line
" use any character key after calling this to pick which char to fill the line
" eg: using <leader>1= will create a line like
" =============
nnoremap <leader>1 yypVr