diff --git a/layers/+lang/vimscript/README.org b/layers/+lang/vimscript/README.org index 64c6abc72..94476a650 100644 --- a/layers/+lang/vimscript/README.org +++ b/layers/+lang/vimscript/README.org @@ -6,14 +6,64 @@ - [[#description][Description]] - [[#features][Features:]] - [[#install][Install]] +- [[#configuration][Configuration]] + - [[#choosing-a-backend][Choosing a backend]] + - [[#company-vimscript][Company-vimscript]] + - [[#lsp][LSP]] * Description -This layer adds basic support for vimscript and pentadactyl config files. +This layer adds support for vimscript and pentadactyl config files. ** Features: - Syntax highlighting +- Auto-completion (with LSP) +- Syntax-checking (with LSP) * Install To use this configuration layer, add it to your =~/.spacemacs=. You will need to add =vimscript= to the existing =dotspacemacs-configuration-layers= list in this file. + +* Configuration +All layer configurations can be done by setting layer variables in your dotfile. +No custom user config lines are necessary + +** Choosing a backend +This layer provides two alternative backends to choose from. + +*** Company-vimscript +This is the default choice if nothing is set and no lsp layer +is loaded in your dotfile. This mode only provides very +limited IDE capabilities. Used best if only small scripts +are edited. To set explicitly set the following in your +dotfile: + +#+BEGIN_SRC emacs-lisp + (vimscript :variables vimscript-backend 'company-vimscript) +#+END_SRC + +*** LSP +For proper IDE support this backend should be used. It is +based on an external server which will be started automatically +by emacs, once a vimscript file is opened. The keybindings are +the same for all lsp modes so if you are already familiar with +one you should be able to work the same in all modes. + +To set explicitly do the following in your dotfile: + +#+BEGIN_SRC emacs-lisp + (vimscript :variables + vimscript-backend 'lsp) +#+END_SRC + +For this to work you will also need to install +the latest version of the lsp server with below command: + +#+BEGIN_SRC sh + npm install -g vim-language-server +#+END_SRC + +NOTE: Keybindings for LSP are defined in the +LSP layer. Also it is advisable to have a look +at the autocomplete layer for an optimal +intellisense config for LSP. diff --git a/layers/+lang/vimscript/config.el b/layers/+lang/vimscript/config.el index f79632716..bfc6e9b94 100644 --- a/layers/+lang/vimscript/config.el +++ b/layers/+lang/vimscript/config.el @@ -1,6 +1,6 @@ ;;; config.el --- Vimscript Layer packages File for Spacemacs ;; -;; Copyright (c) 2012-2018 Sylvain Benner & Contributors +;; Copyright (c) 2012-2020 Sylvain Benner & Contributors ;; ;; Author: Sylvain Benner ;; URL: https://github.com/syl20bnr/spacemacs @@ -12,3 +12,8 @@ ;; variables (spacemacs|define-jump-handlers vimrc-mode) + +(defvar vimscript-backend nil + "The backend to use for IDE features. +Possible values are `lsp' and `company-vimscript'. +If `nil' then 'company-vimscript` is the default backend unless `lsp' layer is used") diff --git a/layers/+lang/vimscript/funcs.el b/layers/+lang/vimscript/funcs.el new file mode 100644 index 000000000..5235068d4 --- /dev/null +++ b/layers/+lang/vimscript/funcs.el @@ -0,0 +1,32 @@ +;;; funcs.el --- vimscript Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2020 Sylvain Benner & Contributors +;; +;; Author: Maximilian Wolff +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs//vimscript-backend () + "Returns selected backend." + (if vimscript-backend + vimscript-backend + (cond + ((configuration-layer/layer-used-p 'lsp) 'lsp) + (t 'company-vimscript)))) + +(defun spacemacs//vimscript-setup-company () + "Conditionally setup company based on backend." + (pcase (spacemacs//vimscript-backend) + ;; Activate lsp company explicitly to activate + ;; standard backends as well + (`lsp (spacemacs|add-company-backends + :backends company-capf + :modes vimrc-mode)))) + +(defun spacemacs//vimscript-setup-backend () + "Conditionally setup vimscript backend." + (pcase (spacemacs//vimscript-backend) + (`lsp (lsp)))) diff --git a/layers/+lang/vimscript/layers.el b/layers/+lang/vimscript/layers.el new file mode 100644 index 000000000..2950e3323 --- /dev/null +++ b/layers/+lang/vimscript/layers.el @@ -0,0 +1,14 @@ +;;; layers.el --- vimscript Layer layers File for Spacemacs +;; +;; Copyright (c) 2012-2020 Sylvain Benner & Contributors +;; +;; Author: Maximilian Wolff +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(when (and (boundp 'vimscript-backend) + (eq vimscript-backend 'lsp)) + (configuration-layer/declare-layer-dependencies '(lsp))) diff --git a/layers/+lang/vimscript/packages.el b/layers/+lang/vimscript/packages.el index fc2ca02d9..e6f819664 100644 --- a/layers/+lang/vimscript/packages.el +++ b/layers/+lang/vimscript/packages.el @@ -1,6 +1,6 @@ ;;; packages.el --- vimscript Layer packages File for Spacemacs ;; -;; Copyright (c) 2012-2018 Sylvain Benner & Contributors +;; Copyright (c) 2012-2020 Sylvain Benner & Contributors ;; ;; Author: Sylvain Benner ;; URL: https://github.com/syl20bnr/spacemacs @@ -9,14 +9,21 @@ ;; ;;; License: GPLv3 -(setq vimscript-packages - '( - vimrc-mode - ggtags - counsel-gtags - helm-gtags - dactyl-mode - )) +(defconst vimscript-packages + '( + company + flycheck + vimrc-mode + ggtags + counsel-gtags + helm-gtags + dactyl-mode)) + +(defun vimscript/post-init-company () + (spacemacs//vimscript-setup-company)) + +(defun vimscript/post-init-flycheck () + (spacemacs/enable-flycheck 'vimrc-mode)) (defun vimscript/init-vimrc-mode () "Initialize vimrc package" @@ -26,11 +33,12 @@ :defer t :init (progn - (defun spacemacs//vimrc-mode-hook () - "Hooked function for `vimrc-mode-hook'." - (highlight-numbers-mode -1) - (rainbow-delimiters-mode-disable)) - (add-hook 'vimrc-mode-hook 'spacemacs//vimrc-mode-hook)))) + (defun spacemacs//vimrc-mode-hook () + "Hooked function for `vimrc-mode-hook'." + (highlight-numbers-mode -1) + (rainbow-delimiters-mode-disable) + (spacemacs//vimscript-setup-backend)) + (add-hook 'vimrc-mode-hook 'spacemacs//vimrc-mode-hook)))) (defun vimscript/init-dactyl-mode () (use-package dactyl-mode