rc

Took a nice trick from https://blog.petrzemek.net/2016/04/06/things-about-vim-i-wish-i-knew-earlier/ that makes the j/k mapping act normally when repeating commands. Also: unmapped the arrow keys. This does imply my mouse scroll won't work either, but using your mouse with Vim is an antipattern on its own.

Author
Vngngdn
Date
Aug. 10, 2016, 3:59 p.m.
Hash
9d1f0f22cc542c0499fa824fe5e5dd6121f8661e
Parent
7b1e834c28982c5611e6cf7ea6de7c6909d88c96
Modified file
.vimrc

.vimrc

13 additions and 3 deletions.

View changes Hide changes
1
1
" Some details on the contents:
2
2
" This file is my personal Vim configuration file. It contains my plugins, is
3
3
" divided to subject, and fattened with lovely comments.
4
4
" Please be advised that some (obvious) settings are left out, because I
5
5
" actually only use NeoVim. Again, this is my PERSONAL file, not a 'general
6
6
" public Vi(m) compatible' file.
7
7
8
8
" VUNDLE {{{
9
9
" Vundle is used to manage plugins for Vim. It needs additional setup, so it
10
10
" gets priority in my .vimrc.
11
11
12
12
filetype off                  " required
13
13
14
14
" set the runtime path to include Vundle and initialize
15
15
set rtp+=~/.vim/bundle/Vundle.vim
16
16
call vundle#begin()
17
17
18
18
" let Vundle manage Vundle, required
19
19
Plugin 'VundleVim/Vundle.vim'
20
20
21
21
" YCM is a plugin that allows Vim semantic type checking and more programming mumbo jumbo. It is godlike and it must always be there for me.
22
22
" XXX: This might be removed in favor of Deoplete. It depends on whether
23
23
" Deoplete is better or not.
24
24
Plugin 'Valloric/YouCompleteMe'
25
25
26
26
" Airline provides a neat and feature rich status bar. Really nice to have.
27
27
Plugin 'bling/vim-airline'
28
28
29
29
" Bufferline will show buffers in the status bar. There's enough room anyway, so I fancied having it.
30
30
Plugin 'bling/vim-bufferline'
31
31
32
32
" Syntastic does automatic syntax checking without the need to compile.
33
33
" XXX: Might be replaced in the future in favor of Neomake, because it's
34
34
" asynchronous, and I only use NeoVim these days, honestly.
35
35
Plugin 'scrooloose/syntastic'
36
36
37
37
" A fuzzy searcher. Just CTRL+P and BAM all your files are visible.
38
38
Plugin 'kien/ctrlp.vim'
39
39
40
40
" This plugin enables Git intergration.
41
41
Plugin 'tpope/vim-fugitive'
42
42
43
43
" This provides snippets for redundant code. Praise the hackers man.
44
44
Plugin 'SirVer/ultisnips'
45
45
46
46
" In addition to UltiSnips, this plugin contains a prefetched repository of snippets. Must have, because I'm not planning on writing all of those by myself.
47
47
Plugin 'honza/vim-snippets'
48
48
49
49
" Rust syntax files, including Syntastic integration:
50
50
" To be removed when these are added to (Neo)Vim 'upstream'.
51
51
Plugin 'rust-lang/rust.vim'
52
52
53
53
" All of your Plugins must be added before the following line
54
54
call vundle#end()            " required
55
55
filetype plugin indent on    " required
56
56
" }}}
57
57
58
58
" YOUCOMPLETEME {{{
59
59
" YouCompleteMe is a godlike completer for Vim. As such, it is worthy of its own section.
60
60
" However, I'll be trying out Deoplete in the future, which might render it
61
61
" obsolete. Until further notice, I'm keeping this beauty.
62
62
"
63
63
" This setting will force YCM to close the preview buffer after selecting the completion.
64
64
let g:ycm_autoclose_preview_window_after_completion=1
65
65
66
66
" Sets the symbol used to indicate a syntax error:
67
67
let g:ycm_error_symbol = '>>'
68
68
69
69
" Sets the symbol used to indicate a warning:
70
70
let g:ycm_warning_symbol = 'i'
71
71
72
72
" Fills the identifier completion database with the language's keywords (e.g., when starting a new Java file, "class" will already be in the completion engine.
73
73
let g:ycm_seed_identifiers_with_syntax = 1
74
74
75
75
" This setting tells YCM what keys to use to accept completion. I removed <Down> as default, because I'm a silly coder and still use my arrow keys to navigate my source files. Hey, years of negligence for Vim leaves its marks. To think I ever thought Notepad++ was the best editor ever, the fuck...
76
76
let g:ycm_key_list_select_completion=['<TAB>']
77
77
78
78
" Same reason; I'm a dumb fuck and arrows are still hardwired in my brain.
79
79
let g:ycm_key_list_previous_completion=['<S-TAB>']
80
80
81
81
" Configures the pointer to the ycm_extra_conf.py file.
82
82
let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py'
83
83
let g:ycm_confirm_extra_conf = 0 " Disables security confirmation before loading the conf.py file.
84
84
85
85
" Configuration necessary for sematic Rust completion
86
86
let g:ycm_rust_src_path = '/usr/src/rust/src'
87
87
" }}}
88
88
89
89
" AIRLINE {{{
90
90
" Airline is a great status bar plugin. Although it can behave quirky if Powerline is not on the scene. These scripts are dedicated to handle that behavior.
91
91
92
92
" These lines will load the powerline font for use in Airline.
93
93
if !exists('g:airline_symbols')
94
94
		let g:airline_symbols={}
