aboutsummaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
authorjdhao <jdhao@hotmail.com>2019-09-12 21:29:00 +0800
committerjdhao <jdhao@hotmail.com>2019-09-12 21:29:00 +0800
commit6428422cbd2c16a64981fd205395661f718c7a59 (patch)
tree63b918dbd4e015c3e8934ba4fe1a73c98c605932 /autoload
parentc0d82c312ce0df8866fa9f1bcdaf626fdfb3e709 (diff)
Simplify init.vim and move settings to autoload and after directory
Diffstat (limited to 'autoload')
-rw-r--r--autoload/utils.vim76
1 files changed, 76 insertions, 0 deletions
diff --git a/autoload/utils.vim b/autoload/utils.vim
new file mode 100644
index 0000000..d17dec4
--- /dev/null
+++ b/autoload/utils.vim
@@ -0,0 +1,76 @@
+" Remove trailing white space, see https://vi.stackexchange.com/a/456/15292
+function utils#StripTrailingWhitespaces() abort
+ let l:save = winsaveview()
+ " vint: next-line -ProhibitCommandRelyOnUser -ProhibitCommandWithUnintendedSideEffect
+ keeppatterns %s/\v\s+$//e
+ call winrestview(l:save)
+endfunction
+
+" Create command alias safely, see https://bit.ly/2ImFOpL.
+" The following two functions are taken from answer below on SO:
+" https://stackoverflow.com/a/10708687/6064933
+function! utils#Cabbrev(key, value) abort
+ execute printf('cabbrev <expr> %s (getcmdtype() == ":" && getcmdpos() <= %d) ? %s : %s',
+ \ a:key, 1+len(a:key), <SID>Single_quote(a:value), <SID>Single_quote(a:key))
+endfunction
+
+function! s:Single_quote(str) abort
+ return "'" . substitute(copy(a:str), "'", "''", 'g') . "'"
+endfunction
+
+" Check the syntax group in the current cursor position,
+" see http://tinyurl.com/yyzgswxz and http://tinyurl.com/y3lxozey
+function! utils#SynGroup() abort
+ if !exists('*synstack')
+ return
+ endif
+ echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
+endfunction
+
+" Check if a colorscheme exists in runtimepath.
+" The following two functions are inspired by https://stackoverflow.com/a/5703164/6064933.
+function! utils#HasColorscheme(name) abort
+ let l:pat = 'colors/' . a:name . '.vim'
+ return !empty(globpath(&runtimepath, l:pat))
+endfunction
+
+" Check if an Airline theme exists in runtimepath.
+function! utils#HasAirlinetheme(name) abort
+ let l:pat = 'autoload/airline/themes/' . a:name . '.vim'
+ return !empty(globpath(&runtimepath, l:pat))
+endfunction
+
+" Generate random integers in the range [Low, High] in pure vimscrpt,
+" adapted from https://stackoverflow.com/a/12739441/6064933
+function! utils#RandInt(Low, High) abort
+ let l:milisec = str2nr(matchstr(reltimestr(reltime()), '\v\.\zs\d+'), 10)
+ return l:milisec % (a:High - a:Low + 1) + a:Low
+endfunction
+
+" Custom fold expr, adapted from https://vi.stackexchange.com/a/9094/15292
+function! utils#VimFolds(lnum)
+ " get content of current line and the line below
+ let l:cur_line = getline(a:lnum)
+ let l:next_line = getline(a:lnum+1)
+
+ if l:cur_line =~# '^"{'
+ return '>' . (matchend(l:cur_line, '"{*') - 1)
+ else
+ if l:cur_line ==# '' && (matchend(l:next_line, '"{*') - 1) == 1
+ return 0
+ else
+ return '='
+ endif
+ endif
+endfunction
+
+" Custom fold text, adapted from https://vi.stackexchange.com/a/3818/15292
+" and https://vi.stackexchange.com/a/6608/15292
+function! utils#MyFoldText()
+ let line = getline(v:foldstart)
+ let folded_line_num = v:foldend - v:foldstart
+ let line_text = substitute(line, '^"{\+', '', 'g')
+ let fillcharcount = &textwidth - len(line_text) - len(folded_line_num) - 10
+ return '+'. repeat('-', 4) . line_text . repeat('.', fillcharcount) . ' (' . folded_line_num . ' L)'
+endfunction
+"}