diff --git a/vim/ftdetect/xt.vim b/vim/ftdetect/xt.vim
new file mode 100644
index 0000000000000000000000000000000000000000..bced81e19f3ab5cf53402e15c3af0091e4070358
--- /dev/null
+++ b/vim/ftdetect/xt.vim
@@ -0,0 +1 @@
+autocmd BufRead,BufNewFile *.xt setlocal filetype=xt
diff --git a/vim/syntax/xt.vim b/vim/syntax/xt.vim
new file mode 100644
index 0000000000000000000000000000000000000000..a07e2c64004e42e17b6a383741645ad634786dc4
--- /dev/null
+++ b/vim/syntax/xt.vim
@@ -0,0 +1,88 @@
+" Vim syntax file
+" Language:	Xdebug trace files (context or unified)
+" Maintainer:	Derick Rethans <derick@xdebug.org>
+" Last Change:	2010 Jun 06
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+syn match begin         "^TRACE START"
+syn match end           "^TRACE END"
+syn match date          "\[.*\]"
+
+syn match min_memory        "+\d\+"
+syn match pls_memory        "-\d\+"
+syn match nll_memory    "+0"
+
+syn match level         "->"
+syn match lineno        ":\d\+$"
+
+syn match result          ">=>.\+"
+syn match assignment      "=> \$[a-z]\+\(->[a-z]\+\)*\ .*="
+syn match assignment      "=> \$[a-z]\+\['\([a-z]\+\)*'\]\ .*="
+
+syn match methodcall      "\k\+->"
+syn match staticcall      "\k\+::"
+syn match functionb       "\k\+("
+syn match functione       ") "
+
+syn match main            "{main}()"
+syn match include         "include\(_once\)\=('.\+')"
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_diff_syntax_inits")
+  if version < 508
+    let did_diff_syntax_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
+
+  HiLink begin	Label
+  HiLink end	Label
+  HiLink date   Label
+  HiLink assignment Label
+
+  HiLink level  SpecialChar
+  HiLink result Constant
+
+  HiLink min_memory Constant
+  HiLink pls_memory Structure
+  HiLink nll_memory Comment
+
+  HiLink main       Structure
+  HiLink include    Structure
+  
+  HiLink lineno Delimiter
+  HiLink methodcall Function
+  HiLink staticcall Function
+  HiLink functionb  Function
+  HiLink functione  Function
+
+  delcommand HiLink
+endif
+
+let b:current_syntax = "xt"
+
+:set foldmethod=expr
+:set foldlevel=9999
+
+" check whether xdebug.show_mem_delta=1 is set
+let s:startColumn = getline(2)[24:25]=='->' ? 22 : 31
+fu! TraceFoldLevel(ln)
+  for i in range(10, 1, -1)
+    if eval('getline(a:ln)['.s:startColumn.':]')=~'^[ ]\{'.(2*i).'\}[^\\s]'
+      return i
+  endfor
+  return 0
+endfu
+:set foldexpr=TraceFoldLevel(v:lnum)
+
+" vim: ts=8 sw=2