spacemacs/layers/+lang/ocaml/README.org

102 lines
4.6 KiB
Org Mode
Raw Normal View History

#+TITLE: Ocaml layer
2015-06-10 16:44:30 +00:00
[[file:img/ocaml.png]]
2018-09-19 03:54:47 +00:00
* Table of Contents :TOC_4_gh:noexport:
2017-05-22 14:16:12 +00:00
- [[#description][Description]]
- [[#features][Features:]]
- [[#install][Install]]
- [[#layer][Layer]]
- [[#using-merlin-for-error-reporting][Using merlin for error reporting]]
2017-05-22 14:16:12 +00:00
- [[#opam-packages][OPAM packages]]
- [[#key-bindings][Key Bindings]]
- [[#repl-utop][REPL (utop)]]
2018-09-19 03:54:47 +00:00
- [[#layer-improvements-list][layer improvements list]]
2015-06-10 16:44:30 +00:00
* Description
This is a very basic layer for editing ocaml files.
** Features:
2015-06-10 16:44:30 +00:00
- Syntax highlighting (major-mode) via [[https://github.com/ocaml/tuareg][tuareg-mode]]
- Error reporting, completion and type display via [[https://github.com/ocaml/merlin][merlin]]
- auto-completion with company mode via [[https://github.com/ocaml/merlin][merlin]]
- syntax-checking via [[https://github.com/flycheck/flycheck-ocaml][flycheck-ocaml]] (or alternatively [[https://github.com/ocaml/merlin][merlin]])
2015-06-10 16:44:30 +00:00
* Install
** Layer
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
add =ocaml= to the existing =dotspacemacs-configuration-layers= list in this
file.
2015-06-10 16:44:30 +00:00
** Using merlin for error reporting
By default [[https://github.com/flycheck/flycheck-ocaml][flycheck-ocaml]] is used for error reporting when the
=syntax-checking= layer is also enabled as this is common throughout spacemacs.
2018-09-19 03:54:47 +00:00
You can disable this and switch back to [[https://github.com/ocaml/merlin][merlin]]s default error reporting method
by adding [[https://github.com/flycheck/flycheck-ocaml][flycheck-ocaml]] to your excluded packages list in =.spacemacs=:
#+BEGIN_SRC emacs-lisp
2018-09-19 03:54:47 +00:00
dotspacemacs-excluded-packages '(... flycheck-ocaml ... )
#+END_SRC
2015-06-10 16:44:30 +00:00
** OPAM packages
This layer requires some [[http://opam.ocaml.org][opam]] packages:
2015-06-10 16:44:30 +00:00
- =merlin= for auto-completion
- =utop=
- =ocp-indent=
To install them, use the following command:
2015-06-10 16:44:30 +00:00
#+BEGIN_SRC sh
opam install merlin utop ocp-indent
#+END_SRC
2015-10-01 14:20:04 +00:00
Make sure opam is initialized and configured.
2018-09-19 03:54:47 +00:00
#+BEGIN_SRC sh
2015-10-01 14:20:04 +00:00
opam init
opam config setup -a
2018-09-19 03:54:47 +00:00
#+END_SRC
2015-10-01 14:20:04 +00:00
2015-06-10 16:44:30 +00:00
* Key Bindings
| Key Binding | Description |
|-------------+----------------------------------------------------------|
2016-05-17 03:57:15 +00:00
| ~SPC m =~ | Indent buffer. |
2015-06-10 16:44:30 +00:00
| ~SPC m c c~ | Compile |
| ~SPC m c p~ | Check .merlin for errors |
| ~SPC m c r~ | Refresh changed .cmis in merlin |
| ~SPC m e C~ | Check for errors in current buffer |
| ~SPC m e n~ | Jump to next error |
| ~SPC m e N~ | Jump back to previous error |
| ~SPC m g a~ | Switch ML <-> MLI |
| ~SPC m g b~ | Go back to the last position where the user did a locate |
| ~SPC m g g~ | Locate the identifier under point (same window) |
| ~SPC m g G~ | Locate the identifier under point (different window) |
| ~SPC m g o~ | List occurrences for identifier under point |
2015-06-10 16:44:30 +00:00
| ~SPC m g l~ | Prompt for identifier and locate |
| ~SPC m g i~ | Prompt for module name and switch to ML file |
| ~SPC m g I~ | Prompt for module name and switch to MLI file |
| ~SPC m h h~ | Document the identifier under point |
| ~SPC m h t~ | Highlight identifier under cursor and print its type |
| ~SPC m h T~ | Prompt for expression and show its type |
| ~SPC m r d~ | Case analyze the current enclosing |
** REPL (utop)
| Key Binding | Description |
|-------------+------------------------------------------------------------------|
| ~SPC m s b~ | Send buffer to the REPL |
| ~SPC m s B~ | Send buffer to the REPL and switch to the REPL in =insert state= |
| ~SPC m s i~ | Start a REPL |
| ~SPC m s p~ | Send phrase to the REPL |
| ~SPC m s P~ | Send phrase to the REPL and switch to the REPL in =insert state= |
| ~SPC m s r~ | Send region to the REPL |
| ~SPC m s R~ | Send region to the REPL and switch to the REPL in =insert state= |
| ~C-j~ | (in REPL) next item in history |
| ~C-k~ | (in REPL) previous item in history |
2018-09-19 03:54:47 +00:00
* TODO layer improvements list
1. Add more proper spacemacs key bindings for basic merlin tasks
2. Add proper key bindings for ocamldebug
3. Add more key bindings for tuareg-mode