gnu: python-deepmerge: Use pyproject-build-system.
[jackhill/guix/guix.git] / gnu / packages / vim.scm
index 47ac984..ed24c39 100644 (file)
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
@@ -8,8 +8,11 @@
 ;;; Copyright © 2019 HiPhish <hiphish@posteo.de>
 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2019, 2020 Jakub Kądziołka <kuba@kadziolka.net>
-;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
+;;; Copyright © 2020, 2021 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021 Tissevert <tissevert+guix@marvid.fr>
+;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
+;;; Copyright © 2022 Luis Henrique Gomes Higino <luishenriquegh2701@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,6 +32,7 @@
 (define-module (gnu packages vim)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -42,6 +46,8 @@
   #:use-module (gnu packages attr)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages code)
+  #:use-module (gnu packages enlightenment)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages gettext)
@@ -71,7 +77,7 @@
 (define-public vim
   (package
     (name "vim")
-    (version "8.2.2689")
+    (version "9.0.0719")
     (source (origin
              (method git-fetch)
              (uri (git-reference
              (file-name (git-file-name name version))
              (sha256
               (base32
-               "0l0hkr8cw7fdsfc5zzcxx3q1wmv9k3hrgalvffq0l69lviqdgh0p"))))
+               "1fmy2yf83w9429dp3hyx2l24mffjqmaxqcabdyyjcvmgx7zp3bii"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
        #:parallel-tests? #f
-       ;; Fix test_signals.vim. https://github.com/vim/vim/issues/7402
-       #:make-flags (list "CFLAGS=-D_REENTRANT")
        #:phases
        (modify-phases %standard-phases
          (add-after 'configure 'patch-absolute-paths
            (lambda _
-             (substitute* "runtime/tools/mve.awk"
-               (("/usr/bin/nawk") (which "gawk")))
              (substitute* '("src/testdir/Makefile"
+                            "src/testdir/test_filetype.vim"
                             "src/testdir/test_normal.vim"
                             "src/testdir/test_popupwin.vim"
-                            "src/testdir/test_system.vim"
+                            "src/testdir/test_prompt_buffer.vim"
+                            "src/testdir/test_shell.vim"
+                            "src/testdir/test_suspend.vim"
                             "src/testdir/test_terminal.vim"
                             "src/testdir/test_terminal2.vim")
                (("/bin/sh") (which "sh")))
              (substitute* "src/testdir/test_autocmd.vim"
-               (("/bin/kill") (which "kill")))
-             #t))
+               (("/bin/kill") (which "kill")))))
          (add-before 'check 'set-environment-variables
            (lambda* (#:key inputs #:allow-other-keys)
              ;; One of the tests tests timezone-dependent functions.
              (setenv "TZDIR"
-                     (string-append (assoc-ref inputs "tzdata")
-                                    "/share/zoneinfo"))
+                     (search-input-directory inputs "share/zoneinfo"))
 
              ;; Make sure the TERM environment variable is set for the tests
-             (setenv "TERM" "xterm")
-             #t))
+             (setenv "TERM" "xterm")))
          (add-before 'check 'skip-or-fix-failing-tests
            (lambda _
-             ;; This test assumes that PID 1 is run as root and that the user
-             ;; running the test suite does not have permission to kill(1, 0)
-             ;; it.  This is not true in the build container, where both PID 1
-             ;; and the test suite are run as the same user.  Skip the test.
-             ;; An alternative fix would be to patch the PID used to a random
-             ;; 32-bit value and hope it never shows up in the test environment.
-             (substitute* "src/testdir/test_swap.vim"
-               (("if !IsRoot\\(\\)") "if 0"))
+             ;; This test failure is shared between BSD and Guix.
+             (with-fluids ((%default-port-encoding #f))
+               (substitute* "src/testdir/test_writefile.vim"
+                 (("!has\\('bsd'\\)") "0")))
 
              ;; These tests check how the terminal looks after executing some
              ;; actions.  The path of the bash binary is shown, which results in
              ;; a difference being detected.  Patching the expected result is
              ;; non-trivial due to the special format used, so skip the test.
+             (substitute* "src/testdir/test_messages.vim"
+               ((".*Test_echo_verbose_system.*" line)
+                (string-append line "return\n")))
              (substitute* "src/testdir/test_terminal.vim"
                ((".*Test_open_term_from_cmd.*" line)
                 (string-append line "return\n"))
                 (string-append line "return\n")))
              (substitute* "src/testdir/test_popupwin.vim"
                ((".*Test_popup_drag_termwin.*" line)
-                (string-append line "return\n")))
-             #t))
+                (string-append line "return\n")))))
+         (add-before 'install 'fix-installman.sh
+           (lambda _
+             (substitute* "src/installman.sh"
+               (("/bin/sh")
+                (which "sh")))))
          (add-after 'install 'install-guix.vim
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((vimdir (string-append (assoc-ref outputs "out") "/share/vim")))
                (mkdir-p vimdir)
                (copy-file (assoc-ref inputs "guix.vim")
-                          (string-append vimdir "/vimrc"))
-               #t))))))
+                          (string-append vimdir "/vimrc"))))))))
     (inputs
-     `(("gawk" ,gawk)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)
-       ("tcsh" ,tcsh)))                 ; For runtime/tools/vim32
+     (list gawk ncurses perl tcsh))                 ; For runtime/tools/vim32
     (native-inputs
      `(("libtool" ,libtool)
        ("guix.vim" ,(search-auxiliary-file "guix.vim"))
@@ -176,20 +177,19 @@ configuration files.")
   (package (inherit vim)
     (name "xxd")
     (arguments
-     `(#:make-flags (list ,(string-append "CC=" (cc-for-target)))
+     (list
+       #:make-flags #~(list (string-append "CC=" #$(cc-for-target)))
        #:tests? #f ; there are none
        #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (add-after 'unpack 'chdir
-           (lambda _
-             (chdir "src/xxd")
-             #t))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
-               (install-file "xxd" bin)
-               #t))))))
+       #~(modify-phases %standard-phases
+           (delete 'configure)
+           (add-after 'unpack 'chdir
+             (lambda _
+               (chdir "src/xxd")))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                 (install-file "xxd" bin)))))))
     (inputs `())
     (native-inputs `())
     (synopsis "Hexdump utility from vim")
@@ -198,9 +198,6 @@ with the editor vim.")))
 
 (define-public vim-full
   (package
-    ;; This package should share its source with Vim, but it doesn't
-    ;; build reliably, and we want to keep Vim up to date due to the
-    ;; frequency of important bug fixes.
     (inherit vim)
     (name "vim-full")
     (arguments
@@ -226,7 +223,7 @@ with the editor vim.")))
            ((#:make-flags flags)
             `(append
               (list "LDFLAGS=-lexpat")
-              (delete "CFLAGS=-D_REENTRANT" ,flags)))
+              ,flags))
            ((#:phases phases)
             `(modify-phases ,phases
                (add-before 'check 'start-xserver
@@ -238,9 +235,8 @@ with the editor vim.")))
                      (zero? (system (string-append xorg-server "/bin/Xvfb "
                                                     display " &")))))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("xorg-server" ,xorg-server-for-tests)
-       ,@(package-native-inputs vim)))
+     (modify-inputs (package-native-inputs vim)
+       (prepend pkg-config xorg-server-for-tests)))
     (inputs
      `(("acl" ,acl)
        ("atk" ,atk)
@@ -383,32 +379,32 @@ trouble using them, because you do not have to remember each snippet name.")
     (license license:expat))))
 
 (define-public vim-scheme
-  (let ((commit "93827987c10f2d5dc519166a761f219204926d5f")
-        (revision "1"))
+  (let ((commit "e22fc8e199ef52f2efacd08e71c3add90d83b375")
+        (revision "3"))
     (package
       (name "vim-scheme")
-      (version (string-append "0.0.0-" revision "." (string-take commit 7)))
+      (version (git-version "0.0.0" revision commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "http://git.foldling.org/vim-scheme.git")
+               (url "https://git.foldling.org/vim-scheme.git")
                (commit commit)))
-         (file-name (string-append name "-" version "-checkout"))
+         (file-name (git-file-name name version))
          (sha256
           (base32
-           "1ynjr1109dxgj0lz261gmzz3wf5ap1m6j6hnvl3lcyv66a4y8pjv"))))
+           "04h946vr4f8wxap3wzqs69y2v8n50g2zbk22jsg2kxr4c01z5cbw"))))
       (build-system copy-build-system)
       (arguments
        '(#:install-plan
-         '(("after" "share/vim/vimfiles/")
-           ("ftplugin" "share/vim/vimfiles/")
+         '(("ftplugin" "share/vim/vimfiles/")
+           ("indent" "share/vim/vimfiles/")
            ("syntax" "share/vim/vimfiles/"))))
       (synopsis "Scheme syntax for Vim")
       (description
        "@code{vim-scheme} provides Scheme support for Vim (R7RS and CHICKEN).")
       (home-page "https://foldling.org/git/vim-scheme.git/")
