rc

Added a configuration flag for YCM to .vimrc to enable semantic Rust completion.

Author
Vngngdn
Date
July 21, 2016, 4:59 p.m.
Hash
3c9b8e1dd65f86120facb04f08411432a0232191
Parent
eeca60f7edfb4d224a66d17a2fd677b331414234
Modified file
.vimrc

.vimrc

3 additions and 0 deletions.

View changes Hide changes
1
1
" I'll most certainly add comments to every fucking line I write. It goes
2
2
" without saying that I need to know what every line does.
3
3
4
4
" VUNDLE {{{
5
5
" Vundle is used to manage plugins for Vim. It needs additional setup, so it
6
6
" gets priority in my .vimrc.
7
7
8
8
filetype off                  " required
9
9
10
10
" set the runtime path to include Vundle and initialize
11
11
set rtp+=~/.vim/bundle/Vundle.vim
12
12
call vundle#begin()
13
13
14
14
" let Vundle manage Vundle, required
15
15
Plugin 'VundleVim/Vundle.vim'
16
16
17
17
" 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.
18
18
" XXX: This might be removed in favor of Deoplete. It depends on whether
19
19
" Deoplete is better or not.
20
20
Plugin 'Valloric/YouCompleteMe'
21
21
22
22
" Airline provides a neat and feature rich status bar. Really nice to have.
23
23
Plugin 'bling/vim-airline'
24
24
25
25
" Bufferline will show buffers in the status bar. There's enough room anyway, so I fancied having it.
26
26
Plugin 'bling/vim-bufferline'
27
27
28
28
" Syntastic does automatic syntax checking without the need to compile.
29
29
" XXX: Might be replaced in the future in favor of Neomake, because it's
30
30
" asynchronous, and I only use NeoVim these days, honestly.
31
31
Plugin 'scrooloose/syntastic'
32
32
33
33
" A fuzzy searcher. Just CTRL+P and BAM all your files are visible.
34
34
Plugin 'kien/ctrlp.vim'
35
35
36
36
" This plugin enables Git intergration.
37
37
Plugin 'tpope/vim-fugitive'
38
38
39
39
" This provides snippets for redundant code. Praise the hackers man.
40
40
Plugin 'SirVer/ultisnips'
41
41
42
42
" 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.
43
43
Plugin 'honza/vim-snippets'
44
44
45
45
" Rust syntax files, including Syntastic integration:
46
46
" To be removed when these are added to (Neo)Vim 'upstream'.
47
47
Plugin 'rust-lang/rust.vim'
48
48
49
49
" All of your Plugins must be added before the following line
50
50
call vundle#end()            " required
51
51
filetype plugin indent on    " required
52
52
" }}}
53
53
54
54
" YOUCOMPLETEME {{{
55
55
" YouCompleteMe is a godlike completer for Vim. As such, it is worthy of its own section.
56
56
" However, I'll be trying out Deoplete in the future, which might render it
57
57
" obsolete. Until further notice, I'm keeping this beauty.
58
58
"
59
59
" This setting will force YCM to close the preview buffer after selecting the completion.
60
60
let g:ycm_autoclose_preview_window_after_completion=1
61
61
62
62
" Sets the symbol used to indicate a syntax error:
63
63
let g:ycm_error_symbol = '>>'
64
64
65
65
" Sets the symbol used to indicate a warning:
66
66
let g:ycm_warning_symbol = 'i'
67
67
68
68
" 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.
69
69
let g:ycm_seed_identifiers_with_syntax = 1
70
70
71
71
" 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...
72
72
let g:ycm_key_list_select_completion=['<TAB>']
73
73
74
74
" Same reason; I'm a dumb fuck and arrows are still hardwired in my brain.
75
75
let g:ycm_key_list_previous_completion=['<S-TAB>']
76
76
77
77
" Configures the pointer to the ycm_extra_conf.py file.
78
78
let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py'
79
79
let g:ycm_confirm_extra_conf = 0 " Disables security confirmation before loading the conf.py file.
80
80
" }}}
+
81
" Configuration necessary for sematic Rust completion
+
82
let g:ycm_rust_src_path = '/usr/src/rust/src'
+
83
" }}}
81
84
82
85
" AIRLINE {{{
83
86
" 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.
84
87
85
88
86
89
87
90
" These lines will load the powerline font for use in Airline.
88
91
if !exists('g:airline_symbols')
89
92
		let g:airline_symbols={}
90
93
endif
91
94
let g:airline_symbols.space="\ua0"
92
95
let g:airline_powerline_fonts=1
93
96
94
97
" If there is only one tab opened, the tab bar will display the different buffers.
95
98
let g:airline#extensions#tabline#enabled=1
96
99
97
100
" Makes Airline appear immediately, instead of waiting for a split.
98
101
set laststatus=2
99
102
" }}}
100
103
101
104
" ULTISNIPS {{{
102
105
" As mentioned earlier, this provides snippets to stop redundant code.
103
106
104
107
" To begin, changing default TAB, because YCM already uses TAB.
105
108
	let g:UltiSnipsExpandTrigger="<c-l>"
