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 #! "#!/usr/bin/env (!env)" b `!p snip.rv = '#!/usr/bin/env ' + getShell() + "\n" ` endsnippet snippet sbash "safe bash options" b #!/usr/bin/env bash set -euo pipefail IFS=$'\n\t' `!p snip.rv ='\n\n' ` endsnippet snippet temp "Tempfile" b ${1:TMPFILE}="$(mktemp -t ${3:--suffix=${4:.SUFFIX}} ${2:`!p snip.rv = re.sub(r'[^a-zA-Z]', '_', snip.fn) or "untitled" `}.XXXXXX)" ${5:${6/(.+)/trap "/}${6:rm -f '$${1/.*\s//}'}${6/(.+)/" 0 # EXIT\n/}${7/(.+)/trap "/}${7:rm -f '$${1/.*\s//}'; exit 1}${7/(.+)/" 2 # INT\n/}${8/(.+)/trap "/}${8:rm -f '$${1/.*\s//}'; exit 1}${8/(.+)/" 1 15 # HUP TERM\n/}} endsnippet snippet /case|sw(itch)?/ "case .. esac (case)" rb case ${1:word} in ${2:pattern} ) ${0:${VISUAL}};; esac endsnippet snippet elif "elif .. (elif)" b elif ${2:[[ ${1:condition} ]]}; then ${0:${VISUAL}} endsnippet snippet for "for ... done (for)" b for (( i = 0; i < ${1:10}; i++ )); do ${0:${VISUAL}} done endsnippet snippet forin "for ... in ... done (forin)" b for ${1:i}${2/.+/ in /}${2:words}; do ${0:${VISUAL}} done endsnippet snippet here "here document (here)" <<-${2:'${1:TOKEN}'} $0 ${1/['"`](.+)['"`]/$1/} endsnippet snippet if "if ... then (if)" b if ${2:[[ ${1:condition} ]]}; then ${0:${VISUAL}} fi endsnippet snippet until "until ... (done)" b until ${2:[[ ${1:condition} ]]}; do ${0:${VISUAL}} done endsnippet snippet /wh(ile)?/ "while ... (done)" rb while ${2:[[ ${1:condition} ]]}; do ${0:${VISUAL}} done endsnippet # vim:ft=snippets: