aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
authorVictor Blanchard <48864055+Viblanc@users.noreply.github.com>2022-11-07 04:31:50 +0100
committerGitHub <noreply@github.com>2022-11-06 19:31:50 -0800
commitd337814906b1377e34aa2c2dfd8aa16285328692 (patch)
treede1ae115fe6b4266dabef3aa59e2d62d4fede6b7 /src/nvim/eval.c
parent10fbda508cc9fad931e55000d4434e71701ddeab (diff)
downloadrneovim-d337814906b1377e34aa2c2dfd8aa16285328692.tar.gz
rneovim-d337814906b1377e34aa2c2dfd8aa16285328692.tar.bz2
rneovim-d337814906b1377e34aa2c2dfd8aa16285328692.zip
feat: ":write ++p" creates parent dirs #20835
- `:write ++p foo/bar/baz.txt` should create parent directories `foo/bar/` if they do not exist - Note: `:foo ++…` is usually for options. No existing options have a single-char abbreviation (presumably by design), so it's safe to special-case `++p` here. - Same for `writefile(…, 'foo/bar/baz.txt', 'p')` - `BufWriteCmd` can see the ++p flag via `v:cmdarg`. closes #19884
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r--src/nvim/eval.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index c578d9fd39..0848326d90 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -7067,6 +7067,9 @@ char *set_cmdarg(exarg_T *eap, char *oldarg)
if (eap->bad_char != 0) {
len += 7 + 4; // " ++bad=" + "keep" or "drop"
}
+ if (eap->mkdir_p != 0) {
+ len += 4;
+ }
const size_t newval_len = len + 1;
char *newval = xmalloc(newval_len);
@@ -7100,6 +7103,11 @@ char *set_cmdarg(exarg_T *eap, char *oldarg)
snprintf(newval + strlen(newval), newval_len, " ++bad=%c",
eap->bad_char);
}
+
+ if (eap->mkdir_p) {
+ snprintf(newval, newval_len, " ++p");
+ }
+
vimvars[VV_CMDARG].vv_str = newval;
return oldval;
}