From 526106d592d7203c108e72c2d30eacb70dd7a9d7 Mon Sep 17 00:00:00 2001 From: zlg Date: Sat, 2 May 2020 11:19:30 -0700 Subject: Reintegrate personal library as autoload script Functions that I've built up over time were squirreled away in a separate file for a while, but they were subtly broken and some didn't work. All functions in the library should now work as expected, and are easy to integrate into other installations of Vim. --- functions.vim | 270 ---------------------------------------------------------- 1 file changed, 270 deletions(-) delete mode 100644 functions.vim (limited to 'functions.vim') diff --git a/functions.vim b/functions.vim deleted file mode 100644 index 5264701..0000000 --- a/functions.vim +++ /dev/null @@ -1,270 +0,0 @@ -" StripTrailingWhitespaces, by Drew Neil of vimcasts.org {{{1 -function! StripTrailingWhitespaces() - " 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 - -" SynStack, by Drew Neil of vimcasts.org {{{1 -function! SynStack() - if !exists("*synstack") - return - endif - echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")') -endfunction - -" CountCodeLines, by zlg {{{1 -function! CountCodeLines() - 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 - -" IsCommentLine, by zlg {{{1 -" Meant to be used with CountCodeLines() -function! s:IsCommentLine(line) - 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 - -" InsertDOW, by zlg {{{1 -function! InsertDOW() - " Let's backup a random register - let tmpx = @x - let @x = system("date +\"%a \" -d" . strftime("%Y") . "-" . substitute(expand(""), ":", "", "")) - 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 - -" BufDiff, by zlg {{{1 -" Function: BufDiff -" Author: zlg -" Date: 2018-10-12 -" License: GNU GPL, version 3 -" Description: Open a new tab page with two or three buffers and enter diff mode. -" Long Description: -" BufDiff accepts two or three buffer arguments and opens a new tab page to -" work with them in diff mode. This ensures that your existing window and -" buffer layout is preserved while providing an easy way to enter a diff -" session. The arguments can be any argument that can also be passed to -" the ":buffer" Ex-command, including partial filenames (if quoted). -function! BufDiff(buf1, buf2, ...) - let fname = substitute(expand(""), "^function ", "", "") - if a:0 > 1 - echohl ErrorMsg - echomsg l:fname . ": This function accepts a maximum of three arguments." - echohl None - return - endif - - " Check for a third buffer, which will default to zero if not present - let a:buf3 = get(a:, 1, 0) - - if !bufexists(a:buf1) || !bufexists(a:buf2) || (a:0 == 1 && !bufexists(a:buf3)) - echohl ErrorMsg - echomsg l:fname . ": One or more buffer number(s) not found!" - echohl None - return - else - tabnew - exe ":buffer " . a:buf1 - diffthis - vsplit - exe ":buffer " . a:buf2 - diffthis - if a:buf3 - vsplit - exe ":buffer " . a:buf3 - diffthis - endif - return - endif -endfunction - -" SwapKeys, by zlg {{{1 -" This function isn't that fancy; it just flips a variable and calls the -" mapping function. -function! SwapKeys() - if (exists("g:use_dvorak") && (g:use_dvorak == 1 || g:use_dvorak == 0)) - let g:use_dvorak = (!g:use_dvorak) - call SetKeyMap() - else - echohl ErrorMsg - echomsg "g:use_dvorak is either unset, or an invalid value. Set to 0 or 1. - echohl None - return - endif -endfunction - -" SetKeyMap, by zlg {{{1 -" Function: SetKeyMap -" Author: zlg -" Date: 2018-11-15 -" License: GNU GPL, version 3 -" Long Description: -" SetKeyMap allows the user to set their keybindings according to the value of -" a global variable. In this case, it's g:use_dvorak, to swap between Dvorak -" and QWERTY layouts. It can be extended to use any number of key mappings -" that you need. -function! SetKeyMap() - if 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. - noremap gj gt - noremap gJ gT - - " Window movement, equally important - noremap d h - noremap h j - noremap t k - noremap n l - - nnoremap - nnoremap - nnoremap - nnoremap - - nnoremap h - nnoremap j - nnoremap k - nnoremap l - - " Account for tag jumping - nnoremap - - " 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 - echomsg "Bindings set to Dvorak" - else - " set qwerty keys; basically just resetting things - noremap h h - noremap j j - noremap k k - noremap l l - noremap H H - noremap J J - noremap K K - noremap L L - - noremap gj gj - noremap gh gh - - noremap gt gt - noremap gT gT - - noremap h h - noremap j j - noremap h k - noremap l l - - nnoremap - nnoremap - nnoremap - nnoremap - - nnoremap h - nnoremap j - nnoremap k - nnoremap l - - nnoremap - - noremap d d - noremap D D - - noremap t t - noremap T T - - noremap n n - noremap N N - - noremap - 0 - noremap _ $ - - noremap zj zj - noremap zk zk - echomsg "Bindings set to QWERTY" - endif -endfunction - -" Custom folding display function -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 - -" vim: foldmethod=marker -- cgit v1.2.3-54-g00ecf