Skip to content

Commit 530f7a2

Browse files
author
Gaspar Chilingarov
committed
Major rework
- improve booting sequence - manage airline - fold-friendly comments - theme settings support - add misc shortcuts
1 parent d20800b commit 530f7a2

5 files changed

Lines changed: 303 additions & 79 deletions

File tree

autoload/vimide.vim

Lines changed: 265 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,75 +2,212 @@
22
"
33
"
44

5-
function! vimide#boot() " {{{
6-
if g:vimide_manage_indents | call vimide#setIndentSettings() | endif
7-
if g:vimide_manage_search | call vimide#setSearchSettings() | endif
8-
if g:vimide_manage_completition | call vimide#setCompletitionSettings() | endif
9-
if g:vimide_manage_vimundo | call vimide#setVimUndoSettings() | endif
10-
if g:vimide_manage_vimbackup | call vimide#setVimBackupSettings() | endif
11-
if g:vimide_manage_vimdiff | call vimide#setVimDiffSettings() | endif
12-
if g:vimide_manage_folds | call vimide#setFoldsSettings() | endif
13-
if g:vimide_manage_restore | call vimide#setRestoreSettings() | endif
5+
let s:VIMIDE_BOOT_FINISHED = 0
6+
7+
function! vimide#setDefaults() " {{{
8+
call s:SetGlobal('g:vimide_global_enable', 0)
9+
call s:SetGlobal('g:vimide_manage_indents', 1)
10+
call s:SetGlobal('g:vimide_manage_search', 1)
11+
call s:SetGlobal('g:vimide_manage_completition', 1)
12+
13+
"
14+
" may use different themes for console/gui (console/gui)
15+
" set to '' disable managing themes
16+
call s:SetGlobal('g:vimide_colorscheme', 'hybrid/desert')
17+
18+
call s:SetGlobal('g:vimide_terminal', 'xterm')
19+
20+
if !exists('&undodir')
21+
if !exists('g:vimide_manage_vimundo') | let g:vimide_manage_vimundo = 1 | en
22+
else
23+
let g:vimide_manage_vimundo = 0
24+
endif
25+
26+
if !exists('&backupdir')
27+
if !exists('g:vimide_manage_vimbackup') | let g:vimide_manage_vimbackup = 1 | en
28+
else
29+
let g:vimide_manage_vimbackup = 0
30+
end
31+
32+
call s:SetGlobal('g:vimide_manage_vimdiff', 1)
33+
call s:SetGlobal('g:vimide_manage_folds', 1)
34+
call s:SetGlobal('g:vimide_manage_restore', 1)
35+
call s:SetGlobal('g:vimide_manage_airline', 1)
36+
call s:SetGlobal('g:vimide_install_comment_shortcuts', 1)
37+
call s:SetGlobal('g:vimide_install_other_shortcuts', 1)
38+
call s:SetGlobal('g:vimide_manage_misc_settings', 1)
39+
endfunction " }}}
40+
41+
function! vimide#init() " {{{
42+
" just do minimal amount of work necessary to tune plugins
43+
" which cannot be tuned later
44+
call vimide#setDefaults()
45+
46+
if g:vimide_manage_airline | call vimide#setAirlineSettings(1) | endif
47+
endfunction " }}}
48+
49+
function! vimide#boot(setGlobal) " {{{
50+
if !s:VIMIDE_BOOT_FINISHED
51+
if g:vimide_colorscheme != '' | call vimide#setColorscheme(a:setGlobal) | endif
52+
if g:vimide_manage_indents | call vimide#setIndentSettings(a:setGlobal) | endif
53+
if g:vimide_manage_search | call vimide#setSearchSettings(a:setGlobal) | endif
54+
if g:vimide_manage_completition | call vimide#setCompletitionSettings(a:setGlobal) | endif
55+
if g:vimide_manage_vimundo | call vimide#setVimUndoSettings(a:setGlobal) | endif
56+
if g:vimide_manage_vimbackup | call vimide#setVimBackupSettings(a:setGlobal) | endif
57+
if g:vimide_manage_vimdiff | call vimide#setVimDiffSettings(a:setGlobal) | endif
58+
if g:vimide_manage_folds | call vimide#setFoldsSettings(a:setGlobal) | endif
59+
if g:vimide_manage_restore | call vimide#setRestoreSettings(a:setGlobal) | endif
60+
if g:vimide_install_comment_shortcuts | call vimide#setCommentShortcuts(a:setGlobal) | endif
61+
if g:vimide_install_other_shortcuts | call vimide#setOtherShortcuts(a:setGlobal) | endif
62+
if g:vimide_manage_misc_settings | call vimide#setMiscSettings(a:setGlobal) | endif
63+
let s:VIMIDE_BOOT_FINISHED = 1
64+
endif
1465

