20 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
8 changed files with 155 additions and 37 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

1
.gitignore vendored Normal file
View File

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

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.
@@ -117,7 +135,7 @@ 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-default branch
@@ -136,11 +154,62 @@ 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 |
@@ -203,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'] }
@@ -242,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)
@@ -259,14 +334,13 @@ endfunction
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 the `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' }

View File

@@ -1,4 +1,4 @@
plug.txt plug Last change: January 3 2022
plug.txt plug Last change: February 23 2024
PLUG - TABLE OF CONTENTS *plug* *plug-toc*
==============================================================================
@@ -153,7 +153,7 @@ 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-default branch
@@ -172,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*
@@ -260,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'] }
@@ -293,13 +297,15 @@ In that case, use the `do` option to describe the task to be performed.
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
@@ -313,10 +319,9 @@ takes a single argument.
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 the `do` option
inline as they are mistakenly recognized as command separator or the start of

View File

@@ -22,7 +22,7 @@
" 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-default branch
@@ -352,7 +352,7 @@ function! plug#end()
endif
let lod = { 'ft': {}, 'map': {}, 'cmd': {} }
if exists('g:did_load_filetypes')
if get(g:, 'did_load_filetypes', 0)
filetype off
endif
for name in g:plugs_order
@@ -391,6 +391,9 @@ function! plug#end()
if !empty(types)
augroup filetypedetect
call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim')
if has('nvim-0.5.0')
call s:source(s:rtp(plug), 'ftdetect/**/*.lua', 'after/ftdetect/**/*.lua')
endif
augroup END
endif
for type in types
@@ -438,6 +441,9 @@ endfunction
function! s:load_plugin(spec)
call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim')
if has('nvim-0.5.0')
call s:source(s:rtp(a:spec), 'plugin/**/*.lua', 'after/plugin/**/*.lua')
endif
endfunction
function! s:reload_plugins()
@@ -655,6 +661,9 @@ function! s:lod(names, types, ...)
let rtp = s:rtp(g:plugs[name])
for dir in a:types
call s:source(rtp, dir.'/**/*.vim')
if has('nvim-0.5.0') " see neovim#14686
call s:source(rtp, dir.'/**/*.lua')
endif
endfor
if a:0
if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2))
@@ -1031,6 +1040,11 @@ function! s:is_updated(dir)
endfunction
function! s:do(pull, force, todo)
if has('nvim')
" Reset &rtp to invalidate Neovim cache of loaded Lua modules
" See https://github.com/junegunn/vim-plug/pull/1157#issuecomment-1809226110
let &rtp = &rtp
endif
for [name, spec] in items(a:todo)
if !isdirectory(spec.dir)
continue
@@ -2621,26 +2635,34 @@ function! s:preview_commit()
let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}')
if empty(sha)
return
let name = matchstr(getline('.'), '^- \zs[^:]*\ze:$')
if empty(name)
return
endif
let title = 'HEAD@{1}..'
let command = 'git diff --no-color HEAD@{1}'
else
let title = sha
let command = 'git show --no-color --pretty=medium '.sha
let name = s:find_name(line('.'))
endif
let name = s:find_name(line('.'))
if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir)
return
endif
if exists('g:plug_pwindow') && !s:is_preview_window_open()
execute g:plug_pwindow
execute 'e' sha
execute 'e' title
else
execute 'pedit' sha
execute 'pedit' title
wincmd P
endif
setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable
setlocal previewwindow filetype=git buftype=nofile bufhidden=wipe nobuflisted modifiable
let batchfile = ''
try
let [sh, shellcmdflag, shrd] = s:chsh(1)
let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha
let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && '.command
if s:is_win
let [batchfile, cmd] = s:batchfile(cmd)
endif
@@ -2766,9 +2788,9 @@ function! s:snapshot(force, ...) abort
1
let anchor = line('$') - 3
let names = sort(keys(filter(copy(g:plugs),
\'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)')))
\'has_key(v:val, "uri") && isdirectory(v:val.dir)')))
for name in reverse(names)
let sha = s:git_revision(g:plugs[name].dir)
let sha = has_key(g:plugs[name], 'commit') ? g:plugs[name].commit : s:git_revision(g:plugs[name].dir)
if !empty(sha)
call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha))
redraw

View File

@@ -62,7 +62,7 @@ EOF
gitinit() (
cd "$PLUG_FIXTURES/$1"
git init
git init -b master
git commit -m 'commit' --allow-empty
)
@@ -98,7 +98,7 @@ DOC
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

View File

@@ -393,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
@@ -1620,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):