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
|
" General {{{1
set nocompatible
let g:use_dvorak = 1
let g:leave_my_cursor_position_alone = ''
let PHP_vintage_case_default_indent = 1
let c_no_comment_fold = 1
set fileformats=unix,dos,mac
set spelllang=en_us
set switchbuf=useopen
" Colors and Syntax {{{1
set background=dark
colorscheme zlg
if has('syntax') && !exists('g:syntax_on')
syntax enable
endif
" Plugin-Specific {{{1
call pathogen#infect('bundle/{}')
Helptags
" Formatting {{{1
set formatprg=par-format\ w80
set printoptions=paper:letter,top:0.5in,left:0.5in,right:0.5in,bottom:0.5in,syntax:n,header:0
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
set formatoptions=tcqn
" Usability {{{1
set whichwrap=<,>,[,],h,l
set scrolloff=2
set backspace=indent,eol,start
set ttimeout
set ttimeoutlen=50
set timeoutlen=3000
set incsearch
set number
set numberwidth=5
set hidden
set mouse=n
" Interface {{{1
set display+=lastline
" I changed my mind... a toggle is best
set nolist
"set listchars=tab:⇥\ ,trail:␣,extends:⇉,precedes:⇇,nbsp:⚭
if &termencoding ==# 'utf-8' || &encoding ==# 'utf-8'
let &listchars = "tab:\u21e5 ,extends:\u21c9,precedes:\u21c7,nbsp:\u26ad"
else
set listchars=tab:>\ ,extends:>,precedes:<,nbsp:+
endif
set splitright
set splitbelow
set laststatus=2
" Example: (1) .vimrc [vim][+] 48,22 123L 0x20
set statusline=(%n)\ %f\ %y%r%m\ %l,%v\ %LL\ 0x%B
set fillchars=fold:\ ,vert:\|
set wrap
set linebreak
" Anti-Annoyance {{{1
set nostartofline
set novisualbell
set noautoindent
" Folding {{{1
set foldmethod=expr
set foldtext=MyFoldText()
function! MyFoldText()
let indent = repeat(' ', indent(v:foldstart))
let line = substitute(getline(v:foldstart), '\v^\s+', '', '')
let folded_lines = v:foldend - v:foldstart
return indent . line . ' (' . folded_lines . 'L)'
endfunction
" Autocommands {{{1
if has("autocmd")
filetype plugin indent on
autocmd BufNewFile,BufRead /media/sd/Games/*.[0123456789].txt setfiletype sctxt
autocmd BufNewFile,BufRead *.txt setfiletype text
" All Markdown and TXT files need to be hard wrapped to 80 characters.
autocmd FileType text,markdown setlocal nonumber tabstop=4 softtabstop=4 shiftwidth=4 expandtab formatoptions=tcqwn textwidth=80 nolist colorcolumn=81
autocmd FileType python setlocal expandtab
autocmd BufNewFile,BufRead *.ledger setlocal nonumber iskeyword+=: filetype=ledger
autocmd FileType help setlocal colorcolumn=0
autocmd FileType vim setlocal keywordprg=:help
autocmd FileType c setlocal foldmethod=syntax
" Needed for game guides on the SuperCard DSTWO; this is also true of
" homebrew apps that use monospace fonts at normal scale. The DSTWO throws
" up on linebreaks if it's not DOS, iso8859-1 text. The limit is set to
" allow for a character or two that might be wider than an M or W.
autocmd FileType sctxt setlocal enc=latin1 ff=dos tw=30 cc=31 fo=tcqwn nolist et ts=4 sts=4 sw=4
endif
" Key Bindings {{{1
nnoremap <leader>i :call <SID>SynStack()<CR>
nnoremap <leader>l :set list!<CR>
nnoremap <leader>n :set number!<CR>
nnoremap <leader>t :setfiletype text<CR>
nnoremap <leader>s :set spell!<CR>
nnoremap <leader>c :call <SID>CountCodeLines()<CR>
nnoremap <leader>d :call <SID>InsertDOW()<CR>
nnoremap <leader>D "=strftime("%Y-%m-%d %H:%M", localtime())<CR>p
nnoremap <Space> za
nnoremap <silent> <F5> :call <SID>StripTrailingWhitespaces()<CR>
" Thanks to /u/spupy for these short and sweet mappings that replace the
" simpler functions of tpope's surround.vim plugin. Each of these will
" surround the current (or last) visual selection with the specified
" character.
noremap <Leader>w" <ESC>`>a"<ESC>`<i"<ESC>
noremap <Leader>w' <ESC>`>a'<ESC>`<i'<ESC>
noremap <Leader>w( <ESC>`>a)<ESC>`<i(<ESC>
noremap <Leader>w[ <ESC>`>a]<ESC>`<i[<ESC>
noremap <Leader>w{ <ESC>`>a}<ESC>`<i{<ESC>
noremap <Leader>w< <ESC>`>a><ESC>`<i<<ESC>
noremap <Leader>w` <ESC>`>a`<ESC>`<i`<ESC>
" Dvorak Hackery {{{1
if (exists("g:use_dvorak") && g:use_dvorak == 1)
" I use a Dvorak keyboard, so standard vim movement keys are a hassle.
" Since mnemonics are helpful all around, I need a mapping that gives me
" pain-free file navigation without screwing up mnemonics (too much).
"
" Thus:
" (D)elete is now (K)ill: d2w == k2w "kill 2 words"
" Un(T)il is now (J)ump-To: dt( == kj( "kill, jump-to paren"
" (N)ext is now (L)eap: cn == cl "change up to leap point"
" Standard movement, which is the true focus of this hack.
" Mnemonics are awesome, so let's preserve as much as possible.
noremap d h
noremap h j
noremap t k
noremap n l
noremap D H
noremap H J
noremap T K
noremap N L
noremap gh gj
noremap gt gk
" I work with tabs every now and then. No, I don't have a mnemonic, so
" stfu.
noremap gj gt
noremap gJ gT
" Window movement, equally important
noremap <C-w>d <C-w>h
noremap <C-w>h <C-w>j
noremap <C-w>t <C-w>k
noremap <C-w>n <C-w>l
nnoremap <C-w><C-d> <C-w><C-h>
nnoremap <C-w><C-h> <C-w><C-j>
nnoremap <C-w><C-t> <C-w><C-k>
nnoremap <C-w><C-n> <C-w><C-l>
nnoremap <C-d> <C-w>h
nnoremap <C-h> <C-w>j
nnoremap <C-t> <C-w>k
nnoremap <C-n> <C-w>l
" Account for tag jumping
nnoremap <C-j> <C-t>
" Remappings for the D key
noremap k d
noremap K D
" Remappings for the T key
noremap j t
noremap J T
" Remapping for the L key
noremap l n
noremap L N
" General purpose help; the originals remain for convenience
noremap - 0
noremap _ $
" Fold-related keybindings
noremap zh zj
noremap zt zk
endif
" Functions {{{1
" Credit to Drew Neil of vimcasts.org
function! <SID>StripTrailingWhitespaces() " {{{2
" Save last search and cursor position
let _s=@/
let l = line(".")
let c = col(".")
" Do the business:
%s/\s\+$//e
" Restore previous search history and cursor position
let @/=_s
call cursor(l, c)
endfunction
" Credit to Drew Neil of vimcasts.org
function! <SID>SynStack() " {{{2
if !exists("*synstack")
return
endif
echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunction
function! <SID>CountCodeLines() " {{{2
let code_count = 0
for line in getbufline("%", 1, "$")
if (len(line) > 0 && match(line, '\S\+') > -1)
if (s:IsCommentLine(line) == 1)
continue
endif
let code_count += 1
endif
endfor
echo code_count . ' lines of code.'
endfunction
function! s:IsCommentLine(line) " {{{2
let l:comtypes = []
let l:comlist = split(&comments, ',')
for i in comlist
let l:type = split(i, ':')
if len(type) > 1
let l:opt = type[1]
else
let l:opt = type[0]
endif
call add(comtypes, opt)
endfor
let i = 0
while i < len(comtypes)
if match(a:line, '^\s*' . escape(comtypes[i], '/*')) > -1
return 1
endif
let i += 1
endwhile
return 0
endfunction
function! <SID>InsertDOW() " {{{2
" Let's backup a random register
let tmpx = @x
let @x = system("date +\"%a \" -d" . strftime("%Y") . "-" . substitute(expand("<cWORD>"), ":", "", ""))
normal "xP
" Join, since it apparently is on a line instead of just a string
j 1
" Return the value in the x register
let @x = tmpx
endfunction
" vim: foldmethod=marker
|