1566
if &filetype == 'elixir'
1667
call vimide#elixir#boot()
1768
endif
1869

19-
if g:vimide_install_shortcuts | call vimide#setShortcuts() | endif
2070
endfunction " }}}
2171

22-
function! vimide#setIndentSettings() "{{{
23-
set autoindent
24-
set cindent
25-
set smartindent
72+
function! vimide#setIndentSettings(setGlobal) "{{{
73+
if a:setGlobal
74+
set autoindent
75+
set cindent
76+
set smartindent
77+
else
78+
setlocal autoindent
79+
setlocal cindent
80+
setlocal smartindent
81+
endif
2682
endfunction "}}}
2783

28-
function! vimide#setSearchSettings() "{{{
29-
set incsearch
30-
set nohls
31-
nmap n nzz
32-
nmap N Nzz
84+
function! vimide#setSearchSettings(setGlobal) "{{{
85+
if a:setGlobal
86+
set incsearch
87+
set nohls
88+
nnoremap n nzz
89+
nnoremap N Nzz
90+
else
91+
setlocal incsearch
92+
setlocal nohls
93+
nnoremap <buffer> n nzz
94+
nnoremap <buffer> N Nzz
95+
endif
96+
endfunction "}}}
97+
98+
function! vimide#setColorscheme(setGlobal) "{{{
99+
let useScheme = g:vimide_colorscheme
100+
let doubleScheme = split(useScheme, '/')
101+
if len(doubleScheme) == 2
102+
if has("gui_running")
103+
let useScheme = doubleScheme[1]
104+
else
105+
let useScheme = doubleScheme[0]
106+
endif
107+
endif
108+
exe "colorscheme " . useScheme
33109
endfunction "}}}
34110

35-
function! vimide#setCompletitionSettings() "{{{
36-
set noinfercase
37-
set noerrorbells
111+
function! vimide#setCompletitionSettings(setGlobal) "{{{
112+
if a:setGlobal
113+
set noinfercase
114+
set noerrorbells
115+
else
116+
setlocal noinfercase
117+
setlocal noerrorbells
118+
endif
38119
endfunction "}}}
39120

40-
function! vimide#setVimUndoSettings() "{{{
121+
function! vimide#setVimUndoSettings(setGlobal) "{{{
41122
let undoDir = $HOME . "/.vimundo"
42123
if !isdirectory(undoDir)
43124
call mkdir(undoDir, "p")
44125
endif
45126

46-
set undodir=undoDir
127+
if a:setGlobal
128+
set undodir=undoDir
129+
else
130+
setlocal undodir=undoDir
131+
endif
47132
endfunction "}}}
48133

49-
function! vimide#setVimBackupSettings() "{{{
134+
function! vimide#setVimBackupSettings(setGlobal) "{{{
50135
let backupDir = $HOME . "/.vimbackup"
51136
if !isdirectory(backupDir)
52137
call mkdir(backupDir, "p")
53138
endif
54139

55-
set backupdir=backupDir
56-
set writebackup
57-
set backup
140+
if a:setGlobal
141+
set backupdir=backupDir
142+
set writebackup
143+
set backup
144+
else
145+
setlocal backupdir=backupDir
146+
setlocal writebackup
147+
setlocal backup
148+
endif
58149
endfunction "}}}
59150

60-
function! vimide#setVimDiffSettings() "{{{
61-
set diffopt=iwhite
151+
function! vimide#setVimDiffSettings(setGlobal) "{{{
152+
if a:setGlobal
153+
set diffopt=iwhite
154+
else
155+
setlocal diffopt=iwhite
156+
endif
62157
endfunction "}}}
63158