-      (license license:public-domain))))
+      (license license:unlicense))))
 
 (define-public vim-luna
   (let ((commit "633619953dcf8577168e255230f96b05f28d6371")
@@ -467,7 +463,7 @@ trouble using them, because you do not have to remember each snippet name.")
 (define-public vim-fugitive
   (package
     (name "vim-fugitive")
-    (version "3.3")
+    (version "3.7")
     (source
       (origin
         (method git-fetch)
@@ -476,14 +472,14 @@ trouble using them, because you do not have to remember each snippet name.")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32
-          "1ybmy2dk9zsmd3kyyj40qn20gzgd16n5p77sjxp8bspx3zb7km5y"))))
+         (base32 "138290g2aph1jjhaza6biky5qi4ka6435s01bwxivllgb53g3irc"))))
     (build-system copy-build-system)
     (arguments
      '(#:install-plan
        '(("autoload" "share/vim/vimfiles/")
          ("doc" "share/vim/vimfiles/")
          ("ftdetect" "share/vim/vimfiles/")
+         ("ftplugin" "share/vim/vimfiles/")
          ("plugin" "share/vim/vimfiles/")
          ("syntax" "share/vim/vimfiles/"))))
     (home-page "https://github.com/tpope/vim-fugitive")
@@ -579,6 +575,43 @@ are detected, the user is notified.")
     (home-page "https://github.com/vim-syntastic/syntastic")
     (license license:wtfpl2)))
 
