diff options
author | Peter Odding <peter@peterodding.com> | 2013-04-28 15:59:06 +0200 |
---|---|---|
committer | Peter Odding <peter@peterodding.com> | 2013-04-28 15:59:15 +0200 |
commit | 67a0a832ca3100d49ba3d353c6323f3db4edc4a4 (patch) | |
tree | ba5cb9091cc238ccf6037746db6ab05a1b363b7e | |
parent | 01971973a35ae70dcd19373ad83518e490cd9013 (diff) | |
parent | a7ed49ed589cfe5f84bfeda317d03a874002e1a9 (diff) | |
download | vim-easytags-67a0a832ca3100d49ba3d353c6323f3db4edc4a4.tar.gz |
Updated miscellaneous scripts
-rw-r--r-- | autoload/xolox/easytags.vim | 4 | ||||
-rw-r--r-- | autoload/xolox/misc/README.md | 49 | ||||
-rw-r--r-- | autoload/xolox/misc/path.vim | 56 |
3 files changed, 28 insertions, 81 deletions
diff --git a/autoload/xolox/easytags.vim b/autoload/xolox/easytags.vim index 458e270..1c6c088 100644 --- a/autoload/xolox/easytags.vim +++ b/autoload/xolox/easytags.vim @@ -1,9 +1,9 @@ " Vim script " Author: Peter Odding <peter@peterodding.com> -" Last Change: April 21, 2013 +" Last Change: April 28, 2013 " URL: http://peterodding.com/code/vim/easytags/ -let g:xolox#easytags#version = '3.1.5' +let g:xolox#easytags#version = '3.1.6' call xolox#misc#compat#check('easytags', 1) diff --git a/autoload/xolox/misc/README.md b/autoload/xolox/misc/README.md deleted file mode 100644 index f375fe6..0000000 --- a/autoload/xolox/misc/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# Miscellaneous auto-load Vim scripts - -The git repository at [github.com/xolox/vim-misc] [repository] contains Vim scripts that are used by most of the [Vim plug-ins I've written] [plugins] yet don't really belong with any single one. I include this repository as a subdirectory of my plug-in repositories using the following commands: - - $ git remote add -f vim-misc https://github.com/xolox/vim-misc.git - $ git merge -s ours --no-commit vim-misc/master - $ git read-tree --prefix=autoload/xolox/misc/ -u vim-misc/master - $ git commit -m "Merge vim-misc repository as subdirectory" - -The above trick is called the [subtree merge strategy] [merge-strategy]. To update a plug-in repository to the latest version of the miscellaneous auto-load scripts I execute the following command: - - $ git pull -s subtree vim-misc master - -## Why make things so complex? - -I came up with this solution after multiple years of back and forth between Vim Online users, the GitHub crowd and my own sanity: - -1. When I started publishing my first Vim plug-ins I would prepare ZIP archives for Vim Online using makefiles. The makefiles would make sure the miscellaneous scripts were included in the uploaded distributions. This had two disadvantages: It lost git history and the repositories on GitHub were not usable out of the box, so [I got complaints from GitHub (Pathogen) users] [github-complaints]. - -2. My second attempt to solve the problem used git submodules which seemed like the ideal solution until I actually started doing it. Submodules are not initialized during a normal `git clone`, you need to use `git clone --recursive` instead but Vim plug-in managers like [Pathogen] [pathogen] and [Vundle] [vundle] don't do this (at least [they didn't when I tried] [vundle-discussion]) so people would end up with broken checkouts. - -3. After finding out that git submodules were not going to solve my problems I searched for other inclusion strategies supported by git. After a while I came upon the [subtree merge strategy] [merge-strategy] which I have been using for more than two years now. - -## Compatibility issues - -Regardless of the inclusion strategies discussed above, my current scheme has a flaw: If more than one of my plug-ins are installed in a Vim profile using [Pathogen] [pathogen] or [Vundle] [vundle], the miscellaneous autoload scripts will all be loaded from the subdirectory of one single plug-in. - -This means that when I break compatibility in the miscellaneous scripts, I have to make sure to merge the changes into all of my plug-ins. Even then, if a user has more than one of my plug-ins installed but updates only one of them, the other plug-ins (that are not yet up to date) can break (because of the backwards incompatible change). - -The `xolox#misc#compat#check()` function makes sure that incompatibilities are detected early so that the user knows which plug-in to update if incompatibilities arise. - -## Contact - -If you have questions, bug reports, suggestions, etc. the author can be contacted at <peter@peterodding.com>. The latest version is available at <http://peterodding.com/code/vim/misc> and <http://github.com/xolox/vim-misc>. - -## License - -This software is licensed under the [MIT license] [mit]. -© 2013 Peter Odding <<peter@peterodding.com>>. - - -[github-complaints]: https://github.com/xolox/vim-easytags/issues/1 -[merge-strategy]: http://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html -[mit]: http://en.wikipedia.org/wiki/MIT_License -[pathogen]: http://www.vim.org/scripts/script.php?script_id=2332 -[plugins]: http://peterodding.com/code/vim/ -[repository]: https://github.com/xolox/vim-misc -[vundle-discussion]: https://github.com/gmarik/vundle/pull/41 -[vundle]: https://github.com/gmarik/vundle diff --git a/autoload/xolox/misc/path.vim b/autoload/xolox/misc/path.vim index 6f8fe44..67ef8d8 100644 --- a/autoload/xolox/misc/path.vim +++ b/autoload/xolox/misc/path.vim @@ -1,12 +1,13 @@ " Vim auto-load script " Author: Peter Odding <peter@peterodding.com> -" Last Change: April 18, 2013 +" Last Change: April 22, 2013 " URL: http://peterodding.com/code/vim/misc/ let s:windows_compatible = has('win32') || has('win64') let s:mac_os_x_compatible = has('macunix') -function! xolox#misc#path#which(...) +function! xolox#misc#path#which(...) " {{{1 + " Scan the executable search path for programs. let extensions = s:windows_compatible ? split($PATHEXT, ';') : [''] let matches = [] let checked = {} @@ -29,9 +30,8 @@ function! xolox#misc#path#which(...) return matches endfunction -" Split a pathname into a list of path components. - -function! xolox#misc#path#split(path) +function! xolox#misc#path#split(path) " {{{1 + " Split a pathname into a list of path components. if type(a:path) == type('') if s:windows_compatible return split(a:path, '[\/]\+') @@ -44,9 +44,8 @@ function! xolox#misc#path#split(path) return [] endfunction -" Join a list of path components into a pathname. - -function! xolox#misc#path#join(parts) +function! xolox#misc#path#join(parts) " {{{1 + " Join a list of path components into a pathname. if type(a:parts) == type([]) if !s:windows_compatible && a:parts[0] == '/' return join(a:parts, '/')[1 : -1] @@ -57,9 +56,10 @@ function! xolox#misc#path#join(parts) return '' endfunction -" Canonicalize and resolve a pathname. - -function! xolox#misc#path#absolute(path) +function! xolox#misc#path#absolute(path) " {{{1 + " Canonicalize and resolve a pathname, regardless of whether it exists. This + " is intended to support string comparison to determine whether two pathnames + " point to the same directory or file. if type(a:path) == type('') let path = fnamemodify(a:path, ':p') " resolve() doesn't work when there's a trailing path separator. @@ -77,9 +77,8 @@ function! xolox#misc#path#absolute(path) return '' endfunction -" Make an absolute pathname relative. - -function! xolox#misc#path#relative(path, base) +function! xolox#misc#path#relative(path, base) " {{{1 + " Make an absolute pathname relative. let path = xolox#misc#path#split(a:path) let base = xolox#misc#path#split(a:base) while path != [] && base != [] && path[0] == base[0] @@ -90,9 +89,9 @@ function! xolox#misc#path#relative(path, base) return xolox#misc#path#join(distance + path) endfunction -" Join a directory and filename into a single pathname. -function! xolox#misc#path#merge(parent, child, ...) +function! xolox#misc#path#merge(parent, child, ...) " {{{1 + " Join a directory and filename into a single pathname. " TODO Use isabs()! if type(a:parent) == type('') && type(a:child) == type('') if s:windows_compatible @@ -108,9 +107,8 @@ function! xolox#misc#path#merge(parent, child, ...) return '' endfunction -" Find the common prefix of path components in a list of pathnames. - -function! xolox#misc#path#commonprefix(paths) +function! xolox#misc#path#commonprefix(paths) " {{{1 + " Find the common prefix of path components in a list of pathnames. let common = xolox#misc#path#split(a:paths[0]) for path in a:paths let index = 0 @@ -127,9 +125,8 @@ function! xolox#misc#path#commonprefix(paths) return xolox#misc#path#join(common) endfunction -" Encode a pathname so it can be used as a filename. - -function! xolox#misc#path#encode(path) +function! xolox#misc#path#encode(path) " {{{1 + " Encode a pathname so it can be used as a filename. if s:windows_compatible let mask = '[*|\\/:"<>?%]' elseif s:mac_os_x_compatible @@ -140,12 +137,13 @@ function! xolox#misc#path#encode(path) return substitute(a:path, mask, '\=printf("%%%x", char2nr(submatch(0)))', 'g') endfunction -" Decode a pathname previously encoded with xolox#misc#path#encode(). -function! xolox#misc#path#decode(encoded_path) +function! xolox#misc#path#decode(encoded_path) " {{{1 + " Decode a pathname previously encoded with xolox#misc#path#encode(). return substitute(a:encoded_path, '%\(\x\x\?\)', '\=nr2char("0x" . submatch(1))', 'g') endfunction +" xolox#misc#path#equals(a, b) {{{1 " Check whether two pathnames point to the same file. if s:windows_compatible @@ -158,9 +156,8 @@ else endfunction endif -" Check whether a path is relative. - -function! xolox#misc#path#is_relative(path) +function! xolox#misc#path#is_relative(path) " {{{1 + " Check whether a path is relative. if a:path =~ '^\w\+://' return 0 elseif s:windows_compatible @@ -170,9 +167,8 @@ function! xolox#misc#path#is_relative(path) endif endfunction -" Create a temporary directory and return the path. - -function! xolox#misc#path#tempdir() +function! xolox#misc#path#tempdir() " {{{1 + " Create a temporary directory and return the path. if !exists('s:tempdir_counter') let s:tempdir_counter = 1 endif |