#+TITLE: julia layer #+TAGS: general|layer|multi-paradigm|programming [[file:img/julia.png]] * Table of Contents :TOC_5_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 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. =LanguageServer.jl= should be configured automatically, if not, see the documentation of =lsp-julia=. 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. * 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 layer's 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 Warning: [[https://github.com/JuliaEditorSupport/LanguageServer.jl][=LanguageServer.jl=]] has not yet been released for Julia 1.0. If you are using this layer with Julia 1.0, =julia-mode-enable-lsp= should be set to =nil=. * Key bindings | Key binding | Description | |-------------+----------------------------------------------------------------------------------------| | ~TAB~ | Expands latex macro (e.g. =\delta=). | | ~SPC m l~ | Expands latex macro (e.g. =\delta=). | |-------------+----------------------------------------------------------------------------------------| | ~SPC m = =~ | Indent line | | ~SPC m = d~ | Deindent line | | ~SPC m = q~ | Indent Sexp | |-------------+----------------------------------------------------------------------------------------| | ~SPC m '~ | Brings up Julia Repl (starts new one or focuses existing). | | ~SPC m r~ | Brings up Julia Repl (starts new one or focuses existing). | | ~SPC m h h~ | Calls ~@doc~ macro on symbol under cursor. | |-------------+----------------------------------------------------------------------------------------| | ~SPC m s a~ | Activate the project of the current buffer (call with prefix to activate home project) | | ~SPC m s d~ | ~cd~ into the buffer directory | | ~SPC m s i~ | Brings up Julia Repl (starts new one or focuses existing). | | ~SPC m s b~ | Sends buffer to REPL. | | ~SPC m s t~ | Sends buffer to REPL via ~Revise.includet~. | | ~SPC m s l~ | Sends line to REPL. | | ~SPC m s s~ | Sends line to REPL. | | ~SPC m s r~ | Sends region or line to REPL. | | ~SPC m s m~ | Call ~@macroexpand~ on an expression | | ~SPC m s e~ | Call ~@edit~ on an expression | | ~SPC m s v~ | Prompt and set a Julia REPL inferior buffer name for the current buffer | |-------------+----------------------------------------------------------------------------------------| | ~SPC m e a~ | Activate the project of the current buffer (call with prefix to activate home project) | | ~SPC m e d~ | ~cd~ into the buffer directory | | ~SPC m e i~ | Brings up Julia Repl (starts new one or focuses existing). | | ~SPC m e b~ | Sends buffer to REPL. | | ~SPC m e t~ | Sends buffer to REPL via ~Revise.includet~. | | ~SPC m e l~ | Sends line to REPL. | | ~SPC m e s~ | Sends line to REPL. | | ~SPC m e r~ | Sends region or line to REPL. | | ~SPC m e m~ | Call ~@macroexpand~ on an expression | | ~SPC m e e~ | Call ~@edit~ on an expression | | ~SPC m e v~ | Prompt and set a Julia REPL inferior buffer name for the current buffer |