You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.3 KiB
99 lines
2.3 KiB
priority -50 |
|
|
|
global !p |
|
import vim |
|
|
|
# Tests for the existence of a variable declared by Vim's filetype detection |
|
# suggesting the type of shell script of the current file |
|
def testShell(scope, shell): |
|
return vim.eval("exists('" + scope + ":is_" + shell + "')") |
|
|
|
# Loops over the possible variables, checking for global variables |
|
# first since they indicate an override by the user. |
|
def getShell(): |
|
for scope in ["g", "b"]: |
|
for shell in ["bash", "posix", "sh", "kornshell"]: |
|
if testShell(scope, shell) == "1": |
|
if shell == "kornshell": |
|
return "ksh" |
|
if shell == "posix": |
|
return "sh" |
|
return shell |
|
return "sh" |
|
endglobal |
|
|
|
########################################################################### |
|
# TextMate Snippets # |
|
########################################################################### |
|
snippet #! |
|
`!p snip.rv = '#!/bin/' + getShell() + "\n\n" ` |
|
endsnippet |
|
|
|
snippet !env "#!/usr/bin/env (!env)" |
|
`!p snip.rv = '#!/usr/bin/env ' + getShell() + "\n\n" ` |
|
endsnippet |
|
|
|
snippet sbash "safe bash options" |
|
#!/usr/bin/env bash |
|
set -euo pipefail |
|
IFS=$'\n\t' |
|
`!p snip.rv ='\n\n' ` |
|
endsnippet |
|
|
|
snippet temp "Tempfile" |
|
${1:TMPFILE}="$(mktemp -t ${2:`!p |
|
snip.rv = re.sub(r'[^a-zA-Z]', '_', snip.fn) or "untitled" |
|
`})" |
|
${3:${4/(.+)/trap "/}${4:rm -f '$${1/.*\s//}'}${4/(.+)/" 0 # EXIT\n/}${5/(.+)/trap "/}${5:rm -f '$${1/.*\s//}'; exit 1}${5/(.+)/" 2 # INT\n/}${6/(.+)/trap "/}${6:rm -f '$${1/.*\s//}'; exit 1}${6/(.+)/" 1 15 # HUP TERM\n/}} |
|
|
|
endsnippet |
|
|
|
snippet case "case .. esac (case)" |
|
case ${1:word} in |
|
${2:pattern} ) |
|
$0;; |
|
esac |
|
endsnippet |
|
|
|
snippet elif "elif .. (elif)" |
|
elif ${2:[[ ${1:condition} ]]}; then |
|
${0:#statements} |
|
endsnippet |
|
|
|
snippet for "for ... done (for)" |
|
for (( i = 0; i < ${1:10}; i++ )); do |
|
${0:#statements} |
|
done |
|
endsnippet |
|
|
|
snippet forin "for ... in ... done (forin)" |
|
for ${1:i}${2/.+/ in /}${2:words}; do |
|
${0:#statements} |
|
done |
|
endsnippet |
|
|
|
snippet here "here document (here)" |
|
<<-${2:'${1:TOKEN}'} |
|
$0 |
|
${1/['"`](.+)['"`]/$1/} |
|
endsnippet |
|
|
|
snippet if "if ... then (if)" |
|
if ${2:[[ ${1:condition} ]]}; then |
|
${0:#statements} |
|
fi |
|
endsnippet |
|
|
|
snippet until "until ... (done)" |
|
until ${2:[[ ${1:condition} ]]}; do |
|
${0:#statements} |
|
done |
|
endsnippet |
|
|
|
snippet while "while ... (done)" |
|
while ${2:[[ ${1:condition} ]]}; do |
|
${0:#statements} |
|
done |
|
endsnippet |
|
|
|
# vim:ft=snippets:
|
|
|