I noted today that formatting lines with gq (with formatoptions set to qtjcrl and unset formatexpr) no longer works when I have the LSP enabled. As soon as I run :LspStop and use gq it works as expected.
How can I properly configure Neovim and the LSP so it preserves the internal formatting behavior when using gq?
I was also missing the ability to use gq on Neovim 0.8. Thanks for mentioning that the problem disappears when stopping the LSP. Nevertheless, I still wanted to be able to run gq and my LSP.
From https://zignar.net/2022/10/01/new-lsp-features-in-neovim-08/#whats-a-formatexpr I learned that since Neovim 0.8.0 the formatexpr is by default bound to vim.lsp.formatexpr as soon the LSP gets attached to the current buffer. So, a solution to it would be to override it inside the on_attach function in lsp-config.
For example:
-- Use an on_attach function to only map the following keys
-- after the language server attaches to the current buffer
local on_attach = function(client, bufnr)
-- Disable lsp formatexpr (use the internal one)
vim.opt.formatexpr = ""
...
end
require('lspconfig')["pylsp"].setup {
on_attach = on_attach,
...
}
Itβs working for me. The only drawback I found with this is that this is applied to every LSP that uses this on_attach function, and maybe one would want to actually use the formatter that the LSP provides. A solution would be to write a different on_attach function for those.