Jak zrobić vim detect filetype z linii shebang?

Czasami piszę Skrypty bez rozszerzenia nazwy pliku. Na przykład:

#!/usr/bin/env node

console.log('hello world!');

Mam nadzieję, że Vim wykryje Typ pliku z linii shebang (np. #!/usr/bin/env node jest javascript). Co należy umieścić w filetype.vim?

Author: ib., 2012-01-17

4 answers

Postępując zgodnie z instrukcjami wymienionymi w :help new-filetype-scripts, Utwórz plik scripts.vim w katalogu runtime użytkownika (~/.vim/ w systemach uniksopodobnych) i napisać w nim następujący skrypt:

if did_filetype()
    finish
endif
if getline(1) =~# '^#!.*/bin/env\s\+node\>'
    setfiletype javascript
endif
 34
Author: ib.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-05 02:51:32

Utwórz ten plik ~/.vim/ftdetect/node.vim z tą zawartością

fun! s:DetectNode()
    if getline(1) == '#!/usr/bin/env node'
        set ft=javascript
    endif
endfun

autocmd BufNewFile,BufRead * call s:DetectNode()
 11
Author: aliva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-28 14:44:03

Jeśli jesteś zainteresowany wtyczką, istnieje taka możliwość:

Https://github.com/vitalk/vim-shebang

Zawiera wzorzec podświetlania node -> javascript.

AddShebangPattern! javascript ^#!.*\s\+node\>
 1
Author: dhulihan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 21:22:59

Trochę za późno na imprezę, ale vim obsługuje Wykrywanie takich plików JavaScript za Ciebie. I jeszcze trochę. :-)

 0
Author: Andri Möll,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-31 07:42:40