+(define-public vim-solarized
+  (let ((commit "62f656a02f93c5190a8753159e34b385588d5ff3")
+        (revision "1"))
+    (package
+      (name "vim-solarized")
+      (version (git-version "1.0.0beta1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/altercation/solarized")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0001mz5v3a8zvi3gzmxhi3yrsb6hs7qf6i497arsngnvj2cwn61d"))))
+      (build-system copy-build-system)
+      (arguments
+       '(#:install-plan
+         '(("vim-colors-solarized/colors" "share/vim/vimfiles/")
+           ("vim-colors-solarized/doc" "share/vim/vimfiles/"))))
+      (home-page "https://github.com/altercation/vim-colors-solarized")
+      (synopsis "Solarized color scheme for Vim")
+      (description
+       "This package provides the Solarized theme as a Vim color scheme.
+
+Solarized is a 16-color palette comprising 8 monotones and 8 accent
+colors.  It was designed for use with both terminal and GUI applications, and
+has a dark and a light mode.
+
+Based on CIELAB lightness relationships between colors, this theme reduces
+brightness contrast but retains contrasting hues based on colorwheel relations
+for syntax highlighting readability.
+
+It keeps the same selective contrast relationships and overall feel when
+switching between the light and dark background modes.")
+      (license license:expat))))
+
 (define-public editorconfig-vim
   (package
     (name "editorconfig-vim")
@@ -608,6 +641,34 @@ various text editors which allow this file format to be read and used by those
 editors.")
     (license license:bsd-2)))
 
