Skip to content

Commit 78f069c

Browse files
committed
Support tilde expansion when completing files
- Expand tilde alone to $HOME (same as vim's built in path completion) - Support completion of paths relative to ~/ (taken from PR mhinz#152) This is getting quite messy now, but that's ok, we have some tests! Refactoring can come later, maybe when supporting hidden files/dirs.
1 parent 47f308d commit 78f069c

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

plugin/grepper.vim

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,14 @@ endfunction
235235
" grepper#complete_files() {{{2
236236
function! grepper#complete_files(lead, _line, _pos)
237237
let [head, path] = s:extract_path(a:lead)
238+
" tilde expansion to $HOME
239+
if path ==# '~'
240+
return [$HOME]
241+
" handle paths in $HOME (~/foo)
242+
elseif path[0:1] ==# '~/'
243+
return map(split(globpath($HOME, path[2:].'*'), '\n'), 'head . "~" . v:val['.len($HOME).':] . (isdirectory(v:val) ? s:slash : "")')
238244
" handle relative paths
239-
if empty(path) || (path =~ '\s$') || (path =~ '^\s*\w\+')
245+
elseif empty(path) || (path =~ '\s$') || (path =~ '^\s*\w\+')
240246
return map(
241247
\ map(split(globpath('.'.s:slash, path.'*'), '\n'), 'head . "." . v:val[1:] . (isdirectory(v:val) ? s:slash : "")'),
242248
\ "substitute(v:val, '^\\s*.'.s:slash, '', '')"

test/feature/completion.vader

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,15 @@ Execute (flags, -tool options):
3333
Assert len(grepper#complete('', 'Grepper -tool ', v:null)) > 1
3434
AssertEqual count(grepper#complete('', 'Grepper -tool ', v:null), 'grep '), 1
3535

36+
Execute (path, tilde expansion):
37+
AssertEqual grepper#complete('~', '', v:null), [$HOME]
38+
39+
Execute (path, relative to $HOME):
40+
let home = $HOME
41+
let $HOME = getcwd()
42+
AssertEqual grepper#complete('~/f', '', v:null), ['~/foo/']
43+
let $HOME = home
44+
3645
Execute (relative path, empty string):
3746
AssertEqual grepper#complete('', '', v:null), ['foo/']
3847

0 commit comments

Comments
 (0)