106
109
	let g:UltiSnipsJumpForwardTrigger="<c-j>"
107
110
	let g:UltiSnipsJumpBackwardTrigger="<c-k>"
108
111
109
112
" }}} 
110
113
"
111
114
" COLOURS & COLORS {{{
112
115
113
116
colorscheme molokai " I like molokai. I've used badwolf, but I like popping colors.
114
117
115
118
" }}}
116
119
117
120
" SPACES & TABS {{{
118
121
119
122
" The number of visual spaces per TAB hit.
120
123
set tabstop=4
121
124
122
125
" Setting the amount of tabs to 4. The default is 8.
123
126
set shiftwidth=4
124
127
125
128
" This breaks lines after column 80.
126
129
set textwidth=80
127
130
" }}}
128
131
129
132
" UI CONFIGURATION {{{
130
133
131
134
set relativenumber  " I used to use standard numbers, but relative numbers make moving around so much easier.
132
135
set cursorline " Highlights the line currently selected by the cursor.
133
136
filetype indent on " Detects filetype on load, and loads the appropriate syntax file.
134
137
" This highlights the matching parenthesis ([, {, (, ...). I think this is default, but in case it's not, tadaa.
135
138
set showmatch " Highlights matching parenthesis on hover ("[, {, ...").
136
139
set scrolloff=5  " It may seem a lot, but I like to have some content always visible.
137
140
" }}}
138
141
139
142
" SEARCHING {{{
140
143
141
144
" 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>
142
145
nnoremap <leader><space> :nohlsearch<CR>
143
146
" }}}
144
147
145
148
" FOLDING {{{
146
149
" In case I forget (I'm Belgian), folding is hiding code parts that belong together, like functions. Très important. Fuck azerty.
147
150
148
151
" This enables folding as is.
149
152
set foldenable
150
153
151
154
" 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.
152
155
set foldlevelstart=10
153
156
154
157
" 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.
155
158
set foldnestmax=10
156
159
157
160
" 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
158
161
"nnoremap <space> za
159
162
160
163
" }}}
161
164
162
165
" MOVEMENT {{{
163
166
164
167
" 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.
165
168
nnoremap j gj
166
169
nnoremap k gk
167
170
" }}}
168
171
169
172
" BACKING UP {{{
170
173
171
174
" What these lines do, is move the backup files to the /tmp folder. This will keep my directories clean and neat.
172
175
set backup
173
176
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
174
177
set backupskip=/tmp/*,/private/tmp/*
175
178
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
176
179
set writebackup
177
180
" }}}
178
181
"
179
182
" NEOVIM {{{
180
183
" While it certainly is an improvement over 'vanilla' Vim, it does some things
181
184
" that keep me from using Vim as it's supposed to be; limited to no mouse usage.
182
185
" So I disable it. I'll enable it again when I've twisted my mind far enough to
183
186
" not touch my mouse again. (Not to mention some terminals don't support mouse
184
187
" control, so it's a bad habit nonetheless if you spend all your time on
185
188
" GNU/Linux distros)
186
189
set mouse=""
187
190
" }}}
188
191
"
189
192
" MACROS {{{
190
193
" Function taken from
191
194
" http://jeffkreeftmeijer.com/2012/relative-line-numbers-in-vim-for-super-fast-movement/
192
195
" that allows to quickly switch between relative and absolute numbering using
193
196
" CTRL+N(umber).
194
197
function! NumberToggle()
195
198
	if(&relativenumber == 1)
196
199
		set norelativenumber  " Necessary to disable the previous behavior.
197
200
		set number
198
201
	else
199
202
		set nonumber  " Idem
200
203
		set relativenumber
201
204
	endif
202
205
endfunc
203
206
nnoremap <C-n> :call NumberToggle()<cr>
204
207
" }}}
205
208
" OTHER IMPORTANT STUFF {{{
206
209
207
210
208
211
" 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.
209
212
" Extensive explanation can also be found at https://stackoverflow.com/questions/2600783/how-does-the-vim-write-with-sudo-trick-work#7078429
210
213
cmap w!! w !sudo tee > /dev/null %
211
214
212
215
213
216
" This setting will allow me to switch to another buffer without need to save the current buffer.
214
217
set hidden
215
218
" }}}
216
219
217
220
" Because Vim can fold vimrc files with the right syntax, These lines will tell Vim how to handle that.
218
221
set modelines=2 "This tells Vim that the last 2 lines of this file should only apply to this file.
219
222
" So as you can see, the last 2 lines get a special vim:-prefix, so Vim knows for sure this is what's important.
220
223
" To wrap a new section, look at the other sections, and copy that syntax.
221
224
" vim:foldmethod=marker
222
225
" vim:foldlevel=0
223
226