Mercurial > vim
changeset 5737:e25a04c1c515 v7.4.213
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)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Sun, 23 Mar 2014 16:04:02 +0100 |
parents | 187cebfcddf7 |
children | 93bc4ba17595 |
files | runtime/doc/recover.txt src/ex_cmds.h src/ex_docmd.c src/memline.c src/structs.h src/version.c |
diffstat | 6 files changed, 37 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/recover.txt +++ b/runtime/doc/recover.txt @@ -81,7 +81,14 @@ the amount of memory used to be higher t '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 ~
--- a/src/ex_cmds.h +++ b/src/ex_cmds.h @@ -655,6 +655,8 @@ EX(CMD_noreabbrev, "noreabbrev", ex_abbr 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,
--- 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; } -#endif + 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:
--- 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
--- 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