diff --git a/runtime/ftplugin/gdscript.vim b/runtime/ftplugin/gdscript.vim
new file mode 100644
index 0000000..dc1d220
--- /dev/null
+++ b/runtime/ftplugin/gdscript.vim
@@ -0,0 +1,53 @@
+vim9script
+
+# Vim filetype plugin file
+# Language: gdscript (Godot game engine scripting language)
+# Maintainer: Maxim Kim <habamax@gmail.com>
+
+if exists("b:did_ftplugin") | finish | endif
+
+b:did_ftplugin = 1
+b:undo_ftplugin = 'setlocal cinkeys<'
+      \ .. '| setlocal indentkeys<'
+      \ .. '| setlocal commentstring<'
+      \ .. '| setlocal suffixesadd<'
+      \ .. '| setlocal foldexpr<'
+      \ .. '| setlocal foldignore<'
+
+setlocal cinkeys-=0#
+setlocal indentkeys-=0#
+setlocal suffixesadd=.gd
+setlocal commentstring=#\ %s
+setlocal foldignore=
+setlocal foldexpr=GDScriptFoldLevel()
+
+
+def GDScriptFoldLevel(): string
+    var line = getline(v:lnum)
+    if line =~? '^\s*$'
+        return "-1"
+    endif
+
+    var sw = shiftwidth()
+    var indent = indent(v:lnum) / sw
+    var indent_next = indent(nextnonblank(v:lnum + 1)) / sw
+
+    if indent_next > indent && line =~ ':\s*$'
+        return $">{indent_next}"
+    else
+        return $"{indent}"
+    endif
+enddef
+
+
+# Next/Previous section
+def NextSection(back: bool, cnt: number)
+    for n in range(cnt)
+        search('^\s*func\s', back ? 'bW' : 'W')
+    endfor
+enddef
+
+nnoremap <silent><buffer>   ]] <scriptcmd>NextSection(false, v:count1)<CR>
+nnoremap <silent><buffer>   [[ <scriptcmd>NextSection(true, v:count1)<CR>
+xmap <silent><buffer><expr> ]] "\<esc>" .. v:count1 .. ']]m>gv'
+xmap <silent><buffer><expr> [[ "\<esc>" .. v:count1 .. '[[m>gv'
diff --git a/runtime/ftplugin/gdshader.vim b/runtime/ftplugin/gdshader.vim
new file mode 100644
index 0000000..74de7c1
--- /dev/null
+++ b/runtime/ftplugin/gdshader.vim
@@ -0,0 +1,12 @@
+vim9script
+
+# Vim filetype plugin file
+# Language: Godot shading language
+# Maintainer: Maxim Kim <habamax@gmail.com>
+
+if exists("b:did_ftplugin") | finish | endif
+b:did_ftplugin = 1
+
+b:undo_ftplugin = 'setlocal suffixesadd<'
+
+setlocal suffixesadd=.gdshader
diff --git a/runtime/ftplugin/racket.vim b/runtime/ftplugin/racket.vim
new file mode 100644
index 0000000..3aa4133
--- /dev/null
+++ b/runtime/ftplugin/racket.vim
@@ -0,0 +1,82 @@
+" Vim filetype plugin
+" Language:             Racket
+" Maintainer:           D. Ben Knoble <ben.knoble+github@gmail.com>
+" Previous Maintainer:  Will Langstroth <will@langstroth.com>
+" URL:                  https://github.com/benknoble/vim-racket
+" Last Change:          2022 Aug 29
+
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" quick hack to allow adding values
+setlocal iskeyword=@,!,#-',*-:,<-Z,a-z,~,_,94
+
+" Enable auto begin new comment line when continuing from an old comment line
+setlocal comments=:;;;;,:;;;,:;;,:;
+setlocal formatoptions+=r
+
+"setlocal commentstring=;;%s
+setlocal commentstring=#\|\ %s\ \|#
+
+setlocal formatprg=raco\ fmt
+
+" Undo our settings when the filetype changes away from Racket
+" (this should be amended if settings/mappings are added above!)
+let b:undo_ftplugin =
+      \  "setlocal iskeyword< lispwords< lisp< comments< formatoptions< formatprg<"
+      \. " | setlocal commentstring<"
+
+if !exists("no_plugin_maps") && !exists("no_racket_maps")
+  " Simply setting keywordprg like this works:
+  "    setlocal keywordprg=raco\ docs
+  " but then vim says:
+  "    "press ENTER or type a command to continue"
+  " We avoid the annoyance of having to hit enter by remapping K directly.
+  function s:RacketDoc(word) abort
+    execute 'silent !raco docs --' shellescape(a:word)
+    redraw!
+  endfunction
+  nnoremap <buffer> <Plug>RacketDoc :call <SID>RacketDoc(expand('<cword>'))<CR>
+  nmap <buffer> K <Plug>RacketDoc
+
+  " For the visual mode K mapping, it's slightly more convoluted to get the
+  " selected text:
+  function! s:Racket_visual_doc()
+    try
+      let l:old_a = @a
+      normal! gv"ay
+      call system("raco docs '". @a . "'")
+      redraw!
+      return @a
+    finally
+      let @a = l:old_a
+    endtry
+  endfunction
+
+  xnoremap <buffer> <Plug>RacketDoc :call <SID>Racket_visual_doc()<cr>
+  xmap <buffer> K <Plug>RacketDoc
+
+  let b:undo_ftplugin .=
+      \  " | silent! execute 'nunmap <buffer> K'"
+      \. " | silent! execute 'xunmap <buffer> K'"
+endif
+
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+  let b:browsefilter =
+        \  "Racket Source Files (*.rkt *.rktl)\t*.rkt;*.rktl\n"
+        \. "All Files (*.*)\t*.*\n"
+  let b:undo_ftplugin .= " | unlet! b:browsefilter"
+endif
+
+if exists("loaded_matchit") && !exists("b:match_words")
+  let b:match_words = '#|:|#'
+  let b:undo_ftplugin .= " | unlet! b:match_words"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