+(define-public neovim-packer
+  (let ((commit "3a9f9801f683946b9f1047d8f4bf9946c29e927d")
+        (revision "0"))
+    (package
+      (name "neovim-packer")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/wbthomason/packer.nvim")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1xn08z3a21mgfvp5i1nv57jnldwxwnl5nkryiff3zc99b1mizigp"))))
+      (build-system copy-build-system)
+      (arguments
+       (list #:install-plan
+             #~'(("lua" "share/nvim/site/pack/guix/start/packer.nvim/")
+                 ("doc" "share/nvim/site/pack/guix/start/packer.nvim/"))))
+      (home-page "https://github.com/wbthomason/packer.nvim")
+      (synopsis "Plugin manager for Neovim")
+      (description
+       "This package provides a plugin manager for Neovim, inspired by Emacs's
+@code{use-package}.  It's written in Lua, supports Luarocks dependencies, and
+is based on Vim's builtin plugin support.")
+      (license license:expat))))
+
 (define-public neovim-syntastic
   (package
     (inherit vim-syntastic)
@@ -628,74 +689,90 @@ are detected, the user is notified.")))
 (define-public neovim
   (package
     (name "neovim")
-    (version "0.4.4")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/neovim/neovim")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "11zyj6jvkwas3n6w1ckj3pk6jf81z1g7ngg4smmwm7c27y2a6f2m"))))
+    (version "0.8.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/neovim/neovim")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0hkd49wkxfi6k1xa92hdd4b9z356r32hbpr78z1cigcln1wr0z7j"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:modules ((srfi srfi-26)
-                  (guix build cmake-build-system)
-                  (guix build utils))
-       #:configure-flags '("-DPREFER_LUA:BOOL=YES")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'set-lua-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((lua-version "5.1")
-                    (lua-cpath-spec
-                     (lambda (prefix)
-                       (let ((path (string-append prefix "/lib/lua/" lua-version)))
-                         (string-append path "/?.so;" path "/?/?.so"))))
-                    (lua-path-spec
-                     (lambda (prefix)
-                       (let ((path (string-append prefix "/share/lua/" lua-version)))
-                         (string-append path "/?.lua;" path "/?/?.lua"))))
-                    (lua-inputs (map (cute assoc-ref %build-inputs <>)
-                                     '("lua"
-                                       "lua-luv"
-                                       "lua-lpeg"
-                                       "lua-bitop"
-                                       "lua-libmpack"))))
-               (setenv "LUA_PATH"
-                       (string-join (map lua-path-spec lua-inputs) ";"))
-               (setenv "LUA_CPATH"
-                       (string-join (map lua-cpath-spec lua-inputs) ";"))
-               #t)))
-         (add-after 'unpack 'prevent-embedding-gcc-store-path
-           (lambda _
-             ;; nvim remembers its build options, including the compiler with
-             ;; its complete path.  This adds gcc to the closure of nvim, which
-             ;; doubles its size.  We remove the refirence here.
-             (substitute* "cmake/GetCompileFlags.cmake"
-               (("\\$\\{CMAKE_C_COMPILER\\}") "/gnu/store/.../bin/gcc"))
-             #t)))))
-    (inputs
-     `(("libuv" ,libuv)
-       ("msgpack" ,msgpack)
-       ("libtermkey" ,libtermkey)
-       ("libvterm" ,libvterm)
-       ("unibilium" ,unibilium)
-       ("jemalloc" ,jemalloc)
-       ("libiconv" ,libiconv)
-       ("lua" ,lua-5.1)
-       ("lua-luv" ,lua5.1-luv)
-       ("lua-lpeg" ,lua5.1-lpeg)
-       ("lua-bitop" ,lua5.1-bitop)
-       ("lua-libmpack" ,lua5.1-libmpack)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("gettext" ,gettext-minimal)
-       ("gperf" ,gperf)))
+     (list #:modules
+           '((srfi srfi-26) (guix build cmake-build-system)
+             (guix build utils))
+           #:configure-flags
+           #~(list #$@(if (member (if (%current-target-system)
+                                      (gnu-triplet->nix-system (%current-target-system))
+                                      (%current-system))
+                                  (package-supported-systems luajit))
+                          '()
+                          '("-DPREFER_LUA:BOOL=YES")))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'set-lua-paths
+                 (lambda* _
+                   (let* ((lua-version "5.1")
+                          (lua-cpath-spec (lambda (prefix)
+                                            (let ((path (string-append
+                                                         prefix
+                                                         "/lib/lua/"
+                                                         lua-version)))
+                                              (string-append
+                                               path
+                                               "/?.so;"
+                                               path
+                                               "/?/?.so"))))
+                          (lua-path-spec (lambda (prefix)
+                                           (let ((path (string-append prefix
+                                                        "/share/lua/"
+                                                        lua-version)))
+                                             (string-append path "/?.lua;"
+                                                            path "/?/?.lua"))))
+                          (lua-inputs (list (or #$(this-package-input "lua")
+                                                #$(this-package-input "luajit"))
+                                            #$lua5.1-luv
+                                            #$lua5.1-lpeg
+                                            #$lua5.1-bitop
+                                            #$lua5.1-libmpack)))
+                     (setenv "LUA_PATH"
+                             (string-join (map lua-path-spec lua-inputs) ";"))
+                     (setenv "LUA_CPATH"
+                             (string-join (map lua-cpath-spec lua-inputs) ";"))
+                     #t)))
+               (add-after 'unpack 'prevent-embedding-gcc-store-path
+                 (lambda _
+                   ;; nvim remembers its build options, including the compiler with
+                   ;; its complete path.  This adds gcc to the closure of nvim, which
+                   ;; doubles its size.  We remove the refirence here.
+                   (substitute* "cmake/GetCompileFlags.cmake"
+                     (("\\$\\{CMAKE_C_COMPILER\\}") "/gnu/store/.../bin/gcc"))
+                   #t)))))
+    (inputs (list libuv-for-luv
+                  msgpack
+                  libtermkey
+                  libvterm
+                  unibilium
+                  jemalloc
+                  (if (member (if (%current-target-system)
+                                  (gnu-triplet->nix-system (%current-target-system))
+                                  (%current-system))
+                              (package-supported-systems luajit))
+                      luajit
+                      lua-5.1)
+                  lua5.1-luv
+                  lua5.1-lpeg
+                  lua5.1-bitop
+                  lua5.1-libmpack
+                  tree-sitter))
+    (native-inputs (list pkg-config gettext-minimal gperf))
     (home-page "https://neovim.io")
     (synopsis "Fork of vim focused on extensibility and agility")
-    (description "Neovim is a project that seeks to aggressively
+    (description
+     "Neovim is a project that seeks to aggressively
 refactor Vim in order to:
 
 @itemize
@@ -703,15 +780,55 @@ refactor Vim in order to:
 @item Split the work between multiple developers
 @item Enable advanced external UIs without modifications to the core
 @item Improve extensibility with a new plugin architecture
-@end itemize\n")
+@end itemize
+")
     ;; Neovim is licensed under the terms of the Apache 2.0 license,
     ;; except for parts that were contributed under the Vim license.
     (license (list license:asl2.0 license:vim))))
 
+(define-public eovim
+  (package
+    (name "eovim")
+    (version "0.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/jeanguyomarch/eovim/")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "06b7crmz3wvvq15ncl0jk20s8j1pmna2jin0k5y5n5qxpafbgp3k"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #false ;no tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'reference-nvim
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((nvim (search-input-file inputs "/bin/nvim")))
+               ;; This substitution should change one line, and replaces the default
+               ;; value in the struct of options with an absolute store reference.
+               (substitute* "../source/src/main.c"
+                 (("(^[[:blank:]]+\\.nvim = \")nvim" _ start)
+                  (string-append start nvim))))))
+         (add-before 'build 'set-home
+           (lambda _ (setenv "HOME" "/tmp"))))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list efl msgpack neovim))
+    (home-page "https://github.com/jeanguyomarch/eovim/")
+    (synopsis "EFL GUI for Neovim")
+    (description "Graphical Neovim interface based on the @acronym{EFL, Enlightenment
+Foundation Libraries} toolkit.  Its features include customizable appearance
+and support for fonts with ligatures.")
+    (license license:expat)))
+
 (define-public vifm
   (package
     (name "vifm")
-    (version "0.11")
+    (version "0.12.1")
     (source
       (origin
         (method url-fetch)
@@ -722,7 +839,7 @@ refactor Vim in order to:
                               "vifm-" version ".tar.bz2")))
         (sha256
          (base32
-          "0rqyd424y0g5b5basw2ybb60r9gar4f40d1xgzr3c2dsy4jpwvyh"))))
+          "122ncp319xisxjxcy33bshjib6905bb0aaz0xjdfkkycplz83qlg"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-build-timestamp")
@@ -737,8 +854,7 @@ refactor Vim in order to:
                (("/bin/bash") (which "bash")))
              ;; This test segfaults
              (substitute* "tests/Makefile"
-               (("misc") ""))
-             #t))
+               (("misc") ""))))
           (add-after 'install 'install-vim-plugin-files
             (lambda* (#:key outputs #:allow-other-keys)
               (let* ((out (assoc-ref outputs "out"))
@@ -749,14 +865,11 @@ refactor Vim in order to:
                 (copy-recursively (string-append vifm "/vim")
                                   vimfiles)
                 (delete-file-recursively (string-append vifm "/colors"))
-                (delete-file-recursively (string-append vifm "/vim")))
-              #t)))))
+                (delete-file-recursively (string-append vifm "/vim"))))))))
     (native-inputs
-     `(("groff" ,groff))) ; for the documentation
+     (list groff)) ; for the documentation
     (inputs
-     `(("libx11" ,libx11)
-       ("ncurses" ,ncurses)
-       ("perl" ,perl)))
+     (list libx11 ncurses perl))
     (home-page "https://vifm.info/")
     (synopsis "Flexible vi-like file manager using ncurses")
     (description "Vifm is a file manager providing a @command{vi}-like usage
@@ -801,8 +914,7 @@ With the package comes a plugin to use vifm as a vim file selector.")
                 "13qgwkqbx012j5spis1aw8rb120rw0zphgjy1j58irax8r6j1ikb"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-greenlet" ,python-greenlet)
-       ("python-msgpack" ,python-msgpack)))
+     (list python-greenlet python-msgpack))
     (arguments
      `(#:tests? #f))
     (home-page "https://github.com/neovim/pynvim")
@@ -815,7 +927,7 @@ through its msgpack-rpc API.")
 (define-public vim-guix-vim
   (package
     (name "vim-guix-vim")
-    (version "0.1.1")
+    (version "0.3.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -824,15 +936,17 @@ through its msgpack-rpc API.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "10bfy0dgwizxr56b4272b7sqajpr6lnz332pzx055dis2zzjap8z"))))
+                "080ni4z23qdr8rkrswjqfqfrrcnpn7qdgrg14glwji46wzvwxqyx"))))
     (build-system copy-build-system)
     (arguments
      '(#:install-plan
-       '(("compiler" "share/vim/vimfiles/")
+       '(("autoload" "share/vim/vimfiles/")
+         ("compiler" "share/vim/vimfiles/")
          ("doc" "share/vim/vimfiles/")
          ("indent" "share/vim/vimfiles/")
          ("ftdetect" "share/vim/vimfiles/")
          ("ftplugin" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/")
          ("syntax" "share/vim/vimfiles/"))))
     (home-page "https://gitlab.com/Efraim/guix.vim")
     (synopsis "Guix integration in Vim")
@@ -892,6 +1006,34 @@ asynchronous adapters (including tmux, screen, and a headless mode), and when
 the job completes, errors will be loaded and parsed automatically.")
     (license license:vim)))
 
