Edited on July 11, 2018 after I realized that my function was not working with the latest ESS version anymore.
To change this behaviour, you can use the
customize-variable function for
ess-smart-S-assign and change the "Ess Smart S Assign Key" value to "Nothing",
or you can write in your
(setq ess-insert-assign nil)
ess-insert-assign replaces the now obsolete
ess-smart-S-assign function, though this latter is maintained as an alias for backward compatibility. So, this works as well:
(setq ess-smart-S-assign nil)
I did not like the default behaviour either, but I use
yasnippet to autocomplete the assignment sign, which is rather uneasy to type.
To try to answer your question:
why would they force that sort of behavior?
It might be that the reason
ess-mode-hook doesn't work has to do with the way keyboard remapping works, rather than a stubborn behaviour.
ess-mode-hook does work for other things, but this keyboard remapping seems to follow some particular rules:
In the customization option page for this variable, there is this information: "You may change this to nil at any time. However, if you change it to another string, it must be set before ESS is loaded." So it seems that this has to be changed before loading ESS. Since you were trying to change the default value to "nil", it is unclear to me why this was not working after loading ESS though. I used to be able to disable it with:
but this recently stopped working.