4

In a Jekyll file I have

 <IMG SRC="/assets/images/

I would like to use the filename autocompletion shortcut to insert the rest of the filename, but this fails because of the leading slash.

When I remove the leading slash, the completion works perfectly but I then I have to put it back in for the code to work.

How can I tell vim to ignore the slash?

Related question is this one but the solutions do not appear relevant.

guntbert
  • 1,245
  • 1
  • 13
  • 27
Joe
  • 287
  • 1
  • 9
  • 3
    Fwiw it’s not usually necessary to write jekyll links that way (one of the template params is site.url or something similar. You can also use {% link file %}, which works with relative paths!) – D. Ben Knoble Jan 26 '21 at 13:17
  • 1
    I don't think there's really any way to do this without overriding the <C-x><C-f> logic to implement your own, or using completefunc. See How to create my own autocomplete function? The help page says "Note: the 'path' option is not used here (yet)", so the "real solution" would probably be to implement that in Vim. – Martin Tournoij Jan 26 '21 at 20:34
  • @D.BenKnoble - oooh, will check that out (although I still find the question interesting) – Joe Jan 27 '21 at 11:59

1 Answers1

1

I work around it by first typing the path without the leading slash '/', so that vim will complete it, and then afterwards prepend the slash using one of the following maps

nnoremap [MAPKEYS] m'F"a/<Esc>`'l
imap [MAPKEYS] <Esc>[MAPKEYS]a

The cursors position is also restored. Note that the maps rely on the path being surrounded by quotes ("the/path").

PS: remember to use <buffer> if you put this in an ft file (e.g. .vim/after/ftplugin/{markdown,liquid}.vim or in autocommands. A more robust version of the above is given here (put in .vimrc and reload):

augroup slash_bindings
  autocmd! slash_bindings
  autocmd Filetype markdown,liquid,yaml nnoremap <buffer> <MAPKEY> m':call search("['\"]", "b")<CR>a/<Esc>`'l
  autocmd Filetype markdown,liquid,yaml imap <buffer> <MAPKEY> <Esc><MAPKEY>a
augroup end
Patrick
  • 191
  • 4