mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-09 19:50:06 +08:00
77 lines
2.2 KiB
VimL
77 lines
2.2 KiB
VimL
let s:Git = vital#gina#import('Git')
|
|
let s:Path = vital#gina#import('System.Filepath')
|
|
let s:String = vital#gina#import('Data.String')
|
|
let s:is_windows = has('win32') || has('win64')
|
|
|
|
|
|
if s:is_windows
|
|
function! gina#core#path#expand(expr) abort
|
|
return s:Path.unixpath(s:expand(s:realpath(a:expr)))
|
|
endfunction
|
|
|
|
function! gina#core#path#abspath(path, ...) abort
|
|
let path = s:realpath(a:path)
|
|
return s:Path.unixpath(call('s:abspath', [path] + a:000))
|
|
endfunction
|
|
|
|
function! gina#core#path#relpath(path, ...) abort
|
|
let path = s:realpath(a:path)
|
|
return s:Path.unixpath(call('s:relpath', [path] + a:000))
|
|
endfunction
|
|
|
|
function! s:realpath(path) abort
|
|
if a:path =~# '^\w\+://'
|
|
return s:Path.unixpath(a:path)
|
|
endif
|
|
return s:Path.realpath(a:path)
|
|
endfunction
|
|
else
|
|
function! gina#core#path#expand(expr) abort
|
|
return s:expand(a:expr)
|
|
endfunction
|
|
|
|
function! gina#core#path#abspath(path, ...) abort
|
|
return call('s:abspath', [a:path] + a:000)
|
|
endfunction
|
|
|
|
function! gina#core#path#relpath(path, ...) abort
|
|
return call('s:relpath', [a:path] + a:000)
|
|
endfunction
|
|
endif
|
|
|
|
|
|
function! s:expand(expr) abort
|
|
if empty(a:expr) || a:expr[0] ==# ':'
|
|
return a:expr
|
|
elseif a:expr[:6] ==# 'gina://'
|
|
let git = gina#core#get_or_fail({'expr': a:expr})
|
|
let path = gina#core#buffer#param(a:expr, 'path')
|
|
return empty(path) ? '' : s:Path.join(git.worktree, path)
|
|
elseif a:expr[0] =~# '[%#<]'
|
|
let m = matchlist(a:expr, '^\([%#]\|<\w\+>\)\(.*\)')
|
|
let expr = expand(m[1])
|
|
let modifiers = m[2]
|
|
return fnamemodify(s:expand(expr), modifiers)
|
|
endif
|
|
return a:expr
|
|
endfunction
|
|
|
|
function! s:abspath(path, ...) abort
|
|
if s:Path.is_absolute(a:path) || a:path[0] ==# ':'
|
|
return a:path
|
|
endif
|
|
let root = s:Path.remove_last_separator(a:0 == 0 ? getcwd() : a:1)
|
|
return s:Path.join(root, a:path)
|
|
endfunction
|
|
|
|
function! s:relpath(path, ...) abort
|
|
if s:Path.is_relative(a:path) || a:path[0] ==# ':'
|
|
return a:path
|
|
endif
|
|
let root = s:Path.remove_last_separator(a:0 == 0 ? getcwd() : a:1)
|
|
let pattern = s:String.escape_pattern(root . s:Path.separator())
|
|
return a:path =~# '^' . pattern
|
|
\ ? matchstr(a:path, '^' . pattern . '\zs.*')
|
|
\ : a:path
|
|
endfunction
|