aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2019-04-10 03:27:25 +0200
committerGitHub <noreply@github.com>2019-04-10 03:27:25 +0200
commitddd0eb6f5120a09b97867d2561ea61309038ccd2 (patch)
tree78ba762f7f99840c318f128a73ee6f0e5477968f
parent9daa7d9978ac0249b61e823808cabbcbc997d5c7 (diff)
downloadrneovim-ddd0eb6f5120a09b97867d2561ea61309038ccd2.tar.gz
rneovim-ddd0eb6f5120a09b97867d2561ea61309038ccd2.tar.bz2
rneovim-ddd0eb6f5120a09b97867d2561ea61309038ccd2.zip
startup: -es/-Es (silent/batch mode): skip swapfile #8540
To use Nvim as a scripting engine the side-effects of swapfiles and user config should be avoided by default.
-rw-r--r--runtime/doc/starting.txt3
-rw-r--r--runtime/doc/vim_diff.txt5
-rw-r--r--src/nvim/main.c14
-rw-r--r--test/functional/core/startup_spec.lua14
4 files changed, 28 insertions, 8 deletions
diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt
index 88aa4121e4..fd6eeccb4a 100644
--- a/runtime/doc/starting.txt
+++ b/runtime/doc/starting.txt
@@ -208,6 +208,7 @@ argument.
echo foo | nvim -V1 -es
<
User |init.vim| is skipped (unless given with |-u|).
+ Swap file is skipped (like |-n|).
|$TERM| is not used.
If stdin is not a TTY:
@@ -255,7 +256,7 @@ argument.
{not available when compiled without the |+eval| feature}
*-n*
--n No swap file will be used. Recovery after a crash will be
+-n No |swap-file| will be used. Recovery after a crash will be
impossible. Handy if you want to view or edit a file on a
very slow medium (e.g., a floppy).
Can also be done with ":set updatecount=0". You can switch it
diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt
index 1833c2cde3..b7974aa735 100644
--- a/runtime/doc/vim_diff.txt
+++ b/runtime/doc/vim_diff.txt
@@ -346,7 +346,10 @@ Shell:
Startup:
|-e| and |-es| invoke the same "improved Ex mode" as -E and -Es.
- |-E| and |-Es| reads stdin as text (into buffer 1).
+ |-E| and |-Es| read stdin as text (into buffer 1).
+ |-es| and |-Es| have improved behavior:
+ - Quits automatically, don't need "-c qa!".
+ - Skips swap-file dialog.
|-s| reads Normal commands from stdin if the script name is "-".
Reading text (instead of commands) from stdin |--|:
- works by default: "-" file is optional
diff --git a/src/nvim/main.c b/src/nvim/main.c
index 48feeea669..331cfc9f61 100644
--- a/src/nvim/main.c
+++ b/src/nvim/main.c
@@ -114,12 +114,12 @@ typedef struct {
char *listen_addr; // --listen {address}
} mparm_T;
-/* Values for edit_type. */
-#define EDIT_NONE 0 /* no edit type yet */
-#define EDIT_FILE 1 /* file name argument[s] given, use argument list */
-#define EDIT_STDIN 2 /* read file from stdin */
-#define EDIT_TAG 3 /* tag name argument given, use tagname */
-#define EDIT_QF 4 /* start in quickfix mode */
+// Values for edit_type.
+#define EDIT_NONE 0 // no edit type yet
+#define EDIT_FILE 1 // file name argument[s] given, use argument list
+#define EDIT_STDIN 2 // read file from stdin
+#define EDIT_TAG 3 // tag name argument given, use tagname
+#define EDIT_QF 4 // start in quickfix mode
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "main.c.generated.h"
@@ -807,6 +807,7 @@ static void command_line_scan(mparm_T *parmp)
if (exmode_active) {
// "nvim -e -" silent mode
silent_mode = true;
+ parmp->no_swap_file = true;
} else {
if (parmp->edit_type != EDIT_NONE
&& parmp->edit_type != EDIT_FILE
@@ -990,6 +991,7 @@ static void command_line_scan(mparm_T *parmp)
case 's': {
if (exmode_active) { // "-es" silent (batch) Ex-mode
silent_mode = true;
+ parmp->no_swap_file = true;
} else { // "-s {scriptin}" read from script file
want_argument = true;
}
diff --git a/test/functional/core/startup_spec.lua b/test/functional/core/startup_spec.lua
index 8edb8fc014..76e242b1e2 100644
--- a/test/functional/core/startup_spec.lua
+++ b/test/functional/core/startup_spec.lua
@@ -203,6 +203,20 @@ describe('startup', function()
{ 'set encoding', '' }))
end)
+ it('-es/-Es disables swapfile, user config #8540', function()
+ for _,arg in ipairs({'-es', '-Es'}) do
+ local out = funcs.system({nvim_prog, arg,
+ '+set swapfile? updatecount? shada?',
+ "+put =execute('scriptnames')", '+%print'})
+ local line1 = string.match(out, '^.-\n')
+ -- updatecount=0 means swapfile was disabled.
+ eq(" swapfile updatecount=0 shada=!,'100,<50,s10,h\n", line1)
+ -- Standard plugins were loaded, but not user config.
+ eq('health.vim', string.match(out, 'health.vim'))
+ eq(nil, string.match(out, 'init.vim'))
+ end
+ end)
+
it('does not crash if --embed is given twice', function()
clear{args={'--embed'}}
eq(2, eval('1+1'))