[erlang-questions] Vim Editor Erlang Indentation

Gaspar Chilingarov nm@REDACTED
Thu Jun 4 20:11:02 CEST 2009


Hello :)

Let me samelessly promote myself a little bit :)

http://zanazan.am/vim/

Have a nice time and do not hesitate to contact me if there any problems.

About indentation:

I prefer keep indentation in case statements on the same level as case:

a(X) ->
  case X of
  a -> a;
  b -> b;
  c -> c
  end.

Your mileage may vary, but this produces more readable code, afaik.

/Gaspar

PS. Be prepared, that your code will have a lot of RED highlighting -- I 
used that to force people follow our internal coding standard (mainly 
putting the space symbols in correct places).




Oscar Hellström wrote:
> Hi All,
> 
> Long answer to short question. Yes, there is a certain level of
> rant/flame warning here ;)
> 
> I use vim daily in my work, and I also have a lot of opinions on how
> Erlang should be indented. I'm using the indent file found here:
> http://www.vim.org/scripts/script.php?script_id=2023 and I'm quite happy
> with it. It has some minor flaws though. There is a big difference
> between the indentation in provided by this script, and the indentation
> provided by emacs erlang mode, which has caused much annoyance in the
> office. The largest difference is that emacs erlang mode tries to
> *align* code, while the indentation script linked above will only
> increase or decrease the *level of indentation* depending on what tokens
> were found.
> 
> We can use creating tables in mnesia as an example... in emacs:
> mnesia:create_table(foo,
>                     [{attributes,
>                       record_info(fields, foo)},
>                      {ram_copies, [node()]}]).
> 
> While in vim:
> mnesia:create_table(foo,
>     [{attributes,
>             record_info(fields, foo),
>         {ram_copies, [node()]}].
> 
> In vim I would therefore choose to write this as:
> mnesia:create_table(foo, [
>         {attributes, record_info(fields, foo)},
>         {ram_copies, [node()]}
>     ]).
> 
> Now, me might argue forever what is the most pretty, or the one that is
> easiest to read etc., but the problem I have with the aligning approach
> is that the editor has no idea about the difference between indentation
> levels and alignment of text. For instance, imagine we use tab
> characters for indentation, the whole idea here being that I can choose
> to have however many columns per tab character in my editor, and you can
> have however many columns you want, and the code would still indent
> properly. With aligning this doesn't work since the aligning isn't bound
> to be one complete tab character, This causes the editor to insert some
> spaces at some point. Even worse, if you're aligning with an open brace
> for a function call (as above), the number of characters in the
> module/function name has nothing to do with the number of tab characters
> you would like to insert. So, to be able to align something properly,
> the editor would have to consider indentation levels and alignment. It
> would then insert as many tabs as you want for your level of indentation
> and spaces for the rest. With the emacs erlang mode I guess you would
> increase the indentation level by one for every -> you found, but I'm
> not sure if that's true, since I don't use it. With vim, I can choose to
> align things, by adding spaces, not tabs. The only problem comes no the
> next line, where the script believes that wherever the previous line is,
> is my indentation level.
> 
> The default setting in emacs is to represent every 8 columns with a tab
> character. The erlang mode moves 4 columns / indentation level. This
> means that if you move one level, you'll insert 4 spaces, and if the
> next line moves another level, you'll have a tab there. I guess you can
> see where this goes wrong if you open the file in another editor, which
> uses 4 columns / tab character. Also, the aligning will insert some
> tabs, and then some spaces... which causes lots of pain. The way we deal
> with it here is to only use spaces. I think this is sad though. The
> different "styles" of indentation is currently just allowed to exist.
> 
> Felipe Kober wrote:
>> Hello everyone,
>> I like vim editor, but indented output is not the same quality as my
>> colleagues in emacs. why is this? is the limitation in vim or vim indent
>> file?
>>
>> thank you,
>>
>> Felipe.
>>
>>   
> Best regards
> 


-- 
Gaspar Chilingarov

tel +37493 419763 (mobile - leave voice mail message)
icq 63174784
skype://gasparch
e mailto:nm@REDACTED mailto:gasparch@REDACTED
w http://gasparchilingarov.com/


More information about the erlang-questions mailing list