From 799ca92f401b6b11bebbb7bd514214b9156e2504 Mon Sep 17 00:00:00 2001
From: Oliver Davies <oliver@oliverdavies.uk>
Date: Tue, 19 Dec 2023 00:34:30 +0000
Subject: [PATCH] Automatically close brackets, parentheses and

...quotes whilst in insert mode in Neovim
---
 CHANGELOG.md                        |  1 +
 config/neovim/lua/opdavies/init.lua | 24 +++++++++++++++++++++---
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index e0b5b030..53057da4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ Instead of grouping changes by tag, they are grouped by the date they are releas
 ### Added
 
 * Add `prettier` as a formatter within Neovim.
+* Automatically close brackets, parentheses and quotes.
 
 ## 17th December 2023
 
diff --git a/config/neovim/lua/opdavies/init.lua b/config/neovim/lua/opdavies/init.lua
index 527f4ce5..5cb3e1f1 100644
--- a/config/neovim/lua/opdavies/init.lua
+++ b/config/neovim/lua/opdavies/init.lua
@@ -13,8 +13,26 @@ vim.api.nvim_create_user_command("GoToFile", function()
   require("opdavies.telescope").git_files()
 end, {})
 
-local map = require("opdavies.keymap").map
+local imap = require("opdavies.keymap").imap
+local nmap = require("opdavies.keymap").nmap
+local xmap = require("opdavies.keymap").xmap
 
 -- Quicker macro playback.
-map { "n", "Q", "@qj" }
-map { "x", "Q", ":norm @q<CR>" }
+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>" }