64-
function! vimide#setFoldsSettings() "{{{
65-
if g:vimide_global_enable
159+
function! vimide#setAirlineSettings(setGlobal) "{{{
160+
" can manage airline only globally
161+
if a:setGlobal
162+
set laststatus=2
163+
164+
let g:airline#extensions#tabline#enabled = 0
165+
let g:airline#extensions#po#enabled = 0
166+
167+
let g:airline_powerline_fonts = 1
168+
let g:airline_mode_map = {
169+
\ '__' : '-',
170+
\ 'n' : 'N',
171+
\ 'i' : 'I',
172+
\ 'R' : 'R',
173+
\ 'c' : 'C',
174+
\ 'v' : 'V',
175+
\ 'V' : 'V',
176+
\ '.' : 'V',
177+
\ 's' : 'S',
178+
\ 'S' : 'S',
179+
\ }
180+
181+
let g:airline_left_sep = ''
182+
let g:airline_left_alt_sep = ''
183+
let g:airline_right_sep = ''
184+
let g:airline_right_alt_sep = ''
185+
186+
if !exists("g:airline_symbols")
187+
let g:airline_symbols={}
188+
endif
189+
190+
let g:airline_symbols.branch = ''
191+
let g:airline_symbols.readonly = ''
192+
let g:airline_symbols.linenr = ''
193+
let g:airline_symbols.maxlinenr = ''
194+
195+
let g:airline_section_z = airline#section#create(['%3p%%', 'linenr', 'maxlinenr', '%3v'])
196+
let g:airline_section_y = ''
197+
let g:airline_section_x = ''
198+
endif
199+
endfunction "}}}
200+
201+
function! vimide#setFoldsSettings(setGlobal) "{{{
202+
if a:setGlobal
66203
com! VimIDEToggleFold call vimide#toggleFold()
67204
else
68205
com! -buffer VimIDEToggleFold call vimide#toggleFold()
69206
endif
70207
endfunction "}}}
71208

72-
function! vimide#setRestoreSettings() " {{{
73-
if g:vimide_global_enable
209+
function! vimide#setRestoreSettings(setGlobal) " {{{
210+
if a:setGlobal
74211
augroup vimideRestore
75212
au!
76213
au BufReadPost * call vimide#restorePosition()
@@ -83,8 +220,81 @@ function! vimide#setRestoreSettings() " {{{
83220
endif
84221
endfunction " }}}
85222

