From f3fac5ff9a9532964f7cf2b36567af2ac579bed8 Mon Sep 17 00:00:00 2001 From: Wu Zhenyu Date: Tue, 18 Oct 2022 22:22:58 +0800 Subject: [PATCH] Support shebang detection --- autoload/requirements/scripts.vim | 28 ++++++++++++++++++++++++++++ ftdetect/requirements.vim | 1 + 2 files changed, 29 insertions(+) create mode 100644 autoload/requirements/scripts.vim diff --git a/autoload/requirements/scripts.vim b/autoload/requirements/scripts.vim new file mode 100644 index 0000000..9a90038 --- /dev/null +++ b/autoload/requirements/scripts.vim @@ -0,0 +1,28 @@ +"" +" Refer $VIMRUNTIME/autoload/dist/script.vim in vim +" or $VIMRUNTIME/scripts.vim in neovim. When a file's shebang is like +" "pip install -r" or "pip-compile", set its filetype to |requirements|. +function! requirements#scripts#shabang() abort + let s:line1 = getline(1) + + if s:line1 =~# "^#!" + if s:line1 =~# '^#!\s*\S*\' + let s:name = substitute(s:line1, '^#!.*\\s\+\(\i\+\).*', '\1', '') + elseif s:line1 =~# '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)' + let s:name = substitute(s:line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '') + else + let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '') + endif + if s:name =~# '^pip' + set ft=requirements + endif + endif +endfunction +" vim: et sw=4 ts=4 sts=4: diff --git a/ftdetect/requirements.vim b/ftdetect/requirements.vim index 71468e2..da03472 100644 --- a/ftdetect/requirements.vim +++ b/ftdetect/requirements.vim @@ -59,6 +59,7 @@ augroup requirements autocmd! au BufNewFile,BufRead *.{txt,in} if s:isRequirementsFile() | set ft=requirements | endif au BufNewFile,BufRead *.pip set ft=requirements + au BufNewFile,BufRead * if !did_filetype() | call requirements#scripts#shabang() | endif augroup END " vim: et sw=4 ts=4 sts=4: