..." r
+private def ${1:method_name}${2:(${3:*args})}
+ $0
+end
+endsnippet
diff --git a/.vim/UltiSnips/cs.snippets b/.vim/UltiSnips/cs.snippets
new file mode 100644
index 00000000..4c58bcbe
--- /dev/null
+++ b/.vim/UltiSnips/cs.snippets
@@ -0,0 +1,385 @@
+#######################################################################
+# C# Snippets for UltiSnips #
+#######################################################################
+
+priority -50
+
+#########################
+# classes and structs #
+#########################
+
+snippet namespace "namespace" b
+namespace ${1:MyNamespace}
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet class "class" w
+${1:public} class ${2:`!p snip.rv = snip.basename`}
+{
+ $0
+}
+endsnippet
+
+snippet struct "struct" w
+struct ${1:`!p snip.rv = snip.basename`}
+{
+ $0
+}
+endsnippet
+
+snippet interface "interface" w
+interface I${1:`!p snip.rv = snip.basename`}
+{
+ $0
+}
+endsnippet
+
+snippet enum "enumeration" b
+enum ${1:MyEnum} { ${2:Item} };
+endsnippet
+
+
+############
+# Main() #
+############
+
+snippet sim "static int main" b
+static int Main(string[] args)
+{
+ $0
+}
+endsnippet
+
+snippet svm "static void main" b
+static void Main(string[] args)
+{
+ $0
+}
+endsnippet
+
+
+################
+# properties #
+################
+
+snippet prop "Simple property declaration" b
+public ${1:int} ${2:MyProperty} { get; set; }
+endsnippet
+
+snippet propfull "Full property declaration" b
+private ${1:int} ${2:_myProperty};
+
+public $1 ${3:MyProperty}
+{
+ get { return $2; }
+ set { $2 = value; }
+}
+endsnippet
+
+snippet propg "Property with a private setter" b
+public ${1:int} ${2:MyProperty} { get; private set; }
+endsnippet
+
+
+############
+# blocks #
+############
+
+snippet #if "#if #endif" b
+#if ${1:DEBUG}
+${VISUAL}$0
+#endif
+endsnippet
+
+snippet #region "#region #endregion" b
+#region ${1:Region}
+${VISUAL}$0
+#endregion
+endsnippet
+
+
+###########
+# loops #
+###########
+
+snippet for "for loop" b
+for (int ${1:i} = 0; $1 < ${2:10}; $1++)
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet forr "for loop (reverse)" b
+for (int ${1:i} = ${2:10}; $1 >= 0; $1--)
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet foreach "foreach loop" b
+foreach (${3:var} ${2:item} in ${1:items})
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet while "while loop" b
+while (${1:true})
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet do "do loop" b
+do
+{
+ ${VISUAL}$0
+} while (${1:true});
+endsnippet
+
+
+###############
+# branching #
+###############
+
+snippet if "if statement" b
+if ($1)
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet ife "if else statement" b
+if ($1)
+{
+ ${VISUAL}$0
+}
+else
+{
+}
+endsnippet
+
+snippet elif "else if" b
+else if ($1)
+{
+ $0
+}
+endsnippet
+
+snippet elseif "else if" b
+else if ($1)
+{
+ $0
+}
+endsnippet
+
+snippet ifnn "if not null" b
+if ($1 != null)
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet switch "switch statement" b
+switch (${1:statement})
+{
+ case ${2:value}:
+ break;
+
+ default:
+ $0break;
+}
+endsnippet
+
+snippet case "case" b
+case ${1:value}:
+ $2
+ break;
+endsnippet
+
+
+##############
+# wrappers #
+##############
+
+snippet using "using statement" b
+using (${1:resource})
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet unchecked "unchecked block" b
+unchecked
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet checked "checked block" b
+checked
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet unsafe "unsafe" b
+unsafe
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+
+########################
+# exception handling #
+########################
+
+snippet try "try catch block" b
+try
+{
+ ${VISUAL}$0
+}
+catch (${1:Exception} ${2:e})
+{
+ throw;
+}
+endsnippet
+
+snippet tryf "try finally block" b
+try
+{
+ ${VISUAL}$0
+}
+finally
+{
+}
+endsnippet
+
+snippet throw "throw"
+throw new $1Exception("$2");
+endsnippet
+
+
+##########
+# LINQ #
+##########
+
+snippet from "LINQ syntax" b
+var ${1:seq} =
+ from ${2:item1} in ${3:items1}
+ join ${4:item2} in ${5:items2} on $2.${6:prop1} equals $4.${7:prop2}
+ select ${8:$2.prop3}
+ where ${9:clause}
+endsnippet
+
+
+############################
+# feedback and debugging #
+############################
+
+snippet da "Debug.Assert" b
+Debug.Assert(${1:true});
+endsnippet
+
+snippet cw "Console.WriteLine" b
+Console.WriteLine("$1");
+endsnippet
+
+snippet cr "Console.ReadLine" b
+Console.ReadLine();
+endsnippet
+
+# as you first type comma-separated parameters on the right, {n} values appear in the format string
+snippet cwp "Console.WriteLine with parameters" b
+Console.WriteLine("${2:`!p
+snip.rv = ' '.join(['{' + str(i) + '}' for i in range(t[1].count(','))])
+`}"${1:, something});
+endsnippet
+
+snippet mbox "Message box" b
+MessageBox.Show("${1:message}");
+endsnippet
+
+
+#############
+# methods #
+#############
+
+snippet equals "Equality for a type" b
+public override bool Equals(object obj) => Equals(obj as ${1:TYPE});
+
+public bool Equals($1 other) // IEquatable<$1>
+{
+ if (object.ReferenceEquals(other, null))
+ return false;
+ if (object.ReferenceEquals(this, other))
+ return true;
+ if (this.GetType() != other.GetType())
+ return false;
+ $0
+ return base.Equals(other);
+}
+
+public override int GetHashCode() => base.GetHashCode();
+
+public static bool operator ==($1 x, $1 y) =>
+ (object.ReferenceEquals(x, null) && object.ReferenceEquals(y, null))
+ || (!object.ReferenceEquals(x, null) && x.Equals(y));
+
+public static bool operator !=($1 x, $1 y) => !(x == y);
+
+endsnippet
+
+snippet mth "Method" b
+${1:public} ${2:void} ${3:MyMethod}(${4})
+{
+ $0
+}
+endsnippet
+
+snippet mths "Static method" b
+${1:public} static ${2:void} ${3:MyMethod}(${4})
+{
+ $0
+}
+endsnippet
+
+###############
+# constructor #
+###############
+
+snippet ctor "Constructor" b
+${1:public} ${2:`!p snip.rv = snip.basename or "untitled"`}(${3})
+{
+ $0
+}
+endsnippet
+
+##############
+# comments #
+##############
+
+snippet /// "XML summary comment" b
+///
+/// $0
+///
+endsnippet
+
+snippet ${2}
+endsnippet
+
+snippet ${2}
+endsnippet
+
+snippet $0
+endsnippet
+
+snippet $0
+endsnippet
diff --git a/.vim/UltiSnips/css.snippets b/.vim/UltiSnips/css.snippets
new file mode 100644
index 00000000..316b0645
--- /dev/null
+++ b/.vim/UltiSnips/css.snippets
@@ -0,0 +1,493 @@
+priority -50
+
+snippet p "padding"
+padding: ${1:0};$0
+endsnippet
+
+snippet m "margin"
+margin: ${1:0};$0
+endsnippet
+
+snippet bd "border"
+border: ${1:0};$0
+endsnippet
+
+snippet d "display"
+display: ${1:none};$0
+endsnippet
+
+snippet bg "background"
+background: ${1:none};$0
+endsnippet
+
+snippet ff "font-family"
+font-family: ${1:"Helvetica Neue", Helvetica, Arial, sans-serif};$0
+endsnippet
+
+snippet h "height"
+height: ${1:auto};$0
+endsnippet
+
+snippet w "width"
+width: ${1:auto};$0
+endsnippet
+
+snippet pos "position"
+position: ${1:relative};$0
+endsnippet
+
+snippet tt "text-transform"
+text-transform: ${1:none};$0
+endsnippet
+
+snippet ! "!important CSS (!)"
+!important
+endsnippet
+
+snippet tsh "text-shadow: color-hex x y blur (text)"
+text-shadow: ${1:${2:offset-x} ${3:offset-y} ${4:blur} ${5:color}};$0
+endsnippet
+
+snippet bxsh "box-shadow: color-hex x y blur (text)"
+box-shadow: ${1:${2:offset-x} ${3:offset-y} ${4:blur} ${5:spread} ${6:color} ${7:inset}};$0
+endsnippet
+
+#
+# Colors
+#
+
+snippet rgb "color rgb"
+rgb(${1:255}, ${2:255}, ${3:255})$0
+endsnippet
+
+snippet rgba "color rgba"
+rgba(${1:255}, ${2:255}, ${3:255}, ${4:0.5})$0
+endsnippet
+
+snippet hsl "color hsl"
+hsl(${1:360}, ${2:100}%, ${3:100}%)$0
+endsnippet
+
+snippet hsla "color hsla"
+hsla(${1:360}, ${2:100}%, ${3:100}%, ${4:0.5})$0
+endsnippet
+
+#
+# Selectors
+#
+
+snippet :fc
+:first-child
+endsnippet
+
+snippet :lc
+:last-child
+endsnippet
+
+snippet :nc
+:nth-child($0)
+endsnippet
+
+snippet :nlc
+:nth-last-child($0)
+endsnippet
+
+snippet :oc
+:only-child
+endsnippet
+
+#
+# Pseudo-elements
+#
+
+snippet :a
+:after
+endsnippet
+
+snippet :b
+:before
+endsnippet
+
+snippet ::a
+::after
+endsnippet
+
+snippet ::b
+::before
+endsnippet
+
+###########################################################################
+# Most of these came from TextMate #
+###########################################################################
+
+snippet background "background-attachment: scroll:fixed (background)"
+background-attachment: ${1:scroll/fixed};$0
+endsnippet
+
+snippet background "background-color: color-hex (background)"
+background-color: #${1:DDD};$0
+endsnippet
+
+snippet background "background-color: color-name (background)"
+background-color: ${1:red};$0
+endsnippet
+
+snippet background "background-color: color-rgb (background)"
+background-color: rgb(${1:255},${2:255},${3:255});$0
+endsnippet
+
+snippet background "background-color: transparent (background)"
+background-color: transparent;$0
+endsnippet
+
+snippet background "background-image: none (background)"
+background-image: none;$0
+endsnippet
+
+snippet background "background-image: url (background)"
+background-image: url($1);$0
+endsnippet
+
+snippet background "background-position: position (background)"
+background-position: ${1:top left/top center/top right/center left/center center/center right/bottom left/bottom center/bottom right/x-% y-%/x-pos y-pos};$0
+endsnippet
+
+snippet background "background-repeat: r:r-x:r-y:n-r (background)"
+background-repeat: ${1:repeat/repeat-x/repeat-y/no-repeat};$0
+endsnippet
+
+snippet background "background: color image repeat attachment position (background)"
+background:${6: #${1:DDD}} url($2) ${3:repeat/repeat-x/repeat-y/no-repeat} ${4:scroll/fixed} ${5:top left/top center/top right/center left/center center/center right/bottom left/bottom center/bottom right/x-% y-%/x-pos y-pos};$0
+endsnippet
+
+snippet border "border-bottom-color: size style color (border)"
+border-bottom-color: #${1:999};$0
+endsnippet
+
+snippet border "border-bottom-style: size style color (border)"
+border-bottom-style: ${1:none/hidden/dotted/dashed/solid/double/groove/ridge/inset/outset};$0
+endsnippet
+
+snippet border "border-bottom-width: size style color (border)"
+border-bottom-width: ${1:1}px ${2:solid} #${3:999};$0
+endsnippet
+
+snippet border "border-bottom: size style color (border)"
+border-bottom: ${1:1}px ${2:solid} #${3:999};$0
+endsnippet
+
+snippet border "border-color: color (border)"
+border-color: ${1:999};$0
+endsnippet
+
+snippet border "border-left-color: color (border)"
+border-right-color: #${1:999};$0
+endsnippet
+
+snippet border "border-left-style: style (border)"
+border-left-style: ${1:none/hidden/dotted/dashed/solid/double/groove/ridge/inset/outset};$0
+endsnippet
+
+snippet border "border-left-width: size (border)"
+border-left-width: ${1:1}px
+endsnippet
+
+snippet border "border-left: size style color (border)"
+border-left: ${1:1}px ${2:solid} #${3:999};$0
+endsnippet
+
+snippet border "border-right-color: color (border)"
+border-right-color: #${1:999};$0
+endsnippet
+
+snippet border "border-right-style: style (border)"
+border-right-style: ${1:none/hidden/dotted/dashed/solid/double/groove/ridge/inset/outset};$0
+endsnippet
+
+snippet border "border-right-width: size (border)"
+border-right-width: ${1:1}px
+endsnippet
+
+snippet border "border-right: size style color (border)"
+border-right: ${1:1}px ${2:solid} #${3:999};$0
+endsnippet
+
+snippet border "border-style: style (border)"
+border-style: ${1:none/hidden/dotted/dashed/solid/double/groove/ridge/inset/outset};$0
+endsnippet
+
+snippet border "border-top-color: color (border)"
+border-top-color: #${1:999};$0
+endsnippet
+
+snippet border "border-top-style: style (border)"
+border-top-style: ${1:none/hidden/dotted/dashed/solid/double/groove/ridge/inset/outset};$0
+endsnippet
+
+snippet border "border-top-width: size (border)"
+border-top-width: ${1:1}px
+endsnippet
+
+snippet border "border-top: size style color (border)"
+border-top: ${1:1}px ${2:solid} #${3:999};$0
+endsnippet
+
+snippet border "border-width: width (border)"
+border-width: ${1:1px};$0
+endsnippet
+
+snippet border "border: size style color (border)"
+border: ${1:1px} ${2:solid} #${3:999};$0
+endsnippet
+
+snippet clear "clear: value (clear)"
+clear: ${1:left/right/both/none};$0
+endsnippet
+
+snippet color "color: color-hex (color)"
+color: #${1:DDD};$0
+endsnippet
+
+snippet color "color: color-name (color)"
+color: ${1:red};$0
+endsnippet
+
+snippet color "color: color-rgb (color)"
+color: rgb(${1:255},${2:255},${3:255});$0
+endsnippet
+
+snippet cursor "cursor: type (cursor)"
+cursor: ${1:default/auto/crosshair/pointer/move/*-resize/text/wait/help};$0
+endsnippet
+
+snippet cursor "cursor: url (cursor)"
+cursor: url($1);$0
+endsnippet
+
+snippet direction "direction: ltr|rtl (direction)"
+direction: ${1:ltr|rtl};$0
+endsnippet
+
+snippet display "display: block (display)"
+display: block;$0
+endsnippet
+
+snippet display "display: common-types (display)"
+display: ${1:none/inline/block/list-item/run-in/compact/marker};$0
+endsnippet
+
+snippet display "display: inline (display)"
+display: inline;$0
+endsnippet
+
+snippet display "display: table-types (display)"
+display: ${1:table/inline-table/table-row-group/table-header-group/table-footer-group/table-row/table-column-group/table-column/table-cell/table-caption};$0
+endsnippet
+
+snippet float "float: left:right:none (float)"
+float: ${1:left/right/none};$0
+endsnippet
+
+snippet font "font-family: family (font)"
+font-family: ${1:Arial, "MS Trebuchet"}, ${2:sans-}serif;$0
+endsnippet
+
+snippet font "font-size: size (font)"
+font-size: ${1:100%};$0
+endsnippet
+
+snippet font "font-style: normal:italic:oblique (font)"
+font-style: ${1:normal/italic/oblique};$0
+endsnippet
+
+snippet font "font-variant: normal:small-caps (font)"
+font-variant: ${1:normal/small-caps};$0
+endsnippet
+
+snippet font "font-weight: weight (font)"
+font-weight: ${1:normal/bold};$0
+endsnippet
+
+snippet font "font: style variant weight size:line-height font -family (font)"
+font: ${1:normal/italic/oblique} ${2:normal/small-caps} ${3:normal/bold} ${4:1em/1.5em} ${5:Arial}, ${6:sans-}serif;$0
+endsnippet
+
+snippet font "font: size font (font)"
+font: ${1:75%} ${2:"Lucida Grande", "Trebuchet MS", Verdana,} ${3:sans-}serif;$0
+endsnippet
+
+snippet letter "letter-spacing: length-em (letter)"
+letter-spacing: $1em;$0
+endsnippet
+
+snippet letter "letter-spacing: length-px (letter)"
+letter-spacing: $1px;$0
+endsnippet
+
+snippet list "list-style-image: url (list)"
+list-style-image: url($1);$0
+endsnippet
+
+snippet list "list-style-position: pos (list)"
+list-style-position: ${1:inside/outside};$0
+endsnippet
+
+snippet list "list-style-type: asian (list)"
+list-style-type: ${1:cjk-ideographic/hiragana/katakana/hiragana-iroha/katakana-iroha};$0
+endsnippet
+
+snippet list "list-style-type: marker(list)"
+list-style-type: ${1:none/disc/circle/square};$0
+endsnippet
+
+snippet list "list-style-type: numeric (list)"
+list-style-type: ${1:decimal/decimal-leading-zero/zero};$0
+endsnippet
+
+snippet list "list-style-type: other (list)"
+list-style-type: ${1:hebrew/armenian/georgian};$0
+endsnippet
+
+snippet list "list-style-type: roman-alpha-greek (list)"
+list-style-type: ${1:lower-roman/upper-roman/lower-alpha/upper-alpha/lower-greek/lower-latin/upper-latin};$0
+endsnippet
+
+snippet list "list-style: type position image (list)"
+list-style: ${1:none/disc/circle/square/decimal/zero} ${2:inside/outside} url($3);$0
+endsnippet
+
+snippet margin "margin-bottom: length (margin)"
+margin-bottom: ${1:20px};$0
+endsnippet
+
+snippet margin "margin-left: length (margin)"
+margin-left: ${1:20px};$0
+endsnippet
+
+snippet margin "margin-right: length (margin)"
+margin-right: ${1:20px};$0
+endsnippet
+
+snippet margin "margin-top: length (margin)"
+margin-top: ${1:20px};$0
+endsnippet
+
+snippet margin "margin: all (margin)"
+margin: ${1:20px};$0
+endsnippet
+
+snippet margin "margin: T R B L (margin)"
+margin: ${1:20px} ${2:0px} ${3:40px} ${4:0px};$0
+endsnippet
+
+snippet margin "margin: V H (margin)"
+margin: ${1:20px} ${2:0px};$0
+endsnippet
+
+snippet marker "marker-offset: auto (marker)"
+marker-offset: auto;$0
+endsnippet
+
+snippet marker "marker-offset: length (marker)"
+marker-offset: ${1:10px};$0
+endsnippet
+
+snippet overflow "overflow: type (overflow)"
+overflow: ${1:visible/hidden/scroll/auto};$0
+endsnippet
+
+snippet padding "padding-bottom: length (margin)"
+padding-bottom: ${1:20px};$0
+endsnippet
+
+snippet padding "padding-left: length (margin)"
+padding-left: ${1:20px};$0
+endsnippet
+
+snippet padding "padding-right: length (margin)"
+padding-right: ${1:20px};$0
+endsnippet
+
+snippet padding "padding-top: length (margin)"
+padding-top: ${1:20px};$0
+endsnippet
+
+snippet padding "padding: T R B L (padding)"
+padding: ${1:20px} ${2:0px} ${3:40px} ${4:0px};$0
+endsnippet
+
+snippet padding "padding: V H (padding)"
+padding: ${1:20px} ${2:0px};$0
+endsnippet
+
+snippet padding "padding: all (padding)"
+padding: ${1:20px};$0
+endsnippet
+
+snippet position "position: type (position)"
+position: ${1:static/relative/absolute/fixed};$0
+endsnippet
+
+snippet { "properties { } ( } )"
+{
+ /* $1 */
+ $0
+
+endsnippet
+
+snippet scrollbar "scrollbar"
+scrollbar-base-color: ${1:#CCCCCC};${2:
+scrollbar-arrow-color: ${3:#000000};
+scrollbar-track-color: ${4:#999999};
+scrollbar-3dlight-color: ${5:#EEEEEE};
+scrollbar-highlight-color: ${6:#FFFFFF};
+scrollbar-face-color: ${7:#CCCCCC};
+scrollbar-shadow-color: ${9:#999999};
+scrollbar-darkshadow-color: ${8:#666666};}
+endsnippet
+
+snippet selection "selection"
+$1::-moz-selection,
+$1::selection {
+ color: ${2:inherit};
+ background: ${3:inherit};
+}
+endsnippet
+
+snippet text "text-align: left:center:right (txt)"
+text-align: ${1:left/right/center/justify};$0
+endsnippet
+
+snippet text "text-decoration: none:underline:overline:line-through:blink (text)"
+text-decoration: ${1:none/underline/overline/line-through/blink};$0
+endsnippet
+
+snippet text "text-indent: length (text)"
+text-indent: ${1:10}px;$0
+endsnippet
+
+snippet text "text-transform: capitalize:upper:lower (text)"
+text-transform: ${1:capitalize/uppercase/lowercase};$0
+endsnippet
+
+snippet vertical "vertical-align: type (vertical)"
+vertical-align: ${1:baseline/sub/super/top/text-top/middle/bottom/text-bottom/length/%};$0
+endsnippet
+
+snippet visibility "visibility: type (visibility)"
+visibility: ${1:visible/hidden/collapse};$0
+endsnippet
+
+snippet white "white-space: normal:pre:nowrap (white)"
+white-space: ${1:normal/pre/nowrap};$0
+endsnippet
+
+snippet word "word-spacing: length (word)"
+word-spacing: ${1:10px};$0
+endsnippet
+
+snippet z "z-index: index (z)"
+z-index: $1;$0
+endsnippet
+
+# vim:ft=snippets:
diff --git a/.vim/UltiSnips/cuda.snippets b/.vim/UltiSnips/cuda.snippets
new file mode 100644
index 00000000..2a9a7e5e
--- /dev/null
+++ b/.vim/UltiSnips/cuda.snippets
@@ -0,0 +1,5 @@
+priority -50
+
+extends cpp
+
+# vim:ft=snippets:
diff --git a/.vim/UltiSnips/d.snippets b/.vim/UltiSnips/d.snippets
new file mode 100644
index 00000000..a9d89b84
--- /dev/null
+++ b/.vim/UltiSnips/d.snippets
@@ -0,0 +1,584 @@
+# Simple shortcuts
+
+priority -50
+
+snippet imp "import (imp)" b
+import ${1:std.stdio};
+endsnippet
+
+snippet pimp "public import (pimp)" b
+public import ${1:/*module*/};
+endsnippet
+
+snippet over "override (over)" b
+override ${1:/*function*/}
+endsnippet
+
+snippet al "alias (al)"
+alias ${1:/*orig*/} ${2:/*alias*/};
+endsnippet
+
+snippet mixin "mixin (mixin)" b
+mixin ${1:/*mixed_in*/} ${2:/*name*/};
+endsnippet
+
+snippet new "new (new)"
+new $1($2);
+endsnippet
+
+snippet scpn "@safe const pure nothrow (scpn)"
+@safe const pure nothrow
+endsnippet
+
+snippet spn "@safe pure nothrow (spn)"
+@safe pure nothrow
+endsnippet
+
+snippet cont "continue (cont)"
+continue;
+endsnippet
+
+snippet dis "@disable (dis)" b
+@disable ${1:/*method*/};
+endsnippet
+
+snippet pub "public (pub)" b
+public:
+ ${1:/*members*/}
+endsnippet
+
+snippet priv "private (priv)" b
+private:
+ ${1:/*members*/}
+endsnippet
+
+snippet prot "protected (prot)" b
+protected:
+ ${1:/*members*/}
+endsnippet
+
+snippet pack "package (pack)" b
+package:
+ ${1:/*members*/}
+endsnippet
+
+snippet ret "return (ret)"
+return ${1:/*value to return*/};
+endsnippet
+
+snippet auto "auto (auto)" b
+auto ${1:/*variable*/} = ${2:/*value*/};
+endsnippet
+
+snippet con "const (con)" b
+const ${1:/*variable*/} = ${2:/*value*/};
+endsnippet
+
+snippet siz "size_t (siz)" b
+size_t ${1:/*variable*/} = ${2:/*value*/};
+endsnippet
+
+snippet sup "super (sup)" b
+super(${1:/*args*/});
+endsnippet
+
+# Phobos
+
+snippet tup "tuple (tup)"
+tuple(${1:/*args*/})
+endsnippet
+
+snippet wr "writeln (wr)"
+writeln(${1:/*args*/});
+endsnippet
+
+snippet to "to (to)"
+to!(${1:/*type*/})(${2:/*arg*/})
+endsnippet
+
+snippet enf "enforce (enf)" b
+enforce(${1:/*condition*/},
+ new $2Exception(${3:/*args*/}));
+endsnippet
+
+# Branches
+
+snippet if "if .. (if)"
+if(${1:/*condition*/})
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet ife "if .. else (ife)" b
+if(${1:/*condition*/})
+{
+ $2
+}
+else
+{
+ ${3:/*else*/}
+}
+endsnippet
+
+snippet el "else (el)" b
+else
+{
+ ${VISUAL}$1
+}
+endsnippet
+
+snippet elif "else if (elif)" b
+else if(${1:/*condition*/})
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet sw "switch (sw)"
+switch(${1:/*var*/})
+{
+ case ${2:/*value*/}:
+ $3
+ break;
+ case ${4:/*value*/}:
+ $5
+ break;
+ ${7:/*more cases*/}
+ default:
+ ${6:assert(false);}
+}
+endsnippet
+
+snippet fsw "final switch (fsw)"
+final switch(${1:/*var*/})
+{
+ case ${2:/*value*/}:
+ $3
+ break;
+ case ${4:/*value*/}:
+ $5
+ break;
+ ${7:/*more cases*/}
+}
+endsnippet
+
+snippet case "case (case)" b
+case ${1:/*value*/}:
+ $2
+ break;
+endsnippet
+
+snippet ?: "ternary operator (?:)"
+${1:/*condition*/} ? ${2:/*then*/} : ${3:/*else*/}$4
+endsnippet
+
+# Loops
+
+snippet do "do while (do)" b
+do
+{
+ ${VISUAL}$2
+} while(${1:/*condition*/});
+endsnippet
+
+snippet wh "while (wh)" b
+while(${1:/*condition*/})
+{
+ ${VISUAL}$2
+}
+endsnippet
+
+snippet for "for (for)" b
+for (${4:size_t} ${2:i} = 0; $2 < ${1:count}; ${3:++$2})
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet forever "forever (forever)" b
+for(;;)
+{
+ ${VISUAL}$0
+}
+endsnippet
+
+snippet fore "foreach (fore)"
+foreach(${1:/*elem*/}; ${2:/*range*/})
+{
+ ${VISUAL}$3
+}
+endsnippet
+
+snippet forif "foreach if (forif)" b
+foreach(${1:/*elem*/}; ${2:/*range*/}) if(${3:/*condition*/})
+{
+ ${VISUAL}$4
+}
+endsnippet
+
+# Contracts
+snippet in "in contract (in)" b
+in
+{
+ assert(${1:/*condition*/}, "${2:error message}");
+ $3
+}
+body
+endsnippet
+
+snippet out "out contract (out)" b
+out${1:(result)}
+{
+ assert(${2:/*condition*/}, "${3:error message}");
+ $4
+}
+body
+endsnippet
+
+snippet inv "invariant (inv)" b
+invariant()
+{
+ assert(${1:/*condition*/}, "${2:error message}");
+ $3
+}
+endsnippet
+
+# Functions (generic)
+
+snippet fun "function definition (fun)"
+${1:void} ${2:/*function name*/}(${3:/*args*/}) ${4:@safe pure nothrow}
+{
+ ${VISUAL}$5
+}
+endsnippet
+
+snippet void "void function definition (void)"
+void ${1:/*function name*/}(${2:/*args*/}) ${3:@safe pure nothrow}
+{
+ ${VISUAL}$4
+}
+endsnippet
+
+snippet this "ctor (this)" w
+this(${1:/*args*/})
+{
+ ${VISUAL}$2
+}
+endsnippet
+
+snippet get "getter property (get)"
+@property ${1:/*type*/} ${2:/*member_name*/}() const pure nothrow {return ${3:$2_};}
+endsnippet
+
+snippet set "setter property (set)"
+@property void ${1:/*member_name*/}(${2:/*type*/} rhs) pure nothrow {${3:$1_} = rhs;}
+endsnippet
+
+# Functions (concrete)
+
+snippet main "Main" b
+void main(string[] args)
+{
+ ${VISUAL}${0: /*code*/}
+}
+endsnippet
+
+# Mixins
+
+snippet signal "signal (signal)" b
+mixin Signal!(${1:/*args*/}) ${2:/*name*/};
+endsnippet
+
+# Scope
+
+snippet scope "scope (scope)" b
+scope(${1:exit})
+{
+ ${VISUAL}$2
+}
+endsnippet
+
+# With
+
+snippet with "with (with)"
+with($1)
+{
+ ${VISUAL}$2
+}
+endsnippet
+
+# Exception handling
+
+snippet try "try/catch (try)" b
+try
+{
+ ${VISUAL}${1:/*code to try*/}
+}
+catch($2Exception e)
+{
+ ${3:/*handle exception*/}
+}
+endsnippet
+
+snippet tryf "try/catch/finally (tryf)" b
+try
+{
+ ${VISUAL}${1:/*code to try*/}
+}
+catch($2Exception e)
+{
+ ${3:/*handle exception*/}
+}
+finally
+{
+ ${4:/*cleanup*/}
+}
+endsnippet
+
+snippet catch "catch (catch)" b
+catch($1Exception e)
+{
+ ${2:/*handle exception*/}
+}
+endsnippet
+
+snippet thr "throw (thr)"
+throw new $1Exception("$2");
+endsnippet
+
+
+# Type declarations
+
+snippet struct "struct (struct)"
+struct ${1:`!p snip.rv = (snip.basename or "name")`}
+{
+ $2
+}
+endsnippet
+
+snippet union "union (union)"
+union ${1:`!p snip.rv = (snip.basename or "name")`}
+{
+ $2
+}
+endsnippet
+
+snippet class "class (class)"
+class ${1:`!p snip.rv = (snip.basename or "name")`}
+{
+ $2
+}
+endsnippet
+
+snippet inter "interface (inter)"
+interface ${1:`!p snip.rv = (snip.basename or "name")`}
+{
+ $2
+}
+endsnippet
+
+snippet enum "enum (enum)"
+enum ${1:`!p snip.rv = (snip.basename or "name")`}
+{
+ $2
+}
+endsnippet
+
+
+# Exception declarations
+
+snippet exc "exception declaration (exc)" b
+/// ${3:/*documentation*/}
+class $1Exception : $2Exception
+{
+ public this(string msg, string file = __FILE__, int line = __LINE__)
+ {
+ super(msg, file, line);
+ }
+}
+endsnippet
+
+
+# Conditional compilation
+
+snippet version "version (version)" b
+version(${1:/*version name*/})
+{
+ ${VISUAL}$2
+}
+endsnippet
+
+snippet debug "debug" b
+debug
+{
+ ${VISUAL}$1
+}
+endsnippet
+
+
+# Templates
+
+snippet temp "template (temp)" b
+template ${2:/*name*/}(${1:/*args*/})
+{
+ $3
+}
+endsnippet
+
+
+# Asserts
+
+snippet ass "assert (ass)" b
+assert(${1:false}, "${2:TODO}");
+
+endsnippet
+
+
+# Unittests
+
+snippet unittest "unittest (unittest)" b
+unittest
+{
+ $1
+}
+endsnippet
+
+
+# Common member functions
+
+snippet opDis "opDispatch (opDis)" b
+${1:/*return type*/} opDispatch(string s)()
+{
+ $2;
+}
+endsnippet
+
+snippet op= "opAssign (op=)" b
+void opAssign($1 rhs) ${2:@safe pure nothrow}
+{
+ $2
+}
+endsnippet
+
+snippet opCmp "opCmp (opCmp)" b
+int opCmp($1 rhs) @safe const pure nothrow
+{
+ $2
+}
+endsnippet
+
+snippet opApply "opApply (opApply)" b
+int opApply(int delegate(ref ${1:/*iterated type/s*/}) dg)
+{
+ int result = 0;
+ ${2:/*loop*/}
+ {
+ result = dg(${3:/*arg/s*/});
+ if(result){break;}
+ }
+ return result;
+}
+endsnippet
+
+snippet toString "toString (toString)" b
+string toString() @safe const pure nothrow
+{
+ $1
+}
+endsnippet
+
+
+# Comments
+
+
+snippet todo "TODO (todo)"
+// TODO: $1
+endsnippet
+
+
+# DDoc
+
+snippet doc "generic ddoc block (doc)" b
+/// ${1:description}
+///
+/// ${2:details}
+endsnippet
+
+snippet fdoc "function ddoc block (fdoc)" b
+/// ${1:description}
+///
+/// ${2:Params: ${3:param} = ${4:param description}
+/// $5}
+///
+/// ${6:Returns: ${7:return value}}
+///
+/// ${8:Throws: $9Exception $10}
+endsnippet
+
+snippet Par "Params (Par)"
+Params: ${1:param} = ${2:param description}
+/// $3
+endsnippet
+
+snippet Ret "Returns (Ret)"
+Returns: ${1:return value/s}
+endsnippet
+
+snippet Thr "Throws (Thr)"
+Throws: $1Exception $2
+endsnippet
+
+snippet Example "Examples (Example)"
+Examples:
+/// --------------------
+/// ${1:example code}
+/// --------------------
+endsnippet
+
+
+# License blocks
+
+snippet gpl "GPL (gpl)" b
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+// Copyright (C) ${1:Author}, `!v strftime("%Y")`
+
+$2
+endsnippet
+
+snippet boost "Boost (boost)" b
+// Copyright ${1:Author} `!v strftime("%Y")`.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+$2
+endsnippet
+
+
+# New module
+
+snippet module "New module (module)" b
+// Copyright ${1:Author} `!v strftime("%Y")`.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+module $2.`!v vim_snippets#Filename('$1', 'name')`;
+
+
+$3
+endsnippet
diff --git a/.vim/UltiSnips/django.snippets b/.vim/UltiSnips/django.snippets
new file mode 100644
index 00000000..a03cf1e3
--- /dev/null
+++ b/.vim/UltiSnips/django.snippets
@@ -0,0 +1,360 @@
+priority -50
+
+# This files will define django snippets from sublime text djaneiro
+# FORMS SNIPPETS
+
+snippet form "Form" b
+class ${1:FORMNAME}(forms.Form):
+
+ ${2:# TODO: Define form fields here}
+endsnippet
+
+snippet modelform "ModelForm" b
+class ${1:MODELNAME}Form(forms.ModelForm):
+
+ class Meta:
+ model = $1
+endsnippet
+
+snippet fbool "BooleanField" b
+${1:FIELDNAME} = forms.BooleanField($2)
+endsnippet
+
+snippet fchar "CharField" b
+${1:FIELDNAME} = forms.CharField($2)
+endsnippet
+
+snippet fchoice "ChoiceField" b
+${1:FIELDNAME} = forms.ChoiceField($2)
+endsnippet
+
+snippet fcombo "ComboField" b
+${1:FIELDNAME} = forms.ComboField($2)
+endsnippet
+
+snippet fdate "DateField" b
+${1:FIELDNAME} = forms.DateField($2)
+endsnippet
+
+snippet fdatetime "DateTimeField" b
+${1:FIELDNAME} = forms.DateTimeField($2)
+endsnippet
+
+snippet fdecimal "DecimalField" b
+${1:FIELDNAME} = forms.DecimalField($2)
+endsnippet
+
+snippet fmail "EmailField" b
+${1:FIELDNAME} = forms.EmailField($2)
+endsnippet
+
+snippet ffile "FileField" b
+${1:FIELDNAME} = forms.FileField($2)
+endsnippet
+
+snippet ffilepath "FilePathField" b
+${1:FIELDNAME} = forms.FilePathField($2)
+endsnippet
+
+snippet ffloat "FloatField" b
+${1:FIELDNAME} = forms.FloatField($2)
+endsnippet
+
+snippet fip "IPAddressField" b
+${1:FIELDNAME} = forms.IPAddressField($2)
+endsnippet
+
+snippet fimg "ImageField" b
+${1:FIELDNAME} = forms.ImageField($2)
+endsnippet
+
+snippet fint "IntegerField" b
+${1:FIELDNAME} = forms.IntegerField($2)
+endsnippet
+
+snippet fmochoice "ModelChoiceField" b
+${1:FIELDNAME} = forms.ModelChoiceField($2)
+endsnippet
+
+snippet fmomuchoice "ModelMultipleChoiceField" b
+${1:FIELDNAME} = forms.ModelMultipleChoiceField($2)
+endsnippet
+
+snippet fmuval "MultiValueField" b
+${1:FIELDNAME} = forms.MultiValueField($2)
+endsnippet
+
+snippet fmuchoice "MultipleChoiceField" b
+${1:FIELDNAME} = forms.MultipleChoiceField($2)
+endsnippet
+
+snippet fnullbool "NullBooleanField" b
+${1:FIELDNAME} = forms.NullBooleanField($2)
+endsnippet
+
+snippet freg "RegexField" b
+${1:FIELDNAME} = forms.RegexField($2)
+endsnippet
+
+snippet fslug "SlugField" b
+${1:FIELDNAME} = forms.SlugField($2)
+endsnippet
+
+snippet fsdatetime "SplitDateTimeField" b
+${1:FIELDNAME} = forms.SplitDateTimeField($2)
+endsnippet
+
+snippet ftime "TimeField" b
+${1:FIELDNAME} = forms.TimeField($2)
+endsnippet
+
+snippet ftchoice "TypedChoiceField" b
+${1:FIELDNAME} = forms.TypedChoiceField($2)
+endsnippet
+
+snippet ftmuchoice "TypedMultipleChoiceField" b
+${1:FIELDNAME} = forms.TypedMultipleChoiceField($2)
+endsnippet
+
+snippet furl "URLField" b
+${1:FIELDNAME} = forms.URLField($2)
+endsnippet
+
+# MODELS SNIPPETS
+
+snippet model "Model" b
+class ${1:MODELNAME}(models.Model):
+ $0
+ class Meta:
+ verbose_name = "$1"
+ verbose_name_plural = "$1s"
+
+ def __str__(self):
+ return super($1, self).__str__()
+
+endsnippet
+
+snippet modelfull "Model" b
+class ${1:MODELNAME}(models.Model):
+ ${2:# TODO: Define fields here}
+
+ class Meta:
+ verbose_name = "$1"
+ verbose_name_plural = "$1s"
+
+ def __str__(self):
+ return super($1, self).__str__()
+
+ def save(self):
+ return super($1, self).save()
+
+ def get_absolute_url(self):
+ return ('')
+
+ ${3:# TODO: Define custom methods here}
+
+endsnippet
+
+snippet mauto "AutoField" b
+${1:FIELDNAME} = models.AutoField($2)
+endsnippet
+
+snippet mbigint "BigIntegerField" b
+${1:FIELDNAME} = models.BigIntegerField($2)
+endsnippet
+
+snippet mbool "BooleanField" b
+${1:FIELDNAME} = models.BooleanField($2)
+endsnippet
+
+snippet mchar "CharField" b
+${1:FIELDNAME} = models.CharField($2, max_length=${3:50})
+endsnippet
+
+snippet mcoseint "CommaSeparatedIntegerField" b
+${1:FIELDNAME} = models.CommaSeparatedIntegerField($2)
+endsnippet
+
+snippet mdate "DateField" b
+${1:FIELDNAME} = models.DateField($2)
+endsnippet
+
+snippet mdatetime "DateTimeField" b
+${1:FIELDNAME} = models.DateTimeField($2)
+endsnippet
+
+snippet mdecimal "DecimalField" b
+${1:FIELDNAME} = models.DecimalField(max_digits=${2:10}, decimal_places=${3:2})
+endsnippet
+
+snippet memail "EmailField" b
+${1:FIELDNAME} = models.EmailField($2)
+endsnippet
+
+snippet mfile "FileField" b
+${1:FIELDNAME} = models.FileField($2)
+endsnippet
+
+snippet mfilepath "FilePathField" b
+${1:FIELDNAME} = models.FilePathField($2)
+endsnippet
+
+snippet mfloat "FloatField" b
+${1:FIELDNAME} = models.FloatField($2)
+endsnippet
+
+snippet fk "ForeignKey" b
+${1:FIELDNAME} = models.ForeignKey($2)
+endsnippet
+
+snippet mip "IPAddressField" b
+${1:FIELDNAME} = models.IPAddressField($2)
+endsnippet
+
+snippet mimg "ImageField" b
+${1:FIELDNAME} = models.ImageField($2)
+endsnippet
+
+snippet mint "IntegerField" b
+${1:FIELDNAME} = models.IntegerField($2)
+endsnippet
+
+snippet m2m "ManyToManyField" b
+${1:FIELDNAME} = models.ManyToManyField($2)
+endsnippet
+
+snippet mnullbool "NullBooleanField" b
+${1:FIELDNAME} = models.NullBooleanField($2)
+endsnippet
+
+snippet o2o "OneToOneField" b
+${1:FIELDNAME} = models.OneToOneField($2)
+endsnippet
+
+snippet mphone "PhoneNumberField" b
+${1:FIELDNAME} = models.PhoneNumberField($2)
+endsnippet
+
+snippet mposint "PositiveIntegerField" b
+${1:FIELDNAME} = models.PositiveIntegerField($2)
+endsnippet
+
+snippet mpossmallint "PositiveSmallIntegerField" b
+${1:FIELDNAME} = models.PositiveSmallIntegerField($2)
+endsnippet
+
+snippet mslug "SlugField" b
+${1:FIELDNAME} = models.SlugField($2)
+endsnippet
+
+snippet msmallint "SmallIntegerField" b
+${1:FIELDNAME} = models.SmallIntegerField($2)
+endsnippet
+
+snippet mtext "TextField" b
+${1:FIELDNAME} = models.TextField($2)
+endsnippet
+
+snippet mtime "TimeField" b
+${1:FIELDNAME} = models.TimeField($2)
+endsnippet
+
+snippet murl "URLField" b
+${1:FIELDNAME} = models.URLField($2)
+endsnippet
+
+snippet musstate "USStateField" b
+${1:FIELDNAME} = models.USStateField($2)
+endsnippet
+
+snippet mxml "XMLField" b
+${1:FIELDNAME} = models.XMLField($2)
+endsnippet
+
+# VIEWS SNIPPETS
+
+snippet adminview "Model Admin View" b
+class $1Admin(admin.ModelAdmin):
+ '''
+ Admin View for $1
+ '''
+ list_display = ('$2',)
+ list_filter = ('$3',)
+ inlines = [
+ $4Inline,
+ ]
+ raw_id_fields = ('$5',)
+ readonly_fields = ('$6',)
+ search_fields = ['$7']
+admin.site.register($1, $1Admin)
+endsnippet
+
+snippet createview "Generic Create View" b
+class ${1:MODEL_NAME}CreateView(CreateView):
+ model = $1
+ template_name = "${2:TEMPLATE_NAME}"
+endsnippet
+
+snippet deleteview "Generic Delete View" b
+class ${1:MODEL_NAME}DeleteView(DeleteView):
+ model = $1
+ template_name = "${2:TEMPLATE_NAME}"
+endsnippet
+
+snippet detailview "Generic Detail View" b
+class ${1:MODEL_NAME}DetailView(DetailView):
+ model = $1
+ template_name = "${2:TEMPLATE_NAME}"
+endsnippet
+
+snippet listview "Generic List View" b
+class ${1:MODEL_NAME}ListView(ListView):
+ model = $1
+ template_name = "${2:TEMPLATE_NAME}"
+endsnippet
+
+snippet stackedinline "Stacked Inline" b
+class $1Inline(admin.StackedInline):
+ '''
+ Stacked Inline View for $1
+ '''
+ model = ${2:$1}
+ min_num = ${3:3}
+ max_num = ${4:20}
+ extra = ${5:1}
+ raw_id_fields = ($6,)
+endsnippet
+
+snippet tabularinline "Tabular Inline" b
+class $1Inline(admin.TabularInline):
+ '''
+ Tabular Inline View for $1
+ '''
+ model = ${2:$1}
+ min_num = ${3:3}
+ max_num = ${4:20}
+ extra = ${5:1}
+ raw_id_fields = ($6,)
+endsnippet
+
+snippet templateview "Generic Template View" b
+class ${1:CLASS_NAME}(TemplateView):
+ template_name = "${2:TEMPLATE_NAME}"
+endsnippet
+
+snippet updateview "Generic Update View" b
+class ${1:MODEL_NAME}UpdateView(UpdateView):
+ model = $1
+ template_name = "${2:TEMPLATE_NAME}"
+endsnippet
+
+snippet dispatch "Dispatch View method" b
+def dispatch(self, request, *args, **kwargs):
+ return super(${1:CLASS_NAME}, self).dispatch(request, *args, **kwargs)
+endsnippet
+
+snippet context "get_context_data view method" b
+def get_context_data(self, **kwargs):
+ kwargs['extra_context'] = ${1:'New Value'}
+ return super(${2:CLASS_NAME}, self).get_context_data(**kwargs)
+endsnippet
diff --git a/.vim/UltiSnips/eelixir.snippets b/.vim/UltiSnips/eelixir.snippets
new file mode 100644
index 00000000..3c490dbb
--- /dev/null
+++ b/.vim/UltiSnips/eelixir.snippets
@@ -0,0 +1,43 @@
+priority -50
+
+extends html
+
+snippet % "<% %>" w
+<% $0 %>
+endsnippet
+
+snippet = "<%= %>" w
+<%= $0 %>
+endsnippet
+
+snippet end "<% end %>" w
+<% end %>
+endsnippet
+
+snippet for
+<%= for ${1:item} <- ${2:$1s} ${3:@conn} do %>
+ $0
+<% end %>
+endsnippet
+
+snippet ft "form_tag" w
+<%= form_tag(${1:"${2:/users}"}, method: ${3::post}) %>
+ $0
+
+endsnippet
+
+snippet lin "link" w
+<%= link ${1:"${2:Submit}"}, to: ${3:"${4:/users}"}, method: ${5::delete} %>
+endsnippet
+
+snippet ff "form_for" w
+<%= form_for @changeset, ${1:"${2:/users}"}, fn f -> %>
+ $0
+
+ <%= submit "Submit" %>
+<% end %>
+endsnippet
+
+snippet gt "gettext" w
+<%= gettext("${0:${VISUAL}}") %>
+endsnippet
diff --git a/.vim/UltiSnips/ejs.snippets b/.vim/UltiSnips/ejs.snippets
new file mode 100644
index 00000000..1e3c0044
--- /dev/null
+++ b/.vim/UltiSnips/ejs.snippets
@@ -0,0 +1,10 @@
+snippet for "ejs for loop" b
+<% for (let ${1:i = 0}; ${2:i
+ ${0:body}
+<% } %>
+endsnippet
+snippet forE "ejs for Each loop" b
+<% ${1:array}.forEach((${2:single var}) => { %>
+ ${0:body}
+<% }) %>
+endsnippet
diff --git a/.vim/UltiSnips/elm.snippets b/.vim/UltiSnips/elm.snippets
new file mode 100644
index 00000000..6e21bb5e
--- /dev/null
+++ b/.vim/UltiSnips/elm.snippets
@@ -0,0 +1,9 @@
+priority -50
+
+snippet impa "Qualified import"
+import ${1:Json.Encode} as ${0:`!p snip.rv = t[1].split(".")[-1]`}
+endsnippet
+
+snippet impae "Qualified import with exposing"
+import ${1:Json.Encode} as ${2:`!p snip.rv = t[1].split(".")[-1]`} exposing (${0:Value})
+endsnippet
diff --git a/.vim/UltiSnips/erlang.snippets b/.vim/UltiSnips/erlang.snippets
new file mode 100644
index 00000000..0ac9f5cd
--- /dev/null
+++ b/.vim/UltiSnips/erlang.snippets
@@ -0,0 +1,24 @@
+###########################################################################
+# TEXTMATE SNIPPETS #
+###########################################################################
+
+priority -50
+
+snippet pat "Case:Receive:Try Clause"
+${1:pattern}${2: when ${3:guard}} ->
+ ${4:body}
+endsnippet
+
+snippet mod "Module Directive" b
+-module(${1:`!p snip.rv = snip.basename or "module"`}).
+endsnippet
+
+snippet || "List Comprehension"
+[${1:X} || ${2:X} <- ${3:List}${4:, gen}]
+endsnippet
+
+snippet gen "Generator Expression"
+${1:X} <- ${2:List}${3:, gen}
+endsnippet
+
+# vim:ft=snippets:
diff --git a/.vim/UltiSnips/eruby.snippets b/.vim/UltiSnips/eruby.snippets
new file mode 100644
index 00000000..8d97277d
--- /dev/null
+++ b/.vim/UltiSnips/eruby.snippets
@@ -0,0 +1,237 @@
+extends html
+
+priority -50
+
+# TextMate added these variables to cope with changes in ERB handling
+# in different versions of Rails -- for instance, Rails 3 automatically
+# strips whitespace so that it's no longer necessary to use a form like
+# <% end -%>, but if you're still maintaining Rails 2 projects, you
+# can't omit the minus sign and get the same behavior.
+#
+# The following regex replace substitutes the function below for the
+# TextMate variable references after the snippets are converted:
+#
+# /\v\$\{(TM_RAILS_TEMPLATE_([^_]+)_RUBY_([^_\s]+))\}/`!p textmate_var('\1', snip)`/g
+#
+global !p
+def textmate_var(var, snip):
+ lookup = dict(
+ TM_RAILS_TEMPLATE_START_RUBY_EXPR = snip.opt('g:tm_rails_template_start_ruby_expr', '<%= '),
+ TM_RAILS_TEMPLATE_END_RUBY_EXPR = snip.opt('g:tm_rails_template_end_ruby_expr', ' %>'),
+ TM_RAILS_TEMPLATE_START_RUBY_INLINE = snip.opt('g:tm_rails_template_start_ruby_inline', '<% '),
+ TM_RAILS_TEMPLATE_END_RUBY_INLINE = snip.opt('g:tm_rails_template_end_ruby_inline', ' %>'),
+ TM_RAILS_TEMPLATE_END_RUBY_BLOCK = '<% end %>'
+ )
+ snip.rv = lookup[var]
+ return
+endglobal
+
+
+snippet % "<% $0 %>" i
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_INLINE', snip)`$0`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_INLINE', snip)`
+endsnippet
+
+snippet = "<%= $0 %>" i
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`$0`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+###########################################################################
+# GENERATED FROM get_tm_snippets.py + REGEX REPLACE #
+###########################################################################
+
+snippet fi "<%= Fixtures.identify(:symbol) %>"
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`Fixtures.identify(:${1:name})`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`$0
+endsnippet
+
+snippet ft "form_tag" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_INLINE', snip)`form_tag(${1:action: '${2:update}'}${3:, ${4:${5:class}: '${6:form}'\}}}) do`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+ $0
+`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_BLOCK', snip)`
+endsnippet
+
+snippet ffs "form_for submit 2" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`${1:f}.submit '${2:Submit}'${3:, disable_with: '${4:$2ing...}'}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet f. "f_fields_for (nff)" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_INLINE', snip)`f.fields_for :${1:attribute} do |${2:f}|`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_INLINE', snip)`
+ $0
+`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_BLOCK', snip)`
+endsnippet
+
+snippet f. "f.checkbox" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`f.check_box :${1:attribute}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet f. "f.file_field" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`f.file_field :${1:attribute}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet f. "f.hidden_field" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`f.hidden_field :${1:attribute}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet f. "f.label" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`f.label :${1:attribute}${2:, "${3:${1/[[:alpha:]]+|(_)/(?1: :\u$0)/g}}"}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet f. "f.password_field" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`f.password_field :${1:attribute}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet f. "f.radio_button" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`f.radio_button :${1:attribute}, :${2:tag_value}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet f. "f.submit" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`f.submit "${1:Submit}"${2:, disable_with: '${3:$1ing...}'}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet f. "f.text_area" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`f.text_area :${1:attribute}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet f. "f.text_field" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`f.text_field :${1:attribute}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet ffe "form_for with errors" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`error_messages_for :${1:model}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`form_for @${2:$1} do |f|`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+ $0
+`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_BLOCK', snip)`
+endsnippet
+
+snippet ff "form_for" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`form_for @${1:model} do |f|`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+ $0
+`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_BLOCK', snip)`
+endsnippet
+
+snippet ist "image_submit_tag" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`image_submit_tag("${1:agree.png}"${2:${3:, id: "${4:${1/^(\w+)(\.\w*)?$/$1/}}"}${5:, name: "${6:${1/^(\w+)(\.\w*)?$/$1/}}"}${7:, class: "${8:${1/^(\w+)(\.\w*)?$/$1/}-button}"}${9:, disabled: ${10:false}}})`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet it "image_tag" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`image_tag "$1${2:.png}"${3:${4:, title: "${5:title}"}${6:, class: "${7:class}"}}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet layout "layout"
+layout "${1:template_name}"${2:${3:, only: ${4:[:${5:action}, :${6:action}]}}${7:, except: ${8:[:${9:action}, :${10:action}]}}}
+endsnippet
+
+snippet jit "javascript_include_tag" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`javascript_include_tag ${1::all}${2:, cache: ${3:true}}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet lt "link_to (name, dest)" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`link_to "${1:link text...}", ${2:dest}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet lia "link_to (action)" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`link_to "${1:link text...}", action: "${2:index}"`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet liai "link_to (action, id)" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`link_to "${1:link text...}", action: "${2:edit}", id: ${3:@item}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet lic "link_to (controller)" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`link_to "${1:link text...}", controller: "${2:items}"`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet lica "link_to (controller, action)" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`link_to "${1:link text...}", controller: "${2:items}", action: "${3:index}"`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet licai "link_to (controller, action, id)" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`link_to "${1:link text...}", controller: "${2:items}", action: "${3:edit}", id: ${4:@item}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet linpp "link_to (nested path plural)" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`link_to ${1:"${2:link text...}"}, ${3:${10:parent}_${11:child}_path(${12:@}${13:$10})}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet linp "link_to (nested path)" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`link_to ${1:"${2:link text...}"}, ${3:${12:parent}_${13:child}_path(${14:@}${15:$12}, ${16:@}${17:$13})}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet lipp "link_to (path plural)" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`link_to ${1:"${2:link text...}"}, ${3:${4:model}s_path}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet lip "link_to (path)" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`link_to ${1:"${2:link text...}"}, ${3:${12:model}_path(${13:@}${14:$12})}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet lim "link_to model" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`link_to ${1:model}.${2:name}, ${3:${4:$1}_path(${14:$1})}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet hide "page.hide (*ids)"
+page.hide ${1:"${2:id(s)}"}
+endsnippet
+
+snippet ins "page.insert_html (position, id, partial)"
+page.insert_html :${1:top}, ${2:"${3:id}"}, ${4:partial: "${5:template}"}
+endsnippet
+
+snippet rep "page.replace (id, partial)"
+page.replace ${1:"${2:id}"}, ${3:partial: "${4:template}"}
+endsnippet
+
+snippet reph "page.replace_html (id, partial)"
+page.replace_html ${1:"${2:id}"}, ${3:partial: "${4:template}"}
+endsnippet
+
+snippet show "page.show (*ids)"
+page.show ${1:"${2:id(s)}"}
+endsnippet
+
+snippet tog "page.toggle (*ids)"
+page.toggle ${1:"${2:id(s)}"}
+endsnippet
+
+snippet vis "page.visual_effect (effect, id)"
+page.visual_effect :${1:toggle_slide}, ${2:"${3:DOM ID}"}
+endsnippet
+
+snippet rp "render (partial) (rp)"
+render partial: "${1:item}"
+endsnippet
+
+snippet rpc "render (partial,collection) (rpc)"
+render partial: "${1:item}", collection: ${2:@$1s}
+endsnippet
+
+snippet rpl "render (partial,locals) (rpl)"
+render partial: "${1:item}", locals: { ${2:$1}: ${3:@$1}$0 }
+endsnippet
+
+snippet rpo "render (partial,object) (rpo)"
+render partial: "${1:item}", object: ${2:@$1}
+endsnippet
+
+snippet rps "render (partial,status) (rps)"
+render partial: "${1:item}", status: ${2:500}
+endsnippet
+
+snippet slt "stylesheet_link_tag" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`stylesheet_link_tag ${1::all}${2:, cache: ${3:true}}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet st "submit_tag" w
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`submit_tag "${1:Save changes}"${2:, id: "${3:submit}"}${4:, name: "${5:$3}"}${6:, class: "${7:form_$3}"}${8:, disabled: ${9:false}}${10:, disable_with: "${11:Please wait...}"}`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+snippet else "else (ERB)"
+<% else %>
+ $0
+endsnippet
+
+snippet lf "link_to_function"
+`!p textmate_var('TM_RAILS_TEMPLATE_START_RUBY_EXPR', snip)`link_to_function ${1:"${2:Greeting}"}, "${3:alert('Hello world!')}"$4`!p textmate_var('TM_RAILS_TEMPLATE_END_RUBY_EXPR', snip)`
+endsnippet
+
+# vim:ft=snippets:
diff --git a/.vim/UltiSnips/gitcommit.snippets b/.vim/UltiSnips/gitcommit.snippets
new file mode 100644
index 00000000..e2f1ba5d
--- /dev/null
+++ b/.vim/UltiSnips/gitcommit.snippets
@@ -0,0 +1,130 @@
+global !p
+def complete(t, opts):
+ if t:
+ opts = [ m[len(t):] for m in opts if m.startswith(t) ]
+ if len(opts) == 1:
+ return opts[0]
+ return '(' + '|'.join(opts) + ')'
+endglobal
+
+snippet status "Status" bA
+status $1`!p snip.rv = complete(t[1], ['build', 'ci', 'test', 'refactor', 'perf', 'improvement', 'docs', 'chore', 'feat', 'fix'])`
+endsnippet
+
+snippet fix "fix conventional commit"
+fix(${1:scope}): ${2:title}
+
+${0:${VISUAL}}
+endsnippet
+
+snippet feat "feat conventional commit"
+feat(${1:scope}): ${2:title}
+
+${0:${VISUAL}}
+endsnippet
+
+snippet chore "chore conventional commit"
+chore(${1:scope}): ${2:title}
+
+${0:${VISUAL}}
+endsnippet
+
+snippet docs "docs conventional commit"
+docs(${1:scope}): ${2:title}
+
+${0:${VISUAL}}
+endsnippet
+
+snippet improvement "improvement conventional commit"
+improvement(${1:scope}): ${2:title}
+
+${0:${VISUAL}}
+endsnippet
+
+snippet perf "perf conventional commit"
+perf(${1:scope}): ${2:title}
+
+${0:${VISUAL}}
+endsnippet
+
+snippet refactor "refactor conventional commit"
+refactor(${1:scope}): ${2:title}
+
+${0:${VISUAL}}
+endsnippet
+
+snippet test "test conventional commit"
+test(${1:scope}): ${2:title}
+
+${0:${VISUAL}}
+endsnippet
+
+snippet ci "ci conventional commit"
+ci(${1:scope}): ${2:title}
+
+${0:${VISUAL}}
+endsnippet
+
+snippet build "build conventional commit"
+build(${1:scope}): ${2:title}
+
+${0:${VISUAL}}
+endsnippet
+
+snippet sign "Signature"
+-------------------------------------------------------------------------------
+${1:Company Name}
+
+${2:Author Name}
+
+${3:Streetname 21}
+${4:City and Area}
+
+${5:Tel: +44 (0)987 / 888 8888}
+${6:Fax: +44 (0)987 / 888 8882}
+${7:Mail: Email}
+${8:Web: https://}
+-------------------------------------------------------------------------------
+$0
+endsnippet
+
+snippet t "Todo"
+TODO: ${1:What is it} (`date "+%b %d %Y %a (%H:%M:%S)"`, `echo $USER`)
+$0
+endsnippet
+
+snippet cmt "Commit Structure" bA
+${1:Summarize changes in around 50 characters or less}
+
+${2:More detailed explanatory text, if necessary. Wrap it to about 72
+characters or so. In some contexts, the first line is treated as the
+subject of the commit and the rest of the text as the body. The
+blank line separating the summary from the body is critical (unless
+you omit the body entirely); various tools like `log`, `shortlog`
+and `rebase` can get confused if you run the two together.}
+
+${3:Explain the problem that this commit is solving. Focus on why you
+are making this change as opposed to how (the code explains that).
+Are there side effects or other unintuitive consequences of this
+change? Here's the place to explain them.}
+
+${4:Further paragraphs come after blank lines.
+
+ - Bullet points are okay, too
+
+ - Typically a hyphen or asterisk is used for the bullet, preceded
+ by a single space, with blank lines in between, but conventions
+ vary here}
+
+${5:Status}
+
+${6:If you use an issue tracker, put references to them at the bottom,
+like this.}
+
+${7:Any todos}
+
+${8:Resolves: #123
+See also: #456, #789}
+
+${9:Signature}
+endsnippet
diff --git a/.vim/UltiSnips/haskell.snippets b/.vim/UltiSnips/haskell.snippets
new file mode 100644
index 00000000..ed832715
--- /dev/null
+++ b/.vim/UltiSnips/haskell.snippets
@@ -0,0 +1,13 @@
+priority -50
+
+snippet imp "Simple import"
+import ${1:${2:Data}.${0:Text}}
+endsnippet
+
+snippet imp2 "Selective import" b
+import ${1:${2:Data}.${3:Text}} (${4})${0}
+endsnippet
+
+snippet impq "Qualified import"
+import qualified ${1:${2:Data}.${3:Text}} as ${0:`!p snip.rv = t[1].split(".")[-1]`}
+endsnippet
diff --git a/.vim/UltiSnips/help.snippets b/.vim/UltiSnips/help.snippets
new file mode 100644
index 00000000..b07a7de0
--- /dev/null
+++ b/.vim/UltiSnips/help.snippets
@@ -0,0 +1,37 @@
+# Snippets for VIM Help Files
+
+priority -50
+
+global !p
+def sec_title(snip, t):
+ file_start = snip.fn.split('.')[0]
+ sec_name = t[1].strip("1234567890. ").lower().replace(' ', '-')
+ return ("*%s-%s*" % (file_start, sec_name)).rjust(78-len(t[1]))
+endglobal
+
+snippet sec "Section marker" b
+==============================================================================
+${1:SECTION}`!p snip.rv = sec_title(snip, t)`
+
+$0
+endsnippet
+
+snippet ssec "Sub section marker" b
+${1:Subsection}`!p snip.rv = sec_title(snip, t)
+snip += "-"*len(t[1])`
+
+$0
+endsnippet
+
+snippet sssec "Subsub Section marker" b
+${1:SubSubsection}:`!p snip.rv = sec_title(snip, t)`
+
+$0
+endsnippet
+
+# For vim help, follow the same settings as the official docs.
+snippet modeline "Vim help modeline"
+ `!v 'vim'`:tw=78:ts=8:ft=help:norl:
+endsnippet
+
+# vim:ft=snippets:
diff --git a/.vim/UltiSnips/html.snippets b/.vim/UltiSnips/html.snippets
new file mode 100644
index 00000000..75eff902
--- /dev/null
+++ b/.vim/UltiSnips/html.snippets
@@ -0,0 +1,534 @@
+priority -50
+
+###########################################################################
+# TextMate Snippets #
+###########################################################################
+
+global !p
+def x(snip):
+ if snip.ft.startswith("x"):
+ snip.rv = '/'
+ else:
+ snip.rv = ""
+endglobal
+
+snippet doctype "HTML - 5.0 (doctype)" b
+
+
+endsnippet
+
+#############
+# Shortcuts #
+#############
+snippet down "Down (down)"
+↓
+endsnippet
+
+snippet enter "Enter (enter)"
+⌅
+endsnippet
+
+snippet escape "Escape (escape)"
+⎋
+endsnippet
+
+snippet left "Left (left)"
+←
+endsnippet
+
+snippet return "Return (return)"
+↩
+endsnippet
+
+snippet right "Right (right)"
+→
+endsnippet
+
+snippet shift "Shift (shift)"
+⇧
+endsnippet
+
+snippet tab "Tab (tab)"
+⇥
+endsnippet
+
+snippet up "Up (up)"
+↑
+endsnippet
+
+#############
+# HTML TAGS #
+#############
+snippet a "Link" w
+${4:Anchor Text}
+endsnippet
+
+snippet abbr "" w
+$1
+endsnippet
+
+snippet access "accesskey global attribute"
+accesskey="$1"
+endsnippet
+
+snippet address "" w
+$1
+endsnippet
+
+snippet article ""
+
+ ${1:article content}
+
+endsnippet
+
+snippet aside "