vim: refactor PrependCppNamespaceToIdent
[shutils.git] / dotfiles / vim / .vimrc
1 " Purpose: My personal .vimrc
2 " Author: Stefan Huber
3 "
4 "Essential resources for vim users
5 " - vim.sf.net -- find tips and scripts for vim and gvim
6 "
7 "By calling ":help keyword" you get help for the specific
8 "option and setting.
9
10
11 set nocompatible
12 set encoding=utf8
13 set modeline
14 set number
15 set backspace=indent,eol,start
16
17 set tagstack
18 set grepprg=grep\ -nH\ $*
19 set foldcolumn=1
20
21 set incsearch
22 set hlsearch
23
24 set cursorline
25 set laststatus=2
26
27 set listchars=tab:»­,trail:·,eol:$
28
29 set autoindent
30 set tabstop=4
31 set shiftwidth=4
32
33 if version >= 703
34 set spelllang=de_at,en
35 set tabpagemax=20
36 set colorcolumn=+1
37 endif
38
39 " Pathogen runtime path manipulation
40 "call pathogen#infect() "Using the infect method breaks ft detection
41 filetype off
42 call pathogen#runtime_append_all_bundles()
43 call pathogen#helptags()
44
45 syntax on
46 filetype plugin indent on
47
48
49 "Power saving tip: powertop-homepage
50 let &guicursor = &guicursor . ",a:blinkon0"
51 "According to vim help -- enable mouse in xterm...
52 set mouse=a
53
54 " Use 256 colors
55 set t_Co=256
56 let g:CSApprox_attr_map = { 'bold' : 'bold', 'italic' : '', 'sp' : '' }
57 colorscheme shuber-wombat
58
59
60 " Use the below highlight group when displaying bad whitespace is desired.
61 highlight BadWhitespace ctermbg=red guibg=red
62 " Make trailing whitespace be flagged as bad.
63 au Filetype python,tex,c,cpp,cs,objc,java,vim syn match BadWhitespace /\s\+$/ containedin=ALL
64
65
66 if exists(":DetectIndent")
67 au BufReadPost * :DetectIndent
68 endif
69
70
71 let g:syntastic_mode_map = { 'mode' : 'active', 'active_filetypes' : [], 'passive_filetypes' : ['html'] }
72
73
74 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
75 " Some macros
76 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
77
78 "Open current file with a specific program
79 function OpenIn(prog)
80 execute ":!" . a:prog . " % &"
81 endfunction
82
83
84 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
85 " key bindings
86 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
87
88 map <a-c> <plug>NERDCommenterToggle
89
90 nmap <c-q> :q<CR>
91 nmap <c-s> :w<CR>
92 vmap <c-s> <Esc><c-s>gv
93 imap <c-s> <c-o><c-s>
94
95
96 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
97 " fortran
98 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
99
100 "let fortran_free_source=1
101 au BufNewFile *.f90 set fortran_free_source=1
102 au Filetype fortran set cindent cst csto=0
103
104
105 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
106 " C, C++, C#, objc, java
107 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
108
109 au Filetype c,cpp,cs,objc,java map <F4> :cnext <CR>
110 au Filetype c,cpp,cs,objc,java map <S-F4> :cprevious <CR>
111 au Filetype c,cpp,cs,objc,java map <F11> :AS <CR>
112 au Filetype c,cpp,cs,objc,java map <S-F11> :A <CR>
113 au Filetype c,cpp,cs,objc,java set cindent cst csto=0
114 au Filetype c,cpp,cs,objc map <F7> :make <CR>
115 au Filetype java map <F7> :!ant -f ../build.xml <CR>
116 au Filetype c,cpp,cs,obj set makeprg=make
117
118
119 "Prepend the namespace to an identifier, e.g. 'std::' before 'map' excluding
120 "those in C/C++ comments.
121 function PrependCppNamespaceToIdent(ns, id)
122
123 " To match Not to match
124 "
125 "|id |// id
126 "| id |// /* */ id
127 "|/* */ /* */ id |/* */ // id
128 "|id /* */ |/* id
129 "|*/ id | * id
130 " |/* id */
131 " |::id
132 " |/**/ ::id
133 "
134 " In order to not match '* id' it is assumed that multi-line comment lines
135 " in the middle begin with a star.
136
137 " If // and /* and ^* and :: is not prepend:
138 execute ':%s_\(\(\/\/\|\/\*\|^\s*\*[^/]\).*\|::\)\@<!\<' . a:id . '\>_' . a:ns . '::' . a:id . '_ge'
139 " If // and :: is not prepend, but */ is, and no further /* or // are found
140 execute ':%s_\(\/\/.*\)\@<!\*\/\(\/[^\/\*]\|[^\/]\)*\zs\(::\)\@<!\<' . a:id . '\>_' . a:ns . '::' . a:id . '_ge'
141
142 endfunction
143
144 "Prepend STL namespace 'std::' to several identifiers
145 function PrependSTLNamespace()
146 let id = []
147 let id = id +['cin', 'cout', 'cerr', 'endl']
148 let id = id +['swap', 'sort', 'max', 'min']
149 let id = id +['vector', 'deque', 'list', 'map', 'multimap', 'set']
150 let id = id +['queue', 'stack', 'priority_queue']
151 let id = id +['ostream', 'istream']
152 let id = id +['pair', 'string']
153 let id = ['map']
154
155 for i in id
156 call PrependCppNamespaceToIdent("std", i)
157 endfor
158 endfunction
159
160 function EscapeHexToChar()
161 echo 'Call "x/Nxb addr" in GDB to print N bytes at addr'
162 execute '%s/^.*://'
163 execute '%s/\s*0x\(\x\x\)/\\x\1/g'
164 execute '%s/^\(.*\)$/"\1"/'
165 endfunction
166
167
168
169 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
170 " Text and mail
171 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
172
173 au Filetype text set textwidth=80
174 "According to thunderbirds settings
175 au Filetype mail set textwidth=72
176 au Filetype mail set expandtab
177
178 "a and w reformat the paragraph automatically and a new paragraph
179 "is indicated by lines not ending with white-space
180 if version>=700
181 au Filetype mail,text set fo+=n spell
182 endif
183
184 "Scissor line
185 au Filetype mail syn match Statement /^\s*-*\s*>8\s*-*\s*$/
186 au Filetype mail syn match Statement /^\s*-*\s*8<\s*-*\s*$/
187
188
189 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
190 " PHP
191 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
192
193 "au Filetype php set fo=tcqn
194 if version >= 700
195 au Filetype php set spell
196 endif
197
198 au Filetype php set textwidth=80
199 "au Filetype php set cindent
200
201
202 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
203 " LaTeX
204 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
205
206 au BufRead,BufNewFile *.cls set filetype=tex
207 au Filetype tex set textwidth=80
208
209 "Remove Umlaute
210 function TexTransUmlaute()
211 execute ':%s/ü/\\\"u/ge'
212 execute ':%s/Ü/\\\"U/&'
213 execute ':%s/ö/\\\"o/&'
214 execute ':%s/Ö/\\\"O/&'
215 execute ':%s/ä/\\\"a/&'
216 execute ':%s/Ä/\\\"A/&'
217 execute ':%s/ß/\\\"s/&'
218 execute ':%s/²/\^2/&'
219 endfunction
220
221 function FindWordRepeatings()
222 execute '/\(\<\S\+\>\)\s\+\1\>'
223 " let pos = search('\(\<\S\+\>\)\s\+\1\>', "cw")
224 " call cursor(pos)
225 endfunction
226
227 let g:tex_flavor = "latex"
228 let g:LatexBox_viewer="okular"
229 let g:LatexBox_latexmk_options="-pvc"
230
231 au Filetype tex set smartindent
232
233 if version >= 700
234 au Filetype tex set spell
235 endif
236
237
238 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
239 " python
240 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
241
242 au Filetype python map <F5> :!python % <CR>
243
244 " vimrc file for following the coding standards specified in PEP 7 & 8.
245
246 " Number of spaces that a pre-existing tab is equal to.
247 " For the amount of space used for a new tab use shiftwidth.
248 au Filetype python set shiftwidth=4
249 au Filetype python set expandtab
250
251 " Wrap text after a certain number of characters
252 au Filetype python set textwidth=79
253
254
255 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
256 " XML, Ipe
257 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
258
259 "Opens the current file in ipe
260 au Filetype xml map <M-o> :call OpenIn("ipe") <CR>
261
262
263 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
264 " gnuplot
265 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
266
267 "Opens the current file in ipe
268 au Filetype gnuplot map <M-o> :call OpenIn("gnuplot -persist") <CR>
269
270
271 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
272 " youcompleteme
273 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
274
275 let g:ycm_min_num_of_chars_for_completion = 999
276 let g:ycm_key_list_select_completion = ['<Down>']
277
278
279
280 if filereadable($HOME . "/.vimrc-local")
281 source ~/.vimrc-local
282 endif
283
284