diff --git a/config/neovim/after/ftplugin/markdown.lua b/config/neovim/after/ftplugin/markdown.lua
new file mode 100644
index 00000000..41480681
--- /dev/null
+++ b/config/neovim/after/ftplugin/markdown.lua
@@ -0,0 +1 @@
+vim.o.wrap = true
diff --git a/config/neovim/lua/opdavies/init.lua b/config/neovim/lua/opdavies/init.lua
index 5cb3e1f1..dd2b1821 100644
--- a/config/neovim/lua/opdavies/init.lua
+++ b/config/neovim/lua/opdavies/init.lua
@@ -8,31 +8,3 @@ require "opdavies.lsp"
 
 require "opdavies.telescope.setup"
 require "opdavies.telescope.mappings"
-
-vim.api.nvim_create_user_command("GoToFile", function()
-  require("opdavies.telescope").git_files()
-end, {})
-
-local imap = require("opdavies.keymap").imap
-local nmap = require("opdavies.keymap").nmap
-local xmap = require("opdavies.keymap").xmap
-
--- Quicker macro playback.
-nmap { "Q", "@qj" }
-xmap { "Q", ":norm @q<CR>" }
-
--- Automatically close brackets, parentheses and quotes.
-imap { "'", "''<left>" }
-imap { "(", "()<left>" }
-imap { "/*", "/**/<left><left>" }
-imap { "<", "<><left>" }
-imap { "[", "[]<left>" }
-imap { "[;", "[];<left><left>" }
-imap { "{", "{}<left>" }
-imap { "{;", "{};<left><left>" }
-imap { '\"', '\"\"<left>' }
-
--- TODO: only add these in Twig files?
-imap { "{#", "{#  #}<left><left><left>" }
-imap { "{%", "{%  %}<left><left><left>" }
-imap { "{{", "{{  }}<left><left><left>" }
diff --git a/config/neovim/lua/opdavies/options.lua b/config/neovim/lua/opdavies/options.lua
index 7825dc93..3d18fcd0 100644
--- a/config/neovim/lua/opdavies/options.lua
+++ b/config/neovim/lua/opdavies/options.lua
@@ -31,6 +31,25 @@ local function set_autocmd()
       vim.cmd.set "filetype=term"
     end,
   })
+
+  vim.api.nvim_create_autocmd("FileType", {
+    pattern = "html.twig",
+    group = vim.api.nvim_create_augroup("twig_keymaps", { clear = true }),
+    callback = function()
+      local imap = require("opdavies.keymap").imap
+      local opts = { silent = true, buffer = true }
+
+      imap { "{#", "{#  #}<left><left><left>", opts }
+      imap { "{%", "{%  %}<left><left><left>", opts }
+      imap { "{{", "{{  }}<left><left><left>", opts }
+    end,
+  })
+end
+
+local function set_user_commands()
+  vim.api.nvim_create_user_command("GoToFile", function()
+    require("opdavies.telescope").git_files()
+  end, {})
 end
 
 local function set_filetypes()
@@ -104,6 +123,21 @@ local function set_key_mappings()
   -- Move half a screen up or down and re-center.
   nmap { "<C-d>", "<C-d>zz" }
   nmap { "<C-u>", "<C-u>zz" }
+
+  -- Quicker macro playback.
+  nmap { "Q", "@qj" }
+  xmap { "Q", ":norm @q<CR>" }
+
+  -- Automatically close brackets, parentheses and quotes.
+  imap { "'", "''<left>" }
+  imap { "(", "()<left>" }
+  imap { "/*", "/**/<left><left>" }
+  imap { "<", "<><left>" }
+  imap { "[", "[]<left>" }
+  imap { "[;", "[];<left><left>" }
+  imap { "{", "{}<left>" }
+  imap { "{;", "{};<left><left>" }
+  imap { '"', '""<left>' }
 end
 
 local function set_highlights()
@@ -168,6 +202,7 @@ M.setup = function()
   set_vim_o()
   set_key_mappings()
   set_autocmd()
+  set_user_commands()
   set_filetypes()
   set_highlights()