clojure.vim icon indicating copy to clipboard operation
clojure.vim copied to clipboard

Question: is there a way to configure Tonsky's indentation rule?

Open markx opened this issue 3 years ago • 6 comments

Context: https://tonsky.me/blog/clojurefmt/

markx avatar Dec 21 '21 20:12 markx

From a quick scan of that page, it looks like clojurefmt doesn’t exist (yet?). But if it does exist, you can tell Vim to use it by setting formatprg like this:

autocmd! FileType clojure setlocal formatprg=clojurefmt

This will set the program used by the gq operator. So to format the entire file using clojurefmt you would type gggqG in normal mode.

The downside to this is that formatting won’t happen automatically, but you could write a little Vim script to auto-format on file save.

axvr avatar Dec 21 '21 21:12 axvr

Thanks for the tip about formatprg. With it I can use external tools like cljstyles to format the file.

However this is not what I was looking for originally. I was looking for a way to adjust the vim indent config so that it auto-indents following Tonsky's indentation rule. This way the indentation would be correct while I type, so I don't need to save the file constantly.

After some exploring, I found the indentation for lispwords basically works in my setting (I think mostly just set shiftwidth=2), so I just add everything to listpwordsby using:

let g:clojure_fuzzy_indent_patterns = ['^\S\+']

This works in most cases but sometimes doesn't. I haven't figured out why yet.

Is there a better to achieve this?

markx avatar Dec 23 '21 03:12 markx

Oh, OK I think I understand now.

Do you have an example of where your g:clojure_fuzzy_indent_patterns value isn't working properly?

Maybe you could try this one (it should be slightly more accurate):

let g:clojure_fuzzy_indent_patterns = ['^[\k\d]\+']

axvr avatar Dec 23 '21 11:12 axvr

E.g. for this sometimes it doesn't work. (Sometimes it does work. Not sure why. )

(+
 1
 1)

Desired result would be:

(+
  1
  1)

Also let g:clojure_fuzzy_indent_patterns = ['^[\k\d]\+'] doesn't seem to work for me :( What does \k match?

markx avatar Dec 24 '21 01:12 markx

Thanks for the example. I'll look into this when I get a chance (hopefully soon).

(The \k matches characters in the iskeyword option. This value lists (most of) the characters allowed in Clojure symbols.)

axvr avatar Dec 27 '21 13:12 axvr

g:clojure_align_subforms option controls whether to indent function calls with one (tonsky's post) or two spaces ("emacs"/clojure-style-guide). The first, two spaces, is the default.

If you haven't changed the option, check your indentexpr, formatexpr, formatprg, you might another plugin which is indenting function call forms with one space.

Deraen avatar Feb 04 '22 14:02 Deraen