diff --git a/lua/config/autocmds.lua b/lua/config/autocmds.lua
index 23ae0231b6816dbc30972471ec884c370e903cf9..59e1ac10cb91cba2310802fc19faa4819d09184b 100644
--- a/lua/config/autocmds.lua
+++ b/lua/config/autocmds.lua
@@ -1,5 +1,3 @@
-vim.cmd [[autocmd BufWritePre * lua vim.lsp.buf.format()]]
-
 -- [[ Highlight on yank ]]
 -- See `:help vim.highlight.on_yank()`
 local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true })
@@ -16,6 +14,23 @@ vim.api.nvim_create_autocmd('TextYankPost', {
     pattern = '*',
 })
 
+vim.api.nvim_create_autocmd('LspAttach', {
+    callback = function(args)
+        local client = vim.lsp.get_client_by_id(args.data.client_id)
+        if not client then return end
+
+        --@diagnostic disable-next-line: missing-parameter
+        if client.supports_method('textDocument/formatting') then
+            vim.api.nvim_create_autocmd('BufWritePre', {
+                buffer = args.buf,
+                callback = function()
+                    vim.lsp.buf.format({ bufnr = args.buf, id = client.id })
+                end
+            })
+        end
+    end
+})
+
 local function set_filetype(pattern, filetype)
     vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
         pattern = pattern,