aboutsummaryrefslogtreecommitdiff
path: root/vim/vimrc
blob: 848c9486124dcca30907dac1370b8de200e81444 (plain) (blame)
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
" Compatibility
set nocompatible

" Plugins
silent! call pathogen#infect()
silent! call pathogen#helptags()

" Filetypes
if has("autocmd")
    filetype indent plugin on

    " Shortcuts
    nnoremap _ap :setlocal filetype=apache<CR>
    nnoremap _bi :setlocal filetype=bindzone<CR>
    nnoremap _cs :setlocal filetype=css<CR>
    nnoremap _ht :setlocal filetype=html<CR>
    nnoremap _js :setlocal filetype=javascript<CR>
    nnoremap _md :setlocal filetype=markdown<CR>
    nnoremap _pl :setlocal filetype=perl<CR>
    nnoremap _ph :setlocal filetype=php<CR>
    nnoremap _py :setlocal filetype=python<CR>
    nnoremap _rb :setlocal filetype=ruby<CR>
    nnoremap _sh :setlocal filetype=sh<CR>
    nnoremap _vi :setlocal filetype=vim<CR>
    nnoremap _xm :setlocal filetype=xml<CR>

    " Markdown
    augroup markdown
        autocmd!
        autocmd Filetype markdown setlocal formatoptions+=t
        autocmd Filetype markdown setlocal textwidth=79
        if exists("&colorcolumn")
            autocmd Filetype markdown setlocal colorcolumn=+1
        endif
    augroup END
endif

" Backups
if !strlen($SUDO_USER) && has("unix")
    set backup
    set backupext=.bak
    set backupdir^=~/.vim/backup//
    if !isdirectory($HOME . "/.vim/backup") && exists("*mkdir")
        call mkdir($HOME . "/.vim/backup", "p", 0700)
    endif
else
    set nobackup
    set nowritebackup
endif

" Colors
if has("syntax")
    syntax enable
    set background=dark
    silent! colorscheme sahara
    if has("folding")
        set fillchars=diff:\ ,fold:\ ,vert:\ 
    endif
    if exists("&synmaxcol")
        set synmaxcol=3000
    endif
endif

" Commands
if has("cmdline_info")
    set ruler
    set showcmd
    set showmode
endif
cnoremap <C-A> <Home>
cnoremap <C-E> <End>

" Completion
inoremap <C-F> <C-X><C-F>
inoremap <C-]> <C-X><C-]>

" Encoding
set fileformats=unix,dos,mac
if has("multi_byte")
    set encoding=utf-8
endif

" Formatting
set expandtab
set formatoptions=croqn1
silent! set formatoptions+=j
set smarttab
set nojoinspaces
set shiftround
set shiftwidth=4
set softtabstop=4
set tabstop=4
nnoremap J mzJ`z
if has("eval")
    function! ToggleFormatFlag(flag)
        let l:operation = (&formatoptions =~ a:flag) ? '-=' : '+='
        silent! exec 'setlocal formatoptions' l:operation . a:flag
        setlocal formatoptions?
    endfunction
    nnoremap <silent> <leader>a :<C-U>call ToggleFormatFlag('a')<CR>
    nnoremap <silent> <leader>c :<C-U>call ToggleFormatFlag('c')<CR>
    nnoremap <silent> <leader>t :<C-U>call ToggleFormatFlag('t')<CR>
endif

" History
set history=1000

" List
set nolist
nnoremap <leader>l :setlocal list!<CR>

" Matching
silent! runtime macros/matchit.vim

" Netrw
if has("eval")
    let g:netrw_silent = 1
    let g:netrw_liststyle = 3
endif

" Messages
set shortmess+=I

" Miscellaneous
set backspace=indent,eol,start
set modelines=0
set report=0
set shellslash

" Numbers
set nonumber
nnoremap <leader>n :setlocal number!<CR>

" Objects
onoremap ir i[
onoremap ar a[
vnoremap ir i[
vnoremap ar a[

" Paste
set nopaste
set pastetoggle=<F10>

" Reading
set autoread

" Scrolling
set scrolloff=0
set sidescrolloff=16

" Search
if has("extra_search")
    set hlsearch
    set incsearch
    nnoremap <leader>h :set hlsearch!<CR>
    nnoremap <leader>i :set incsearch!<CR>
    nnoremap <C-l> :nohlsearch<CR><C-l>
    if has("autocmd")
        augroup vimrc
            autocmd!
            silent! autocmd InsertEnter * set nohlsearch
            silent! autocmd InsertLeave * set hlsearch
        augroup END
    endif
endif

" Spelling
if has("spell")
    set spelllang=en_nz
    nnoremap <leader>s :setlocal spell!<CR>
endif

" Swaps
if !strlen($SUDO_USER) && has("unix")
    set swapfile
    set directory^=~/.vim/swap//
    if !isdirectory($HOME . "/.vim/swap") && exists("*mkdir")
        call mkdir($HOME . "/.vim/swap", "p", 0700)
    endif
else
    set noswapfile
endif

" Terminal
set noesckeys
set lazyredraw
set ttyfast
set visualbell t_vb=

" Typos
if has("user_commands")
    command! -bang -complete=file -nargs=? E e<bang> <args>
    command! -bang -complete=file -nargs=? W w<bang> <args>
    command! -bang -complete=file -nargs=? WQ wq<bang> <args>
    command! -bang -complete=file -nargs=? Wq wq<bang> <args>
    command! -bang Q q<bang>
    command! -bang Qa qa<bang>
    command! -bang QA qa<bang>
    command! -bang Wa wa<bang>
    command! -bang WA wa<bang>
endif

" Undo
set undolevels=1000
if !strlen($SUDO_USER) && has("unix") && has("persistent_undo")
    set undofile
    set undodir^=~/.vim/undo//
    if !isdirectory($HOME . "/.vim/undo") && exists("*mkdir")
        call mkdir($HOME . "/.vim/undo", "p", 0700)
    endif
endif

" Unmaps
noremap <F1> <nop>
nnoremap K <nop>
nnoremap Q <nop>

" Visual
if has("virtualedit")
    set virtualedit+=block
endif

" Wildmenu
if has("wildmenu")
    set wildmenu
    set wildmode=longest:list
    if has("wildignore")
        set wildignore+=*.a,*.o
        set wildignore+=*.bmp,*.gif,*.ico,*.jpg,*.png
        set wildignore+=.DS_Store,.git,.hg,.svn
        set wildignore+=*~,*.swp,*.tmp
    endif
    if exists("&wildignorecase")
        set wildignorecase
    endif
endif

" Windows
if has("windows")
    set laststatus=1
    set splitbelow
    if has("vertsplit")
        set splitright
    endif
    if exists("&showtabline")
        set showtabline=1
    endif
endif

" Wrapping
set nowrap
nnoremap j gj
nnoremap k gk
nnoremap <leader>w :set wrap!<CR>
if has("linebreak")
    set linebreak
    set showbreak=...
endif

" Writing
nnoremap ZW :w!<CR>
nnoremap ZA :wa!<CR>

" Yanking
nnoremap Y y$

" Local
if filereadable(glob("~/.vimrc.local"))
    source ~/.vimrc.local
endif