aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2016-08-25 10:43:00 -0400
committerJustin M. Keyes <justinkz@gmail.com>2016-08-25 11:16:22 -0400
commitc826ebd3de7f73d360a8032127ed9d9db0543d8a (patch)
tree17e09b72d75127897be5eabeac5b69a18fb0298e
parentc79bf4ec99951e42736522bd9362dfe347522c8e (diff)
downloadrneovim-c826ebd3de7f73d360a8032127ed9d9db0543d8a.tar.gz
rneovim-c826ebd3de7f73d360a8032127ed9d9db0543d8a.tar.bz2
rneovim-c826ebd3de7f73d360a8032127ed9d9db0543d8a.zip
perf: Disable clipboard in do_cmdline().
For any script--not just `:global` commands--there is no reason to update the system clipboard until the script is finished, so disable it during do_cmdline(). Before this change, 'clipboard=unnamedplus' causes scripted editing to be extremely slow (e.g. `:normal` in a while-loop). Closes #3534
-rw-r--r--src/nvim/ex_cmds.c2
-rw-r--r--src/nvim/ex_cmds2.c3
-rw-r--r--src/nvim/ex_docmd.c6
3 files changed, 2 insertions, 9 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index 981701f26d..e70ec9ab8a 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -4053,9 +4053,7 @@ void ex_global(exarg_T *eap)
smsg(_("Pattern not found: %s"), pat);
}
} else {
- start_batch_changes();
global_exe(cmd);
- end_batch_changes();
}
ml_clearmarked(); /* clear rest of the marks */
vim_regfree(regmatch.regprog);
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index da478f96dc..d0a17ed099 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -1983,8 +1983,6 @@ void ex_listdo(exarg_T *eap)
save_ei = au_event_disable(",Syntax");
}
- start_batch_changes();
-
if (eap->cmdidx == CMD_windo
|| eap->cmdidx == CMD_tabdo
|| P_HID(curbuf)
@@ -2181,7 +2179,6 @@ void ex_listdo(exarg_T *eap)
apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn,
curbuf->b_fname, true, curbuf);
}
- end_batch_changes();
}
/// Add files[count] to the arglist of the current window after arg "after".
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index ced5a3e931..8e9829db73 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -346,6 +346,7 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
return FAIL;
}
++call_depth;
+ start_batch_changes();
cstack.cs_idx = -1;
cstack.cs_looplevel = 0;
@@ -953,6 +954,7 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
did_endif = FALSE; /* in case do_cmdline used recursively */
--call_depth;
+ end_batch_changes();
return retval;
}
@@ -9513,8 +9515,6 @@ static void ex_folddo(exarg_T *eap)
{
linenr_T lnum;
- start_batch_changes();
-
/* First set the marks for all lines closed/open. */
for (lnum = eap->line1; lnum <= eap->line2; ++lnum)
if (hasFolding(lnum, NULL, NULL) == (eap->cmdidx == CMD_folddoclosed))
@@ -9523,8 +9523,6 @@ static void ex_folddo(exarg_T *eap)
/* Execute the command on the marked lines. */
global_exe(eap->arg);
ml_clearmarked(); /* clear rest of the marks */
-
- end_batch_changes();
}
static void ex_terminal(exarg_T *eap)