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

91 lines
3.5 KiB
Org Mode
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#+TITLE: julia layer
[[file:img/julia.png]]
* Table of Contents :TOC_4_gh:noexport:
- [[#description][Description]]
- [[#features][Features:]]
- [[#install][Install]]
- [[#lsp][LSP]]
- [[#options][Options]]
- [[#key-bindings][Key bindings]]
* Description
This layer adds support for [[https://julialang.org][Julia]] to Spacemacs.
** Features:
- Syntax highlighting
- Repl support
- Linting
- Completion
- Jump-to-definition
- Documentation on hover
* Install
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
add =julia= to the existing =dotspacemacs-configuration-layers= list in this
file.
** LSP
Warning: enabling the LSP functionality within this package can cause emacs to
hang for significant lengths of time when opening a Julia file. See tip below on
using PackageCompiler.jl to mitigate this issue.
This layer can be used with [[https://github.com/JuliaEditorSupport/LanguageServer.jl][ =LanguageServer.jl=]] and emacs [[https://github.com/emacs-lsp/lsp-mode][ =lsp-mode=]] to provide
richer, IDE-like capabilities. To use this layer with lsp, you must do the
following:
1. Add =lsp= to =dotspacemacs-configuration-layers=.
2. Install =LanguageServer.jl= by invoking =Pkg.add("LanguageServer")= in the
Julia REPL.
3. Enable layer integration with lsp as described in section below.
=LanguageServer.jl= tends to have a very long startup time. In the worst case,
=lsp-mode= might give up on the language server before its started, but
regardless usage of =lsp-mode= with Julia can cause long delays when first
opening files. To mitigate this issue, you can try compiling =LanguageServer.jl=
ahead of time using [[https://github.com/JuliaLang/PackageCompiler.jl][ =PackageCompiler.jl=]]. This drastically reduces startup time
if successful:
#+BEGIN_SRC julia
julia> Pkg.add("PackageCompiler")
julia> using PackageCompiler
julia> compile_package("LanguageServer")
#+END_SRC
* Options
While =julia-mode= is perfectly usable without configuration or other packages,
you can choose to replace the default functionality of using [[https://github.com/tpapp/julia-repl/][=julia-repl=]] as the
layers interactive REPL with the ess REPL and other functionality that comes
with it. To do so, install this layer with:
#+BEGIN_SRC emacs-lisp
(setq-default
dotspacemacs-configuration-layers
'(
(julia :variables julia-mode-enable-ess t)))
#+END_SRC
This layer also includes experimental support for =lsp-mode=. To enable language
server functionality with this layer, follow [[#lsp][the instructions for installation]],
and then install this layer with:
#+BEGIN_SRC emacs-lisp
(setq-default
dotspacemacs-configuration-layers
'(
(julia :variables julia-mode-enable-lsp t)))
#+END_SRC
* Key bindings
| Key Binding | Description |
|-------------+------------------------------------------------------------|
| ~SPC m h h~ | Calls ~@doc~ macro on symbol under cursor. |
| ~SPC m e m~ | Expands macro under cursor. |
| ~SPC m w~ | Calls ~workspace()~ in Repl to give clean namespace. |
| ~SPC e l~ | Expands latex macro (e.g. =\delta=). |
| ~SPC m s b~ | Sends buffer to REPL. |
| ~SPC m s l~ | Sends line to REPL. |
| ~SPC m s r~ | Sends region to REPL. |
| ~SPC m r~ | Brings up Julia Repl (starts new one or focuses existing). |