86-
function! vimide#setShortcuts() " {{{
87-
noremap <F3> :VimIDEToggleFold<CR>
223+
function! vimide#setCommentShortcuts(setGlobal) " {{{
224+
nnoremap <silent> <Plug>VimidecommentsToggle :call vimide#comments#wrap("n", "Toggle" )<CR>
225+
xnoremap <silent> <Plug>VimidecommentsToggle :call vimide#comments#wrap("x", "Toggle" )<CR>
226+
nnoremap <silent> <Plug>VimidecommentsNested :call vimide#comments#wrap("n", "Nested" )<CR>
227+
xnoremap <silent> <Plug>VimidecommentsNested :call vimide#comments#wrap("x", "Nested" )<CR>
228+
nnoremap <silent> <Plug>VimidecommentsUncomment :call vimide#comments#wrap("n", "Uncomment")<CR>
229+
xnoremap <silent> <Plug>VimidecommentsUncomment :call vimide#comments#wrap("x", "Uncomment")<CR>
230+
231+
" WARNING: there is no way to get NERDDefaultAlign per buffer, so messing with global
232+
" variable now.
233+
" we want comments to be nicely aligned under each other and not follow
234+
" indentation
235+
let g:NERDDefaultAlign = "left"
236+
" TODO: think of possibility leaving commented area in visual selected mode
237+
" (if it is good idea at all :)
238+
if a:setGlobal
239+
" TODO: copy/paste is recipe for disaster, make function to automate
240+
" bindings
241+
nmap <C-K><C-P> <Plug>VimidecommentsToggle
242+
nmap <C-K><C-[> <Plug>VimidecommentsNested
243+
nmap <C-K><C-]> <Plug>VimidecommentsUncomment
244+
245+
vmap <C-K><C-P> <Plug>VimidecommentsToggle
246+
vmap <C-K><C-[> <Plug>VimidecommentsNested
247+
vmap <C-K><C-]> <Plug>VimidecommentsUncomment
248+
249+
imap <C-K><C-P> <Plug>VimidecommentsToggle
250+
imap <C-K><C-[> <Plug>VimidecommentsNested
251+
imap <C-K><C-]> <Plug>VimidecommentsUncomment
252+
else
253+
nmap <buffer> <C-K><C-P> <Plug>VimidecommentsToggle
254+
nmap <buffer> <C-K><C-[> <Plug>VimidecommentsNested
255+
nmap <buffer> <C-K><C-]> <Plug>VimidecommentsUncomment
256+
257+
vmap <buffer> <C-K><C-P> <Plug>VimidecommentsToggle
258+
vmap <buffer> <C-K><C-[> <Plug>VimidecommentsNested
259+
vmap <buffer> <C-K><C-]> <Plug>VimidecommentsUncomment
260+
261+
imap <buffer> <C-K><C-P> <Plug>VimidecommentsToggle
262+
imap <buffer> <C-K><C-[> <Plug>VimidecommentsNested
263+
imap <buffer> <C-K><C-]> <Plug>VimidecommentsUncomment
264+
endif
265+
endfunction " }}}
266+
267+
function! vimide#setOtherShortcuts(setGlobal) " {{{
268+
let isGvim = has("gui_running")
269+
if a:setGlobal
270+
noremap <F3> :VimIDEToggleFold<CR>
271+
noremap <silent> <Leader>trailing :call vimide#stripTrailingWhitespace()<CR>
272+
noremap <silent> <Leader>$ :call vimide#stripTrailingWhitespace()<CR>
273+
274+
if isGvim
275+
noremap map ZZ :w<CR>:bd<CR>
276+
exec "noremap <silent> <C-X> :silent !" . g:vimide_terminal . "&<CR>"
277+
end
278+
else
279+
noremap <buffer> <F3> :VimIDEToggleFold<CR>
280+
noremap <buffer> <silent> <Leader>trailing :call vimide#stripTrailingWhitespace()<CR>
281+
noremap <buffer> <silent> <Leader>$ :call vimide#stripTrailingWhitespace()<CR>
282+
283+
if isGvim
284+
noremap <buffer> map ZZ :w<CR>:bd<CR>
285+
exec "noremap <silent> <buffer> <C-X> :silent !" . g:vimide_terminal . "&<CR>"
286+
end
287+
endif
288+
endfunction " }}}
289+
290+
function! vimide#setMiscSettings(setGlobal) " {{{
291+
"let isGvim = has("gui_running")
292+
if a:setGlobal
293+
set updatetime=500
294+
"TODO: set guioptions-=T "remove toolbar until we know what useful buttons put
295+
"on it ;-)
296+
297+
endif
88298
endfunction " }}}
89299

90300
" ######################################################################
@@ -127,3 +337,22 @@ function! vimide#restorePosition() " {{{
127337
endif
128338
endif
129339
endf " }}}
340+
341+
function! vimide#stripTrailingWhitespace() " {{{
342+
" Save cursor position
343+
let l:save = winsaveview()
344+
" Remove trailing whitespace
345+
%s/\s\+$//e
346+
" Move cursor to original position
347+
call winrestview(l:save)
348+
endfunction " }}}
349+
350+
function! s:SetGlobal(name, default) " {{{
351+
if !exists(a:name)
352+
if type(a:name) == 0 || type(a:name) == 5
353+
exec "let " . a:name . " = " . a:default
354+
elseif type(a:name) == 1
355+
exec "let " . a:name . " = '" . escape(a:default, "\'") . "'"
356+
endif
357+
endif
358+
endfunction " }}}

autoload/vimide/comments.vim

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
3+
" wrapper around NERDComment to allow automatic commenting of folds without
4+
" need of selecting them first
5+
function vimide#comments#wrap(mode, target) range
6+
if a:mode == 'x'
7+
call NERDComment(a:mode, a:target)
8+
elseif foldlevel('.') == 0
9+
call NERDComment(a:mode, a:target)
10+
else
11+
let foldStart = foldclosed('.')
12+
let foldEnd = foldclosedend('.')
13+
exe foldStart.",".foldEnd."call NERDComment('".a:mode."', '".a:target."')"
14+
endif
15+
endfunction
16+

autoload/vimide/elixir.vim

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11

22
function vimide#elixir#boot()
3+
setlocal wildignore=*.beam
34
endfunction

0 commit comments

Comments
 (0)