95
95
endif
96
96
let g:airline_symbols.space="\ua0"
97
97
let g:airline_powerline_fonts=1
98
98
99
99
" If there is only one tab opened, the tab bar will display the different buffers.
100
100
let g:airline#extensions#tabline#enabled=1
101
101
102
102
" Makes Airline appear immediately, instead of waiting for a split.
103
103
set laststatus=2
104
104
" }}}
105
105
106
106
" ULTISNIPS {{{
107
107
" As mentioned earlier, this provides snippets to stop redundant code.
108
108
109
109
" To begin, changing default TAB, because YCM already uses TAB.
110
110
	let g:UltiSnipsExpandTrigger="<c-l>"
111
111
	let g:UltiSnipsJumpForwardTrigger="<c-j>"
112
112
	let g:UltiSnipsJumpBackwardTrigger="<c-k>"
113
113
114
114
" }}} 
115
115
"
116
116
" COLOURS & COLORS {{{
117
117
118
118
colorscheme molokai " I like molokai. I've used badwolf, but I like popping colors.
119
119
120
120
" }}}
121
121
122
122
" SPACES & TABS {{{
123
123
124
124
" The number of visual spaces per TAB hit.
125
125
set tabstop=4
126
126
127
127
" Setting the amount of tabs to 4. The default is 8.
128
128
set shiftwidth=4
129
129
130
130
" This breaks lines after column 80.
131
131
set textwidth=80
132
132
" }}}
133
133
134
134
" UI CONFIGURATION {{{
135
135
136
136
set relativenumber  " I used to use standard numbers, but relative numbers make moving around so much easier.
137
137
set cursorline " Highlights the line currently selected by the cursor.
138
138
filetype indent on " Detects filetype on load, and loads the appropriate syntax file.
139
139
" This highlights the matching parenthesis ([, {, (, ...). I think this is default, but in case it's not, tadaa.
140
140
set showmatch " Highlights matching parenthesis on hover ("[, {, ...").
141
141
" scrolloff tells Vim how much lines above/below the cursor should always be
142
142
" visible. For example, if set to 5, there will always be 5 lines below and
143
143
" above the cursor, except when reaching the EOF.
144
144
set scrolloff=9999  " A ridiculously high value 'freezes' the line in the middle of the terminal.
145
145
" }}}
146
146
147
147
" SEARCHING {{{
148
148
149
149
" Problem with hlsearch is that it does not turn off the highlighting. So searching for vowels may quickly result in everything being highlighted. This is a mapping. It will remove highlighting when entering \<SPACE>
150
150
nnoremap <leader><space> :nohlsearch<CR>
151
151
" }}}
152
152
153
153
" FOLDING {{{
154
154
" In case I forget (I'm Belgian), folding is hiding code parts that belong together, like functions. Très important. Fuck azerty.
155
155
156
156
" This enables folding as is.
157
157
set foldenable
158
158
159
159
" This setting determines how many folds have to be opened. The number indicates the folding level. So 0 = every possible folding is folded. 99 = practically everything is open. I'm using 10, since I already have a problem with more than 3 nested loops.
160
160
set foldlevelstart=10
161
161
162
162
" This setting blocks overuse of nested foldings. I don't know how this will turn out in LISP/Scheme, but I'll be damned if this setting does more harm than good.
163
163
set foldnestmax=10
164
164
165
165
" This setting is commented by default, but included in case I start to grow hate for the current way Vim handles folding (za). It basically maps that command to spacebar. I may map it to z because then I only have to type one letter and RETURN, that's 33% of my time saved! =3
166
166
"nnoremap <space> za
167
167
168
168
" }}}
169
169
170
170
" MOVEMENT {{{
171
171
172
172
" When you go up, and you have a line going over multiple lines because it's too long, the standard mapping will skip that. These two settings will block that behaviour.
173
-
nnoremap j gj
174
-
nnoremap k gk
175
-
" }}}
+
173
" if a line is too long, it's wrapped to the next line ("virtual lines"), but
+
174
" the line counter still regards it as 1 line.
+
175
" The next setting makes it so that, if j/k is pressed once, it moves over
+
176
" virtual lines, but when repeated (say "5dd"), it moves over physical lines.
+
177
" Basically, the perfect tradeoff solution when using relative line numbering.
+
178
noremap <silent> <expr> j (v:count == 0 ? 'gj' : 'j')
+
179
noremap <silent> <expr> k (v:count == 0 ? 'gk' : 'k')
+
180
" Next 4 lines disable arrow keys.
+
181
noremap <Up> <nop>
+
182
noremap <Down> <nop>
+
183
noremap <Left> <nop>
+
184
noremap <Right> <nop>
+
185
" }}}
176
186
177
187
" BACKING UP {{{
178
188
179
189
" What these lines do, is move the backup files to the /tmp folder. This will keep my directories clean and neat.
180
190
set backup
181
191
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
182
192
set backupskip=/tmp/*,/private/tmp/*
183
193
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
184
194
set writebackup
185
195
" }}}
186
196
"
187
197
" NEOVIM {{{
188
198
" While it certainly is an improvement over 'vanilla' Vim, it does some things
189
199
" that keep me from using Vim as it's supposed to be; limited to no mouse usage.
190
200
" So I disable it. I'll enable it again when I've twisted my mind far enough to
191
201
" not touch my mouse again. (Not to mention some terminals don't support mouse
192
202
" control, so it's a bad habit nonetheless if you spend all your time on
193
203
" GNU/Linux distros)
194
204
set mouse=""
195
205
" }}}
196
206
"
197
207
" MACROS {{{
198
208
" Function taken from
199
209
" http://jeffkreeftmeijer.com/2012/relative-line-numbers-in-vim-for-super-fast-movement/
200
210
" that allows to quickly switch between relative and absolute numbering using
201
211
" CTRL+N(umber).
202
212
function! NumberToggle()
203
213
	if(&relativenumber == 1)
204
214
		set norelativenumber  " Necessary to disable the previous behavior.
205
215
		set number
206
216
	else
207
217
		set nonumber  " Idem
208
218
		set relativenumber
209
219
	endif
210
220
endfunc
211
221
nnoremap <C-n> :call NumberToggle()<cr>
212
222
" }}}
213
223
" OTHER IMPORTANT STUFF {{{
214
224
215
225
216
226
" I found this gem on Reddit. If I'm editing a file that's read only, and I started Vim without sudo, then this little line will do just that for me. All I have to do is use "w!!" when saving.
217
227
" Extensive explanation can also be found at https://stackoverflow.com/questions/2600783/how-does-the-vim-write-with-sudo-trick-work#7078429
218
228
cmap w!! w !sudo tee > /dev/null %
219
229
220
230
221
231
" This setting will allow me to switch to another buffer without need to save the current buffer.
222
232
set hidden
223
233
" }}}
224
234
225
235
" Because Vim can fold vimrc files with the right syntax, These lines will tell Vim how to handle that.
226
236
set modelines=2 "This tells Vim that the last 2 lines of this file should only apply to this file.
227
237
" So as you can see, the last 2 lines get a special vim:-prefix, so Vim knows for sure this is what's important.
228
238
" To wrap a new section, look at the other sections, and copy that syntax.
229
239
" vim:foldmethod=marker
230
240
" vim:foldlevel=0
231
241