86 Commits

Author SHA1 Message Date
Junegunn Choi
2f8f04cf79 Reset &rtp before 'do' to invalidate Neovim cache of loaded Lua modules 2024-02-24 23:07:55 +09:00
Junegunn Choi
3264b81e7a Update plug.vim 2024-02-24 23:07:55 +09:00
Jongwook Choi
64b9f9e3c3 Source lua files (if any) from rtp when loading a plugin
Neovim 0.5.0 allows lua files to be used in runtime files (such as
plugin, ftdetect, etc.) as well as vimscript files. Indeed, some
plugins have `plugin/*.lua` scripts only, but not `plugin/*.vim`;
such plugins cannot be sourced and work properly if it is lazy-loaded.
2024-02-24 23:07:55 +09:00
Junegunn Choi
6154433e22 README: Lambda expression as post-update hook 2024-02-23 01:14:44 +09:00
Junegunn Choi
eee20c7e79 Update README: warp.dev 2024-02-15 14:29:51 +09:00
Junegunn Choi
ade078e362 Update README: warp.dev 2024-02-13 08:45:04 +09:00
Junegunn Choi
6dd068e8d8 Tidy up 2024-02-03 20:05:06 +09:00
Junegunn Choi
e07c18608f Add Lua configuration example
Close #1258
2024-02-03 20:02:13 +09:00
wsdjeg
ca0ae0a8b1 Update builde status icon (#1238) 2023-04-01 23:59:21 +09:00
Alexis Corporal
034e844590 README: Change scrooloose/nerdtree to preservim/nerdtree (#1226)
Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
2023-01-19 11:35:13 +09:00
Junegunn Choi
ddce935b16 Revert "Add Sponsor Labels action"
This reverts commit e531dbec2a.
2022-09-13 09:43:33 +09:00
Junegunn Choi
e531dbec2a Add Sponsor Labels action 2022-09-10 11:28:27 +09:00
Junegunn Choi
b6739f358b Update ISSUE_TEMPLATE: Require plug block contents 2022-09-06 11:06:26 +09:00
Eduardo Leggiero
f308ef394e Update username of NERDTree plugin (#1208) 2022-09-05 09:34:39 +09:00
Stefan Muenzel
d94d234548 Add .gitignore (#1204) 2022-08-17 20:25:08 +09:00
Junegunn Choi
d6cb65753f Explicitly address the side-effects of plug#end() in the example
Close #1182
2022-08-01 09:17:35 +09:00
Junegunn Choi
87a160a1c3 Create FUNDING.yml 2022-07-30 19:54:42 +09:00
Junegunn Choi
8fdabfba0b PlugDiff: Press enter on the name of a plugin to see the full diff
Close #1174
2022-05-03 23:10:00 +09:00
Karl Yngve Lervåg
be55ec46b5 Check the actual value g:did_load_filetypes (#1176)
This resolves the issue described in #1175.
2022-04-21 22:54:02 +09:00
Junegunn Choi
93ab590978 Include plugins with 'commit' values in PlugSnapshot output
Fix #1167
2022-04-04 11:52:45 +09:00
Junegunn Choi
e300178a0e Change the default plugin directory for Neovim
And suggest users to call plug#begin() without an argument to avoid
confusion.
2022-01-03 23:05:08 +09:00
Shawn Hatori
f085751ca1 README: Clarify recommended plugins directory for Windows Vim (#1151) 2022-01-03 22:47:53 +09:00
Jaehwang Jerry Jung
68488fd7a3 Fix unexpected cursor movement on on-demand imap loading (#1147)
`i_CTRL-O` may change the cursor position in an unexpected way.
For example, when `autoindent` is set, the user will expect that
`i  asdf<CR><C-O>` will place the cursor right below `a`.
However, `<C-O>` moves the cursor to the first column of line 2.

Expected:
```
  asdf
  █
```
Actual:
```
  asdf
█
```

Therefore, it's desirable to use `i_CTRL-\_CTRL-O`, the variant of
`i_CTRL-O` that does not move the cursor.
2021-12-06 14:26:19 +09:00
Junegunn Choi
93a115718f Migrate to GitHub Actions
Close #1128

TODO:
- Neovim stale/unstable
  - https://github.com/junegunn/vim-plug/runs/4422576984?check_suite_focus=true#step:3:238
- Vim 7.4
  - Ruby parallel installer
  - Python parallel installer
2021-12-05 23:42:23 +09:00
Gibson Fahnestock
c9971346bb Set --origin=origin for git clone commands (#1117)
Otherwise if the user has set a `git config clone.defaultRemoteName
foo`, then vim-plug will fail to detect the latest upstream changes as
the remote will be incorrect, and will repeatedly state that the plugin
repo needs to be cleaned.
2021-08-31 17:14:37 +09:00
Matúš Ferech
66e038d443 Add --create-dirs option to flatpak installation instrictions (#1126) 2021-08-29 17:20:58 -04:00
Gerald
fc2813ef44 Recognize pwsh(.exe) as PowerShell (#1090)
Fix #1065
2021-04-30 16:29:04 +09:00
Rosen Stoyanov
cffcfe150b Add GV.vim-style q mapping (#827)
* Add GV.vim-style q mapping

* Fix test cases

Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
2021-02-08 16:23:21 +09:00
mattn
8b45742540 Disable credential.helper for git fetch (#1046) 2020-12-14 14:30:44 +09:00
Dylan
5430b6213a XDG_DATA_HOME respecting powershell script (#1042)
This version supports Powershell 5.1 (shipped in the latest install of Windows 10)
2020-12-03 22:46:45 +09:00
Junegunn Choi
2f4e28161e Set empty credential.helper only when git 2.0 or above is available
Fix #1031
2020-11-03 22:55:17 +09:00
Subhaditya Nath
ab940f624a Fix syntax matches (#1028)
Previously, the highlight of the `------------` line below the `Last Update:`
changed from `plugH2` on the whole line to `plugDash` on the first `-`
when the cursor moved over it and went below it. This commit updates the
`syn match` commands a bit to correct that issue.

Close #1027
2020-10-23 00:05:18 +09:00
mattn
c44422460e Disable credential-helper (#1026) 2020-10-20 20:48:58 +09:00
Junegunn Choi
d16273e072 Code cleanup 2020-09-08 22:39:56 +09:00
mattn
b17f477585 Reduce the number of git processes for faster operation (#937)
* Make git operation faster

When using many plugins, vim-plug may spawn many git processes for them.

* get revision
* get branch
* get remote.origin.url

This is too heavy. especially on Windows. This change get revision, branch,
remote origin url directly from .git directory.

This idea is borrowed from @k-takata's commit for minpac.

Executing external programs is slow especially on Windows.
Read the information directly from .git directory.

* Copied from devel branch of minpac

* Avoid errors

* Show errors

* Use empty()

* Use empty string instead of v:null

* Check spec.branch is empty

* Use branch

* Fix branch and revision

* Remove l: and use s:trim

* Fix and simplify s:git_get_remote_origin_url

* Do not cut off commit hash for correctness

Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
2020-09-08 22:13:21 +09:00
Junegunn Choi
4a3e85e878 Test Neovim on Bionic
https://github.com/neovim/neovim/pull/12802
2020-09-08 17:27:20 +09:00
Junegunn Choi
a9bf5bd722 "non-master branch" -> "non-default branch" 2020-08-30 02:05:50 +09:00
Junegunn Choi
e8892a9bef Update test cases 2020-08-30 02:05:50 +09:00
Junegunn Choi
49be3a8ca9 Use branch name of origin if not specified 2020-08-30 02:05:50 +09:00
Junegunn Choi
95ef5e8d5f PlugDiff should be able to find pending updates
# We need the name of the default branch of origin
  git checkout some-tag-or-commit
  git log ..origin/master
2020-08-30 02:05:50 +09:00
Junegunn Choi
6fa6475fee User-specified branch name should not be empty 2020-08-30 02:05:50 +09:00
Yasuhiro Matsumoto
588467903b Use branch 2020-08-30 02:05:50 +09:00
Yasuhiro Matsumoto
5706f70f8f Add missing function 2020-08-30 02:05:50 +09:00
Yasuhiro Matsumoto
4a3c5e7ac2 Support non-master default branch 2020-08-30 02:05:50 +09:00
David Barnett
d53d5a976f Add |:Plug| tag in help docs (#951) 2020-08-29 10:43:05 +09:00
timm bangma
13ea184015 Update README.md (Powershell Install One-Liner) (#1003)
A tidy one liner for the powershell install command. 
Much like the unix one 😄
2020-08-08 18:25:59 -04:00
Raphael Martin Schindler
457bebcd30 Fix typos (#1001)
Add missing 'the' in some phrases and sentences.
Use "Easy", not "Easier", because there are no comparisons in the same sentence or phrase.
2020-08-02 11:52:56 -04:00
Jan Edmund Lazo
b2133cf2ec Support Windows shell without extension (#997)
Close https://github.com/junegunn/vim-plug/issues/995

Vim supports omitting file extensions for its option.
I omitted the file extension in Neovim's documentation for powershell.
2020-07-20 07:59:29 -04:00
Jan Edmund Lazo
c319036396 Fix #961 tests for Vim 7.4 (#990)
Use build stages to group related jobs (Vim, Neovim, Vim 7.4).
Use "silent" to avoid hit-enter prompt when redirecting output.
Always run async and sync tests to debug runtime errors. 
Vim 7.4.0052 (Ubuntu Trusty) does not allow dynamic keys in inline dictionary.

https://docs.travis-ci.com/user/build-stages/
2020-07-06 01:07:42 -04:00
Wolf Honore
3aa3b5a4e8 Report when PlugClean fails to remove a directory (#985) 2020-06-25 20:56:47 +09:00
Junegunn Choi
01aab60ade Fix PowerShell instruction for Neovim
Close #976
2020-06-08 23:48:55 +09:00
Jan Edmund Lazo
6583b99032 :Plug throws error for invalid option (#961)
":Plug" performs a quick type check for most options so that the user can check which plugin has invalid configuration on startup. This does not prevent errors, resulting from modiying "g:plugs" after running "plug#end()". Plugin repo is added to the error message for convenience. Most users should expect no noticeable difference in startup time.

Close: #930
Related: #936
2020-06-03 07:34:44 -04:00
Gianluca Recchia
71c41fccf5 Comply with the XDG protocol in the README (#966) 2020-05-06 19:57:50 +09:00
Stefano
8846bc6af1 Add Flatpak installation instructions to README.md (#846)
Tested with https://flathub.org/apps/details/io.neovim.nvim
2020-05-05 21:54:46 -04:00
Harshad Srinivasan
0862a76fdd Updated readme (#967)
Co-authored-by: Harshad Srinivasan <harshad.srinivasan@lmi3d.com>
2020-05-05 21:28:53 -04:00
Junegunn Choi
54d837fa54 Load plugin before running funcref hook
Fix #964
Fix https://github.com/junegunn/fzf.vim/issues/1008
2020-05-03 16:59:22 +09:00
Jan Edmund Lazo
e718868e85 Use list type for command in s:spawn() (#959)
This allows Neovim to bypass the shell and run git directly.
Vim still needs the shell because of how commands are collapsed on Windows and because setting the job's working directory via "cwd" does not work.

Refactored s:clone_opt to a list to make this possible.
2020-04-11 10:49:47 -04:00
Jan Edmund Lazo
668bc0fd2a Support list type command for s:system to reduce batchfiles on Windows (#956)
* s:system supports list type for command

Objective is to reduce batchfiles on Windows.
List type gives more flexibility on s:system()
on how to pass the shell command to the builtin system().
If system() supports list type for command
and there is no working directory, run it directly on system().
Targets Neovim only.
Else, convert the list to an escaped command
so that the user's shell can execute it.
Neovim's system() does not support working directory system()
so consider refactoring s:system to use a synchronous job.

* Do not escape simple shell arguments

Regexp taken from vim-fugitive s:shellesc().

* Set shellredir on Windows

Prep to use list type for command  passed to s:system() within s:spawn()

* Internalize shellredir for s:spawn

s:spawn needs to redirect stderr to stdout for jobs callbacks
but s:system (for old Vim versions) sets shellredir if needed.

* Leverage job api for cwd and stderr

Vim/Neovim support stderr redirection and support error callbacks.
Vim 8 and Neovim can set a job's working directory via 'cwd' key
but it cannot be used as is on Vim because CI fails for the Vim release in Ubuntu Bionic and the latest Vim release.
2020-04-10 15:40:28 -04:00
Henré Botha
c3b6b7c297 Clarify error message (#931)
The existing error message printed when plug#end() is called without
calling plug#begin() doesn't make the dependence on plug#begin()
obvious; I had to go digging in the vim-plug code to discover what I'd
done wrong. This attempts to clarify the error a bit, to make it more
obvious to a user.
2020-01-27 22:48:16 +09:00
Jan Edmund Lazo
2f5f74e5e6 Validate last buffer line of g:plug_window (#927)
Close #926

This fix shouldn't be necessary
because vim-plug's buffer should always have 4 lines
but a buffer can be modified in some cases
before nvim 0.4.0 and vim v8.1.1360.
2020-01-05 19:59:59 -05:00
Jan Edmund Lazo
b2aa5724c0 Use iconv() only if +iconv is enabled. (#921)
TODO: Avoid iconv() for commands using ascii only.
2019-12-27 22:35:49 -05:00
Jan Edmund Lazo
359ce90b9b Encode batchfile in current codepage. (#913)
Changing chcp breaks cmd.exe if switching from multi-byte to 65001.
cmd.exe depends on codepage to parse batchfile
so batchfile cannot have unicode characters.
Target powershell if unicode support is required.

User should fix their terminal font to display unicode characters.
Terminal programs can only use Wide String APIs.
For Vim, this requires +multi_byte feature and `set encoding=utf-8`
in the user's vimrc.
Neovim always defaults to `set encoding=utf-8`.

https://dev.to/mattn/please-stop-hack-chcp-65001-27db
2019-12-11 08:28:49 -05:00
Jan Edmund Lazo
e6ed2e5658 Do not show git signatures in diff window (#918)
git v2.10.0 adds "log.showSignature" config
so that "git log --show-signature" runs by default.
Changing the commit format via "--pretty" does not prevent the signature
from appearing.
Only "--no-show-signature" prevents this.

Close #728
2019-12-09 23:26:56 -05:00
Jan Edmund Lazo
897ce5e2fa Set/unset shellslash on jobstart (#917) 2019-12-07 01:05:57 -05:00
Jan Edmund Lazo
d2f8ca2dbc Detect shellslash on Windows (#916)
Warn user if shellslash and shell are incompatible.

Set/unset shellslash for file functions on Windows. Based on 16fc6862a8/plugin/fzf.vim (L30-L107)

Support shellescape for git-bash
Windows user may not set shellslash but wish to use git-bash.
This requires custom shellescape for sh,bash shells
because builtin shellescape() depends on shellslash.
Tested on Vim
2019-12-05 19:34:41 -05:00
Jan Edmund Lazo
93b702512d Fix shellescaping for git refs and batchfile on Windows (#909)
It was using s:esc() which escapes spaces with a backslash.
This does not work on Windows.

&shell could be escaped on because of spaces.
See patch-8.0.1455 and related 8.1.x patches that address this
for $SHELL on Unix and git-bash on Windows.

Related #852, #908 
Close #890
2019-12-01 21:01:17 -05:00
Jan Edmund Lazo
68fef9c2fd Delete batchfile only if it exists (#901)
Close #900
2019-11-03 21:10:37 -05:00
Daniel Hahler
eee50c55bf Use s:path with s:rtp always (#694)
Having a trailing slash with &rtp entries is problematic when removing
them later: if loading on demand is used, s:reorg_rtp might fail to
remove the previous runtime paths.

Test case has been using maktaba (which triggers unsetting s:middle in
s:reorg_rtp), but because of the trailing slashes being used, the
previous rtp entries were not removed.
2019-10-20 21:52:29 -04:00
Jan Edmund Lazo
96046c01c3 Detect WSL (Neovim only) (#887)
`has('wsl')` works since Neovim v0.3.0 (5d2dd2ebe2)

Fix: https://github.com/junegunn/vim-plug/issues/821
2019-10-14 13:38:26 -04:00
Jan Edmund Lazo
fcfd5b7e1f Use chcp only if sed is in PATH (#891)
chcp parsing is fragile because of the system locale. There's no convenient way to parse out the codepage value without regex just by relying on cmd.exe builtins and default binaries in PATH.

Vim can be used to parse chcp output but it requires an additional `system` per `s:system` and `chcp` can change within the same console so caching the value won't work on the terminal.

Powershell supports regex but it has a long startup even with `-NoProfile` so running it when `&shell` is not powershell slows down `:PlugInstall` more.
2019-10-14 07:55:41 -04:00
Jan Edmund Lazo
849b76be90 Fix chcp parsing for the current codepage (#888)
Relying on delimiters or token positions is fragile.
Last value of 'chcp' output is always a number.
2019-10-03 21:19:11 -04:00
Roman Frołow
ff97806e50 Add path for Neovim on Windows (#789)
Neovim provides `stdpath` to abstract the directory paths that it uses based on the OS. It respects `XDG` specification on Linux and uses `%LOCALAPPDATA%` on Windows. 

1. Use `stdpath('data') . '/plugged'` for plugin directory.
2. Use `stdpath('config')` for user-config directory. This is `~/.config/nvim/` on Linux and `%LOCALAPPDATA%\nvim\` on Windows.
2019-09-28 20:30:50 -04:00
gh4w
68b31a4a66 output of chcp was not parsed correctly (#886)
* output of chcp was not parsed correctly

On Windows, when wrapping a batch command with the function s:wrap_cmds(),
when calling 'chcp' to get the current code page, the code assumed that
the output was in the format "active code page: XXX" (where XXX is the
code page), whereas the actual output is localized (for instance, in
French, the output would be: "page de code active: XXX").
The parsing of the output relied on that, and this failed for a
message different from "active code page" (i.e., English).

This patch changes the parsing to split the output of chcp on the colon
instead of spaces. Assuming that the output is always in the format
"<localized message>: XXX", regardless of the locale, hopefully, this is
a bit more robust.
2019-09-28 20:10:13 -04:00
Junegunn Choi
46f843aafe Add collaborators section 2019-09-03 10:52:29 +09:00
Jan Edmund Lazo
ebd534c88b Travis: use default image for osx (#871)
Fix https://travis-ci.org/junegunn/vim-plug/jobs/573145961#L211-L217
2019-08-17 16:51:07 -04:00
Jan Edmund Lazo
3b29e1e6e2 Travis: add macOS 10.14 (#870) 2019-08-18 00:44:24 +09:00
Jan Edmund Lazo
307b0f244d travis: add ubuntu bionic,xenial (#867)
Travis defaults to it since this year.
Ubuntu trusty reached EOL since April 2019.
Ubuntu bionic provides Vim 8.

Simplify OS install with Travis' apt addon
so that only Vim nightly will be compiled from source.

Ubuntu 14.04.6 provides ruby v.1.9.3, not 1.8.x or older.
Use it to test the ruby provider for backward compatibility.

Signed-off-by: Jan Edmund Lazo <jan.lazo@mail.utoronto.ca>
2019-08-17 12:46:08 +09:00
Jan Edmund Lazo
8a44109329 Fix Windows support for Unix shells and powershell (#860)
Excerpt from `:h shell-powershell`:

  To use powershell (on Windows):

    set shell=powershell shellquote=( shellpipe=\| shellxquote=
    set shellcmdflag=-NoLogo\ -NoProfile\ -ExecutionPolicy\ RemoteSigned\ -Command
    set shellredir=\|\ Out-File\ -Encoding\ UTF8
2019-08-16 17:55:17 +09:00
Minsoo Kim
0b32d2d23e Update YCM path: Valloric -> ycm-core (#869) 2019-08-13 23:15:51 +09:00
Jan Edmund Lazo
226d6abeb2 Don't override shell on Windows (#856)
Assume that the user set the shell options correctly
before running vim-plug so that the user can use bash or powershell
as their shell.

Close #815
2019-07-16 09:06:27 +09:00
Harry Moreno
fddbcb8f1a Change PlugClean description (#853)
Be more clear about uninstalling plugin directories.
2019-07-09 16:16:02 +09:00
Jan Edmund Lazo
f1ad2d864a Escape batchfile path on Windows (#850)
Close #832
2019-06-17 23:00:59 +02:00
Junegunn Choi
08e78d8a5e Avoid downward search when using finddir
Close #750
2019-05-29 18:29:11 +09:00
Junegunn Choi
518a3566c3 Escape arguments to git command during PlugUpgrade
Fix #832
2019-04-11 17:53:13 +09:00
Daniel Hahler
d1c19a6fa9 Travis: rename vim72 to vim74 (#723) 2019-02-22 11:14:16 +09:00
Nate Fischer
734d9a11b5 Use 'rtp' option to filter diff (#798)
Previously, `:PlugDiff` would show every new commit to a plugin's git
repo. This makes sense for the general case, but makes less sense when a
plugin lives in a subdirectory of the repo (and is configured with the
'rtp' option). This makes it difficult to determine which commits relate
to the plugin and which are unrelated.

This changes `:PlugDiff` to filter out any commits outside of the 'rtp'
folder.

Some consequences:

 * This does not change the `:PlugUpdate` UI. This means `:PlugUpdate`
   may pull down non-plugin commits, display that it has updated the
   plugin, and then `:PlugDiff` will show no updates (since such commits
   fall out of the 'rtp' path).
 * It also means there's no UI to revert non-plugin updates, as they
   don't show up in `:PlugDiff`.
2018-11-04 03:00:00 +09:00
12 changed files with 906 additions and 285 deletions

1
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1 @@
github: junegunn

View File

@@ -10,7 +10,12 @@ Explain the problem here ...
------------------------------
<!-- Put the contents of `:version` below -->
<!-- Paste your Plug block (from `call plug#begin()` to `call plug#end()`) -->
```
```
<!-- Paste the contents of `:version` below -->
```
```
@@ -24,7 +29,7 @@ Explain the problem here ...
- OS:
- [ ] All/Other
- [ ] Linux
- [ ] OS X
- [ ] macOS
- [ ] Windows
- Vim:
- [ ] Terminal Vim

52
.github/workflows/test.yml vendored Normal file
View File

@@ -0,0 +1,52 @@
---
name: Test vim-plug
on:
push:
branches: [master, devel]
pull_request:
branches: [master]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
vim:
- vim
# FIXME: (core dumped) https://github.com/junegunn/vim-plug/runs/4422576984?check_suite_focus=true#step:3:238
# - neovim-stable
# - neovim-unstable
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Install packages and test
env:
ENV: ${{ matrix.vim }}
run: |
export DEPS=~/deps
export PATH=~/deps/bin:$PATH
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
case "$ENV" in
vim)
sudo apt-get install vim
;;
neovim-*)
sudo add-apt-repository ppa:neovim-ppa/${ENV/neovim-/}
sudo apt-get update
sudo apt-get install neovim
mkdir -p $DEPS/bin
echo 'nvim "$@"' > $DEPS/bin/vim
chmod +x $DEPS/bin/vim
export VADER_OUTPUT_FILE=/dev/stderr
;;
esac
test/run !

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
doc/tags

View File

@@ -1,54 +1,63 @@
language: ruby
dist: trusty
sudo: false
language: minimal
env:
global:
- DEPS=$HOME/deps
- PATH=$DEPS/bin:$PATH
matrix:
jobs:
include:
- env: ENV=vim72
rvm: 1.8.7
- env: ENV=vim80-bionic
dist: bionic
stage: vim8
- env: ENV=vim-nightly
dist: trusty
stage: vim8
- env: ENV=neovim-stable
dist: bionic
addons: {apt: {packages: [neovim], sources: [{sourceline: 'ppa:neovim-ppa/stable'}]}}
stage: neovim
- env: ENV=neovim-nightly
dist: bionic
addons: {apt: {packages: [neovim], sources: [{sourceline: 'ppa:neovim-ppa/unstable'}]}}
stage: neovim
- env: ENV=vim74-trusty-python
dist: trusty
stage: vim74
- env: ENV=vim74-xenial-python3
dist: xenial
stage: vim74
- env: ENV=vim74-trusty-ruby
dist: trusty
addons: {apt: {packages: [vim-nox]}}
- env: ENV=python
rvm: 1.8.7
addons: { apt: { packages: [python2.7-dev] } }
- env: ENV=python3
rvm: 1.8.7
addons: { apt: { packages: [python3-dev] } }
- env: ENV=ruby18
rvm: 1.8.7
- env: ENV=ruby20
rvm: 2.0.0
- env: ENV=neovim
- env: ENV=vim8
stage: vim74
- env: ENV=vim74-xenial-ruby
dist: xenial
addons: {apt: {packages: [vim-nox]}}
stage: vim74
- env: ENV=osx-highsierra
os: osx
osx_image: xcode9.4
stage: vim8
install: |
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
if [ "$ENV" == "vim72" ]; then
C_OPTS="--prefix=$DEPS --with-features=huge --disable-gui "
case "$ENV" in
vim-*)
;;
neovim-*)
mkdir -p ${DEPS}/bin
ln -s /usr/bin/nvim ${DEPS}/bin/vim
export VADER_OUTPUT_FILE=/dev/stderr
return
;;
vim74-* | vim80-*)
mkdir -p ${DEPS}/bin
ln -s /usr/bin/vim.nox ${DEPS}/bin/vim
return
elif [ "$ENV" == "neovim" ]; then
# https://github.com/neovim/bot-ci#nightly-builds
eval "$(curl -Ss https://raw.githubusercontent.com/neovim/bot-ci/master/scripts/travis-setup.sh) nightly-x64"
mkdir -p ${DEPS}/bin
ln -s $(which nvim) ${DEPS}/bin/vim
export VADER_OUTPUT_FILE=/dev/stderr
;;
*)
return
fi
C_OPTS="--prefix=$DEPS --with-features=huge --disable-gui "
case "$ENV" in
python)
C_OPTS+=--enable-pythoninterp
;;
python3)
C_OPTS+=--enable-python3interp
;;
ruby*)
C_OPTS+=--enable-rubyinterp
;;
esac

167
README.md
View File

@@ -1,4 +1,22 @@
<img src="https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.png" height="75" alt="vim-plug">[![travis-ci](https://travis-ci.org/junegunn/vim-plug.svg?branch=master)](https://travis-ci.org/junegunn/vim-plug)
<div align="center">
<sup>Special thanks to:</sup>
<br>
<br>
<a href="https://warp.dev/?utm_source=github&utm_medium=referral&utm_campaign=vimplug_20240209">
<div>
<img src="https://raw.githubusercontent.com/junegunn/i/master/warp.png" width="300" alt="Warp">
</div>
<b>Warp is a modern, Rust-based terminal with AI built in so you and your team can build great software, faster.</b>
<div>
<sup>Visit warp.dev to learn more.</sup>
</div>
</a>
<br>
<hr>
</div>
<br>
<img src="https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.png" height="75" alt="vim-plug">[![build](https://img.shields.io/github/actions/workflow/status/junegunn/vim-plug/test.yml?branch=master)](https://github.com/junegunn/vim-plug/actions/workflows/test.yml?query=branch%3Amaster)
===
A minimalist Vim plugin manager.
@@ -7,8 +25,8 @@ A minimalist Vim plugin manager.
### Pros.
- Easier to setup: Single file. No boilerplate code required.
- Easier to use: Concise, intuitive syntax
- Easy to set up: Single file. No boilerplate code required.
- Easy to use: Concise, intuitive syntax
- [Super-fast][40/4] parallel installation/update
(with any of `+job`, `+python`, `+python3`, `+ruby`, or [Neovim][nv])
- Creates shallow clones to minimize disk space usage and download time
@@ -44,36 +62,31 @@ file as suggested [here][auto].
###### Windows (PowerShell)
```powershell
md ~\vimfiles\autoload
$uri = 'https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
(New-Object Net.WebClient).DownloadFile(
$uri,
$ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(
"~\vimfiles\autoload\plug.vim"
)
)
iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
ni $HOME/vimfiles/autoload/plug.vim -Force
```
#### Neovim
###### Unix
###### Unix, Linux
```sh
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
```
###### Linux (Flatpak)
```sh
curl -fLo ~/.var/app/io.neovim.nvim/data/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
```
###### Windows (PowerShell)
```powershell
md ~\AppData\Local\nvim\autoload
$uri = 'https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
(New-Object Net.WebClient).DownloadFile(
$uri,
$ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(
"~\AppData\Local\nvim\autoload\plug.vim"
)
)
iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
ni "$(@($env:XDG_DATA_HOME, $env:LOCALAPPDATA)[$null -eq $env:XDG_DATA_HOME])/nvim-data/site/autoload/plug.vim" -Force
```
### Getting Help
@@ -90,9 +103,9 @@ $uri = 'https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
### Usage
Add a vim-plug section to your `~/.vimrc` (or `~/.config/nvim/init.vim` for Neovim):
Add a vim-plug section to your `~/.vimrc` (or `stdpath('config') . '/init.vim'` for Neovim)
1. Begin the section with `call plug#begin()`
1. Begin the section with `call plug#begin([PLUGIN_DIR])`
1. List the plugins with `Plug` commands
1. `call plug#end()` to update `&runtimepath` and initialize plugin system
- Automatically executes `filetype plugin indent on` and `syntax enable`.
@@ -101,10 +114,14 @@ Add a vim-plug section to your `~/.vimrc` (or `~/.config/nvim/init.vim` for Neov
#### Example
```vim
" Specify a directory for plugins
" - For Neovim: ~/.local/share/nvim/plugged
call plug#begin()
" The default plugin directory will be as follows:
" - Vim (Linux/macOS): '~/.vim/plugged'
" - Vim (Windows): '~/vimfiles/plugged'
" - Neovim (Linux/macOS/Windows): stdpath('data') . '/plugged'
" You can specify a custom plugin directory by passing it as the argument
" - e.g. `call plug#begin('~/.vim/plugged')`
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')
" Make sure you use single quotes
@@ -118,10 +135,10 @@ Plug 'https://github.com/junegunn/vim-github-dashboard.git'
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
" On-demand loading
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
" Using a non-master branch
" Using a non-default branch
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
@@ -137,18 +154,69 @@ Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug '~/my-prototype-plugin'
" Initialize plugin system
" - Automatically executes `filetype plugin indent on` and `syntax enable`.
call plug#end()
" You can revert the settings after the call like so:
" filetype indent off " Disable file-type-specific indentation
" syntax off " Disable syntax highlighting
```
Reload .vimrc and `:PlugInstall` to install plugins.
#### Example (Lua configuration for Neovim)
In Neovim, you can write your configuration in a Lua script file named
`init.lua`. The following code is the Lua script equivalent to the VimScript
example above.
```lua
local vim = vim
local Plug = vim.fn['plug#']
vim.call('plug#begin')
-- Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
Plug('junegunn/vim-easy-align')
-- Any valid git URL is allowed
Plug('https://github.com/junegunn/vim-github-dashboard.git')
-- Multiple Plug commands can be written in a single line using ; separators
Plug('SirVer/ultisnips'); Plug('honza/vim-snippets')
-- On-demand loading
Plug('preservim/nerdtree', { ['on'] = 'NERDTreeToggle' })
Plug('tpope/vim-fireplace', { ['for'] = 'clojure' })
-- Using a non-default branch
Plug('rdnetto/YCM-Generator', { ['branch'] = 'stable' })
-- Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
Plug('fatih/vim-go', { ['tag'] = '*' })
-- Plugin options
Plug('nsf/gocode', { ['tag'] = 'v.20150303', ['rtp'] = 'vim' })
-- Plugin outside ~/.vim/plugged with post-update hook
Plug('junegunn/fzf', { ['dir'] = '~/.fzf', ['do'] = './install --all' })
-- Unmanaged plugin (manually installed and updated)
Plug('~/my-prototype-plugin')
vim.call('plug#end')
```
More examples can be found in:
* https://gitlab.com/sultanahamer/dotfiles/-/blob/master/nvim/lua/plugins.lua?ref_type=heads
### Commands
| Command | Description |
| ----------------------------------- | ------------------------------------------------------------------ |
| `PlugInstall [name ...] [#threads]` | Install plugins |
| `PlugUpdate [name ...] [#threads]` | Install or update plugins |
| `PlugClean[!]` | Remove unused directories (bang version will clean without prompt) |
| `PlugClean[!]` | Remove unlisted plugins (bang version will clean without prompt) |
| `PlugUpgrade` | Upgrade vim-plug itself |
| `PlugStatus` | Check the status of plugins |
| `PlugDiff` | Examine changes from the previous update and the pending changes |
@@ -204,7 +272,7 @@ call plug#end()
```vim
" NERD tree will be loaded on the first invocation of NERDTreeToggle command
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' }
" Multiple commands
Plug 'junegunn/vim-github-dashboard', { 'on': ['GHDashboard', 'GHActivity'] }
@@ -223,18 +291,18 @@ Plug 'junegunn/goyo.vim', { 'for': 'markdown' }
autocmd! User goyo.vim echom 'Goyo is now loaded!'
```
`for` option is generally not needed as most plugins for specific file types
usually don't have too much code in `plugin` directory. You might want to
The `for` option is generally not needed as most plugins for specific file types
usually don't have too much code in the `plugin` directory. You might want to
examine the output of `vim --startuptime` before applying the option.
### Post-update hooks
There are some plugins that require extra steps after installation or update.
In that case, use `do` option to describe the task to be performed.
In that case, use the `do` option to describe the task to be performed.
```vim
Plug 'Shougo/vimproc.vim', { 'do': 'make' }
Plug 'Valloric/YouCompleteMe', { 'do': './install.py' }
Plug 'ycm-core/YouCompleteMe', { 'do': './install.py' }
```
If the value starts with `:`, it will be recognized as a Vim command.
@@ -243,8 +311,14 @@ If the value starts with `:`, it will be recognized as a Vim command.
Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' }
```
To call a Vim function, you can pass a lambda expression like so:
```vim
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
```
If you need more control, you can pass a reference to a Vim function that
takes a single argument.
takes a dictionary argument.
```vim
function! BuildYCM(info)
@@ -257,17 +331,16 @@ function! BuildYCM(info)
endif
endfunction
Plug 'Valloric/YouCompleteMe', { 'do': function('BuildYCM') }
Plug 'ycm-core/YouCompleteMe', { 'do': function('BuildYCM') }
```
Both forms of post-update hook are executed inside the directory of the plugin
and only run when the repository has changed, but you can force it to run
unconditionally with the bang-versions of the commands: `PlugInstall!` and
`PlugUpdate!`.
A post-update hook is executed inside the directory of the plugin and only run
when the repository has changed, but you can force it to run unconditionally
with the bang-versions of the commands: `PlugInstall!` and `PlugUpdate!`.
Make sure to escape BARs and double-quotes when you write `do` option inline
as they are mistakenly recognized as command separator or the start of the
trailing comment.
Make sure to escape BARs and double-quotes when you write the `do` option
inline as they are mistakenly recognized as command separator or the start of
the trailing comment.
```vim
Plug 'junegunn/fzf', { 'do': 'yes \| ./install' }
@@ -291,7 +364,7 @@ The installer takes the following steps when installing/updating a plugin:
1. Update submodules
2. Execute post-update hooks
The commands with `!` suffix ensure that all steps are run unconditionally.
The commands with the `!` suffix ensure that all steps are run unconditionally.
### Articles
@@ -300,7 +373,11 @@ The commands with `!` suffix ensure that all steps are run unconditionally.
- ~~[Thoughts on Vim plugin dependency](http://junegunn.kr/2013/09/thoughts-on-vim-plugin-dependency)~~
- *Support for Plugfile has been removed since 0.5.0*
### Collaborators
- [Jan Edmund Lazo](https://github.com/janlazo) - Windows support
- [Jeremy Pallats](https://github.com/starcraftman) - Python installer
### License
MIT

View File

@@ -1,4 +1,4 @@
plug.txt plug Last change: November 27 2017
plug.txt plug Last change: February 23 2024
PLUG - TABLE OF CONTENTS *plug* *plug-toc*
==============================================================================
@@ -23,6 +23,7 @@ PLUG - TABLE OF CONTENTS *plug* *plug-to
Post-update hooks
PlugInstall! and PlugUpdate!
Articles
Collaborators
License
VIM-PLUG *vim-plug*
@@ -36,8 +37,8 @@ https://raw.githubusercontent.com/junegunn/i/master/vim-plug/installer.gif
< Pros. >_____________________________________________________________________~
*plug-pros*
- Easier to setup: Single file. No boilerplate code required.
- Easier to use: Concise, intuitive syntax
- Easy to set up: Single file. No boilerplate code required.
- Easy to use: Concise, intuitive syntax
- {Super-fast}{1} parallel installation/update (with any of `+job`, `+python`,
`+python3`, `+ruby`, or {Neovim}{2})
- Creates shallow clones to minimize disk space usage and download time
@@ -77,14 +78,8 @@ file as suggested {here}{5}.
>> Windows (PowerShell)~
>
md ~\vimfiles\autoload
$uri = 'https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
(New-Object Net.WebClient).DownloadFile(
$uri,
$ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(
"~\vimfiles\autoload\plug.vim"
)
)
iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
ni $HOME/vimfiles/autoload/plug.vim -Force
<
Neovim~
@@ -93,20 +88,14 @@ Neovim~
>> Unix~
>
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
<
>> Windows (PowerShell)~
>
md ~\AppData\Local\nvim\autoload
$uri = 'https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
(New-Object Net.WebClient).DownloadFile(
$uri,
$ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(
"~\AppData\Local\nvim\autoload\plug.vim"
)
)
iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |`
ni "$(@($env:XDG_DATA_HOME, $env:LOCALAPPDATA)[$null -eq $env:XDG_DATA_HOME])/nvim-data/site/autoload/plug.vim" -Force
<
< Getting Help >______________________________________________________________~
@@ -127,12 +116,12 @@ Neovim~
< Usage >_____________________________________________________________________~
*plug-usage*
Add a vim-plug section to your `~/.vimrc` (or `~/.config/nvim/init.vim` for
Neovim):
Add a vim-plug section to your `~/.vimrc` (or `stdpath('config').'/init.vim'` for
Neovim)
*plug#begin* *plug#end*
1. Begin the section with `callplug#begin()`
1. Begin the section with `callplug#begin([PLUGIN_DIR])`
2. List the plugins with `Plug` commands
3. `callplug#end()` to update 'runtimepath' and initialize plugin system
- Automatically executes `filetypepluginindenton` and `syntaxenable`.
@@ -143,10 +132,14 @@ Neovim):
Example~
*plug-example*
>
" Specify a directory for plugins
" - For Neovim: ~/.local/share/nvim/plugged
call plug#begin()
" The default plugin directory will be as follows:
" - Vim (Linux/macOS): '~/.vim/plugged'
" - Vim (Windows): '~/vimfiles/plugged'
" - Neovim (Linux/macOS/Windows): stdpath('data') . '/plugged'
" You can specify a custom plugin directory by passing it as the argument
" - e.g. `call plug#begin('~/.vim/plugged')`
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')
" Make sure you use single quotes
@@ -160,10 +153,10 @@ Example~
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
" On-demand loading
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
" Using a non-master branch
" Using a non-default branch
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
@@ -179,7 +172,11 @@ Example~
Plug '~/my-prototype-plugin'
" Initialize plugin system
" - Automatically executes `filetype plugin indent on` and `syntax enable`.
call plug#end()
" You can revert the settings after the call like so:
" filetype indent off " Disable file-type-specific indentation
" syntax off " Disable syntax highlighting
<
*:PlugInstall*
@@ -194,7 +191,7 @@ Reload .vimrc and `:PlugInstall` to install plugins.
------------------------------------+-------------------------------------------------------------------
`PlugInstall[name...][#threads]` | Install plugins
`PlugUpdate[name...][#threads]` | Install or update plugins
`PlugClean[!]` | Remove unused directories (bang version will clean without prompt)
`PlugClean[!]` | Remove unlisted plugins (bang version will clean without prompt)
`PlugUpgrade` | Upgrade vim-plug itself
`PlugStatus` | Check the status of plugins
`PlugDiff` | Examine changes from the previous update and the pending changes
@@ -204,6 +201,7 @@ Reload .vimrc and `:PlugInstall` to install plugins.
< Plug options >______________________________________________________________~
*plug-options*
*:Plug*
------------------------+-----------------------------------------------
Option | Description ~
@@ -266,7 +264,7 @@ Reload .vimrc and `:PlugInstall` to install plugins.
*plug-on-demand-loading-of-plugins*
>
" NERD tree will be loaded on the first invocation of NERDTreeToggle command
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' }
" Multiple commands
Plug 'junegunn/vim-github-dashboard', { 'on': ['GHDashboard', 'GHActivity'] }
@@ -284,28 +282,30 @@ Reload .vimrc and `:PlugInstall` to install plugins.
Plug 'junegunn/goyo.vim', { 'for': 'markdown' }
autocmd! User goyo.vim echom 'Goyo is now loaded!'
<
`for` option is generally not needed as most plugins for specific file types
usually don't have too much code in `plugin` directory. You might want to
examine the output of `vim--startuptime` before applying the option.
The `for` option is generally not needed as most plugins for specific file
types usually don't have too much code in the `plugin` directory. You might
want to examine the output of `vim--startuptime` before applying the option.
< Post-update hooks >_________________________________________________________~
*plug-post-update-hooks*
There are some plugins that require extra steps after installation or update.
In that case, use `do` option to describe the task to be performed.
In that case, use the `do` option to describe the task to be performed.
>
Plug 'Shougo/vimproc.vim', { 'do': 'make' }
Plug 'Valloric/YouCompleteMe', { 'do': './install.py' }
Plug 'ycm-core/YouCompleteMe', { 'do': './install.py' }
<
If the value starts with `:`, it will be recognized as a Vim command.
*:GoInstallBinaries*
>
Plug 'fatih/vim-go', { 'do': ':GoInstallBinaries' }
<
To call a Vim function, you can pass a lambda expression like so:
>
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
<
If you need more control, you can pass a reference to a Vim function that
takes a single argument.
takes a dictionary argument.
>
function! BuildYCM(info)
" info is a dictionary with 3 fields
@@ -317,16 +317,15 @@ takes a single argument.
endif
endfunction
Plug 'Valloric/YouCompleteMe', { 'do': function('BuildYCM') }
Plug 'ycm-core/YouCompleteMe', { 'do': function('BuildYCM') }
<
Both forms of post-update hook are executed inside the directory of the plugin
and only run when the repository has changed, but you can force it to run
unconditionally with the bang-versions of the commands: `PlugInstall!` and
`PlugUpdate!`.
A post-update hook is executed inside the directory of the plugin and only run
when the repository has changed, but you can force it to run unconditionally
with the bang-versions of the commands: `PlugInstall!` and `PlugUpdate!`.
Make sure to escape BARs and double-quotes when you write `do` option inline
as they are mistakenly recognized as command separator or the start of the
trailing comment.
Make sure to escape BARs and double-quotes when you write the `do` option
inline as they are mistakenly recognized as command separator or the start of
the trailing comment.
>
Plug 'junegunn/fzf', { 'do': 'yes \| ./install' }
<
@@ -350,7 +349,8 @@ The installer takes the following steps when installing/updating a plugin:
1. Update submodules
2. Execute post-update hooks
The commands with `!` suffix ensure that all steps are run unconditionally.
The commands with the `!` suffix ensure that all steps are run
unconditionally.
< Articles >__________________________________________________________________~
@@ -366,6 +366,16 @@ The commands with `!` suffix ensure that all steps are run unconditionally.
{13} http://junegunn.kr/2013/09/thoughts-on-vim-plugin-dependency
< Collaborators >_____________________________________________________________~
*plug-collaborators*
- {Jan Edmund Lazo}{14} - Windows support
- {Jeremy Pallats}{15} - Python installer
{14} https://github.com/janlazo
{15} https://github.com/starcraftman
< License >___________________________________________________________________~
*plug-license*

550
plug.vim

File diff suppressed because it is too large Load Diff

41
test/functional.vader Normal file
View File

@@ -0,0 +1,41 @@
Execute (plug#shellescape() works without optional arguments):
if has('unix')
AssertEqual "''", plug#shellescape("")
AssertEqual "'foo'\\'''", plug#shellescape("foo'")
endif
Execute (plug#shellescape() ignores invalid optional argument):
if has('unix')
AssertEqual "''", plug#shellescape("", '')
AssertEqual "'foo'\\'''", plug#shellescape("foo'", [])
endif
Execute (plug#shellescape() depends on the shell):
AssertEqual "'foo'\\'''", plug#shellescape("foo'", {'shell': 'sh'})
AssertEqual '^"foo''^"', plug#shellescape("foo'", {'shell': 'cmd.exe'})
AssertEqual "'foo'''", plug#shellescape("foo'", {'shell': 'powershell'})
AssertEqual "'foo'''", plug#shellescape("foo'", {'shell': 'powershell.exe'})
AssertEqual "'foo'''", plug#shellescape("foo'", {'shell': 'pwsh'})
Execute (plug#shellescape() supports non-trivial cmd.exe escaping):
" batchfile
AssertEqual '^"^^%%PATH^^%%^"', plug#shellescape("^%PATH^%", {
\ 'shell': 'cmd.exe',
\ })
AssertEqual '^"^^%%PATH^^%%^"', plug#shellescape("^%PATH^%", {
\ 'shell': 'cmd.exe',
\ 'script': 1,
\ })
" command prompt
AssertEqual '^"^^^%PATH^^^%^"', plug#shellescape("^%PATH^%", {
\ 'shell': 'cmd.exe',
\ 'script': 0,
\ }),
Execute (plug#shellescape() supports non-trivial powershell.exe escaping):
AssertEqual '''\"Foo\\''''\\Bar\"''', plug#shellescape('"Foo\''\Bar"', {
\ 'shell': 'powershell',
\ }),
AssertEqual '''\"Foo\\''''\\Bar\"''', plug#shellescape('"Foo\''\Bar"', {
\ 'shell': 'powershell.exe',
\ }),

View File

@@ -62,7 +62,7 @@ EOF
gitinit() (
cd "$PLUG_FIXTURES/$1"
git init
git init -b master
git commit -m 'commit' --allow-empty
)
@@ -91,9 +91,14 @@ DOC
echo "echomsg 'ftplugin-c'" > "$PLUG_FIXTURES/ftplugin-msg/ftplugin/c.vim"
echo "echomsg 'ftplugin-java'" > "$PLUG_FIXTURES/ftplugin-msg/ftplugin/java.vim"
chmod +w "$PLUG_FIXTURES/cant-delete/autoload" || rm -rf "$PLUG_FIXTURES/cant-delete"
mkdir -p "$PLUG_FIXTURES/cant-delete/autoload"
touch "$PLUG_FIXTURES/cant-delete/autoload/cant-delete.vim"
chmod -w "$PLUG_FIXTURES/cant-delete/autoload"
rm -rf $TEMP/new-branch
cd $TEMP
git init new-branch
git init new-branch -b master
cd new-branch
mkdir plugin
echo 'let g:foo = 1' > plugin/foo.vim
@@ -122,9 +127,11 @@ git --version
vim=$(select_vim)
echo "Selected Vim: $vim"
if [ "${1:-}" = '!' ]; then
$vim -Nu $TEMP/mini-vimrc -c 'Vader! test.vader' > /dev/null &&
prepare &&
$vim -Nu $TEMP/mini-vimrc -c 'let g:plug_threads = 1 | Vader! test.vader' > /dev/null
FAIL=0
$vim -Nu $TEMP/mini-vimrc -c 'Vader! test.vader' > /dev/null || FAIL=1
prepare
$vim -Nu $TEMP/mini-vimrc -c 'let g:plug_threads = 1 | Vader! test.vader' > /dev/null || FAIL=1
test $FAIL -eq 0
else
$vim -Nu $TEMP/mini-vimrc -c 'Vader test.vader'
fi

View File

@@ -18,10 +18,6 @@ Execute (Initialize test environment):
\ ['function! ResetPlug()', 'let s:loaded = {}', 'endfunction',
\ 'function! CompareURI(a, b)', 'return s:compare_git_uri(a:a, a:b)', 'endfunction']
if $ENV != 'vim8'
call add(patch, 'let s:vim8 = 0')
endif
call writefile(extend(readfile($PLUG_TMP), patch), $PLUG_TMP)
set t_Co=256
@@ -90,6 +86,7 @@ Execute (Print Interpreter Version):
Include: workflow.vader
Include: regressions.vader
Include: functional.vader
Execute (Cleanup):
silent! call RmRf(g:temp_plugged)

View File

@@ -2,7 +2,7 @@ Execute (plug#end() before plug#begin() should fail):
redir => out
silent! AssertEqual 0, plug#end()
redir END
Assert stridx(out, 'Call plug#begin() first') >= 0
Assert stridx(out, 'plug#end() called without calling plug#begin() first') >= 0
Execute (plug#begin() without path argument):
call plug#begin()
@@ -49,24 +49,32 @@ Execute (Test Plug command):
AssertEqual 'no-t_co', g:plugs['seoul256.vim'].branch
^ Git repo with tag (DEPRECATED. USE TAG OPTION)
redir => out
silent Plug 'foo/bar.vim', ''
redir END
Assert out =~ 'Invalid argument for "tag" option of :Plug (expected: string)'
Plug 'junegunn/goyo.vim', '1.5.2'
AssertEqual 'file:///tmp/vim-plug-test/junegunn/goyo.vim', g:plugs['goyo.vim'].uri
AssertEqual join([g:temp_plugged, 'goyo.vim/'], '/'), g:plugs['goyo.vim'].dir
AssertEqual '1.5.2', g:plugs['goyo.vim'].tag
redir => out
silent Plug 'foo/bar.vim', {'tag': ''}
redir END
Assert out =~ 'Invalid argument for "tag" option of :Plug (expected: string)'
Plug 'junegunn/goyo.vim', { 'tag': '1.5.3' } " Using tag option
AssertEqual '1.5.3', g:plugs['goyo.vim'].tag
" Git URI
Plug 'file:///tmp/vim-plug-test/jg/vim-emoji'
AssertEqual 'file:///tmp/vim-plug-test/jg/vim-emoji', g:plugs['vim-emoji'].uri
AssertEqual 'master', g:plugs['vim-emoji'].branch
AssertEqual '', g:plugs['vim-emoji'].branch
AssertEqual join([g:temp_plugged, 'vim-emoji/'], '/'), g:plugs['vim-emoji'].dir
" vim-scripts/
Plug 'vim-scripts/beauty256'
AssertEqual 'file:///tmp/vim-plug-test/vim-scripts/beauty256', g:plugs.beauty256.uri
AssertEqual 'master', g:plugs.beauty256.branch
AssertEqual '', g:plugs.beauty256.branch
AssertEqual 4, len(g:plugs)
@@ -77,6 +85,26 @@ Execute (Test Plug command):
Execute (Plug command with dictionary option):
Log string(g:plugs)
for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as']
let opts = {}
let opts[opt] = ''
redir => out
silent Plug 'foo/bar.vim', opts
redir END
Assert out =~ 'Invalid argument for "'.opt.'" option of :Plug (expected: string)'
endfor
for opt in ['on', 'for']
let opts = {}
let opts[opt] = ''
redir => out
silent Plug 'foo/bar.vim', opts
redir END
Assert out =~ 'Invalid argument for "'.opt.'" option of :Plug (expected: string or list)'
endfor
redir => out
silent Plug 'foo/bar.vim', {'do': ''}
redir END
Assert out =~ 'Invalid argument for "do" option of :Plug (expected: string or funcref)'
Plug 'junegunn/seoul256.vim', { 'branch': 'no-t_co', 'rtp': '././' }
AssertEqual join([g:temp_plugged, 'seoul256.vim/'], '/'), g:plugs['seoul256.vim'].dir
AssertEqual '././', g:plugs['seoul256.vim'].rtp
@@ -354,6 +382,7 @@ Execute (New commits on remote, PlugUpdate, then PlugDiff):
" Now we have updates
normal D
AssertEqual '2 plugin(s) updated.', getline(1)
AssertThrows execute('/gpg')
" Preview commit
silent! wincmd P
@@ -364,6 +393,14 @@ Execute (New commits on remote, PlugUpdate, then PlugDiff):
let lnum = line('.')
AssertEqual 3, col('.')
" Open full diff (empty)
execute "normal \<cr>"
wincmd P
AssertEqual 1, &previewwindow
AssertEqual 'git', &filetype
AssertEqual [''], getline(1, '$')
pclose
" Open commit preview
execute "normal j\<cr>"
wincmd P
@@ -399,13 +436,17 @@ Execute (New commits on remote, PlugUpdate, then PlugDiff):
execute "normal Xy\<cr>"
AssertExpect '^- ', 1
" q will close preview window as well
" q will only close preview window
normal q
" We no longer have preview window
silent! wincmd P
AssertEqual 0, &previewwindow
" And we're still on main vim-plug window
AssertEqual 'vim-plug', &filetype
normal q
" q should not close preview window if it's already open
pedit
PlugDiff
@@ -430,6 +471,11 @@ Execute (Test g:plug_pwindow):
AssertEqual 2, winnr()
AssertEqual 5, winheight('.')
wincmd p
" Close preview window
normal q
" Close main window
normal q
unlet g:plug_pwindow
@@ -537,6 +583,51 @@ Execute (PlugDiff):
Assert !empty(mapcheck("\<cr>"))
q
Execute (Do not show diff for commits outside of rtp):
call plug#begin()
call plug#end()
PlugClean!
call plug#begin()
Plug 'file://'.expand('$PLUG_FIXTURES').'/xxx'
Plug 'file://'.expand('$PLUG_FIXTURES').'/yyy', { 'rtp': 'rtp' }
call plug#end()
PlugInstall
Log getline(1, '$')
call system('cd "$PLUG_FIXTURES/xxx" && git commit --allow-empty -m update-xxx && git tag -f xxx')
call system('cd "$PLUG_FIXTURES/yyy" && git commit --allow-empty -m update-yyy && git tag -f yyy')
let g:plugs.yyy.tag = 'yyy'
PlugUpdate
Log getline(1, '$')
PlugDiff
" 1 plugin(s) updated.
" [==]
"
" Last update:
" ------------
"
" - xxx:
" * 7faa9b2 update-xxx (0 seconds ago)
"
" Pending updates:
" ----------------
"
" N/A
"
Log getline(1, '$')
AssertEqual 14, line('$')
AssertEqual '1 plugin(s) updated.', getline(1)
AssertEqual '[==]', getline(2)
AssertEqual 'Last update:', getline(4)
AssertEqual '- xxx:', getline(7)
Assert !empty(mapcheck('o'))
Assert !empty(mapcheck('X'))
Assert !empty(mapcheck("\<cr>"))
q
**********************************************************************
~ On-demand loading / Partial installation/update ~
**********************************************************************
@@ -991,9 +1082,10 @@ Execute (Post-update hook output; success and failure):
Execute (Post-update hook output; invalid type or funcref):
call plug#begin()
Plug 'junegunn/vim-easy-align', { 'do': 1 }
Plug 'junegunn/vim-easy-align', { 'do': ':echo 1' }
Plug 'junegunn/vim-pseudocl', { 'do': function('call') }
call plug#end()
let g:plugs['vim-easy-align'].do = 1
silent PlugInstall! 1
AssertEqual 'x Post-update hook for vim-pseudocl ... Vim(call):E119: Not enough arguments for function: call', getline(5)
@@ -1397,6 +1489,7 @@ Execute (PlugClean should not try to remove unmanaged plugins inside g:plug_home
Plug '$PLUG_FIXTURES/fzf'
Plug '$PLUG_FIXTURES/xxx'
Plug '$PLUG_FIXTURES/yyy'
Plug '$PLUG_FIXTURES/cant-delete'
call plug#end()
" Remove z1, z2
@@ -1535,10 +1628,12 @@ Execute (Commit hash support):
Assert empty(mapcheck('X'))
Assert !empty(mapcheck("\<cr>"))
" Nor in PlugSnapshot output
" The exact hash values in PlugSnapshot output
PlugSnapshot
Log getline(1, '$')
AssertEqual 8, line('$')
AssertEqual "silent! let g:plugs['goyo.vim'].commit = 'ffffffff'", getline(6)
AssertEqual "silent! let g:plugs['vim-emoji'].commit = '9db7fcfee0d90dafdbcb7a32090c0a9085eb054a'", getline(7)
AssertEqual 10, line('$')
q
Execute (Commit hash support - cleared):
@@ -1650,3 +1745,25 @@ Execute (#766 - Allow cloning into an empty directory):
AssertExpect! '[=]', 1
q
unlet d
Execute (#982 - PlugClean should report when directories cannot be removed):
call plug#begin('$PLUG_FIXTURES')
Plug '$PLUG_FIXTURES/ftplugin-msg', { 'for': [] }
Plug '$PLUG_FIXTURES/fzf'
Plug '$PLUG_FIXTURES/xxx'
Plug '$PLUG_FIXTURES/yyy'
call plug#end()
" Fail to remove cant-delete
PlugClean!
AssertEqual 'Removed 0 directories. Failed to remove 1 directories.', getline(4)
AssertExpect '^x ', 1
q
" Delete tmp but fail to remove cant-delete
call mkdir(expand('$PLUG_FIXTURES/tmp'))
PlugClean!
AssertEqual 'Removed 1 directories. Failed to remove 1 directories.', getline(4)
AssertExpect '^x ', 1
AssertExpect '^\~ ', 1
q