Remove space mapping
[havk_dotfiles.git] / .vimrc
blob81b84d2b2e142ab3f93977a47962524f0efee9a3
1 set nocompatible
3 " Various options
4 set formatoptions=cq
5 set cpoptions-=$<
6 set ruler
7 set scrolloff=1
8 set encoding=utf-8
9 set nostartofline
10 set autowrite
11 set lazyredraw
12 set autowrite
14 set listchars=tab:>·,trail:¤
15 set list
17 " Tabulation
18 set tabstop=4
19 set shiftwidth=4
20 set expandtab
22 " Search options
23 set hlsearch
24 set ignorecase
25 set smartcase
26 set incsearch
28 " set format textwidth so that the text fits in a 80 columns window
29 set textwidth=79
31 " Command line completion
32 set wildmode=list:longest,full
33 set wildignore=CVS/
35 filetype on
36 filetype plugin on
37 filetype indent on
38 syntax on
39 se cindent
41 noremap <F12> <C-]>
42 noremap <F11> <C-T>
44 set cindent
45 set cinkeys=0{,0},!^F,o,O,e " default is: 0{,0},0),:,0#,!^F,o,O,e
47 let mapleader=','
49 " buffer navigation
50 " Use TAB key in normal mode to switch buffers
51 nnoremap <TAB> <C-W>w
52 nnoremap <S-TAB> <C-W>W
54 " use ² (square) two switch between alternate buffer
55 nnoremap ² :b#<CR>
57 " These settings are from http://clavier-dvorak.org/wiki/Utilisateur:Kaze/vimrc
58 " but a little customized
59 " I need another Esc key
60 inoremap <Tab> <Esc>
61 vnoremap <Tab> <Esc>
62 inoremap <S-Tab> <Tab>
63 vnoremap <S-Tab> <Tab>
64 inoremap <S-Return> <Esc>
65 vnoremap <S-Return> <Esc>
66 inoremap <M-Return> <Esc>
67 vnoremap <M-Return> <Esc>
69 " lazy scrolling
70 noremap <S-BS> <C-u>
71 noremap <S-Space> <C-d>
72 noremap <S-Return> zt
74 map <F10> :set paste<CR>
75 map <F9> :set nopaste<CR>
76 imap <F10> <C-O>:set paste<CR>
77 imap <F9> <nop>
78 set pastetoggle=<F9>
80 nnoremap <Leader>q :.,$g/^/ normal@
81 vnoremap <Leader>q :g/^/ normal@
83 nnoremap <Leader>g :noau vim /\x12\x17/ ./**/*
85 set bg=dark
87 " GUI stuff
88 if has( "gui_running" )
89     set bg=light
90     colorscheme molokai
91     set guifont=ProggySquareTT\ 12
92     set guioptions=a
93 else
94     " color scheme for the console
95     colorscheme tango
96 endif
98 " local settings
99 " settings for idutils.vim plugin
100 let g:IGlidcmd="D:\\gnu\\bin\\lid.exe -R grep"
101 nnoremap <Leader>l :IDGrep \x12\x17<CR>
103 "return '[\s]' if trailing white space is detected
104 "return '' otherwise
105 function! StatuslineTrailingSpaceWarning()
106     if !exists("b:statusline_trailing_space_warning")
107         if search('\s\+$', 'nw') != 0
108             let b:statusline_trailing_space_warning = '[\s]'
109         else
110             let b:statusline_trailing_space_warning = ''
111         endif
112     endif
113     return b:statusline_trailing_space_warning
114 endfunction
116 "return '[&et]' if &et is set wrong
117 "return '[mixed-indenting]' if spaces and tabs are used to indent
118 "return an empty string if everything is fine
119 function! StatuslineTabWarning()
120         if !exists("b:statusline_tab_warning")
121         let tabs = search('^\t', 'nw') != 0
122         let spaces = search('^ ', 'nw') != 0
124         if tabs && spaces
125             let b:statusline_tab_warning =  '[mixed-indenting]'
126         elseif (spaces && !&et) || (tabs && &et)
127             let b:statusline_tab_warning = '[&et]'
128         else
129             let b:statusline_tab_warning = ''
130         endif
131     endif
132     return b:statusline_tab_warning
133 endfunction
135 "return a warning for "long lines" where "long" is either &textwidth or 80 (if
136 "no &textwidth is set)
138 "return '' if no long lines
139 "return '[#x,my,$z] if long lines are found, were x is the number of long
140 "lines, y is the median length of the long lines and z is the length of the
141 "longest line
142 function! StatuslineLongLineWarning()
143     if !exists("b:statusline_long_line_warning")
144         let long_line_lens = s:LongLines()
146         if len(long_line_lens) > 0
147             let b:statusline_long_line_warning = "[" .
148                         \ '#' . len(long_line_lens) . "," .
149                         \ 'm' . s:Median(long_line_lens) . "," .
150                         \ '$' . max(long_line_lens) . "]"
151         else
152             let b:statusline_long_line_warning = ""
153         endif
154     endif
155     return b:statusline_long_line_warning
156 endfunction
158 "return a list containing the lengths of the long lines in this buffer
159 function! s:LongLines()
160     let threshold = (&tw ? &tw : 80)
161     let spaces = repeat(" ", &ts)
163     let long_line_lens = []
165     let i = 1
166     while i <= line("$")
167         let len = strlen(substitute(getline(i), '\t', spaces, 'g'))
168         if len > threshold
169             call add(long_line_lens, len)
170         endif
171         let i += 1
172     endwhile
174     return long_line_lens
175 endfunction
177 "find the median of the given array of numbers
178 function! s:Median(nums)
179     let nums = sort(a:nums)
180     let l = len(nums)
182     if l % 2 == 1
183         let i = (l-1) / 2
184         return nums[i]
185     else
186         return (nums[l/2] + nums[(l/2)-1]) / 2
187     endif
188 endfunction
191 " {{{ Nice statusbar
192 "statusline setup
193 set statusline=%f       "tail of the filename
195 "display a warning if fileformat isnt unix
196 set statusline+=%#warningmsg#
197 set statusline+=%{&ff!='unix'?'['.&ff.']':''}
198 set statusline+=%*
200 "display a warning if file encoding isnt utf-8
201 set statusline+=%#warningmsg#
202 set statusline+=%{(&fenc!='utf-8'&&&fenc!='')?'['.&fenc.']':''}
203 set statusline+=%*
205 set statusline+=%h      "help file flag
206 set statusline+=%y      "filetype
207 set statusline+=%r      "read only flag
208 set statusline+=%m      "modified flag
210 "display a warning if &et is wrong, or we have mixed-indenting
211 set statusline+=%#error#
212 set statusline+=%{StatuslineTabWarning()}
213 set statusline+=%*
215 set statusline+=%{StatuslineTrailingSpaceWarning()}
217 set statusline+=%#warningmsg#
218 set statusline+=%*
220 "display a warning if &paste is set
221 set statusline+=%#error#
222 set statusline+=%{&paste?'[paste]':''}
223 set statusline+=%*
225 set statusline+=%=      "left/right separator
226 set statusline+=%{StatuslineCurrentHighlight()}\ \ "current highlight
227 set statusline+=%c,     "cursor column
228 set statusline+=%l/%L   "cursor line/total lines
229 set statusline+=\ %P    "percent through file
230 set laststatus=2        " Always show status line
232 "return the syntax highlight group under the cursor ''
233 function! StatuslineCurrentHighlight()
234     let name = synIDattr(synID(line('.'),col('.'),1),'name')
235     if name == ''
236         return ''
237     else
238         return '[' . name . ']'
239     endif
240 endfunction
242 "recalculate the trailing whitespace warning when idle, and after saving
243 autocmd cursorhold,bufwritepost * unlet! b:statusline_trailing_space_warning