vim-ocaml icon indicating copy to clipboard operation
vim-ocaml copied to clipboard

Make vim respect the tab width settings

Open gridbugs opened this issue 1 year ago • 1 comments

Somehow the dune filetype in neovim ends up with the "lisp" option set despite this not being explicitly configured. Without this setting indentation of dune files does not happen at all, as it's needed for vim to indent lines based on parentheses. Unfortunately when "lisp" is set, it also causes the softtabstop and shiftwidth settings to be ignored, presumably to allow for indentation conventions in lisp where elements of lists are aligned to the first element of the list, regardless of its indentation. The default behaviour with "lisp" enabled also effectively uses a softtabstop of 2, and this can't be overriden by setting the softtabstop variable.

This makes it frustrating to edit dune files in vim, as the indentation inserted by the editor won't match the 1-space indentation commonly found in dune files. The workaround is to to set lispoptions=expr:1 which allows vim to use a custom indentexpr when "lisp" is set, and to supply a custom indentexpr function which changes the indentation based on unmatched parentheses, which is an approximation of the behaviour of dune format-dune-file.

gridbugs avatar Nov 08 '24 04:11 gridbugs

I still don't understand what causes lisp to be set for the dune filetype. It's definitely set (it's in the output of :set) and unsetting in (run :set nolisp) causes indentation for dune files to completely stop. That makes sense because otherwise vim doesn't know to indent dune files based on parens. I figure it's safer to explicitly set lisp as I've done in this change so if whatever else causes it to be set stops happening, indentation will continue to work.

gridbugs avatar Nov 08 '24 04:11 gridbugs