diff options
-rw-r--r-- | runtime/doc/recover.txt | 9 | ||||
-rw-r--r-- | src/ex_cmds.h | 2 | ||||
-rw-r--r-- | src/ex_docmd.c | 28 | ||||
-rw-r--r-- | src/memline.c | 7 | ||||
-rw-r--r-- | src/structs.h | 1 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |