HiPhish
2018-10-23 11:07:33 UTC
Hello Schemers
When I open a Scheme file (Neo)vim the file type is set to "scheme", but I
would like to be able to detect that it is not just Scheme, but Guile Scheme.
So far I have set up the editor to scan the first line for a shebang and if
the word "guile" appears to set the file type to "scheme.guile":
if getline(1) =~? '\v^#!.*[Gg]uile'
let &filetype .= '.guile'
endif
If you are not familiar with Vim, the important part is the regex
'^#!.*[Gg]uile'. This works OK, but is there a better way than adding a
shebang or some other manual hing to the head of every script? How does Emacs
do it?
And while I'm at that topic, what is the proper way of writing a shebang when
I don't know where Guile is installed to? For example, the Guile manual
frequently uses
#!/usr/local/bin/guile
but what if I have Guile installed via Guix and it is somewhere in my Guix
store? A common solution is to abuse env:
#!/usr/bin/env guile
But now I cannot pass arguments (like '-s') to Guile, because everything
following the first space will be treated as one argument to 'env'. Is there a
solution or am I just overthinking things?
When I open a Scheme file (Neo)vim the file type is set to "scheme", but I
would like to be able to detect that it is not just Scheme, but Guile Scheme.
So far I have set up the editor to scan the first line for a shebang and if
the word "guile" appears to set the file type to "scheme.guile":
if getline(1) =~? '\v^#!.*[Gg]uile'
let &filetype .= '.guile'
endif
If you are not familiar with Vim, the important part is the regex
'^#!.*[Gg]uile'. This works OK, but is there a better way than adding a
shebang or some other manual hing to the head of every script? How does Emacs
do it?
And while I'm at that topic, what is the proper way of writing a shebang when
I don't know where Guile is installed to? For example, the Guile manual
frequently uses
#!/usr/local/bin/guile
but what if I have Guile installed via Guix and it is somewhere in my Guix
store? A common solution is to abuse env:
#!/usr/bin/env guile
But now I cannot pass arguments (like '-s') to Guile, because everything
following the first space will be treated as one argument to 'env'. Is there a
solution or am I just overthinking things?