summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/recover.txt9
-rw-r--r--src/ex_cmds.h2
-rw-r--r--src/ex_docmd.c28
-rw-r--r--src/memline.c7
-rw-r--r--src/structs.h1
-rw-r--r--src/version.c2
6 files changed, 37 insertions, 12 deletions
diff --git a/runtime/doc/recover.txt b/runtime/doc/recover.txt
index 5fc09c0e7..650feb208 100644
--- a/runtime/doc/recover.txt
+++ b/runtime/doc/recover.txt
@@ -81,7 +81,14 @@ the amount of memory used to be higher than given with 'maxmem' or
'maxmemtot'. And when making a change to a read-only file, the swap file is
created anyway.
-The 'swapfile' option can be reset to avoid creating a swapfile.
+The 'swapfile' option can be reset to avoid creating a swapfile. And the
+|:noswapfile| modifier can be used to not create a swapfile for a new buffer.
+
+:noswap[file] {command} *:noswap* *:noswapfile*
+ Execute {command}. If it contains a command that loads a new
+ buffer, it will be loaded without creating a swapfile and the
+ 'swapfile' option will be reset. If a buffer already had a
+ swapfile it is not removed and 'swapfile' is not reset.
Detecting an existing swap file ~
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index fc3763c08..41d3a642d 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -655,6 +655,8 @@ EX(CMD_noreabbrev, "noreabbrev", ex_abbreviate,
EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
EX(CMD_noremenu, "noremenu", ex_menu,
RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+EX(CMD_noswapfile, "noswapfile", ex_wrongmodifier,
+ NEEDARG|EXTRA|NOTRLCOM),
EX(CMD_normal, "normal", ex_normal,
RANGE|BANG|EXTRA|NEEDARG|NOTRLCOM|USECTRLV|SBOXOK|CMDWIN),
EX(CMD_number, "number", ex_print,
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 507de7d15..95c699d98 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -1874,18 +1874,23 @@ do_one_cmd(cmdlinep, sourcing,
#endif
continue;
- case 'n': if (!checkforcmd(&ea.cmd, "noautocmd", 3))
- break;
-#ifdef FEAT_AUTOCMD
- if (cmdmod.save_ei == NULL)
+ case 'n': if (checkforcmd(&ea.cmd, "noautocmd", 3))
{
- /* Set 'eventignore' to "all". Restore the
- * existing option value later. */
- cmdmod.save_ei = vim_strsave(p_ei);
- set_string_option_direct((char_u *)"ei", -1,
+#ifdef FEAT_AUTOCMD
+ if (cmdmod.save_ei == NULL)
+ {
+ /* Set 'eventignore' to "all". Restore the
+ * existing option value later. */
+ cmdmod.save_ei = vim_strsave(p_ei);
+ set_string_option_direct((char_u *)"ei", -1,
(char_u *)"all", OPT_FREE, SID_NONE);
- }
+ }
#endif
+ continue;
+ }
+ if (!checkforcmd(&ea.cmd, "noswapfile", 6))
+ break;
+ cmdmod.noswapfile = TRUE;
continue;
case 'r': if (!checkforcmd(&ea.cmd, "rightbelow", 6))
@@ -2596,6 +2601,8 @@ do_one_cmd(cmdlinep, sourcing,
case CMD_lua:
case CMD_match:
case CMD_mzscheme:
+ case CMD_noautocmd:
+ case CMD_noswapfile:
case CMD_perl:
case CMD_psearch:
case CMD_python:
@@ -3099,6 +3106,7 @@ static struct cmdmod
{"leftabove", 5, FALSE},
{"lockmarks", 3, FALSE},
{"noautocmd", 3, FALSE},
+ {"noswapfile", 3, FALSE},
{"rightbelow", 6, FALSE},
{"sandbox", 3, FALSE},
{"silent", 3, FALSE},
@@ -3611,6 +3619,8 @@ set_one_cmd_context(xp, buff)
case CMD_keeppatterns:
case CMD_leftabove:
case CMD_lockmarks:
+ case CMD_noautocmd:
+ case CMD_noswapfile:
case CMD_rightbelow:
case CMD_sandbox:
case CMD_silent:
diff --git a/src/memline.c b/src/memline.c
index 8f6c0e01e..fb438d273 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -289,6 +289,9 @@ ml_open(buf)
buf->b_ml.ml_chunksize = NULL;
#endif
+ if (cmdmod.noswapfile)
+ buf->b_p_swf = FALSE;
+
/*
* When 'updatecount' is non-zero swap file may be opened later.
*/
@@ -606,7 +609,7 @@ ml_setname(buf)
* When 'updatecount' is 0 and 'noswapfile' there is no swap file.
* For help files we will make a swap file now.
*/
- if (p_uc != 0)
+ if (p_uc != 0 && !cmdmod.noswapfile)
ml_open_file(buf); /* create a swap file */
return;
}
@@ -719,7 +722,7 @@ ml_open_file(buf)
char_u *dirp;
mfp = buf->b_ml.ml_mfp;
- if (mfp == NULL || mfp->mf_fd >= 0 || !buf->b_p_swf)
+ if (mfp == NULL || mfp->mf_fd >= 0 || !buf->b_p_swf || cmdmod.noswapfile)
return; /* nothing to do */
#ifdef FEAT_SPELL
diff --git a/src/structs.h b/src/structs.h
index 7a3d69219..9bb35ceec 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -545,6 +545,7 @@ typedef struct
int keepjumps; /* TRUE when ":keepjumps" was used */
int lockmarks; /* TRUE when ":lockmarks" was used */
int keeppatterns; /* TRUE when ":keeppatterns" was used */
+ int noswapfile; /* TRUE when ":noswapfile" was used */
# ifdef FEAT_AUTOCMD
char_u *save_ei; /* saved value of 'eventignore' */
# endif
diff --git a/src/version.c b/src/version.c
index 36ff41f22..d8106a431 100644
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 213,
+/**/
212,
/**/
211,