aboutsummaryrefslogtreecommitdiff
path: root/files/.vim
diff options
context:
space:
mode:
authorAnton Bobov <anton@bobov.name>2026-07-31 23:24:44 +0500
committerAnton Bobov <anton@bobov.name>2026-07-31 23:41:52 +0500
commited2a09af95af121461e127251690b2fc0e1c1086 (patch)
treea118d435396275d8b56eb54527b1206ac7de3e8c /files/.vim
parentb5776d070a725fff4ab6d9c3b755d957d59d5444 (diff)
vim: upgrade plug.vim
Diffstat (limited to 'files/.vim')
-rw-r--r--files/.vim/autoload/plug.vim29
1 files changed, 19 insertions, 10 deletions
diff --git a/files/.vim/autoload/plug.vim b/files/.vim/autoload/plug.vim
index de5ae1f..d98d611 100644
--- a/files/.vim/autoload/plug.vim
+++ b/files/.vim/autoload/plug.vim
@@ -997,7 +997,7 @@ function! s:bang(cmd, ...)
let [sh, shellcmdflag, shrd] = s:chsh(a:0)
" FIXME: Escaping is incomplete. We could use shellescape with eval,
" but it won't work on Windows.
- let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd
+ let cmd = a:0 ? s:with_cd(a:cmd, a:1, {'shell': s:is_win ? 'cmd.exe' : &shell}) : a:cmd
if s:is_win
let [batchfile, cmd] = s:batchfile(cmd)
endif
@@ -1462,7 +1462,7 @@ function! s:spawn(name, spec, queue, opts)
elseif s:vim8
let cmd = join(map(copy(argv), 'plug#shellescape(v:val, {"script": 0})'))
if has_key(a:opts, 'dir')
- let cmd = s:with_cd(cmd, a:opts.dir, 0)
+ let cmd = s:with_cd(cmd, a:opts.dir, {'shell': s:is_win ? 'cmd.exe' : 'sh', 'script': 0})
endif
let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd]
let jid = job_start(s:is_win ? join(argv, ' ') : argv, {
@@ -2328,11 +2328,18 @@ function! s:format_message(bullet, name, message)
endfunction
function! s:with_cd(cmd, dir, ...)
- let script = a:0 > 0 ? a:1 : 1
- let pwsh = s:is_powershell(&shell)
+ let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {}
+ let opts.shell = get(opts, 'shell', &shell)
+ let opts.script = get(opts, 'script', 1)
+
+ let pwsh = s:is_powershell(opts.shell)
let cd = s:is_win && !pwsh ? 'cd /d' : 'cd'
let sep = pwsh ? ';' : '&&'
- return printf('%s %s %s %s', cd, plug#shellescape(a:dir, {'script': script, 'shell': &shell}), sep, a:cmd)
+ let pwsh_block_required = pwsh && !has('patch-9.2.6')
+ let start = pwsh_block_required ? '& { ' : ''
+ let end = pwsh_block_required ? ' }' : ''
+
+ return printf('%s%s %s %s %s%s', start, cd, plug#shellescape(a:dir, opts), sep, a:cmd, end)
endfunction
function! s:system_job(cmd) abort
@@ -2372,9 +2379,9 @@ function! s:system(cmd, ...)
let cmd = a:cmd
endif
if a:0 > 0
- let cmd = s:with_cd(cmd, a:1, type(a:cmd) != s:TYPE.list)
+ let cmd = s:with_cd(cmd, a:1, {'script': type(a:cmd) != s:TYPE.list})
endif
- if s:is_win && type(a:cmd) != s:TYPE.list
+ if s:is_win && type(a:cmd) != s:TYPE.list && !s:is_powershell(&shell)
let [batchfile, cmd] = s:batchfile(cmd)
endif
if s:vim8 && has('gui_running') && !s:is_win
@@ -2462,9 +2469,11 @@ endfunction
function! s:rm_rf(dir)
if isdirectory(a:dir)
- return s:system(s:is_win
- \ ? 'rmdir /S /Q '.plug#shellescape(a:dir)
- \ : ['rm', '-rf', a:dir])
+ return s:system(!s:is_win
+ \ ? ['rm', '-rf', a:dir]
+ \ : s:is_powershell(&shell)
+ \ ? ['Remove-Item', '-Recurse', '-Force', a:dir]
+ \ : 'rmdir /S /Q '.plug#shellescape(a:dir))
endif
endfunction