Now `:PlugInstall!` and `:PlugUpdate!` forces to update submodules.
`:PlugInstall!` now also checks out to new specified branch, tag, or
commit.
Also added tests for changing branch, tag, or commit.
This commit extracts duplicate logic out of three installers.
Pros.
- Better maintainability
- Easier to add/extend the features
- Fixes a bug when 'commit' option is used, submodules are updated
before the designated commit is checked out
Cons.
- The whole process takes slightly longer due to lost parallelism after pull
- Especially, submodule updates are not parallelized
- However, this shouldn't matter much in practice as there are few
plugins that heavily rely on submodules
* Do not map during prepare when function can be async.
Delay to s:finish()
* Always create new buffer, due to mappings change.
* Don't show Pending updates when no appropriate plugs.
* No need for print brackets on python 2.
Previously, syntax highlighting was turned on unconditionally in the
buffers opened by commands such as `:PlugUpdate`. With this commit,
highlighting is not applied if the user has disabled syntax highlighting
by calling `syntax off` after `call plug#end()` in their `vimrc`.
- The output file is no longer executable but a source-able vim script
- PlugSnapshot FILENAME to prompt the user if the file already exists
- Add PlugSnapshot! FILENAME variant to force overwrite existing file
- Apply -complete=file option to PlugSnapshot command
Specify PIPE as stdin for subprocess.Pipe for gvim.exe.
Also fixes some ruby implementation.
* windows doesn't have pgrep.
* windows can't handle SIGTERM.
* windows can't handle /dev/null
* redraw always
* Instead of having a fixed sleep duration, start a thread
that monitors the subprocess.
* Started thread is joined, if process finishes thread returns
before timeout.
* Should increase speed and reduce overhead on CPU.
* Refactor Command class for easier reading.
* Some other minor clean ups & method renames.
* Change travis to use `env` and `matrix` to select builds.
* Use case instead of ifs to select behaviour.
* Buffer updates now managed by __main__ loop with buf_q.
* Synchronous neovim install temporarily provided by python installer.
* Known issues:
* No ctrl-c/interrupt support on nvim.
* Graphical bug: https://github.com/neovim/python-client/issues/103
Checking for the existence of `jobwait()` function seems like a more
robust way to check if the current Neovim process meets the requirement
of the parallel installer. This condition precludes a very old version
of Neovim built even before the initial Job API was implemented.
The older documentation of vim-plug suggested that the second string
parameter to Plug command was for both branches and tags. But we've
realized that tags and branches are not interchangeable (#174), and it
is now recommended that the user explicitly specify whether it's a
branch or a tag. The now-undocumented second parameter is currently for
branches, but I'd like to change it for tags, as the use of tags are
much more common.
* Main differences from ruby are inside Command class, notably it
poll/sleeps on the subprocess to check output & timeout.
* Another difference, interrupt is not instaneous due to checking var.
* Otherwise, I mainly just mirrored code into objects.
* Note that due to GVim freeze, disabling use on Windows
This makes it easier and faster to kill spawned git processes.
Repetitive `pgrep` command for collecting PIDs is no longer required.
Unfortunately, :pgroup option is not supported on Ruby 1.8 so we can't
remove the old implementation of `killall`.
In order to install Gist as a plugin, you have to modify its `dir` to be
the `plugin` subdirectory of the normal path of the plugin if it were an
ordinary pathogen-compatible Vim plugin.
Plug 'https://gist.github.com/952560a43601cd9898f1.git',
\ { 'dir': g:plug_home.'/xxx/plugin', 'rtp': '..' }
PlugClean command was incompatible with the above trick, so it was
updated not to remove the parent directory of `dir` of each plugin.
There's a fairly widespread convention which recommends indicating the default
confirmation option in uppercase. Granted, the number of applicable instances
in vim-plug is currently only two, but perhaps this'll save users with such an
inclination having to hit Enter just to sate their curiosities.
In the recent versions of NeoVim, jobstart() does not return
monotonically increasing numbers, this caused vim-plug to miss updating
the progress of a task when the job ID for the task is already
reassigned to a new task.
/cc @andreicristianpetcu
plug#begin expands its path argument and converts it to the absolute
path by default. However, it makes sense to use the unexpanded form in
case of PlugSnapshot as described in
https://github.com/junegunn/vim-plug/issues/97#issuecomment-57421483
For example, for the following cases,
- call plug#begin('~/.vim/plugged')
- call plug#begin('$HOME/.vim/plugged')
PlugSnapshot will use the exact arguments, `~/.vim/plugged` or
`$HOME/.vim/plugged`, instead of the absolute paths such as
`/home/jg/.vim/plugged`.
Related discussion can be found in #83. If the user choose not to use
syntax highlighting, he can disable it by putting `syntax off` after
`plug#end()`. But since `plug#end()` is called by `PlugInstall` or
`PlugUpdate`, it is reenabled on those commands which is not desirable.
This commit fixes the issue by changing `plug#end` to do `syntax enable`
only during Vim startup.
If installation process is terminated during `git submodule ...`, the
directory ends up in an inconsistent state. This commit ensures
that the directory is removed on failure.
Fixed Ruby 1.8.7 compatibility.