ESS integrates out of the box with `company-mode`.

Two company backends are available ‘company-R-objects’ and `company-R-args`.


From ESS company-mode is activated by default if you have auto-complete package installed. Change the value of `ess-use-company‘ if you don’t want that.

This activates company backends in both ESS and iESS buffers. If you want them only in your ESS buffers do:

(setq ess-use-company 'script-only)

Quick help

Make `M-h` to display quick help:

(define-key company-active-map (kbd "M-h") 'company-show-doc-buffer)

Movement keys

`company` binds M-n, and M-p for navigation. This is rather inconvenient if you use `company` in the inferior R buffer. Bind those to something else:

(define-key company-active-map (kbd "M-n") nil)
(define-key company-active-map (kbd "M-p") nil)
(define-key company-active-map (kbd "M-,") 'company-select-next)
(define-key company-active-map (kbd "M-k") 'company-select-previous)

Completion keys

Company binds `RET` key to `company-complete-selection`. This is rather inconvenient in inferior R buffers. One solution is to use `TAB` to complete common part and `M-TAB` for full selection:

(define-key company-active-map [return] nil)
(define-key company-active-map [tab] 'company-complete-common)
(define-key company-active-map (kbd "TAB") 'company-complete-common)
(define-key company-active-map (kbd "M-TAB") 'company-complete-selection)

Misc customization

Some company settings that I found useful:

(setq company-selection-wrap-around t
      company-tooltip-align-annotations t
      company-idle-delay 0.36
      company-minimum-prefix-length 2
      company-tooltip-limit 10)

EmacsSpeaksStatistics AutoComplete