about summary refs log tree commit diff
path: root/vim/.vim/scripts.vim
diff options
context:
space:
mode:
authorNguyễn Gia Phong <vn.mcsinyx@gmail.com>2019-09-15 14:01:27 +0700
committerNguyễn Gia Phong <vn.mcsinyx@gmail.com>2019-09-15 14:01:27 +0700
commit3030db8ff09ab6da0f1f941518ef5c071053c5f8 (patch)
treeea946ecc72079826f9bb86912babc18c0be1c768 /vim/.vim/scripts.vim
parent434ebf0d707b4ea08455da42f14c742bf8081dc4 (diff)
downloaddotfiles-3030db8ff09ab6da0f1f941518ef5c071053c5f8.tar.gz
Update 2019-09-15
Diffstat (limited to 'vim/.vim/scripts.vim')
-rw-r--r--vim/.vim/scripts.vim55
1 files changed, 55 insertions, 0 deletions
diff --git a/vim/.vim/scripts.vim b/vim/.vim/scripts.vim
new file mode 100644
index 0000000..6221c55
--- /dev/null
+++ b/vim/.vim/scripts.vim
@@ -0,0 +1,55 @@
+" Additional scripts' filetype detections
+
+" This file is called by an autocommand for every file that has just been
+" loaded into a buffer.  It checks if the type of file can be recognized by
+" the file contents.  The autocommand is in $VIMRUNTIME/filetype.vim.
+"
+" Note that the pattern matches are done with =~# to avoid the value of the
+" 'ignorecase' option making a difference.  Where case is to be ignored use
+" =~? instead.  Do not use =~ anywhere.
+
+" Only do the rest when the FileType autocommand has not been triggered yet.
+if did_filetype()
+  finish
+endif
+
+" Line continuation is used here, remove 'C' from 'cpoptions'
+let s:cpo_save = &cpo
+set cpo&vim
+
+let s:line1 = getline(1)
+if s:line1 =~# "^#!"
+  " A script that starts with "#!".
+  " Check for a line like "#!/usr/bin/env VAR=val bash".  Turn it into
+  " "#!/usr/bin/bash" to make matching easier.
+  if s:line1 =~# '^#!\s*\S*\<env\s'
+    let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g')
+    let s:line1 = substitute(s:line1, '\<env\s\+', '', '')
+  endif
+
+  " Get the program name.
+  " Only accept spaces in PC style paths: "#!c:/program files/perl [args]".
+  " If the word env is used, use the first word after the space:
+  " "#!/usr/bin/env perl [path/args]"
+  " If there is no path use the first word: "#!perl [path/args]".
+  " Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
+  if s:line1 =~# '^#!\s*\a:[/\\]'
+    let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
+  elseif s:line1 =~# '^#!.*\<env\>'
+    let s:name = substitute(s:line1, '^#!.*\<env\>\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
+
+  " GNU Octave
+  if s:name =~# 'octave'
+    set ft=octave
+  endif
+  unlet s:name
+endif
+
+" Restore 'cpoptions'
+let &cpo = s:cpo_save
+unlet s:cpo_save s:line1