diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm
index 21a9f10a11..f53f7dc9e3 100644
--- a/gnu/packages/code.scm
+++ b/gnu/packages/code.scm
@@ -237,8 +237,9 @@ (define-public global                             ; a global variable
                  (lambda _
                    ;; Install the plugin files in the right place.
                    (let* ((data (string-append #$output "/share/gtags"))
-                          (vim  (string-append #$output
-                                               "/share/vim/vimfiles/plugin"))
+                          (vim  (string-append
+                                  #$output
+                                  "/share/vim/vimfiles/pack/guix/start/global/plugin"))
                           (lisp (string-append #$output "/share/emacs/site-lisp/"
                                                #$(package-name this-package) "-"
                                                #$(package-version this-package))))
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index c54a9b4b3a..e421ccc092 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -1061,8 +1061,9 @@ (define-public txr
                                '("txr-manpage.html" "txr-manpage.pdf")))))
                (add-after 'install 'install-vim-files
                  (lambda _
-                   (let ((syntax (string-append #$output
-                                                "/share/vim/vimfiles/syntax")))
+                   (let ((syntax (string-append
+                                   #$output
+                                   "/share/vim/vimfiles/pack/guix/start/txr/syntax")))
                      (install-file "tl.vim" syntax)
                      (install-file "txr.vim" syntax)))))))
     (native-inputs
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index be458a2d92..e736c07e63 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -1865,7 +1865,8 @@ (define-public msmtp
                       (doc (string-append out "/share/doc/msmtp"))
                       (msmtpq "scripts/msmtpq")
                       (msmtpqueue "scripts/msmtpqueue")
-                      (vimfiles (string-append out "/share/vim/vimfiles/syntax")))
+                      (vimfiles (string-append
+                                  out "/share/vim/vimfiles/pack/start/msmtp/syntax")))
                  (install-file (string-append msmtpq "/msmtpq") bin)
                  (install-file (string-append msmtpq "/msmtp-queue") bin)
                  (install-file (string-append msmtpqueue "/msmtp-enqueue.sh") bin)
diff --git a/gnu/packages/rust-apps.scm b/gnu/packages/rust-apps.scm
index 2f41ca4849..68b2122406 100644
--- a/gnu/packages/rust-apps.scm
+++ b/gnu/packages/rust-apps.scm
@@ -2151,7 +2151,8 @@ (define-public skim
                      (bin (string-append out "/bin"))
                      (share (string-append out "/share"))
                      (man (string-append out "/share/man"))
-                     (vimfiles (string-append share "/vim/vimfiles/plugin"))
+                     (vimfiles (string-append
+                                 share "/vim/vimfiles/pack/guix/start/skim/plugin"))
                      (bash-completion
                       (string-append share "/bash-completions/completions"))
                      (zsh-site (string-append share "/zsh/site-functions"))
diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm
index d2ea9b7ae1..c8eb2522c6 100644
--- a/gnu/packages/vim.scm
+++ b/gnu/packages/vim.scm
@@ -31,17 +31,17 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages vim)
-  #:use-module ((guix licenses) #:prefix license:)  
+  #: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)
   #:use-module (guix build-system cmake)
-  #:use-module (guix build-system copy)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (guix build-system pyproject)
+  #:use-module (guix build-system vim)
   #:use-module (gnu packages)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages admin) ; For GNU hostname
@@ -299,12 +299,9 @@ (define-public vim-neocomplete
        (sha256
         (base32
          "1h6sci5mhdfg6sjsjpi8l5li02hg858zcayiwl60y9j2gqnd18lv"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("autoload" "share/vim/vimfiles/")
-         ("doc" "share/vim/vimfiles/")
-         ("plugin" "share/vim/vimfiles/"))))
+     (list #:plugin-name "neocomplete"))
     (synopsis "Next generation completion framework for Vim")
     (description
      "@code{neocomplete}, an abbreviation of 'neo-completion with cache',
@@ -332,10 +329,9 @@ (define-public vim-neosnippet-snippets
          (sha256
           (base32
            "151wpvbj6jb9jdkbhj3b77f5sq7y328spvwfbqyj1y32rg4ifmc6"))))
-      (build-system copy-build-system)
+      (build-system vim-build-system)
       (arguments
-       '(#:install-plan
-         '(("neosnippets" "share/vim/vimfiles/"))))
+       (list #:plugin-name "neosnippet-snippets"))
     (synopsis "Snippets for neosnippet")
     (description
      "@code{neosnippet-snippets} provides standard snippets for the Vim plugin
@@ -361,17 +357,9 @@ (define-public vim-neosnippet
        (sha256
         (base32
          "0k80syscmpnj38ks1fq02ds59g0r4jlg9ll7z4qc048mgi35alw5"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("autoload" "share/vim/vimfiles/")
-         ("doc" "share/vim/vimfiles/")
-         ("ftdetect" "share/vim/vimfiles/")
-         ("ftplugin" "share/vim/vimfiles/")
-         ("indent" "share/vim/vimfiles/")
-         ("plugin" "share/vim/vimfiles/")
-         ("rplugin" "share/vim/vimfiles/")
-         ("syntax" "share/vim/vimfiles/"))))
+     (list #:plugin-name "neosnippet"))
     (synopsis "Snippet support for Vim")
     (description
      "@code{neosnippet}, is a plugin for Vim which adds snippet support to Vim.
@@ -400,12 +388,9 @@ (define-public vim-scheme
          (sha256
           (base32
            "04h946vr4f8wxap3wzqs69y2v8n50g2zbk22jsg2kxr4c01z5cbw"))))
-      (build-system copy-build-system)
+      (build-system vim-build-system)
       (arguments
-       '(#:install-plan
-         '(("ftplugin" "share/vim/vimfiles/")
-           ("indent" "share/vim/vimfiles/")
-           ("syntax" "share/vim/vimfiles/"))))
+       (list #:plugin-name "vim-scheme"))
       (synopsis "Scheme syntax for Vim")
       (description
        "@code{vim-scheme} provides Scheme support for Vim (R7RS and CHICKEN).")
@@ -428,10 +413,9 @@ (define-public vim-luna
          (sha256
           (base32
            "0ka3qbhsh8lix1vyj4678j7dnchkd8khhirrnn3aylxxf8fpqyg8"))))
-      (build-system copy-build-system)
+      (build-system vim-build-system)
       (arguments
-       '(#:install-plan
-         '(("colors" "share/vim/vimfiles/"))))
+       (list #:plugin-name "luna"))
       (synopsis "Dark color theme for Vim")
       (description
        "@code{vim-luna} is a dark color theme for Vim.")
@@ -455,11 +439,9 @@ (define-public vim-context-filetype
          (sha256
           (base32
            "0alvrfhmd91zkd9h83s8wvgyq4iakcf6rybsyjd369qbgpcqky89"))))
-      (build-system copy-build-system)
+      (build-system vim-build-system)
       (arguments
-       '(#:install-plan
-         '(("doc" "share/vim/vimfiles/")
-           ("autoload" "share/vim/vimfiles/"))))
+       (list #:plugin-name "context_filetype"))
       (synopsis "Context filetype library for Vim")
       (description
        "@code{vim-context-filetype} is context filetype library for Vim script.")
@@ -479,15 +461,9 @@ (define-public vim-fugitive
         (file-name (git-file-name name version))
         (sha256
          (base32 "138290g2aph1jjhaza6biky5qi4ka6435s01bwxivllgb53g3irc"))))
-    (build-system copy-build-system)
+    (build-system vim-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/"))))
+     (list #:plugin-name "fugitive"))
     (home-page "https://github.com/tpope/vim-fugitive")
     (synopsis "Vim plugin to work with Git")
     (description "Vim-fugitive is a wrapper for Vim that complements the
@@ -509,12 +485,9 @@ (define-public vim-airline
        (sha256
         (base32
          "1aksmr73648pvyc75pfdz28k2d4ky52rn7xiwcv7lz87q3vqld7k"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("autoload" "share/vim/vimfiles/")
-         ("doc" "share/vim/vimfiles/")
-         ("plugin" "share/vim/vimfiles/"))))
+     (list #:plugin-name "airline"))
     (synopsis "Statusline for Vim")
     (description
      "@code{vim-airline} is an extensible statusline for Vim.
@@ -540,12 +513,9 @@ (define-public vim-airline-themes
          (sha256
           (base32
            "1sb7nb7j7bz0pv1c9bgdy0smhr0jk2b1vbdv9yzghg5lrknpsbr6"))))
-      (build-system copy-build-system)
+      (build-system vim-build-system)
       (arguments
-       '(#:install-plan
-         '(("autoload" "share/vim/vimfiles/")
-           ("doc" "share/vim/vimfiles/")
-           ("plugin" "share/vim/vimfiles/"))))
+       (list #:plugin-name "airline-themes"))
       (synopsis "Collection of themes for Vim-airline")
       (description
        "@code{vim-airline-themes} is a collection of themes for @code{vim-airline}.")
@@ -565,13 +535,9 @@ (define-public vim-syntastic
        (file-name (git-file-name name version))
        (sha256
         (base32 "0j91f72jaz1s6aw1hpjiz30vk2ds2aqd9gisk91grsldy6nz6hhz"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("autoload" "share/vim/vimfiles/")
-         ("doc" "share/vim/vimfiles/")
-         ("plugin" "share/vim/vimfiles/")
-         ("syntax_checkers" "share/vim/vimfiles/"))))
+     (list #:plugin-name "syntastic"))
     (synopsis "Syntax checking plugin for Vim")
     (description
      "Vim-syntastic is a syntax checking plugin for Vim.  It runs files through
@@ -581,6 +547,17 @@ (define-public vim-syntastic
     (home-page "https://github.com/vim-syntastic/syntastic")
     (license license:wtfpl2)))
 
+(define-public neovim-syntastic
+  (package
+    (inherit vim-syntastic)
+    (name "neovim-syntastic")
+    (synopsis "Syntax checking plugin for Neovim")
+    (description
+     "Vim-syntastic is a syntax checking plugin for Neovim.  It runs files through
+external syntax checkers and displays any resulting errors to the user.  This
+can be done on demand, or automatically as files are saved.  If syntax errors
+are detected, the user is notified.")))
+
 (define-public vim-solarized
   (let ((commit "62f656a02f93c5190a8753159e34b385588d5ff3")
         (revision "1"))
@@ -596,11 +573,15 @@ (define-public vim-solarized
          (file-name (git-file-name name version))
          (sha256
           (base32 "0001mz5v3a8zvi3gzmxhi3yrsb6hs7qf6i497arsngnvj2cwn61d"))))
-      (build-system copy-build-system)
+      (build-system vim-build-system)
       (arguments
-       '(#:install-plan
-         '(("vim-colors-solarized/colors" "share/vim/vimfiles/")
-           ("vim-colors-solarized/doc" "share/vim/vimfiles/"))))
+       (list
+         #:plugin-name "solarized"
+         #:phases
+         #~(modify-phases %standard-phases
+             (add-after 'unpack 'chdir
+               (lambda _
+                 (chdir "vim-colors-solarized"))))))
       (home-page "https://github.com/altercation/vim-colors-solarized")
       (synopsis "Solarized color scheme for Vim")
       (description
@@ -631,9 +612,15 @@ (define-public vim-rainbow
        (file-name (git-file-name name version))
        (sha256
         (base32 "1jya8wwlkmgs89hndrq6gsaskhk9g0fh62wdib8v9vz2x5g3738z"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan '(("opt" "share/vim/vimfiles/pack/rainbow/"))))
+     (list
+       #:plugin-name "rainbow"
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'chdir
+             (lambda _
+               (chdir "opt/rainbow"))))))
     (home-page "https://github.com/mason1920/rainbow")
     (synopsis "Rainbow Parentheses Improved")
     (description
@@ -656,12 +643,11 @@ (define-public editorconfig-vim
         (sha256
          (base32
           "0mp80bi2m56bb93szw87vy6q5s85yk9g91sl4pr51316rgdv5kkv"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("autoload" "share/vim/vimfiles/")
-         ("doc" "share/vim/vimfiles/")
-         ("plugin" "share/vim/vimfiles/"))))
+     (list
+       #:plugin-name "editorconfig"
+       #:vim? #t))
     (home-page "https://editorconfig.org/")
     (synopsis "EditorConfig plugin for Vim")
     (description "EditorConfig makes it easy to maintain the correct coding
@@ -686,11 +672,9 @@ (define-public neovim-packer
                 (sha256
                  (base32
                   "1xn08z3a21mgfvp5i1nv57jnldwxwnl5nkryiff3zc99b1mizigp"))))
-      (build-system copy-build-system)
+      (build-system vim-build-system)
       (arguments
-       (list #:install-plan
-             #~'(("lua" "share/nvim/site/pack/guix/start/packer.nvim/")
-                 ("doc" "share/nvim/site/pack/guix/start/packer.nvim/"))))
+       (list #:plugin-name "packer.nvim"))
       (home-page "https://github.com/wbthomason/packer.nvim")
       (synopsis "Plugin manager for Neovim")
       (description
@@ -699,23 +683,6 @@ (define-public neovim-packer
 is based on Vim's builtin plugin support.")
       (license license:expat))))
 
-(define-public neovim-syntastic
-  (package
-    (inherit vim-syntastic)
-    (name "neovim-syntastic")
-    (arguments
-     '(#:install-plan
-       '(("autoload" "share/nvim/site/")
-         ("doc" "share/nvim/site/")
-         ("plugin" "share/nvim/site/")
-         ("syntax_checkers" "share/nvim/site/"))))
-    (synopsis "Syntax checking plugin for Neovim")
-    (description
-     "Vim-syntastic is a syntax checking plugin for Neovim.  It runs files through
-external syntax checkers and displays any resulting errors to the user.  This
-can be done on demand, or automatically as files are saved.  If syntax errors
-are detected, the user is notified.")))
-
 (define-public neovim
   (package
     (name "neovim")
@@ -889,12 +856,12 @@ (define-public vifm
             (lambda* (#:key outputs #:allow-other-keys)
               (let* ((out (assoc-ref outputs "out"))
                      (vifm (string-append out "/share/vifm"))
-                     (vimfiles (string-append out "/share/vim/vimfiles")))
+                     (vimfiles (string-append
+                                 out "/share/vim/vimfiles/pack/guix/start/vifm")))
                 (copy-recursively (string-append vifm "/colors")
                                   (string-append vimfiles "/colors"))
                 (copy-recursively (string-append vifm "/vim")
                                   vimfiles)
-                (delete-file-recursively (string-append vifm "/colors"))
                 (delete-file-recursively (string-append vifm "/vim"))))))))
     (native-inputs
      (list groff)) ; for the documentation
@@ -986,17 +953,9 @@ (define-public vim-guix-vim
               (sha256
                (base32
                 "013yn2n2nsspk12bldkc9xn4z4kjx9rvracbllc8i1nngldckxd0"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("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/"))))
+     (list #:plugin-name "guix"))
     (home-page "https://git.sr.ht/~efraim/guix.vim")
     (synopsis "Guix integration in Vim")
     (description "This package provides support for GNU Guix in Vim.")
@@ -1015,11 +974,13 @@ (define-public vim-asyncrun
               (sha256
                (base32
                 "11zcw0sll6qg6ha0rr6n1cw5v73azvf7ycwn9lgiwa5cj7rrqjf4"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("plugin" "share/vim/vimfiles/")
-         ("doc/" "share/vim/vimfiles/doc" #:include ("asyncrun.txt")))))
+     (list
+       #:plugin-name "asyncrun"
+       #:install-plan
+       #~'(("plugin" "share/vim/vimfiles/")
+           ("doc/" "share/vim/vimfiles/doc" #:include ("asyncrun.txt")))))
     (home-page "https://github.com/skywind3000/asyncrun.vim")
     (synopsis "Run Async Shell Commands in Vim")
     (description "This plugin takes the advantage of new APIs in Vim 8 (and
@@ -1041,12 +1002,9 @@ (define-public vim-dispatch
         (sha256
          (base32
           "1m8b5mn2zqlphzs6xfwykwmghf6p0wabrhpjmh7vav35jgcxc4wl"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("autoload" "share/vim/vimfiles/")
-         ("doc" "share/vim/vimfiles/")
-         ("plugin" "share/vim/vimfiles/"))))
+     (list #:plugin-name "dispatch"))
     (home-page "https://github.com/tpope/vim-dispatch")
     (synopsis "Asynchronous build and test dispatcher")
     (description "Leverage the power of Vim's compiler plugins without being
@@ -1071,11 +1029,9 @@ (define-public vim-gemini-vim
           (file-name (git-file-name name version))
           (sha256
            (base32 "05ffhhfahjqwxyrqmsinsahrs15wknzl2qbj8mznyv319mn2civ2"))))
-      (build-system copy-build-system)
+      (build-system vim-build-system)
       (arguments
-       `(#:install-plan
-         '(("ftdetect" "share/vim/vimfiles/")
-           ("syntax" "share/vim/vimfiles/"))))
+       (list #:plugin-name "gemini"))
       (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
@@ -1099,11 +1055,9 @@ (define-public vim-eunuch
           (sha256
            (base32
             "1xadb22kd40swmww0qxmmkcpcq6viy8l167pjck5q32hfngll5d3"))))
-      (build-system copy-build-system)
+      (build-system vim-build-system)
       (arguments
-       '(#:install-plan
-         '(("doc" "share/vim/vimfiles/")
-           ("plugin" "share/vim/vimfiles/"))))
+       (list #:plugin-name "eunuch"))
       (home-page "https://github.com/tpope/vim-eunuch")
       (synopsis "Vim sugar for the UNIX shell commands")
       (description "Vim sugar for the UNIX shell commands that need it the most.
@@ -1127,13 +1081,9 @@ (define-public vim-slime
           (file-name (git-file-name name version))
           (sha256
            (base32 "0k4b629jn6xlxyjxdl3cgm06v9dmx967rqnslv5m82c9kscwpyh4"))))
-      (build-system copy-build-system)
+      (build-system vim-build-system)
       (arguments
-       `(#:install-plan
-         '(("autoload" "share/vim/vimfiles/")
-           ("doc" "share/vim/vimfiles/")
-           ("ftplugin" "share/vim/vimfiles/")
-           ("plugin" "share/vim/vimfiles/"))))
+       (list #:plugin-name "vim-slime"))
       (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
@@ -1159,28 +1109,29 @@ (define-public vim-vlime
        (sha256
         (base32 "1dfc1wyjsgkckrklkzvk4whaz3ahaka59rvm7rc724mabmk83pmp"))
        (file-name (git-file-name name version))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("vim/autoload" "share/vim/vimfiles/")
-         ("vim/doc" "share/vim/vimfiles/")
-         ("vim/ftplugin" "share/vim/vimfiles/")
-         ("vim/syntax" "share/vim/vimfiles/")
-         ("vim/test" "share/vim/vimfiles/")
-         ;; This is so the Vimscript part of Vlime can find the lisp files.
-         ("lisp" "share/vim/")
-         ;; This is so lisp can load Vlime without the Vim part.
-         ("lisp" "share/common-lisp/source/vlime"))
+     '(#:plugin-name "vlime"
        #:phases
        (modify-phases %standard-phases
-         ;; Create a symbolic link to the .asd file so that
-         ;; (asdf:load-system "vlime") finds the system.
-         (add-after 'install 'link-asd
+         (add-after 'symlink-files 'install-lisp-files
            (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (mkdir-p (string-append out "/share/common-lisp/systems/"))
-               (symlink (string-append out "/share/common-lisp/source/vlime/vlime.asd")
-                        (string-append out "/share/common-lisp/systems/vlime.asd"))))))))
+             (let* ((out (assoc-ref outputs "out"))
+                    (common-lisp (string-append out "/share/common-lisp")))
+               ;; Create a symbolic link to the .asd file so that
+               ;; (asdf:load-system "vlime") finds the system.
+               (copy-recursively "lisp" (string-append common-lisp "/source/vlime"))
+               (mkdir-p (string-append common-lisp "/systems/"))
+               (symlink (string-append common-lisp "/source/vlime/vlime.asd")
+                        (string-append common-lisp "/systems/vlime.asd")))))
+         (add-after 'install 'symlink-files
+           (lambda* (#:key outputs plugin-name #:allow-other-keys)
+             (with-directory-excursion
+               (string-append (assoc-ref outputs "out")
+                              "/share/vim/vimfiles/pack/guix/start/" plugin-name)
+               (for-each (lambda (dir)
+                           (symlink (string-append "./vim/" dir) dir))
+                         (list "after" "autoload" "doc" "ftplugin" "syntax"))))))))
     (propagated-inputs
      (list cl-alexandria
            cl-slime-swank
@@ -1211,11 +1162,9 @@ (define-public vim-paredit
           (file-name (git-file-name name version))
           (sha256
            (base32 "07d5s20r0ssd7rir45vy0fqlci44gha1a81rcilgar227f3nw328"))))
-      (build-system copy-build-system)
+      (build-system vim-build-system)
       (arguments
-       '(#:install-plan
-         '(("doc" "share/vim/vimfiles/")
-           ("plugin" "share/vim/vimfiles/"))))
+       (list #:plugin-name "paredit"))
       (home-page "https://github.com/kovisoft/paredit")
       (synopsis "Vim plugin for structured editing of Lisp S-expressions")
       (description
@@ -1237,11 +1186,9 @@ (define-public vim-surround
        (file-name (git-file-name name version))
        (sha256
         (base32 "1b0bd5m5lv1p4d299mrwjfs2gk0zqwyaqdaid9hs9yqlxnr8s5nf"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("doc" "share/vim/vimfiles/")
-         ("plugin" "share/vim/vimfiles/"))))
+     (list #:plugin-name "surround"))
     (home-page "https://github.com/tpope/vim-surround")
     (synopsis "Vim plugin for easy quoting and parenthesizing")
     (description
@@ -1262,12 +1209,9 @@ (define-public vim-gnupg
                            "/vim-gnupg-v" version ".tar.gz"))
        (sha256
         (base32 "02w8lgyyh7wgxysvmmcf9ja5c06vrbyh3alzvv97x8cfhrp0skn7"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("autoload" "share/vim/vimfiles/")
-         ("doc" "share/vim/vimfiles/")
-         ("plugin" "share/vim/vimfiles/"))))
+     (list #:plugin-name "vim-gnupg"))
     (home-page "https://www.vim.org/scripts/script.php?script_id=3645")
     (synopsis "Vim plugin for transparent editing of gpg encrypted files")
     (description
@@ -1293,12 +1237,9 @@ (define-public vim-ctrlp
        (file-name (git-file-name name version))
        (sha256
         (base32 "0n68hg59h4rjn0ziqbsh5pr03l3kr98zk54659ny6vq107af1w96"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("autoload" "share/vim/vimfiles/")
-         ("doc" "share/vim/vimfiles/")
-         ("plugin" "share/vim/vimfiles/"))))
+     (list #:plugin-name "ctrlp.vim"))
     (home-page "https://ctrlpvim.github.io/ctrlp.vim/")
     (synopsis "Fuzzy file, buffer, mru, tag, etc. finder for Vim")
     (description
@@ -1330,12 +1271,9 @@ (define-public vim-mucomplete
        (file-name (git-file-name name version))
        (sha256
         (base32 "054g80n09mmxxlh8xaic29bn8bgn3clvv732rymljdyvbj1mlhwd"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("autoload" "share/vim/vimfiles/")
-         ("doc" "share/vim/vimfiles/")
-         ("plugin" "share/vim/vimfiles/"))))
+     (list #:plugin-name "MUcomplete"))
     (home-page "https://github.com/lifepillar/vim-mucomplete")
     (synopsis "MUcomplete is a minimalist autocompletion plugin for Vim")
     (description
@@ -1359,12 +1297,9 @@ (define-public vim-gitgutter
          (file-name (git-file-name name version))
          (sha256
           (base32 "0zpa7cs59a8sq0k3frlf9flpf30jcn239yrpmv40r7nqvxzglbpl"))))
-      (build-system copy-build-system)
+      (build-system vim-build-system)
       (arguments
-       '(#:install-plan
-         '(("autoload" "share/vim/vimfiles/")
-           ("doc" "share/vim/vimfiles/")
-           ("plugin" "share/vim/vimfiles/"))))
+       (list #:plugin-name "gitgutter"))
       (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
@@ -1388,12 +1323,9 @@ (define-public vim-characterize
        (file-name (git-file-name name version))
        (sha256
         (base32 "0ppsbsd696ih40d9f76mdl9sd9y7p2pvm65qmvq4b2zhkv4xbpxz"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("autoload" "share/vim/vimfiles/")
-         ("doc" "share/vim/vimfiles/")
-         ("plugin" "share/vim/vimfiles/"))))
+     (list #:plugin-name "characterize"))
     (home-page "https://github.com/tpope/vim-characterize")
     (synopsis "Vim plugin for showing Unicode character metadata")
     (description
@@ -1422,13 +1354,9 @@ (define-public vim-tagbar
        (file-name (git-file-name name version))
        (sha256
         (base32 "1fqfs8msmr6d4kpvxqp14sdjvp5fj52q5w5kz71myzcd4kqzmirp"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     '(#:install-plan
-       '(("autoload" "share/vim/vimfiles/")
-         ("doc" "share/vim/vimfiles/")
-         ("plugin" "share/vim/vimfiles/")
-         ("syntax" "share/vim/vimfiles/"))
+     '(#:plugin-name "tagbar"
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'link-universal-ctags
@@ -1463,15 +1391,9 @@ (define-public vim-nerdtree
        (file-name (git-file-name name version))
        (sha256
         (base32 "1si8qla86ng8cffbmfrk9gss0i3912yw0f1ph4bsiq0kk837lccp"))))
-    (build-system copy-build-system)
+    (build-system vim-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/"))))
+     (list #:plugin-name "nerdtree"))
     (home-page "https://github.com/preservim/nerdtree")
     (synopsis "Tree explorer plugin for Vim")
     (description
@@ -1493,13 +1415,9 @@ (define-public vim-nerdcommenter
        (file-name (git-file-name name version))
        (sha256
         (base32 "1ka2rqn7rby55aps3iblh1dcqxm7m7qx72mpkz6y2aaj8mkj0zyd"))))
-    (build-system copy-build-system)
+    (build-system vim-build-system)
     (arguments
-     (list
-      #:install-plan
-      #~`(("autoload" "share/vim/vimfiles/")
-          ("doc" "share/vim/vimfiles/")
-          ("plugin" "share/vim/vimfiles/"))))
+     (list #:plugin-name "nerdcommenter"))
     (home-page "https://github.com/preservim/nerdcommenter")
     (synopsis "Vim plugin for easy commenting of code")
     (description
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 8576d0297d..f3ad1a5635 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -1083,7 +1083,8 @@ (define-public fluxbox
          (add-after 'install 'install-vim-files
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (syntax (string-append out "/share/vim/vimfiles/syntax")))
+                    (syntax (string-append
+                              out "/share/vim/vimfiles/pack/guix/start/fluxbox/syntax")))
                (copy-recursively "3rd/vim/vim/syntax" syntax)
                #t)))
          (add-after 'install 'install-xsession