+(define-public vim-gemini-vim
+  ;; No releases have been tagged.
+  (let ((commit "f300c54174fc0db8fb68f1bc04307b58612e9630")
+        (revision "1"))
+    (package
+      (name "vim-gemini-vim")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://git.sr.ht/~torresjrjr/gemini.vim")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+           (base32 "05ffhhfahjqwxyrqmsinsahrs15wknzl2qbj8mznyv319mn2civ2"))))
+      (build-system copy-build-system)
+      (arguments
+       `(#:install-plan
+         '(("ftdetect" "share/vim/vimfiles/")
+           ("syntax" "share/vim/vimfiles/"))))
+      (home-page "https://git.sr.ht/~torresjrjr/gemini.vim")
+      (synopsis "Vim syntax highlighting plugin for Gemini")
+      (description "This Vim plugin provides a Vim syntax highlighting plugin
+for Gemini Text, the text/gemini media type, as defined in the Gemini protocol
+specification.")
+      (license license:gpl3))))
+
 (define-public vim-eunuch
   (let ((commit "33e875b31c8b811a0a47908884a5e2339106bbe8")
         (revision "1"))
@@ -919,3 +1061,348 @@ the job completes, errors will be loaded and parsed automatically.")
 This package includes commands such as @code{SudoWrite} and @code{SudoEdit} and
 help working on Vim buffers and the files they reference with one command.")
       (license license:vim))))
+
+(define-public vim-slime
+  ;; No tagged releases.
+  (let ((commit "a522fed677e50175f52efc5848cc35209af33216")
+        (revision "1"))
+    (package
+      (name "vim-slime")
+      (version (git-version "0.0.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/jpalardy/vim-slime")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+           (base32 "0k4b629jn6xlxyjxdl3cgm06v9dmx967rqnslv5m82c9kscwpyh4"))))
+      (build-system copy-build-system)
+      (arguments
+       `(#:install-plan
+         '(("autoload" "share/vim/vimfiles/")
+           ("doc" "share/vim/vimfiles/")
+           ("ftplugin" "share/vim/vimfiles/")
+           ("plugin" "share/vim/vimfiles/"))))
+      (home-page "https://technotales.wordpress.com/2007/10/03/like-slime-for-vim/")
+      (synopsis "Vim plugin to give you some slime")
+      (description "SLIME is an Emacs plugin to turn Emacs into a Lisp IDE.  You
+can type text in a file, send it to a live REPL, and avoid having to reload all
+your code every time you make a change.  @code{Vim-slime} is an attempt at
+getting some of these features into Vim.  It works with any REPL and isn't tied
+to Lisp.")
+      (license license:expat))))
+
+(define-public vim-paredit
+  ;; The last tagged version is from August 2013.
+  (let ((commit "97d51d099523b37bb35cbcf3564cbfb46e66e4ec")
+        (revision "1"))
+    (package
+      (name "vim-paredit")
+      (version (git-version "0.9.11" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/kovisoft/paredit")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+           (base32 "07d5s20r0ssd7rir45vy0fqlci44gha1a81rcilgar227f3nw328"))))
+      (build-system copy-build-system)
+      (arguments
+       '(#:install-plan
+         '(("doc" "share/vim/vimfiles/")
+           ("plugin" "share/vim/vimfiles/"))))
+      (home-page "https://github.com/kovisoft/paredit")
+      (synopsis "Vim plugin for structured editing of Lisp S-expressions")
+      (description
+       "Paredit performs structured editing of Lisp S-expressions in Vim.
+@code{Paredit.vim} is similar to @code{paredit.el} for Emacs.")
+      ;; License listed in plugin/paredit.vim.
+      (license license:public-domain))))
+
+(define-public vim-surround
+  (package
+    (name "vim-surround")
+    (version "2.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/tpope/vim-surround")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1b0bd5m5lv1p4d299mrwjfs2gk0zqwyaqdaid9hs9yqlxnr8s5nf"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("doc" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/"))))
+    (home-page "https://github.com/tpope/vim-surround")
+    (synopsis "Vim plugin for easy quoting and parenthesizing")
+    (description
+     "Surround.vim is all about \"surroundings\": parentheses, brackets,
+quotes, XML tags, and more.  The plugin provides mappings to easily delete,
+change and add such surroundings in pairs.")
+    (license license:vim)))
+
+(define-public vim-gnupg
+  (package
+    (name "vim-gnupg")
+    (version "2.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/jamessan/vim-gnupg/releases/"
+                           "download/v" version
+                           "/vim-gnupg-v" version ".tar.gz"))
+       (sha256
+        (base32 "02w8lgyyh7wgxysvmmcf9ja5c06vrbyh3alzvv97x8cfhrp0skn7"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("autoload" "share/vim/vimfiles/")
+         ("doc" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/"))))
+    (home-page "https://www.vim.org/scripts/script.php?script_id=3645")
+    (synopsis "Vim plugin for transparent editing of gpg encrypted files")
+    (description
+     "This script implements transparent editing of gpg encrypted files.  The
+filename must have a @code{.gpg}, @code{.pgp} or @code{.asc} suffix.  When
+opening such a file the content is decrypted, and the content will be encrypted
+to all recipients before it is written.  This script turns off viminfo,
+swapfile, and undofile when editing encrypted files to increase security.")
+    (properties
+     '((release-monitoring-url . "https://github.com/jamessan/vim-gnupg/releases")))
+    (license license:gpl2+)))
+
+(define-public vim-ctrlp
+  (package
+    (name "vim-ctrlp")
+    (version "1.81")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/ctrlpvim/ctrlp.vim")
+              (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0n68hg59h4rjn0ziqbsh5pr03l3kr98zk54659ny6vq107af1w96"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("autoload" "share/vim/vimfiles/")
+         ("doc" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/"))))
+    (home-page "https://ctrlpvim.github.io/ctrlp.vim/")
+    (synopsis "Fuzzy file, buffer, mru, tag, etc. finder for Vim")
+    (description
+     "CtrlP features:
+@itemize
+@item Written in pure Vimscript for MacVim, gVim and Vim 7.0+.
+@item Full support for Vim's regexp as search patterns.
+@item Built-in @acronym{Most Recently Used, MRU} files monitoring and search.
+@item Built-in project's root finder.
+@item Open multiple files at once.
+@item Create new files and directories.
+@item Execute Ex commands on an opening file (jump to a line, to a string or do
+anything).
+@item Optional cross-session caching and history allow for fast initialization.
+@item Mappings and usage conform to Vim's conventions.
+@end itemize")
+    (license license:vim)))
+
+(define-public vim-mucomplete
+  (package
+    (name "vim-mucomplete")
+    (version "1.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/lifepillar/vim-mucomplete")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "054g80n09mmxxlh8xaic29bn8bgn3clvv732rymljdyvbj1mlhwd"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("autoload" "share/vim/vimfiles/")
+         ("doc" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/"))))
+    (home-page "https://github.com/lifepillar/vim-mucomplete")
+    (synopsis "MUcomplete is a minimalist autocompletion plugin for Vim")
+    (description
+     "MUcomplete is an implementation of chained (fallback) completion,
+whereby several completion methods are attempted one after another until a
+result is returned.")
+    (license license:expat)))
+
+(define-public vim-gitgutter
+  (let ((commit "256702dd1432894b3607d3de6cd660863b331818")
+        (revision "1"))
+    (package
+      (name "vim-gitgutter")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+                (url "https://github.com/airblade/vim-gitgutter")
+                (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0zpa7cs59a8sq0k3frlf9flpf30jcn239yrpmv40r7nqvxzglbpl"))))
+      (build-system copy-build-system)
+      (arguments
+       '(#:install-plan
+         '(("autoload" "share/vim/vimfiles/")
+           ("doc" "share/vim/vimfiles/")
+           ("plugin" "share/vim/vimfiles/"))))
+      (synopsis "Vim plugin which shows a git diff in the sign column")
+      (description
+       "A Vim plugin which shows a git diff in the sign column.  It shows which
+lines have been added, modified, or removed.  You can also preview, stage, and
+undo individual hunks; and stage partial hunks.  The plugin also provides a hunk
+text object.  The signs are always up to date and the plugin never saves your
+buffer.")
+      (home-page "https://github.com/airblade/vim-gitgutter")
+      (license license:expat))))
+
+(define-public vim-characterize
+  (package
+    (name "vim-characterize")
+    (version "1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/tpope/vim-characterize")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ppsbsd696ih40d9f76mdl9sd9y7p2pvm65qmvq4b2zhkv4xbpxz"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("autoload" "share/vim/vimfiles/")
+         ("doc" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/"))))
+    (home-page "https://github.com/tpope/vim-characterize")
+    (synopsis "Vim plugin for showing Unicode character metadata")
+    (description
+     "In Vim, pressing @code{ga} on a character reveals its representation in
+decimal, octal, and hex.  Characterize.vim modernizes this with the following
+additions:
+@itemize
+@item Unicode character names: @code{U+00A9 COPYRIGHT SYMBOL}
+@item Vim digraphs (type after @code{<C-K>} to insert the character):
+@code{Co}, @code{cO}
+@item Emoji codes: @code{:copyright:}
+@item HTML entities: @code{&copy;}
+@end itemize")
+    (license license:vim)))
+
+(define-public vim-tagbar
+  (package
+    (name "vim-tagbar")
+    (version "3.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/preservim/tagbar")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1fqfs8msmr6d4kpvxqp14sdjvp5fj52q5w5kz71myzcd4kqzmirp"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("autoload" "share/vim/vimfiles/")
+         ("doc" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/")
+         ("syntax" "share/vim/vimfiles/"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'link-universal-ctags
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((ctags (assoc-ref inputs "universal-ctags")))
+               (substitute* "autoload/tagbar.vim"
+                 (("(.*)universal-ctags']" all leader)
+                  (string-append all "\n"
+                                 leader ctags "/bin/ctags']")))))))))
+    (inputs
+     (list universal-ctags))
+    (home-page "https://github.com/preservim/tagbar")
+    (synopsis "Vim plugin that displays tags in a window, ordered by scope")
+    (description
+     "Tagbar is a Vim plugin that provides an easy way to browse the tags of
+the current file and get an overview of its structure.  It does this by creating
+a sidebar that displays the ctags-generated tags of the current file, ordered
+by their scope.  This means that for example methods in C++ are displayed under
+the class they are defined in.")
+    (license license:vim)))
+
+(define-public vim-nerdtree
+  (package
+    (name "vim-nerdtree")
+    (version "6.10.16")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/preservim/nerdtree")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1si8qla86ng8cffbmfrk9gss0i3912yw0f1ph4bsiq0kk837lccp"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan
+       '(("autoload" "share/vim/vimfiles/")
+         ("doc" "share/vim/vimfiles/")
+         ("lib" "share/vim/vimfiles/")
+         ("nerdtree_plugin" "share/vim/vimfiles/")
+         ("plugin" "share/vim/vimfiles/")
+         ("syntax" "share/vim/vimfiles/"))))
+    (home-page "https://github.com/preservim/nerdtree")
+    (synopsis "Tree explorer plugin for Vim")
+    (description
+     "The NERDTree is a file system explorer for the Vim editor.  Using this
+plugin, users can visually browse complex directory hierarchies, quickly open
+files for reading or editing, and perform basic file system operations.")
+    (license license:wtfpl2)))
+
+(define-public vim-nerdcommenter
+  (package
+    (name "vim-nerdcommenter")
+    (version "2.6.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/preservim/nerdcommenter")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1ka2rqn7rby55aps3iblh1dcqxm7m7qx72mpkz6y2aaj8mkj0zyd"))))
+    (build-system copy-build-system)
+    (arguments
+     (list
+      #:install-plan
+      #~`(("autoload" "share/vim/vimfiles/")
+          ("doc" "share/vim/vimfiles/")
+          ("plugin" "share/vim/vimfiles/"))))
+    (home-page "https://github.com/preservim/nerdcommenter")
+    (synopsis "Vim plugin for easy commenting of code")
+    (description
+     "NERD commenter is a Vim plugin that provides many different commenting
+operations and styles which are invoked via key mappings and a menu.  These
+operations are available for most filetypes.")
+    (license license:cc0)))