aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/ex_cmds2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/ex_cmds2.c')
-rw-r--r--src/nvim/ex_cmds2.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index 6f301658bf..8389ed9400 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -2375,6 +2375,21 @@ int do_in_runtimepath(char_u *name, bool all, DoInRuntimepathCB callback,
return do_in_path(p_rtp, name, all, callback, cookie);
}
+// Source filetype detection scripts, if filetype.vim was already done.
+static void may_do_filetypes(char_u *pat)
+{
+ char_u *cmd = vim_strsave((char_u *)"did_load_filetypes");
+
+ // If runtime/filetype.vim wasn't loaded yet, the scripts will be found
+ // when it loads.
+ if (cmd != NULL && eval_to_number(cmd) > 0) {
+ do_cmdline_cmd("augroup filetypedetect");
+ source_runtime(pat, TRUE);
+ do_cmdline_cmd("augroup END");
+ }
+ xfree(cmd);
+}
+
static void source_pack_plugin(char_u *fname, void *cookie)
{
char_u *p6, *p5, *p4, *p3, *p2, *p1, *p;
@@ -2436,17 +2451,23 @@ void source_packages(void)
{
do_in_path(p_pp, (char_u *)"pack/*/ever/*/plugin/*.vim",
true, source_pack_plugin, NULL);
+ may_do_filetypes((char_u *)"pack/*/ever/*/ftdetect/*.vim");
}
// ":loadplugin {name}"
void ex_loadplugin(exarg_T *eap)
{
- static const char *pattern = "pack/*/opt/%s/plugin/*.vim";
+ static const char *plugpat = "pack/*/opt/%s/plugin/*.vim";
+ static const char *ftpat = "pack/*/opt/%s/ftdetect/*.vim";
- size_t len = STRLEN(pattern) + STRLEN(eap->arg);
+ size_t len = STRLEN(ftpat) + STRLEN(eap->arg);
char *pat = xmallocz(len);
- vim_snprintf(pat, len, pattern, eap->arg);
+ vim_snprintf(pat, len, plugpat, eap->arg);
do_in_path(p_pp, (char_u *)pat, true, source_pack_plugin, NULL);
+
+ vim_snprintf(pat, len, ftpat, eap->arg);
+ may_do_filetypes((char_u *)pat);
+
xfree(pat);
}