1
0
forked from aniani/vim

updated for version 7.4.213

Problem:    It's not possible to open a new buffer without creating a swap
            file.
Solution:   Add the ":noswapfile" modifier. (Christian Brabandt)
This commit is contained in:
Bram Moolenaar
2014-03-23 16:04:02 +01:00
parent f7ff6e85e8
commit 5803ae6c07
6 changed files with 37 additions and 12 deletions

View File

@@ -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 'maxmemtot'. And when making a change to a read-only file, the swap file is
created anyway. 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 ~ Detecting an existing swap file ~

View File

@@ -655,6 +655,8 @@ EX(CMD_noreabbrev, "noreabbrev", ex_abbreviate,
EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
EX(CMD_noremenu, "noremenu", ex_menu, EX(CMD_noremenu, "noremenu", ex_menu,
RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
EX(CMD_noswapfile, "noswapfile", ex_wrongmodifier,
NEEDARG|EXTRA|NOTRLCOM),
EX(CMD_normal, "normal", ex_normal, EX(CMD_normal, "normal", ex_normal,
RANGE|BANG|EXTRA|NEEDARG|NOTRLCOM|USECTRLV|SBOXOK|CMDWIN), RANGE|BANG|EXTRA|NEEDARG|NOTRLCOM|USECTRLV|SBOXOK|CMDWIN),
EX(CMD_number, "number", ex_print, EX(CMD_number, "number", ex_print,

View File

@@ -1874,18 +1874,23 @@ do_one_cmd(cmdlinep, sourcing,
#endif #endif
continue; continue;
case 'n': if (!checkforcmd(&ea.cmd, "noautocmd", 3)) case 'n': if (checkforcmd(&ea.cmd, "noautocmd", 3))
break;
#ifdef FEAT_AUTOCMD
if (cmdmod.save_ei == NULL)
{ {
/* Set 'eventignore' to "all". Restore the #ifdef FEAT_AUTOCMD
* existing option value later. */ if (cmdmod.save_ei == NULL)
cmdmod.save_ei = vim_strsave(p_ei); {
set_string_option_direct((char_u *)"ei", -1, /* 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); (char_u *)"all", OPT_FREE, SID_NONE);
} }
#endif #endif
continue;
}
if (!checkforcmd(&ea.cmd, "noswapfile", 6))
break;
cmdmod.noswapfile = TRUE;
continue; continue;
case 'r': if (!checkforcmd(&ea.cmd, "rightbelow", 6)) case 'r': if (!checkforcmd(&ea.cmd, "rightbelow", 6))
@@ -2596,6 +2601,8 @@ do_one_cmd(cmdlinep, sourcing,
case CMD_lua: case CMD_lua:
case CMD_match: case CMD_match:
case CMD_mzscheme: case CMD_mzscheme:
case CMD_noautocmd:
case CMD_noswapfile:
case CMD_perl: case CMD_perl:
case CMD_psearch: case CMD_psearch:
case CMD_python: case CMD_python:
@@ -3099,6 +3106,7 @@ static struct cmdmod
{"leftabove", 5, FALSE}, {"leftabove", 5, FALSE},
{"lockmarks", 3, FALSE}, {"lockmarks", 3, FALSE},
{"noautocmd", 3, FALSE}, {"noautocmd", 3, FALSE},
{"noswapfile", 3, FALSE},
{"rightbelow", 6, FALSE}, {"rightbelow", 6, FALSE},
{"sandbox", 3, FALSE}, {"sandbox", 3, FALSE},
{"silent", 3, FALSE}, {"silent", 3, FALSE},
@@ -3611,6 +3619,8 @@ set_one_cmd_context(xp, buff)
case CMD_keeppatterns: case CMD_keeppatterns:
case CMD_leftabove: case CMD_leftabove:
case CMD_lockmarks: case CMD_lockmarks:
case CMD_noautocmd:
case CMD_noswapfile:
case CMD_rightbelow: case CMD_rightbelow:
case CMD_sandbox: case CMD_sandbox:
case CMD_silent: case CMD_silent:

View File

@@ -289,6 +289,9 @@ ml_open(buf)
buf->b_ml.ml_chunksize = NULL; buf->b_ml.ml_chunksize = NULL;
#endif #endif
if (cmdmod.noswapfile)
buf->b_p_swf = FALSE;
/* /*
* When 'updatecount' is non-zero swap file may be opened later. * 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. * When 'updatecount' is 0 and 'noswapfile' there is no swap file.
* For help files we will make a swap file now. * 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 */ ml_open_file(buf); /* create a swap file */
return; return;
} }
@@ -719,7 +722,7 @@ ml_open_file(buf)
char_u *dirp; char_u *dirp;
mfp = buf->b_ml.ml_mfp; 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 */ return; /* nothing to do */
#ifdef FEAT_SPELL #ifdef FEAT_SPELL

View File

@@ -545,6 +545,7 @@ typedef struct
int keepjumps; /* TRUE when ":keepjumps" was used */ int keepjumps; /* TRUE when ":keepjumps" was used */
int lockmarks; /* TRUE when ":lockmarks" was used */ int lockmarks; /* TRUE when ":lockmarks" was used */
int keeppatterns; /* TRUE when ":keeppatterns" was used */ int keeppatterns; /* TRUE when ":keeppatterns" was used */
int noswapfile; /* TRUE when ":noswapfile" was used */
# ifdef FEAT_AUTOCMD # ifdef FEAT_AUTOCMD
char_u *save_ei; /* saved value of 'eventignore' */ char_u *save_ei; /* saved value of 'eventignore' */
# endif # endif

View File

@@ -734,6 +734,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
213,
/**/ /**/
212, 212,
/**/ /**/