aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/ex_docmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/ex_docmd.c')
-rw-r--r--src/nvim/ex_docmd.c1196
1 files changed, 401 insertions, 795 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index 4ac9847e53..afa8a276c8 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -9,14 +9,17 @@
#include <stdlib.h>
#include <string.h>
+#include "nvim/arglist.h"
#include "nvim/ascii.h"
#include "nvim/buffer.h"
#include "nvim/change.h"
#include "nvim/charset.h"
+#include "nvim/cmdhist.h"
#include "nvim/cursor.h"
#include "nvim/debugger.h"
#include "nvim/diff.h"
#include "nvim/digraph.h"
+#include "nvim/drawscreen.h"
#include "nvim/edit.h"
#include "nvim/eval.h"
#include "nvim/eval/userfunc.h"
@@ -38,6 +41,7 @@
#include "nvim/getchar.h"
#include "nvim/globals.h"
#include "nvim/hardcopy.h"
+#include "nvim/help.h"
#include "nvim/highlight_group.h"
#include "nvim/if_cscope.h"
#include "nvim/input.h"
@@ -62,10 +66,10 @@
#include "nvim/os/time.h"
#include "nvim/os_unix.h"
#include "nvim/path.h"
-#include "nvim/popupmnu.h"
+#include "nvim/popupmenu.h"
+#include "nvim/profile.h"
#include "nvim/quickfix.h"
#include "nvim/regexp.h"
-#include "nvim/screen.h"
#include "nvim/search.h"
#include "nvim/shada.h"
#include "nvim/sign.h"
@@ -100,16 +104,14 @@ typedef struct {
#define FREE_WCMD(wcmd) xfree((wcmd)->line)
-/*
- * Structure used to store info for line position in a while or for loop.
- * This is required, because do_one_cmd() may invoke ex_function(), which
- * reads more lines that may come from the while/for loop.
- */
+/// Structure used to store info for line position in a while or for loop.
+/// This is required, because do_one_cmd() may invoke ex_function(), which
+/// reads more lines that may come from the while/for loop.
struct loop_cookie {
garray_T *lines_gap; // growarray with line info
int current_line; // last read line from growarray
- int repeating; // TRUE when looping a second time
- // When "repeating" is FALSE use "getline" and "cookie" to get lines
+ int repeating; // true when looping a second time
+ // When "repeating" is false use "getline" and "cookie" to get lines
char *(*getline)(int, void *, int, bool);
void *cookie;
};
@@ -136,9 +138,7 @@ struct dbg_stuff {
# define ex_language ex_ni
#endif
-/*
- * Declare cmdnames[].
- */
+// Declare cmdnames[].
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "ex_cmds_defs.generated.h"
#endif
@@ -148,7 +148,7 @@ static char dollar_command[2] = { '$', 0 };
static void save_dbg_stuff(struct dbg_stuff *dsp)
{
dsp->trylevel = trylevel; trylevel = 0;
- dsp->force_abort = force_abort; force_abort = FALSE;
+ dsp->force_abort = force_abort; force_abort = false;
dsp->caught_stack = caught_stack; caught_stack = NULL;
dsp->vv_exception = v_exception(NULL);
dsp->vv_throwpoint = v_throwpoint(NULL);
@@ -179,11 +179,6 @@ static void restore_dbg_stuff(struct dbg_stuff *dsp)
/// Repeatedly get commands for Ex mode, until the ":vi" command is given.
void do_exmode(void)
{
- int save_msg_scroll;
- int prev_msg_row;
- linenr_T prev_line;
- varnumber_T changedtick;
-
exmode_active = true;
State = MODE_NORMAL;
may_trigger_modechanged();
@@ -194,7 +189,7 @@ void do_exmode(void)
return;
}
- save_msg_scroll = msg_scroll;
+ int save_msg_scroll = msg_scroll;
RedrawingDisabled++; // don't redisplay the window
no_wait_return++; // don't wait for return
@@ -209,9 +204,9 @@ void do_exmode(void)
need_wait_return = false;
ex_pressedreturn = false;
ex_no_reprint = false;
- changedtick = buf_get_changedtick(curbuf);
- prev_msg_row = msg_row;
- prev_line = curwin->w_cursor.lnum;
+ varnumber_T changedtick = buf_get_changedtick(curbuf);
+ int prev_msg_row = msg_row;
+ linenr_T prev_line = curwin->w_cursor.lnum;
cmdline_row = msg_row;
do_cmdline(NULL, getexline, NULL, 0);
lines_left = Rows - 1;
@@ -232,7 +227,7 @@ void do_exmode(void)
}
}
msg_col = 0;
- print_line_no_prefix(curwin->w_cursor.lnum, FALSE, FALSE);
+ print_line_no_prefix(curwin->w_cursor.lnum, false, false);
msg_clr_eos();
}
} else if (ex_pressedreturn && !ex_no_reprint) { // must be at EOF
@@ -301,26 +296,26 @@ int do_cmdline_cmd(const char *cmd)
/// @return FAIL if cmdline could not be executed, OK otherwise
int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
{
- char *next_cmdline; // next cmd to execute
- char *cmdline_copy = NULL; // copy of cmd line
+ char *next_cmdline; // next cmd to execute
+ char *cmdline_copy = NULL; // copy of cmd line
bool used_getline = false; // used "fgetline" to obtain command
static int recursive = 0; // recursive depth
bool msg_didout_before_start = false;
int count = 0; // line number count
- int did_inc = FALSE; // incremented RedrawingDisabled
+ bool did_inc = false; // incremented RedrawingDisabled
int retval = OK;
cstack_T cstack = { // conditional stack
.cs_idx = -1,
};
garray_T lines_ga; // keep lines for ":while"/":for"
int current_line = 0; // active line in lines_ga
- char *fname = NULL; // function or script name
+ char *fname = NULL; // function or script name
linenr_T *breakpoint = NULL; // ptr to breakpoint field in cookie
- int *dbg_tick = NULL; // ptr to dbg_tick field in cookie
+ int *dbg_tick = NULL; // ptr to dbg_tick field in cookie
struct dbg_stuff debug_saved; // saved things for debug mode
int initial_trylevel;
- struct msglist **saved_msg_list = NULL;
- struct msglist *private_msg_list;
+ msglist_T **saved_msg_list = NULL;
+ msglist_T *private_msg_list;
// "fgetline" and "cookie" passed to do_one_cmd()
char *(*cmd_getline)(int, void *, int, bool);
@@ -361,7 +356,7 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
// Inside a function use a higher nesting level.
getline_is_func = getline_equal(fgetline, cookie, get_func_line);
if (getline_is_func && ex_nesting_level == func_level(real_cookie)) {
- ++ex_nesting_level;
+ ex_nesting_level++;
}
// Get the function or script name and the address where the next breakpoint
@@ -371,14 +366,12 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
breakpoint = func_breakpoint(real_cookie);
dbg_tick = func_dbg_tick(real_cookie);
} else if (getline_equal(fgetline, cookie, getsourceline)) {
- fname = sourcing_name;
+ fname = SOURCING_NAME;
breakpoint = source_breakpoint(real_cookie);
dbg_tick = source_dbg_tick(real_cookie);
}
- /*
- * Initialize "force_abort" and "suppress_errthrow" at the top level.
- */
+ // Initialize "force_abort" and "suppress_errthrow" at the top level.
if (!recursive) {
force_abort = false;
suppress_errthrow = false;
@@ -390,13 +383,13 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
if (flags & DOCMD_EXCRESET) {
save_dbg_stuff(&debug_saved);
} else {
- memset(&debug_saved, 0, sizeof(debug_saved));
+ CLEAR_FIELD(debug_saved);
}
initial_trylevel = trylevel;
current_exception = NULL;
- // "did_emsg" will be set to TRUE when emsg() is used, in which case we
+ // "did_emsg" will be set to true when emsg() is used, in which case we
// cancel the whole command line, and any if/endif or loop.
// If force_abort is set, we cancel everything.
did_emsg = false;
@@ -408,12 +401,10 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
KeyTyped = false;
}
- /*
- * Continue executing command lines:
- * - when inside an ":if", ":while" or ":for"
- * - for multiple commands on one line, separated with '|'
- * - when repeating until there are no more lines (for ":source")
- */
+ // Continue executing command lines:
+ // - when inside an ":if", ":while" or ":for"
+ // - for multiple commands on one line, separated with '|'
+ // - when repeating until there are no more lines (for ":source")
next_cmdline = cmdline;
do {
getline_is_func = getline_equal(fgetline, cookie, get_func_line);
@@ -427,11 +418,9 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
did_emsg = false;
}
- /*
- * 1. If repeating a line in a loop, get a line from lines_ga.
- * 2. If no line given: Get an allocated line with fgetline().
- * 3. If a line is given: Make a copy, so we can mess with it.
- */
+ // 1. If repeating a line in a loop, get a line from lines_ga.
+ // 2. If no line given: Get an allocated line with fgetline().
+ // 3. If a line is given: Make a copy, so we can mess with it.
// 1. If repeating, get a previous line from lines_ga.
if (cstack.cs_looplevel > 0 && current_line < lines_ga.ga_len) {
@@ -464,20 +453,19 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
if (breakpoint != NULL && dbg_tick != NULL
&& *dbg_tick != debug_tick) {
*breakpoint = dbg_find_breakpoint(getline_equal(fgetline, cookie, getsourceline),
- (char_u *)fname, sourcing_lnum);
+ (char_u *)fname, SOURCING_LNUM);
*dbg_tick = debug_tick;
}
next_cmdline = ((wcmd_T *)(lines_ga.ga_data))[current_line].line;
- sourcing_lnum = ((wcmd_T *)(lines_ga.ga_data))[current_line].lnum;
+ SOURCING_LNUM = ((wcmd_T *)(lines_ga.ga_data))[current_line].lnum;
// Did we encounter a breakpoint?
- if (breakpoint != NULL && *breakpoint != 0
- && *breakpoint <= sourcing_lnum) {
- dbg_breakpoint((char_u *)fname, sourcing_lnum);
+ if (breakpoint != NULL && *breakpoint != 0 && *breakpoint <= SOURCING_LNUM) {
+ dbg_breakpoint((char_u *)fname, SOURCING_LNUM);
// Find next breakpoint.
*breakpoint = dbg_find_breakpoint(getline_equal(fgetline, cookie, getsourceline),
- (char_u *)fname, sourcing_lnum);
+ (char_u *)fname, SOURCING_LNUM);
*dbg_tick = debug_tick;
}
if (do_profiling == PROF_YES) {
@@ -509,10 +497,8 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
// 2. If no line given, get an allocated line with fgetline().
if (next_cmdline == NULL) {
- /*
- * Need to set msg_didout for the first line after an ":if",
- * otherwise the ":if" will be overwritten.
- */
+ // Need to set msg_didout for the first line after an ":if",
+ // otherwise the ":if" will be overwritten.
if (count == 1 && getline_equal(fgetline, cookie, getexline)) {
msg_didout = true;
}
@@ -532,9 +518,7 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
}
used_getline = true;
- /*
- * Keep the first typed line. Clear it when more lines are typed.
- */
+ // Keep the first typed line. Clear it when more lines are typed.
if (flags & DOCMD_KEEPLINE) {
xfree(repeat_cmdline);
if (count == 0) {
@@ -549,13 +533,11 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
}
cmdline_copy = next_cmdline;
- /*
- * Save the current line when inside a ":while" or ":for", and when
- * the command looks like a ":while" or ":for", because we may need it
- * later. When there is a '|' and another command, it is stored
- * separately, because we need to be able to jump back to it from an
- * :endwhile/:endfor.
- */
+ // Save the current line when inside a ":while" or ":for", and when
+ // the command looks like a ":while" or ":for", because we may need it
+ // later. When there is a '|' and another command, it is stored
+ // separately, because we need to be able to jump back to it from an
+ // :endwhile/:endfor.
if (current_line == lines_ga.ga_len
&& (cstack.cs_looplevel || has_loop_cmd(next_cmdline))) {
store_loop_line(&lines_ga, next_cmdline);
@@ -563,32 +545,28 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
did_endif = false;
if (count++ == 0) {
- /*
- * All output from the commands is put below each other, without
- * waiting for a return. Don't do this when executing commands
- * from a script or when being called recursive (e.g. for ":e
- * +command file").
- */
+ // All output from the commands is put below each other, without
+ // waiting for a return. Don't do this when executing commands
+ // from a script or when being called recursive (e.g. for ":e
+ // +command file").
if (!(flags & DOCMD_NOWAIT) && !recursive) {
msg_didout_before_start = msg_didout;
msg_didany = false; // no output yet
msg_start();
- msg_scroll = TRUE; // put messages below each other
- ++no_wait_return; // don't wait for return until finished
- ++RedrawingDisabled;
- did_inc = TRUE;
+ msg_scroll = true; // put messages below each other
+ no_wait_return++; // don't wait for return until finished
+ RedrawingDisabled++;
+ did_inc = true;
}
}
- if ((p_verbose >= 15 && sourcing_name != NULL) || p_verbose >= 16) {
- msg_verbose_cmd(sourcing_lnum, cmdline_copy);
+ if ((p_verbose >= 15 && SOURCING_NAME != NULL) || p_verbose >= 16) {
+ msg_verbose_cmd(SOURCING_LNUM, cmdline_copy);
}
- /*
- * 2. Execute one '|' separated command.
- * do_one_cmd() will return NULL if there is no trailing '|'.
- * "cmdline_copy" can change, e.g. for '%' and '#' expansion.
- */
+ // 2. Execute one '|' separated command.
+ // do_one_cmd() will return NULL if there is no trailing '|'.
+ // "cmdline_copy" can change, e.g. for '%' and '#' expansion.
recursive++;
next_cmdline = do_one_cmd(&cmdline_copy, flags, &cstack, cmd_getline, cmd_cookie);
recursive--;
@@ -601,10 +579,9 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
if (next_cmdline == NULL) {
XFREE_CLEAR(cmdline_copy);
- //
+
// If the command was typed, remember it for the ':' register.
// Do this AFTER executing the command to make :@: work.
- //
if (getline_equal(fgetline, cookie, getexline)
&& new_last_cmdline != NULL) {
xfree(last_cmdline);
@@ -622,18 +599,16 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
if (did_emsg && !force_abort
&& getline_equal(fgetline, cookie, get_func_line)
&& !func_has_abort(real_cookie)) {
- did_emsg = FALSE;
+ did_emsg = false;
}
if (cstack.cs_looplevel > 0) {
- ++current_line;
-
- /*
- * An ":endwhile", ":endfor" and ":continue" is handled here.
- * If we were executing commands, jump back to the ":while" or
- * ":for".
- * If we were not executing commands, decrement cs_looplevel.
- */
+ current_line++;
+
+ // An ":endwhile", ":endfor" and ":continue" is handled here.
+ // If we were executing commands, jump back to the ":while" or
+ // ":for".
+ // If we were not executing commands, decrement cs_looplevel.
if (cstack.cs_lflags & (CSL_HAD_CONT | CSL_HAD_ENDLOOP)) {
cstack.cs_lflags &= ~(CSL_HAD_CONT | CSL_HAD_ENDLOOP);
@@ -667,34 +642,27 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
CSF_WHILE | CSF_FOR, &cstack.cs_looplevel);
}
}
- }
- /*
- * For a ":while" or ":for" we need to remember the line number.
- */
- else if (cstack.cs_lflags & CSL_HAD_LOOP) {
+ } else if (cstack.cs_lflags & CSL_HAD_LOOP) {
+ // For a ":while" or ":for" we need to remember the line number.
cstack.cs_lflags &= ~CSL_HAD_LOOP;
cstack.cs_line[cstack.cs_idx] = current_line - 1;
}
}
- /*
- * When not inside any ":while" loop, clear remembered lines.
- */
+ // When not inside any ":while" loop, clear remembered lines.
if (cstack.cs_looplevel == 0) {
if (!GA_EMPTY(&lines_ga)) {
- sourcing_lnum = ((wcmd_T *)lines_ga.ga_data)[lines_ga.ga_len - 1].lnum;
+ SOURCING_LNUM = ((wcmd_T *)lines_ga.ga_data)[lines_ga.ga_len - 1].lnum;
GA_DEEP_CLEAR(&lines_ga, wcmd_T, FREE_WCMD);
}
current_line = 0;
}
- /*
- * A ":finally" makes did_emsg, got_int and current_exception pending for
- * being restored at the ":endtry". Reset them here and set the
- * ACTIVE and FINALLY flags, so that the finally clause gets executed.
- * This includes the case where a missing ":endif", ":endwhile" or
- * ":endfor" was detected by the ":finally" itself.
- */
+ // A ":finally" makes did_emsg, got_int and current_exception pending for
+ // being restored at the ":endtry". Reset them here and set the
+ // ACTIVE and FINALLY flags, so that the finally clause gets executed.
+ // This includes the case where a missing ":endif", ":endwhile" or
+ // ":endfor" was detected by the ":finally" itself.
if (cstack.cs_lflags & CSL_HAD_FINA) {
cstack.cs_lflags &= ~CSL_HAD_FINA;
report_make_pending((cstack.cs_pending[cstack.cs_idx]
@@ -720,38 +688,34 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
// Convert an interrupt to an exception if appropriate.
(void)do_intthrow(&cstack);
- }
- /*
- * Continue executing command lines when:
- * - no CTRL-C typed, no aborting error, no exception thrown or try
- * conditionals need to be checked for executing finally clauses or
- * catching an interrupt exception
- * - didn't get an error message or lines are not typed
- * - there is a command after '|', inside a :if, :while, :for or :try, or
- * looping for ":source" command or function call.
- */
- while (!((got_int || (did_emsg && force_abort) || current_exception)
- && cstack.cs_trylevel == 0)
- && !(did_emsg
- // Keep going when inside try/catch, so that the error can be
- // deal with, except when it is a syntax error, it may cause
- // the :endtry to be missed.
- && (cstack.cs_trylevel == 0 || did_emsg_syntax)
- && used_getline
- && getline_equal(fgetline, cookie, getexline))
- && (next_cmdline != NULL
- || cstack.cs_idx >= 0
- || (flags & DOCMD_REPEAT)));
+
+ // Continue executing command lines when:
+ // - no CTRL-C typed, no aborting error, no exception thrown or try
+ // conditionals need to be checked for executing finally clauses or
+ // catching an interrupt exception
+ // - didn't get an error message or lines are not typed
+ // - there is a command after '|', inside a :if, :while, :for or :try, or
+ // looping for ":source" command or function call.
+ } while (!((got_int || (did_emsg && force_abort) || current_exception)
+ && cstack.cs_trylevel == 0)
+ && !(did_emsg
+ // Keep going when inside try/catch, so that the error can be
+ // deal with, except when it is a syntax error, it may cause
+ // the :endtry to be missed.
+ && (cstack.cs_trylevel == 0 || did_emsg_syntax)
+ && used_getline
+ && getline_equal(fgetline, cookie, getexline))
+ && (next_cmdline != NULL
+ || cstack.cs_idx >= 0
+ || (flags & DOCMD_REPEAT)));
xfree(cmdline_copy);
did_emsg_syntax = false;
GA_DEEP_CLEAR(&lines_ga, wcmd_T, FREE_WCMD);
if (cstack.cs_idx >= 0) {
- /*
- * If a sourced file or executed function ran to its end, report the
- * unclosed conditional.
- */
+ // If a sourced file or executed function ran to its end, report the
+ // unclosed conditional.
if (!got_int && !current_exception
&& ((getline_equal(fgetline, cookie, getsourceline)
&& !source_finished(fgetline, cookie))
@@ -768,18 +732,16 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
}
}
- /*
- * Reset "trylevel" in case of a ":finish" or ":return" or a missing
- * ":endtry" in a sourced file or executed function. If the try
- * conditional is in its finally clause, ignore anything pending.
- * If it is in a catch clause, finish the caught exception.
- * Also cleanup any "cs_forinfo" structures.
- */
+ // Reset "trylevel" in case of a ":finish" or ":return" or a missing
+ // ":endtry" in a sourced file or executed function. If the try
+ // conditional is in its finally clause, ignore anything pending.
+ // If it is in a catch clause, finish the caught exception.
+ // Also cleanup any "cs_forinfo" structures.
do {
- int idx = cleanup_conditionals(&cstack, 0, TRUE);
+ int idx = cleanup_conditionals(&cstack, 0, true);
if (idx >= 0) {
- --idx; // remove try block not in its finally clause
+ idx--; // remove try block not in its finally clause
}
rewind_conditionals(&cstack, idx, CSF_WHILE | CSF_FOR,
&cstack.cs_looplevel);
@@ -799,17 +761,13 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
// commands are executed.
if (current_exception) {
char *p = NULL;
- char *saved_sourcing_name;
- linenr_T saved_sourcing_lnum;
- struct msglist *messages = NULL;
- struct msglist *next;
-
- /*
- * If the uncaught exception is a user exception, report it as an
- * error. If it is an error exception, display the saved error
- * message now. For an interrupt exception, do nothing; the
- * interrupt message is given elsewhere.
- */
+ msglist_T *messages = NULL;
+ msglist_T *next;
+
+ // If the uncaught exception is a user exception, report it as an
+ // error. If it is an error exception, display the saved error
+ // message now. For an interrupt exception, do nothing; the
+ // interrupt message is given elsewhere.
switch (current_exception->type) {
case ET_USER:
vim_snprintf((char *)IObuff, IOSIZE,
@@ -825,10 +783,7 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
break;
}
- saved_sourcing_name = sourcing_name;
- saved_sourcing_lnum = sourcing_lnum;
- sourcing_name = current_exception->throw_name;
- sourcing_lnum = current_exception->throw_lnum;
+ estack_push(ETYPE_EXCEPT, current_exception->throw_name, current_exception->throw_lnum);
current_exception->throw_name = NULL;
discard_current_exception(); // uses IObuff if 'verbose'
@@ -848,9 +803,8 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
emsg(p);
xfree(p);
}
- xfree(sourcing_name);
- sourcing_name = saved_sourcing_name;
- sourcing_lnum = saved_sourcing_lnum;
+ xfree(SOURCING_NAME);
+ estack_pop();
} else if (got_int || (did_emsg && force_abort)) {
// On an interrupt or an aborting error not converted to an exception,
// disable the conversion of errors to exceptions. (Interrupts are not
@@ -880,25 +834,21 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
} else {
// When leaving a function, reduce nesting level.
if (getline_equal(fgetline, cookie, get_func_line)) {
- --ex_nesting_level;
+ ex_nesting_level--;
}
- /*
- * Go to debug mode when returning from a function in which we are
- * single-stepping.
- */
+ // Go to debug mode when returning from a function in which we are
+ // single-stepping.
if ((getline_equal(fgetline, cookie, getsourceline)
|| getline_equal(fgetline, cookie, get_func_line))
&& ex_nesting_level + 1 <= debug_break_level) {
do_debug(getline_equal(fgetline, cookie, getsourceline)
- ? (char_u *)_("End of sourced file")
- : (char_u *)_("End of function"));
+ ? (char_u *)_("End of sourced file")
+ : (char_u *)_("End of function"));
}
}
- /*
- * Restore the exception environment (done after returning from the
- * debugger).
- */
+ // Restore the exception environment (done after returning from the
+ // debugger).
if (flags & DOCMD_EXCRESET) {
restore_dbg_stuff(&debug_saved);
}
@@ -914,32 +864,26 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
}
}
- /*
- * If there was too much output to fit on the command line, ask the user to
- * hit return before redrawing the screen. With the ":global" command we do
- * this only once after the command is finished.
- */
+ // If there was too much output to fit on the command line, ask the user to
+ // hit return before redrawing the screen. With the ":global" command we do
+ // this only once after the command is finished.
if (did_inc) {
- --RedrawingDisabled;
- --no_wait_return;
- msg_scroll = FALSE;
-
- /*
- * When just finished an ":if"-":else" which was typed, no need to
- * wait for hit-return. Also for an error situation.
- */
+ RedrawingDisabled--;
+ no_wait_return--;
+ msg_scroll = false;
+
+ // When just finished an ":if"-":else" which was typed, no need to
+ // wait for hit-return. Also for an error situation.
if (retval == FAIL
|| (did_endif && KeyTyped && !did_emsg)) {
need_wait_return = false;
msg_didany = false; // don't wait when restarting edit
} else if (need_wait_return) {
- /*
- * The msg_start() above clears msg_didout. The wait_return we do
- * here should not overwrite the command that may be shown before
- * doing that.
- */
+ // The msg_start() above clears msg_didout. The wait_return we do
+ // here should not overwrite the command that may be shown before
+ // doing that.
msg_didout |= msg_didout_before_start;
- wait_return(FALSE);
+ wait_return(false);
}
}
@@ -954,13 +898,12 @@ int do_cmdline(char *cmdline, LineGetter fgetline, void *cookie, int flags)
static char *get_loop_line(int c, void *cookie, int indent, bool do_concat)
{
struct loop_cookie *cp = (struct loop_cookie *)cookie;
- wcmd_T *wp;
- char *line;
if (cp->current_line + 1 >= cp->lines_gap->ga_len) {
if (cp->repeating) {
return NULL; // trying to read past ":endwhile"/":endfor"
}
+ char *line;
// First time inside the ":while"/":for": get line normally.
if (cp->getline == NULL) {
line = (char *)getcmdline(c, 0L, indent, do_concat);
@@ -969,7 +912,7 @@ static char *get_loop_line(int c, void *cookie, int indent, bool do_concat)
}
if (line != NULL) {
store_loop_line(cp->lines_gap, line);
- ++cp->current_line;
+ cp->current_line++;
}
return line;
@@ -977,8 +920,8 @@ static char *get_loop_line(int c, void *cookie, int indent, bool do_concat)
KeyTyped = false;
cp->current_line++;
- wp = (wcmd_T *)(cp->lines_gap->ga_data) + cp->current_line;
- sourcing_lnum = wp->lnum;
+ wcmd_T *wp = (wcmd_T *)(cp->lines_gap->ga_data) + cp->current_line;
+ SOURCING_LNUM = wp->lnum;
return xstrdup(wp->line);
}
@@ -987,23 +930,20 @@ static void store_loop_line(garray_T *gap, char *line)
{
wcmd_T *p = GA_APPEND_VIA_PTR(wcmd_T, gap);
p->line = xstrdup(line);
- p->lnum = sourcing_lnum;
+ p->lnum = SOURCING_LNUM;
}
-/// If "fgetline" is get_loop_line(), return TRUE if the getline it uses equals
-/// "func". * Otherwise return TRUE when "fgetline" equals "func".
+/// If "fgetline" is get_loop_line(), return true if the getline it uses equals
+/// "func". * Otherwise return true when "fgetline" equals "func".
///
/// @param cookie argument for fgetline()
-int getline_equal(LineGetter fgetline, void *cookie, LineGetter func)
+bool getline_equal(LineGetter fgetline, void *cookie, LineGetter func)
{
- LineGetter gp;
- struct loop_cookie *cp;
-
// When "fgetline" is "get_loop_line()" use the "cookie" to find the
// function that's originally used to obtain the lines. This may be
// nested several levels.
- gp = fgetline;
- cp = (struct loop_cookie *)cookie;
+ LineGetter gp = fgetline;
+ struct loop_cookie *cp = (struct loop_cookie *)cookie;
while (gp == get_loop_line) {
gp = cp->getline;
cp = cp->cookie;
@@ -1017,14 +957,11 @@ int getline_equal(LineGetter fgetline, void *cookie, LineGetter func)
/// @param cookie argument for fgetline()
void *getline_cookie(LineGetter fgetline, void *cookie)
{
- LineGetter gp;
- struct loop_cookie *cp;
-
// When "fgetline" is "get_loop_line()" use the "cookie" to find the
// cookie that's originally used to obtain the lines. This may be nested
// several levels.
- gp = fgetline;
- cp = (struct loop_cookie *)cookie;
+ LineGetter gp = fgetline;
+ struct loop_cookie *cp = (struct loop_cookie *)cookie;
while (gp == get_loop_line) {
gp = cp->getline;
cp = cp->cookie;
@@ -1038,11 +975,10 @@ void *getline_cookie(LineGetter fgetline, void *cookie)
/// @return the buffer number.
static int compute_buffer_local_count(cmd_addr_T addr_type, linenr_T lnum, long offset)
{
- buf_T *buf;
buf_T *nextbuf;
long count = offset;
- buf = firstbuf;
+ buf_T *buf = firstbuf;
while (buf->b_next != NULL && buf->b_fnum < lnum) {
buf = buf->b_next;
}
@@ -1085,7 +1021,7 @@ static int current_win_nr(const win_T *win)
int nr = 0;
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
- ++nr;
+ nr++;
if (wp == win) {
break;
}
@@ -1098,7 +1034,7 @@ static int current_tab_nr(tabpage_T *tab)
int nr = 0;
FOR_ALL_TABS(tp) {
- ++nr;
+ nr++;
if (tp == tab) {
break;
}
@@ -1385,12 +1321,11 @@ static int parse_count(exarg_T *eap, char **errormsg, bool validate)
// Check for a count. When accepting a EX_BUFNAME, don't use "123foo" as a
// count, it's a buffer name.
char *p;
- long n;
if ((eap->argt & EX_COUNT) && ascii_isdigit(*eap->arg)
&& (!(eap->argt & EX_BUFNAME) || *(p = skipdigits(eap->arg + 1)) == NUL
|| ascii_iswhite(*p))) {
- n = getdigits_long(&eap->arg, false, -1);
+ long n = getdigits_long(&eap->arg, false, -1);
eap->arg = skipwhite(eap->arg);
if (n <= 0 && (eap->argt & EX_ZEROR) == 0) {
if (errormsg != NULL) {
@@ -1423,21 +1358,20 @@ bool is_cmd_ni(cmdidx_T cmdidx)
/// @return Success or failure
bool parse_cmdline(char *cmdline, exarg_T *eap, CmdParseInfo *cmdinfo, char **errormsg)
{
- char *cmd;
- char *p;
char *after_modifier = NULL;
// Initialize cmdinfo
- memset(cmdinfo, 0, sizeof(*cmdinfo));
+ CLEAR_POINTER(cmdinfo);
// Initialize eap
- memset(eap, 0, sizeof(*eap));
- eap->line1 = 1;
- eap->line2 = 1;
- eap->cmd = cmdline;
- eap->cmdlinep = &cmdline;
- eap->getline = NULL;
- eap->cookie = NULL;
+ *eap = (exarg_T){
+ .line1 = 1,
+ .line2 = 1,
+ .cmd = cmdline,
+ .cmdlinep = &cmdline,
+ .getline = NULL,
+ .cookie = NULL,
+ };
const bool save_ex_pressedreturn = ex_pressedreturn;
// Parse command modifiers
@@ -1449,13 +1383,13 @@ bool parse_cmdline(char *cmdline, exarg_T *eap, CmdParseInfo *cmdinfo, char **er
after_modifier = eap->cmd;
// Save location after command modifiers
- cmd = eap->cmd;
+ char *cmd = eap->cmd;
// Skip ranges to find command name since we need the command to know what kind of range it uses
eap->cmd = skip_range(eap->cmd, NULL);
if (*eap->cmd == '*') {
eap->cmd = skipwhite(eap->cmd + 1);
}
- p = find_ex_command(eap, NULL);
+ char *p = find_ex_command(eap, NULL);
if (p == NULL) {
*errormsg = _(e_ambiguous_use_of_user_defined_command);
goto err;
@@ -1719,7 +1653,7 @@ end:
static void profile_cmd(const exarg_T *eap, cstack_T *cstack, LineGetter fgetline, void *cookie)
{
- // Count this line for profiling if skip is TRUE.
+ // Count this line for profiling if skip is true.
if (do_profiling == PROF_YES
&& (!eap->skip || cstack->cs_idx == 0
|| (cstack->cs_idx > 0
@@ -1855,7 +1789,7 @@ static bool skip_cmd(const exarg_T *eap)
/// Execute one Ex command.
///
-/// If 'sourcing' is TRUE, the command will be included in the error message.
+/// If 'sourcing' is true, the command will be included in the error message.
///
/// 1. skip comment lines and leading space
/// 2. handle command modifiers
@@ -1877,10 +1811,10 @@ static char *do_one_cmd(char **cmdlinep, int flags, cstack_T *cstack, LineGetter
const int save_reg_executing = reg_executing;
const bool save_pending_end_reg_executing = pending_end_reg_executing;
- exarg_T ea;
- memset(&ea, 0, sizeof(ea));
- ea.line1 = 1;
- ea.line2 = 1;
+ exarg_T ea = {
+ .line1 = 1,
+ .line2 = 1,
+ };
ex_nesting_level++;
// When the last file has not been edited :q has to be typed twice.
@@ -1890,7 +1824,7 @@ static char *do_one_cmd(char **cmdlinep, int flags, cstack_T *cstack, LineGetter
// avoid that an autocommand, e.g. QuitPre, does this
&& !getline_equal(fgetline, cookie,
getnextac)) {
- --quitmore;
+ quitmore--;
}
// Reset browse, confirm, etc.. They are restored when returning, for
@@ -1941,7 +1875,7 @@ static char *do_one_cmd(char **cmdlinep, int flags, cstack_T *cstack, LineGetter
// used, throw an interrupt exception and skip the next command.
dbg_check_breakpoint(&ea);
if (!ea.skip && got_int) {
- ea.skip = TRUE;
+ ea.skip = true;
(void)do_intthrow(cstack);
}
@@ -2015,7 +1949,7 @@ static char *do_one_cmd(char **cmdlinep, int flags, cstack_T *cstack, LineGetter
&& has_event(EVENT_CMDUNDEFINED)) {
p = ea.cmd;
while (ASCII_ISALNUM(*p)) {
- ++p;
+ p++;
}
p = xstrnsave(ea.cmd, (size_t)(p - ea.cmd));
int ret = apply_autocmds(EVENT_CMDUNDEFINED, p, p, true, NULL);
@@ -2194,16 +2128,16 @@ static char *do_one_cmd(char **cmdlinep, int flags, cstack_T *cstack, LineGetter
ea.arg = skipwhite(ea.arg + 1);
ea.append = true;
} else if (*ea.arg == '!' && ea.cmdidx == CMD_write) { // :w !filter
- ++ea.arg;
- ea.usefilter = TRUE;
+ ea.arg++;
+ ea.usefilter = true;
}
} else if (ea.cmdidx == CMD_read) {
if (ea.forceit) {
- ea.usefilter = TRUE; // :r! filter if ea.forceit
- ea.forceit = FALSE;
+ ea.usefilter = true; // :r! filter if ea.forceit
+ ea.forceit = false;
} else if (*ea.arg == '!') { // :r !filter
- ++ea.arg;
- ea.usefilter = TRUE;
+ ea.arg++;
+ ea.usefilter = true;
}
} else if (ea.cmdidx == CMD_lshift || ea.cmdidx == CMD_rshift) {
ea.amount = 1;
@@ -2294,10 +2228,10 @@ static char *do_one_cmd(char **cmdlinep, int flags, cstack_T *cstack, LineGetter
do_throw(cstack);
} else if (check_cstack) {
if (source_finished(fgetline, cookie)) {
- do_finish(&ea, TRUE);
+ do_finish(&ea, true);
} else if (getline_equal(fgetline, cookie, get_func_line)
&& current_func_returned()) {
- do_return(&ea, TRUE, FALSE, NULL);
+ do_return(&ea, true, false, NULL);
}
}
need_rethrow = check_cstack = false;
@@ -2332,7 +2266,7 @@ doend:
ea.nextcmd = NULL;
}
- --ex_nesting_level;
+ ex_nesting_level--;
return ea.nextcmd;
}
@@ -2368,8 +2302,6 @@ char *ex_errmsg(const char *const msg, const char *const arg)
/// @return FAIL when the command is not to be executed.
int parse_command_modifiers(exarg_T *eap, char **errormsg, cmdmod_T *cmod, bool skip_only)
{
- char *p;
-
CLEAR_POINTER(cmod);
// Repeat until no more command modifiers are found.
@@ -2401,7 +2333,7 @@ int parse_command_modifiers(exarg_T *eap, char **errormsg, cmdmod_T *cmod, bool
return FAIL;
}
- p = skip_range(eap->cmd, NULL);
+ char *p = skip_range(eap->cmd, NULL);
switch (*p) {
// When adding an entry, also modify cmd_exists().
case 'a':
@@ -2840,12 +2772,12 @@ theend:
}
/// Check for an Ex command with optional tail.
-/// If there is a match advance "pp" to the argument and return TRUE.
+/// If there is a match advance "pp" to the argument and return true.
///
/// @param pp start of command
/// @param cmd name of command
/// @param len required length
-int checkforcmd(char **pp, char *cmd, int len)
+bool checkforcmd(char **pp, char *cmd, int len)
{
int i;
@@ -2858,7 +2790,7 @@ int checkforcmd(char **pp, char *cmd, int len)
*pp = skipwhite(*pp + i);
return true;
}
- return FALSE;
+ return false;
}
/// Append "cmd" to the error message in IObuff.
@@ -2886,7 +2818,7 @@ static void append_command(char *cmd)
} else if ((char_u *)d - IObuff + utfc_ptr2len(s) + 1 >= IOSIZE) {
break;
} else {
- mb_copy_char((const char_u **)&s, (char_u **)&d);
+ mb_copy_char((const char **)&s, &d);
}
}
*d = NUL;
@@ -2895,29 +2827,23 @@ static void append_command(char *cmd)
/// Find an Ex command by its name, either built-in or user.
/// Start of the name can be found at eap->cmd.
/// Sets eap->cmdidx and returns a pointer to char after the command name.
-/// "full" is set to TRUE if the whole command name matched.
+/// "full" is set to true if the whole command name matched.
///
/// @return NULL for an ambiguous user command.
char *find_ex_command(exarg_T *eap, int *full)
FUNC_ATTR_NONNULL_ARG(1)
{
- int len;
- char *p;
- int i;
-
- /*
- * Isolate the command and search for it in the command table.
- * Exceptions:
- * - the 'k' command can directly be followed by any character.
- * - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r'
- * but :sre[wind] is another command, as are :scr[iptnames],
- * :scs[cope], :sim[alt], :sig[ns] and :sil[ent].
- * - the "d" command can directly be followed by 'l' or 'p' flag.
- */
- p = eap->cmd;
+ // Isolate the command and search for it in the command table.
+ // Exceptions:
+ // - the 'k' command can directly be followed by any character.
+ // - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r'
+ // but :sre[wind] is another command, as are :scr[iptnames],
+ // :scs[cope], :sim[alt], :sig[ns] and :sil[ent].
+ // - the "d" command can directly be followed by 'l' or 'p' flag.
+ char *p = eap->cmd;
if (*p == 'k') {
eap->cmdidx = CMD_k;
- ++p;
+ p++;
} else if (p[0] == 's'
&& ((p[1] == 'c'
&& (p[2] == NUL
@@ -2929,15 +2855,15 @@ char *find_ex_command(exarg_T *eap, int *full)
|| p[1] == 'I'
|| (p[1] == 'r' && p[2] != 'e'))) {
eap->cmdidx = CMD_substitute;
- ++p;
+ p++;
} else {
while (ASCII_ISALPHA(*p)) {
- ++p;
+ p++;
}
// for python 3.x support ":py3", ":python3", ":py3file", etc.
if (eap->cmd[0] == 'p' && eap->cmd[1] == 'y') {
while (ASCII_ISALNUM(*p)) {
- ++p;
+ p++;
}
}
@@ -2945,17 +2871,18 @@ char *find_ex_command(exarg_T *eap, int *full)
if (p == eap->cmd && vim_strchr("@!=><&~#", *p) != NULL) {
p++;
}
- len = (int)(p - eap->cmd);
+ int len = (int)(p - eap->cmd);
if (*eap->cmd == 'd' && (p[-1] == 'l' || p[-1] == 'p')) {
// Check for ":dl", ":dell", etc. to ":deletel": that's
// :delete with the 'l' flag. Same for 'p'.
+ int i;
for (i = 0; i < len; i++) {
if (eap->cmd[i] != ("delete")[i]) {
break;
}
}
if (i == len - 1) {
- --len;
+ len--;
if (p[-1] == 'l') {
eap->flags |= EXFLAG_LIST;
} else {
@@ -2992,7 +2919,7 @@ char *find_ex_command(exarg_T *eap, int *full)
(size_t)len) == 0) {
if (full != NULL
&& cmdnames[(int)eap->cmdidx].cmd_name[len] == NUL) {
- *full = TRUE;
+ *full = true;
}
break;
}
@@ -3003,7 +2930,7 @@ char *find_ex_command(exarg_T *eap, int *full)
&& *eap->cmd >= 'A' && *eap->cmd <= 'Z') {
// User defined commands may contain digits.
while (ASCII_ISALNUM(*p)) {
- ++p;
+ p++;
}
p = find_ucmd(eap, p, full, NULL, NULL);
}
@@ -3075,9 +3002,6 @@ int modifier_len(char *cmd)
/// 3 if there is an ambiguous match.
int cmd_exists(const char *const name)
{
- exarg_T ea;
- char *p;
-
// Check command modifiers.
for (int i = 0; i < (int)ARRAY_SIZE(cmdmods); i++) {
int j;
@@ -3093,11 +3017,12 @@ int cmd_exists(const char *const name)
// Check built-in commands and user defined commands.
// For ":2match" and ":3match" we need to skip the number.
+ exarg_T ea;
ea.cmd = (char *)((*name == '2' || *name == '3') ? name + 1 : name);
ea.cmdidx = (cmdidx_T)0;
ea.flags = 0;
int full = false;
- p = find_ex_command(&ea, &full);
+ char *p = find_ex_command(&ea, &full);
if (p == NULL) {
return 3;
}
@@ -3113,7 +3038,6 @@ int cmd_exists(const char *const name)
/// "fullcommand" function
void f_fullcommand(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
- exarg_T ea;
char *name = argvars[0].vval.v_string;
rettv->v_type = VAR_STRING;
@@ -3127,6 +3051,7 @@ void f_fullcommand(typval_T *argvars, typval_T *rettv, FunPtr fptr)
}
name = skip_range(name, NULL);
+ exarg_T ea;
ea.cmd = (*name == '2' || *name == '3') ? name + 1 : name;
ea.cmdidx = (cmdidx_T)0;
ea.flags = 0;
@@ -3175,14 +3100,10 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
return NULL;
}
- /*
- * 3. parse a range specifier of the form: addr [,addr] [;addr] ..
- */
+ // 3. parse a range specifier of the form: addr [,addr] [;addr] ..
cmd = (const char *)skip_range(cmd, &xp->xp_context);
- /*
- * 4. parse command
- */
+ // 4. parse command
xp->xp_pattern = (char *)cmd;
if (*cmd == NUL) {
return NULL;
@@ -3195,13 +3116,11 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
if (*cmd == '|' || *cmd == '\n') {
return cmd + 1; // There's another command
}
- /*
- * Isolate the command and search for it in the command table.
- * Exceptions:
- * - the 'k' command can directly be followed by any character, but
- * do accept "keepmarks", "keepalt" and "keepjumps".
- * - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r'
- */
+ // Isolate the command and search for it in the command table.
+ // Exceptions:
+ // - the 'k' command can directly be followed by any character, but
+ // do accept "keepmarks", "keepalt" and "keepjumps".
+ // - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r'
const char *p;
if (*cmd == 'k' && cmd[1] != 'e') {
ea.cmdidx = CMD_k;
@@ -3281,9 +3200,7 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
p++;
}
- /*
- * 5. parse arguments
- */
+ // 5. parse arguments
if (!IS_USER_CMDIDX(ea.cmdidx)) {
ea.argt = cmdnames[(int)ea.cmdidx].cmd_argt;
}
@@ -3341,10 +3258,8 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
arg = (const char *)skipwhite(arg);
}
- /*
- * Check for '|' to separate commands and '"' to start comments.
- * Don't do this for ":read !cmd" and ":write !cmd".
- */
+ // Check for '|' to separate commands and '"' to start comments.
+ // Don't do this for ":read !cmd" and ":write !cmd".
if ((ea.argt & EX_TRLBAR) && !usefilter) {
p = arg;
// ":redir @" is not the start of a comment
@@ -3392,18 +3307,15 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
}
if (ea.argt & EX_XFILE) {
- int c;
int in_quote = false;
const char *bow = NULL; // Beginning of word.
- /*
- * Allow spaces within back-quotes to count as part of the argument
- * being expanded.
- */
+ // Allow spaces within back-quotes to count as part of the argument
+ // being expanded.
xp->xp_pattern = skipwhite(arg);
p = (const char *)xp->xp_pattern;
while (*p != NUL) {
- c = utf_ptr2char(p);
+ int c = utf_ptr2char(p);
if (c == '\\' && p[1] != NUL) {
p++;
} else if (c == '`') {
@@ -3412,13 +3324,9 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
bow = p + 1;
}
in_quote = !in_quote;
- }
- /* An argument can contain just about everything, except
- * characters that end the command and white space. */
- else if (c == '|'
- || c == '\n'
- || c == '"'
- || ascii_iswhite(c)) {
+ // An argument can contain just about everything, except
+ // characters that end the command and white space.
+ } else if (c == '|' || c == '\n' || c == '"' || ascii_iswhite(c)) {
len = 0; // avoid getting stuck when space is in 'isfname'
while (*p != NUL) {
c = utf_ptr2char(p);
@@ -3438,10 +3346,8 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
MB_PTR_ADV(p);
}
- /*
- * If we are still inside the quotes, and we passed a space, just
- * expand from there.
- */
+ // If we are still inside the quotes, and we passed a space, just
+ // expand from there.
if (bow != NULL && in_quote) {
xp->xp_pattern = (char *)bow;
}
@@ -3450,7 +3356,7 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
// For a shell command more chars need to be escaped.
if (usefilter || ea.cmdidx == CMD_bang || ea.cmdidx == CMD_terminal) {
#ifndef BACKSLASH_IN_FILENAME
- xp->xp_shell = TRUE;
+ xp->xp_shell = true;
#endif
// When still after the command name expand executables.
if (xp->xp_pattern == skipwhite(arg)) {
@@ -3483,14 +3389,12 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
if (*p == NUL && p > (const char *)xp->xp_pattern + 1
&& match_user((char_u *)xp->xp_pattern + 1) >= 1) {
xp->xp_context = EXPAND_USER;
- ++xp->xp_pattern;
+ xp->xp_pattern++;
}
}
}
- /*
- * 6. switch on command name
- */
+ // 6. switch on command name
switch (ea.cmdidx) {
case CMD_find:
case CMD_sfind:
@@ -3514,8 +3418,8 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
xp->xp_pattern = (char *)arg;
break;
- /* Command modifiers: return the argument.
- * Also for commands with an argument that is a command. */
+ // Command modifiers: return the argument.
+ // Also for commands with an argument that is a command.
case CMD_aboveleft:
case CMD_argdo:
case CMD_belowright:
@@ -3573,9 +3477,7 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
}
return (const char *)find_nextcmd((char_u *)arg);
- /*
- * All completion for the +cmdline_compl feature goes here.
- */
+ // All completion for the +cmdline_compl feature goes here.
case CMD_command:
return set_context_in_user_cmd(xp, arg);
@@ -3785,7 +3687,7 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
} else if (context == EXPAND_COMMANDS) {
return arg;
} else if (context == EXPAND_MAPPINGS) {
- return (const char *)set_context_in_map_cmd(xp, (char_u *)"map", (char_u *)arg, forceit,
+ return (const char *)set_context_in_map_cmd(xp, "map", (char_u *)arg, forceit,
false, false,
CMD_map);
}
@@ -3823,7 +3725,7 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
case CMD_snoremap:
case CMD_xmap:
case CMD_xnoremap:
- return (const char *)set_context_in_map_cmd(xp, (char_u *)cmd, (char_u *)arg, forceit, false,
+ return (const char *)set_context_in_map_cmd(xp, (char *)cmd, (char_u *)arg, forceit, false,
false, ea.cmdidx);
case CMD_unmap:
case CMD_nunmap:
@@ -3834,7 +3736,7 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
case CMD_lunmap:
case CMD_sunmap:
case CMD_xunmap:
- return (const char *)set_context_in_map_cmd(xp, (char_u *)cmd, (char_u *)arg, forceit, false,
+ return (const char *)set_context_in_map_cmd(xp, (char *)cmd, (char_u *)arg, forceit, false,
true, ea.cmdidx);
case CMD_mapclear:
case CMD_nmapclear:
@@ -3855,12 +3757,12 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
case CMD_cnoreabbrev:
case CMD_iabbrev:
case CMD_inoreabbrev:
- return (const char *)set_context_in_map_cmd(xp, (char_u *)cmd, (char_u *)arg, forceit, true,
+ return (const char *)set_context_in_map_cmd(xp, (char *)cmd, (char_u *)arg, forceit, true,
false, ea.cmdidx);
case CMD_unabbreviate:
case CMD_cunabbrev:
case CMD_iunabbrev:
- return (const char *)set_context_in_map_cmd(xp, (char_u *)cmd, (char_u *)arg, forceit, true,
+ return (const char *)set_context_in_map_cmd(xp, (char *)cmd, (char_u *)arg, forceit, true,
true, ea.cmdidx);
case CMD_menu:
case CMD_noremenu:
@@ -3992,8 +3894,6 @@ const char *set_one_cmd_context(expand_T *xp, const char *buff)
/// @return the "cmd" pointer advanced to beyond the range.
char *skip_range(const char *cmd, int *ctx)
{
- unsigned delim;
-
while (vim_strchr(" \t0123456789.$%'/?-+,;\\", *cmd) != NULL) {
if (*cmd == '\\') {
if (cmd[1] == '?' || cmd[1] == '/' || cmd[1] == '&') {
@@ -4006,10 +3906,10 @@ char *skip_range(const char *cmd, int *ctx)
*ctx = EXPAND_NOTHING;
}
} else if (*cmd == '/' || *cmd == '?') {
- delim = (unsigned)(*cmd++);
+ unsigned delim = (unsigned)(*cmd++);
while (*cmd != NUL && *cmd != (char)delim) {
if (*cmd++ == '\\' && *cmd != NUL) {
- ++cmd;
+ cmd++;
}
}
if (*cmd == NUL && ctx != NULL) {
@@ -4017,7 +3917,7 @@ char *skip_range(const char *cmd, int *ctx)
}
}
if (*cmd != NUL) {
- ++cmd;
+ cmd++;
}
}
@@ -4055,17 +3955,15 @@ static linenr_T get_address(exarg_T *eap, char **ptr, cmd_addr_T addr_type, int
int c;
int i;
linenr_T n;
- char *cmd;
pos_T pos;
- linenr_T lnum;
buf_T *buf;
- cmd = skipwhite(*ptr);
- lnum = MAXLNUM;
+ char *cmd = skipwhite(*ptr);
+ linenr_T lnum = MAXLNUM;
do {
switch (*cmd) {
case '.': // '.' - Cursor position
- ++cmd;
+ cmd++;
switch (addr_type) {
case ADDR_LINES:
case ADDR_OTHER:
@@ -4101,7 +3999,7 @@ static linenr_T get_address(exarg_T *eap, char **ptr, cmd_addr_T addr_type, int
break;
case '$': // '$' - last line
- ++cmd;
+ cmd++;
switch (addr_type) {
case ADDR_LINES:
case ADDR_OTHER:
@@ -4162,7 +4060,7 @@ static linenr_T get_address(exarg_T *eap, char **ptr, cmd_addr_T addr_type, int
goto error;
}
if (skip) {
- ++cmd;
+ cmd++;
} else {
// Only accept a mark in another file when it is
// used by itself: ":'M".
@@ -4194,7 +4092,7 @@ static linenr_T get_address(exarg_T *eap, char **ptr, cmd_addr_T addr_type, int
if (skip) { // skip "/pat/"
cmd = (char *)skip_regexp((char_u *)cmd, c, p_magic, NULL);
if (*cmd == c) {
- ++cmd;
+ cmd++;
}
} else {
int flags;
@@ -4234,7 +4132,7 @@ static linenr_T get_address(exarg_T *eap, char **ptr, cmd_addr_T addr_type, int
break;
case '\\': // "\?", "\/" or "\&", repeat search
- ++cmd;
+ cmd++;
if (addr_type != ADDR_LINES) {
addr_error(addr_type);
cmd = NULL;
@@ -4265,7 +4163,7 @@ static linenr_T get_address(exarg_T *eap, char **ptr, cmd_addr_T addr_type, int
goto error;
}
}
- ++cmd;
+ cmd++;
break;
default:
@@ -4560,45 +4458,35 @@ char *replace_makeprg(exarg_T *eap, char *arg, char **cmdlinep)
/// @return FAIL for failure, OK otherwise.
int expand_filename(exarg_T *eap, char **cmdlinep, char **errormsgp)
{
- int has_wildcards; // need to expand wildcards
- char *repl;
- size_t srclen;
- char *p;
- int escaped;
-
// Skip a regexp pattern for ":vimgrep[add] pat file..."
- p = skip_grep_pat(eap);
-
- /*
- * Decide to expand wildcards *before* replacing '%', '#', etc. If
- * the file name contains a wildcard it should not cause expanding.
- * (it will be expanded anyway if there is a wildcard before replacing).
- */
- has_wildcards = path_has_wildcard((char_u *)p);
+ char *p = skip_grep_pat(eap);
+
+ // Decide to expand wildcards *before* replacing '%', '#', etc. If
+ // the file name contains a wildcard it should not cause expanding.
+ // (it will be expanded anyway if there is a wildcard before replacing).
+ int has_wildcards = path_has_wildcard((char_u *)p);
while (*p != NUL) {
// Skip over `=expr`, wildcards in it are not expanded.
if (p[0] == '`' && p[1] == '=') {
p += 2;
(void)skip_expr(&p);
if (*p == '`') {
- ++p;
+ p++;
}
continue;
}
- /*
- * Quick check if this cannot be the start of a special string.
- * Also removes backslash before '%', '#' and '<'.
- */
+ // Quick check if this cannot be the start of a special string.
+ // Also removes backslash before '%', '#' and '<'.
if (vim_strchr("%#<", *p) == NULL) {
p++;
continue;
}
- /*
- * Try to find a match at this position.
- */
- repl = (char *)eval_vars((char_u *)p, (char_u *)eap->arg, &srclen, &(eap->do_ecmd_lnum),
- errormsgp, &escaped);
+ // Try to find a match at this position.
+ size_t srclen;
+ int escaped;
+ char *repl = (char *)eval_vars((char_u *)p, (char_u *)eap->arg, &srclen, &(eap->do_ecmd_lnum),
+ errormsgp, &escaped);
if (*errormsgp != NULL) { // error detected
return FAIL;
}
@@ -4668,20 +4556,16 @@ int expand_filename(exarg_T *eap, char **cmdlinep, char **errormsgp)
xfree(repl);
}
- /*
- * One file argument: Expand wildcards.
- * Don't do this with ":r !command" or ":w !command".
- */
+ // One file argument: Expand wildcards.
+ // Don't do this with ":r !command" or ":w !command".
if ((eap->argt & EX_NOSPC) && !eap->usefilter) {
// Replace environment variables.
if (has_wildcards) {
- /*
- * May expand environment variables. This
- * can be done much faster with expand_env() than with
- * something else (e.g., calling a shell).
- * After expanding environment variables, check again
- * if there are still wildcards present.
- */
+ // May expand environment variables. This
+ // can be done much faster with expand_env() than with
+ // something else (e.g., calling a shell).
+ // After expanding environment variables, check again
+ // if there are still wildcards present.
if (vim_strchr(eap->arg, '$') != NULL
|| vim_strchr(eap->arg, '~') != NULL) {
expand_env_esc((char_u *)eap->arg, NameBuff, MAXPATHL, true, true, NULL);
@@ -4695,15 +4579,16 @@ int expand_filename(exarg_T *eap, char **cmdlinep, char **errormsgp)
}
}
- /*
- * Halve the number of backslashes (this is Vi compatible).
- * For Unix, when wildcards are expanded, this is
- * done by ExpandOne() below.
- */
+ // Halve the number of backslashes (this is Vi compatible).
+ // For Unix, when wildcards are expanded, this is
+ // done by ExpandOne() below.
#ifdef UNIX
- if (!has_wildcards)
-#endif
+ if (!has_wildcards) {
+ backslash_halve((char_u *)eap->arg);
+ }
+#else
backslash_halve((char_u *)eap->arg);
+#endif
if (has_wildcards) {
expand_T xpc;
@@ -4733,11 +4618,9 @@ int expand_filename(exarg_T *eap, char **cmdlinep, char **errormsgp)
/// @return a pointer to the character after the replaced string.
static char *repl_cmdline(exarg_T *eap, char *src, size_t srclen, char *repl, char **cmdlinep)
{
- /*
- * The new command line is build in new_cmdline[].
- * First allocate it.
- * Careful: a "+cmd" argument may have been NUL terminated.
- */
+ // The new command line is build in new_cmdline[].
+ // First allocate it.
+ // Careful: a "+cmd" argument may have been NUL terminated.
size_t len = STRLEN(repl);
size_t i = (size_t)(src - *cmdlinep) + STRLEN(src + srclen) + len + 3;
if (eap->nextcmd != NULL) {
@@ -4746,12 +4629,10 @@ static char *repl_cmdline(exarg_T *eap, char *src, size_t srclen, char *repl, ch
char *new_cmdline = xmalloc(i);
size_t offset = (size_t)(src - *cmdlinep);
- /*
- * Copy the stuff before the expanded part.
- * Copy the expanded stuff.
- * Copy what came after the expanded part.
- * Copy the next commands, if there are any.
- */
+ // Copy the stuff before the expanded part.
+ // Copy the expanded stuff.
+ // Copy what came after the expanded part.
+ // Copy the next commands, if there are any.
i = offset; // length of part before match
memmove(new_cmdline, *cmdlinep, i);
@@ -4847,12 +4728,12 @@ static char *getargcmd(char **argp)
char *command = NULL;
if (*arg == '+') { // +[command]
- ++arg;
+ arg++;
if (ascii_isspace(*arg) || *arg == '\0') {
command = (char *)dollar_command;
} else {
command = arg;
- arg = skip_cmd_arg(command, TRUE);
+ arg = skip_cmd_arg(command, true);
if (*arg != NUL) {
*arg++ = NUL; // terminate command with NUL
}
@@ -4866,7 +4747,7 @@ static char *getargcmd(char **argp)
/// Find end of "+command" argument. Skip over "\ " and "\\".
///
-/// @param rembs TRUE to halve the number of backslashes
+/// @param rembs true to halve the number of backslashes
static char *skip_cmd_arg(char *p, int rembs)
{
while (*p && !ascii_isspace(*p)) {
@@ -4874,7 +4755,7 @@ static char *skip_cmd_arg(char *p, int rembs)
if (rembs) {
STRMOVE(p, p + 1);
} else {
- ++p;
+ p++;
}
}
MB_PTR_ADV(p);
@@ -4905,7 +4786,6 @@ static int getargopt(exarg_T *eap)
char *arg = eap->arg + 2;
int *pp = NULL;
int bad_char_idx;
- char *p;
// ":edit ++[no]bin[ary] file"
if (STRNCMP(arg, "bin", 3) == 0 || STRNCMP(arg, "nobin", 5) == 0) {
@@ -4964,7 +4844,7 @@ static int getargopt(exarg_T *eap)
eap->force_ff = (char_u)eap->cmd[eap->force_ff];
} else if (pp == &eap->force_enc) {
// Make 'fileencoding' lower case.
- for (p = eap->cmd + eap->force_enc; *p != NUL; p++) {
+ for (char *p = eap->cmd + eap->force_enc; *p != NUL; p++) {
*p = (char)TOLOWER_ASC(*p);
}
} else {
@@ -4989,7 +4869,6 @@ static int get_tabpage_arg(exarg_T *eap)
if (eap->arg && *eap->arg != NUL) {
char *p = eap->arg;
- char *p_save;
int relative = 0; // argument +N/-N means: go to N places to the
// right/left relative to the current position.
@@ -5001,7 +4880,7 @@ static int get_tabpage_arg(exarg_T *eap)
p++;
}
- p_save = p;
+ char *p_save = p;
tab_number = (int)getdigits(&p, false, tab_number);
if (relative == 0) {
@@ -5223,9 +5102,9 @@ char_u *check_nextcmd(char_u *p)
/// - and forceit not used
/// - and not repeated twice on a row
///
-/// @param message when FALSE check only, no messages
+/// @param message when false check only, no messages
///
-/// @return FAIL and give error message if 'message' TRUE, return OK otherwise
+/// @return FAIL and give error message if 'message' true, return OK otherwise
static int check_more(int message, bool forceit)
{
int n = ARGCOUNT - curwin->w_arg_idx - 1;
@@ -5266,10 +5145,9 @@ static void ex_colorscheme(exarg_T *eap)
{
if (*eap->arg == NUL) {
char *expr = xstrdup("g:colors_name");
- char *p = NULL;
emsg_off++;
- p = eval_to_string(expr, NULL, false);
+ char *p = eval_to_string(expr, NULL, false);
emsg_off--;
xfree(expr);
@@ -5473,16 +5351,15 @@ static void ex_pclose(exarg_T *eap)
/// @param tp NULL or the tab page "win" is in
void ex_win_close(int forceit, win_T *win, tabpage_T *tp)
{
- int need_hide;
- buf_T *buf = win->w_buffer;
-
// Never close the autocommand window.
if (win == aucmd_win) {
emsg(_(e_autocmd_close));
return;
}
- need_hide = (bufIsChanged(buf) && buf->b_nwindows <= 1);
+ buf_T *buf = win->w_buffer;
+
+ bool need_hide = (bufIsChanged(buf) && buf->b_nwindows <= 1);
if (need_hide && !buf_hide(buf) && !forceit) {
if ((p_confirm || (cmdmod.cmod_flags & CMOD_CONFIRM)) && p_write) {
bufref_T bufref;
@@ -5510,8 +5387,6 @@ void ex_win_close(int forceit, win_T *win, tabpage_T *tp)
/// ":tabclose N": close tab page N.
static void ex_tabclose(exarg_T *eap)
{
- tabpage_T *tp;
-
if (cmdwin_type != 0) {
cmdwin_result = K_IGNORE;
} else if (first_tabpage->tp_next == NULL) {
@@ -5519,7 +5394,7 @@ static void ex_tabclose(exarg_T *eap)
} else {
int tab_number = get_tabpage_arg(eap);
if (eap->errmsg == NULL) {
- tp = find_tabpage(tab_number);
+ tabpage_T *tp = find_tabpage(tab_number);
if (tp == NULL) {
beep_flush();
return;
@@ -5591,7 +5466,6 @@ void tabpage_close(int forceit)
void tabpage_close_other(tabpage_T *tp, int forceit)
{
int done = 0;
- win_T *wp;
int h = tabline_height();
char prev_idx[NUMBUFLEN];
@@ -5599,7 +5473,7 @@ void tabpage_close_other(tabpage_T *tp, int forceit)
// one. OK, so I'm paranoid...
while (++done < 1000) {
snprintf((char *)prev_idx, sizeof(prev_idx), "%i", tabpage_index(tp));
- wp = tp->tp_lastwin;
+ win_T *wp = tp->tp_lastwin;
ex_win_close(forceit, wp, tp);
// Autocommands may delete the tab page under our fingers and we may
@@ -5619,10 +5493,9 @@ void tabpage_close_other(tabpage_T *tp, int forceit)
static void ex_only(exarg_T *eap)
{
win_T *wp;
- linenr_T wnr;
if (eap->addr_count > 0) {
- wnr = eap->line2;
+ linenr_T wnr = eap->line2;
for (wp = firstwin; --wnr > 0;) {
if (wp->w_next == NULL) {
break;
@@ -5636,17 +5509,7 @@ static void ex_only(exarg_T *eap)
if (wp != curwin) {
win_goto(wp);
}
- close_others(TRUE, eap->forceit);
-}
-
-/// ":all" and ":sall".
-/// Also used for ":tab drop file ..." after setting the argument list.
-void ex_all(exarg_T *eap)
-{
- if (eap->addr_count == 0) {
- eap->line2 = 9999;
- }
- do_arg_all((int)eap->line2, eap->forceit, eap->cmdidx == CMD_drop);
+ close_others(true, eap->forceit);
}
static void ex_hide(exarg_T *eap)
@@ -5761,162 +5624,6 @@ static void ex_goto(exarg_T *eap)
goto_byte(eap->line2);
}
-/// Clear an argument list: free all file names and reset it to zero entries.
-void alist_clear(alist_T *al)
-{
-#define FREE_AENTRY_FNAME(arg) xfree((arg)->ae_fname)
- GA_DEEP_CLEAR(&al->al_ga, aentry_T, FREE_AENTRY_FNAME);
-}
-
-/// Init an argument list.
-void alist_init(alist_T *al)
-{
- ga_init(&al->al_ga, (int)sizeof(aentry_T), 5);
-}
-
-/// Remove a reference from an argument list.
-/// Ignored when the argument list is the global one.
-/// If the argument list is no longer used by any window, free it.
-void alist_unlink(alist_T *al)
-{
- if (al != &global_alist && --al->al_refcount <= 0) {
- alist_clear(al);
- xfree(al);
- }
-}
-
-/// Create a new argument list and use it for the current window.
-void alist_new(void)
-{
- curwin->w_alist = xmalloc(sizeof(*curwin->w_alist));
- curwin->w_alist->al_refcount = 1;
- curwin->w_alist->id = ++max_alist_id;
- alist_init(curwin->w_alist);
-}
-
-#if !defined(UNIX)
-
-/// Expand the file names in the global argument list.
-/// If "fnum_list" is not NULL, use "fnum_list[fnum_len]" as a list of buffer
-/// numbers to be re-used.
-void alist_expand(int *fnum_list, int fnum_len)
-{
- char **old_arg_files;
- int old_arg_count;
- char **new_arg_files;
- int new_arg_file_count;
- char *save_p_su = p_su;
- int i;
-
- /* Don't use 'suffixes' here. This should work like the shell did the
- * expansion. Also, the vimrc file isn't read yet, thus the user
- * can't set the options. */
- p_su = empty_option;
- old_arg_files = xmalloc(sizeof(*old_arg_files) * GARGCOUNT);
- for (i = 0; i < GARGCOUNT; ++i) {
- old_arg_files[i] = vim_strsave(GARGLIST[i].ae_fname);
- }
- old_arg_count = GARGCOUNT;
- if (expand_wildcards(old_arg_count, old_arg_files,
- &new_arg_file_count, &new_arg_files,
- EW_FILE|EW_NOTFOUND|EW_ADDSLASH|EW_NOERROR) == OK
- && new_arg_file_count > 0) {
- alist_set(&global_alist, new_arg_file_count, new_arg_files,
- TRUE, fnum_list, fnum_len);
- FreeWild(old_arg_count, old_arg_files);
- }
- p_su = save_p_su;
-}
-#endif
-
-/// Set the argument list for the current window.
-/// Takes over the allocated files[] and the allocated fnames in it.
-void alist_set(alist_T *al, int count, char **files, int use_curbuf, int *fnum_list, int fnum_len)
-{
- int i;
- static int recursive = 0;
-
- if (recursive) {
- emsg(_(e_au_recursive));
- return;
- }
- recursive++;
-
- alist_clear(al);
- ga_grow(&al->al_ga, count);
- {
- for (i = 0; i < count; ++i) {
- if (got_int) {
- /* When adding many buffers this can take a long time. Allow
- * interrupting here. */
- while (i < count) {
- xfree(files[i++]);
- }
- break;
- }
-
- /* May set buffer name of a buffer previously used for the
- * argument list, so that it's re-used by alist_add. */
- if (fnum_list != NULL && i < fnum_len) {
- buf_set_name(fnum_list[i], files[i]);
- }
-
- alist_add(al, files[i], use_curbuf ? 2 : 1);
- os_breakcheck();
- }
- xfree(files);
- }
-
- if (al == &global_alist) {
- arg_had_last = false;
- }
- recursive--;
-}
-
-/// Add file "fname" to argument list "al".
-/// "fname" must have been allocated and "al" must have been checked for room.
-///
-/// @param set_fnum 1: set buffer number; 2: re-use curbuf
-void alist_add(alist_T *al, char *fname, int set_fnum)
-{
- if (fname == NULL) { // don't add NULL file names
- return;
- }
-#ifdef BACKSLASH_IN_FILENAME
- slash_adjust(fname);
-#endif
- AARGLIST(al)[al->al_ga.ga_len].ae_fname = (char_u *)fname;
- if (set_fnum > 0) {
- AARGLIST(al)[al->al_ga.ga_len].ae_fnum =
- buflist_add(fname, BLN_LISTED | (set_fnum == 2 ? BLN_CURBUF : 0));
- }
- ++al->al_ga.ga_len;
-}
-
-#if defined(BACKSLASH_IN_FILENAME)
-
-/// Adjust slashes in file names. Called after 'shellslash' was set.
-void alist_slash_adjust(void)
-{
- for (int i = 0; i < GARGCOUNT; ++i) {
- if (GARGLIST[i].ae_fname != NULL) {
- slash_adjust(GARGLIST[i].ae_fname);
- }
- }
-
- FOR_ALL_TAB_WINDOWS(tp, wp) {
- if (wp->w_alist != &global_alist) {
- for (int i = 0; i < WARGCOUNT(wp); ++i) {
- if (WARGLIST(wp)[i].ae_fname != NULL) {
- slash_adjust(WARGLIST(wp)[i].ae_fname);
- }
- }
- }
- }
-}
-
-#endif
-
/// ":preserve".
static void ex_preserve(exarg_T *eap)
{
@@ -5985,9 +5692,7 @@ void ex_splitview(exarg_T *eap)
eap->arg = fname;
}
- /*
- * Either open new tab page or split the window.
- */
+ // Either open new tab page or split the window.
if (use_tab) {
if (win_new_tabpage(cmdmod.cmod_tab != 0 ? cmdmod.cmod_tab : eap->addr_count == 0
? 0 : (int)eap->line2 + 1, (char_u *)eap->arg) != FAIL) {
@@ -6021,12 +5726,11 @@ theend:
/// Open a new tab page.
void tabpage_new(void)
{
- exarg_T ea;
-
- memset(&ea, 0, sizeof(ea));
- ea.cmdidx = CMD_tabnew;
- ea.cmd = "tabn";
- ea.arg = "";
+ exarg_T ea = {
+ .cmdidx = CMD_tabnew,
+ .cmd = "tabn",
+ .arg = "",
+ };
ex_splitview(&ea);
}
@@ -6092,7 +5796,7 @@ static void ex_tabs(exarg_T *eap)
int tabcount = 1;
msg_start();
- msg_scroll = TRUE;
+ msg_scroll = true;
win_T *lastused_win = valid_tabpage(lastused_tabpage)
? lastused_tabpage->tp_curwin
@@ -6147,15 +5851,14 @@ static void ex_mode(exarg_T *eap)
/// set, increment or decrement current window height
static void ex_resize(exarg_T *eap)
{
- int n;
win_T *wp = curwin;
if (eap->addr_count > 0) {
- n = (int)eap->line2;
+ int n = (int)eap->line2;
for (wp = firstwin; wp->w_next != NULL && --n > 0; wp = wp->w_next) {}
}
- n = (int)atol(eap->arg);
+ int n = (int)atol(eap->arg);
if (cmdmod.cmod_split & WSP_VERT) {
if (*eap->arg == '-' || *eap->arg == '+') {
n += wp->w_width;
@@ -6176,15 +5879,12 @@ static void ex_resize(exarg_T *eap)
/// ":find [+command] <file>" command.
static void ex_find(exarg_T *eap)
{
- char *fname;
- linenr_T count;
-
- fname = (char *)find_file_in_path((char_u *)eap->arg, STRLEN(eap->arg),
- FNAME_MESS, true, (char_u *)curbuf->b_ffname);
+ char *fname = (char *)find_file_in_path((char_u *)eap->arg, STRLEN(eap->arg),
+ FNAME_MESS, true, (char_u *)curbuf->b_ffname);
if (eap->addr_count > 0) {
// Repeat finding the file "count" times. This matters when it
// appears several times in the path.
- count = eap->line2;
+ linenr_T count = eap->line2;
while (fname != NULL && --count > 0) {
xfree(fname);
fname = (char *)find_file_in_path(NULL, 0, FNAME_MESS, false, (char_u *)curbuf->b_ffname);
@@ -6210,11 +5910,8 @@ static void ex_edit(exarg_T *eap)
void do_exedit(exarg_T *eap, win_T *old_curwin)
{
int n;
- int need_hide;
- /*
- * ":vi" command ends Ex mode.
- */
+ // ":vi" command ends Ex mode.
if (exmode_active && (eap->cmdidx == CMD_visual
|| eap->cmdidx == CMD_view)) {
exmode_active = false;
@@ -6286,12 +5983,12 @@ void do_exedit(exarg_T *eap, win_T *old_curwin)
old_curwin == NULL ? curwin : NULL) == FAIL) {
// Editing the file failed. If the window was split, close it.
if (old_curwin != NULL) {
- need_hide = (curbufIsChanged() && curbuf->b_nwindows <= 1);
+ bool need_hide = (curbufIsChanged() && curbuf->b_nwindows <= 1);
if (!need_hide || buf_hide(curbuf)) {
cleanup_T cs;
// Reset the error/interrupt/exception state here so that
- // aborting() returns FALSE when closing a window.
+ // aborting() returns false when closing a window.
enter_cleanup(&cs);
win_close(curwin, !need_hide && !buf_hide(curbuf), false);
@@ -6320,10 +6017,8 @@ void do_exedit(exarg_T *eap, win_T *old_curwin)
}
}
- /*
- * if ":split file" worked, set alternate file name in old window to new
- * file
- */
+ // if ":split file" worked, set alternate file name in old window to new
+ // file
if (old_curwin != NULL
&& *eap->arg != NUL
&& curwin != old_curwin
@@ -6369,9 +6064,7 @@ static void ex_syncbind(exarg_T *eap)
setpcmark();
- /*
- * determine max topline
- */
+ // determine max topline
if (curwin->w_p_scb) {
topline = curwin->w_topline;
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
@@ -6389,23 +6082,21 @@ static void ex_syncbind(exarg_T *eap)
topline = 1;
}
- /*
- * Set all scrollbind windows to the same topline.
- */
+ // Set all scrollbind windows to the same topline.
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
curwin = wp;
if (curwin->w_p_scb) {
curbuf = curwin->w_buffer;
y = topline - curwin->w_topline;
if (y > 0) {
- scrollup(y, TRUE);
+ scrollup(y, true);
} else {
- scrolldown(-y, TRUE);
+ scrolldown(-y, true);
}
curwin->w_scbind_pos = topline;
redraw_later(curwin, VALID);
cursor_correct();
- curwin->w_redr_status = TRUE;
+ curwin->w_redr_status = true;
}
}
curwin = save_curwin;
@@ -6425,9 +6116,7 @@ static void ex_syncbind(exarg_T *eap)
static void ex_read(exarg_T *eap)
{
- int i;
int empty = (curbuf->b_ml.ml_flags & ML_EMPTY);
- linenr_T lnum;
if (eap->usefilter) { // :r!cmd
do_bang(1, eap, false, false, true);
@@ -6435,6 +6124,7 @@ static void ex_read(exarg_T *eap)
if (u_save(eap->line2, (linenr_T)(eap->line2 + 1)) == FAIL) {
return;
}
+ int i;
if (*eap->arg == NUL) {
if (check_fname() == FAIL) { // check for no file name
@@ -6457,6 +6147,7 @@ static void ex_read(exarg_T *eap)
if (empty && exmode_active) {
// Delete the empty line that remains. Historically ex does
// this but vi doesn't.
+ linenr_T lnum;
if (eap->line2 == 0) {
lnum = curbuf->b_ml.ml_line_count;
} else {
@@ -6685,17 +6376,14 @@ static void ex_equal(exarg_T *eap)
static void ex_sleep(exarg_T *eap)
{
- int n;
- long len;
-
if (cursor_valid()) {
- n = curwin->w_winrow + curwin->w_wrow - msg_scrolled;
+ int n = curwin->w_winrow + curwin->w_wrow - msg_scrolled;
if (n >= 0) {
ui_cursor_goto(n, curwin->w_wincol + curwin->w_wcol);
}
}
- len = eap->line2;
+ long len = eap->line2;
switch (*eap->arg) {
case 'm':
break;
@@ -6815,7 +6503,7 @@ static void ex_operators(exarg_T *eap)
} else {
oa.op_type = OP_LSHIFT;
}
- op_shift(&oa, FALSE, eap->amount);
+ op_shift(&oa, false, eap->amount);
break;
}
virtual_op = kNone;
@@ -6828,7 +6516,7 @@ static void ex_put(exarg_T *eap)
// ":0put" works like ":1put!".
if (eap->line2 == 0) {
eap->line2 = 1;
- eap->forceit = TRUE;
+ eap->forceit = true;
}
curwin->w_cursor.lnum = eap->line2;
check_cursor_col();
@@ -6846,9 +6534,7 @@ static void ex_copymove(exarg_T *eap)
}
get_flags(eap);
- /*
- * move or copy lines from 'eap->line1'-'eap->line2' to below line 'n'
- */
+ // move or copy lines from 'eap->line1'-'eap->line2' to below line 'n'
if (n == MAXLNUM || n < 0 || n > curbuf->b_ml.ml_line_count) {
emsg(_(e_invrange));
return;
@@ -6910,7 +6596,7 @@ static void ex_join(exarg_T *eap)
beep_flush();
return;
}
- ++eap->line2;
+ eap->line2++;
}
do_join((size_t)((ssize_t)eap->line2 - eap->line1 + 1), !eap->forceit, true, true, true);
beginline(BL_WHITE | BL_FIX);
@@ -6939,11 +6625,9 @@ static void ex_at(exarg_T *eap)
exec_from_reg = true;
- /*
- * Execute from the typeahead buffer.
- * Continue until the stuff buffer is empty and all added characters
- * have been consumed.
- */
+ // Execute from the typeahead buffer.
+ // Continue until the stuff buffer is empty and all added characters
+ // have been consumed.
while (!stuff_empty() || typebuf.tb_len > prev_len) {
(void)do_cmdline(NULL, getexline, NULL, DOCMD_NOWAIT|DOCMD_VERBOSE);
}
@@ -7032,15 +6716,15 @@ static void ex_later(exarg_T *eap)
count = getdigits_long(&p, false, 0);
switch (*p) {
case 's':
- ++p; sec = true; break;
+ p++; sec = true; break;
case 'm':
- ++p; sec = true; count *= 60; break;
+ p++; sec = true; count *= 60; break;
case 'h':
- ++p; sec = true; count *= 60 * 60; break;
+ p++; sec = true; count *= 60 * 60; break;
case 'd':
- ++p; sec = true; count *= 24 * 60 * 60; break;
+ p++; sec = true; count *= 24 * 60 * 60; break;
case 'f':
- ++p; file = true; break;
+ p++; file = true; break;
}
}
@@ -7055,17 +6739,16 @@ static void ex_later(exarg_T *eap)
/// ":redir": start/stop redirection.
static void ex_redir(exarg_T *eap)
{
- char *mode;
- char *fname;
char *arg = eap->arg;
if (STRICMP(eap->arg, "END") == 0) {
close_redir();
} else {
if (*arg == '>') {
- ++arg;
+ arg++;
+ char *mode;
if (*arg == '>') {
- ++arg;
+ arg++;
mode = "a";
} else {
mode = "w";
@@ -7075,7 +6758,7 @@ static void ex_redir(exarg_T *eap)
close_redir();
// Expand environment variables and "~/".
- fname = expand_env_save(arg);
+ char *fname = expand_env_save(arg);
if (fname == NULL) {
return;
}
@@ -7085,7 +6768,7 @@ static void ex_redir(exarg_T *eap)
} else if (*arg == '@') {
// redirect to a register a-z (resp. A-Z for appending)
close_redir();
- ++arg;
+ arg++;
if (valid_yank_reg(*arg, true) && *arg != '_') {
redir_reg = (char_u)(*arg++);
if (*arg == '>' && arg[1] == '>') { // append
@@ -7114,10 +6797,10 @@ static void ex_redir(exarg_T *eap)
arg += 2;
if (*arg == '>') {
- ++arg;
- append = TRUE;
+ arg++;
+ append = true;
} else {
- append = FALSE;
+ append = false;
}
if (var_redir_start(skipwhite(arg), append) == OK) {
@@ -7146,14 +6829,15 @@ static void ex_redraw(exarg_T *eap)
int p = p_lz;
RedrawingDisabled = 0;
- p_lz = FALSE;
+ p_lz = false;
validate_cursor();
update_topline(curwin);
if (eap->forceit) {
redraw_all_later(NOT_VALID);
+ redraw_cmdline = true;
}
update_screen(eap->forceit ? NOT_VALID
- : VIsual_active ? INVERTED : 0);
+ : VIsual_active ? INVERTED : 0);
if (need_maketitle) {
maketitle();
}
@@ -7180,7 +6864,7 @@ static void ex_redrawstatus(exarg_T *eap)
int p = p_lz;
RedrawingDisabled = 0;
- p_lz = FALSE;
+ p_lz = false;
if (eap->forceit) {
status_redraw_all();
} else {
@@ -7245,8 +6929,6 @@ int vim_mkdir_emsg(const char *const name, const int prot)
/// @return file descriptor, or NULL on failure.
FILE *open_exfile(char_u *fname, int forceit, char *mode)
{
- FILE *fd;
-
#ifdef UNIX
// with Unix it is possible to open a directory
if (os_isdir(fname)) {
@@ -7259,6 +6941,7 @@ FILE *open_exfile(char_u *fname, int forceit, char *mode)
return NULL;
}
+ FILE *fd;
if ((fd = os_fopen((char *)fname, mode)) == NULL) {
semsg(_("E190: Cannot open \"%s\" for writing"), fname);
}
@@ -7269,14 +6952,12 @@ FILE *open_exfile(char_u *fname, int forceit, char *mode)
/// ":mark" and ":k".
static void ex_mark(exarg_T *eap)
{
- pos_T pos;
-
if (*eap->arg == NUL) { // No argument?
emsg(_(e_argreq));
} else if (eap->arg[1] != NUL) { // more than one character?
semsg(_(e_trailing_arg), eap->arg);
} else {
- pos = curwin->w_cursor; // save curwin->w_cursor
+ pos_T pos = curwin->w_cursor; // save curwin->w_cursor
curwin->w_cursor.lnum = eap->line2;
beginline(BL_WHITE | BL_FIX);
if (setmark(*eap->arg) == FAIL) { // set mark
@@ -7357,10 +7038,7 @@ static void ex_normal(exarg_T *eap)
emsg("Can't re-enter normal mode from terminal mode");
return;
}
- save_state_T save_state;
char *arg = NULL;
- int l;
- char *p;
if (ex_normal_lock > 0) {
emsg(_(e_secure));
@@ -7378,6 +7056,8 @@ static void ex_normal(exarg_T *eap)
int len = 0;
// Count the number of characters to be escaped.
+ int l;
+ char *p;
for (p = eap->arg; *p != NUL; p++) {
for (l = utfc_ptr2len(p) - 1; l > 0; l--) {
if (*++p == (char)K_SPECIAL) { // trailbyte K_SPECIAL
@@ -7403,6 +7083,7 @@ static void ex_normal(exarg_T *eap)
}
ex_normal_busy++;
+ save_state_T save_state;
if (save_current_state(&save_state)) {
// Repeat the :normal command for each line in the range. When no
// range given, execute it just once, without positioning the cursor
@@ -7521,8 +7202,6 @@ static void ex_psearch(exarg_T *eap)
static void ex_findpat(exarg_T *eap)
{
bool whole = true;
- long n;
- char *p;
int action;
switch (cmdnames[eap->cmdidx].cmd_name[2]) {
@@ -7544,7 +7223,7 @@ static void ex_findpat(exarg_T *eap)
break;
}
- n = 1;
+ long n = 1;
if (ascii_isdigit(*eap->arg)) { // get count
n = getdigits_long(&eap->arg, false, 0);
eap->arg = skipwhite(eap->arg);
@@ -7552,7 +7231,7 @@ static void ex_findpat(exarg_T *eap)
if (*eap->arg == '/') { // Match regexp, not just whole words
whole = false;
eap->arg++;
- p = (char *)skip_regexp((char_u *)eap->arg, '/', p_magic, NULL);
+ char *p = (char *)skip_regexp((char_u *)eap->arg, '/', p_magic, NULL);
if (*p) {
*p++ = NUL;
p = skipwhite(p);
@@ -7686,7 +7365,6 @@ enum {
ssize_t find_cmdline_var(const char_u *src, size_t *usedlen)
FUNC_ATTR_NONNULL_ALL
{
- size_t len;
static char *(spec_str[]) = {
[SPEC_PERC] = "%",
[SPEC_HASH] = "#",
@@ -7705,8 +7383,8 @@ ssize_t find_cmdline_var(const char_u *src, size_t *usedlen)
// [SPEC_CLIENT] = "<client>",
};
- for (size_t i = 0; i < ARRAY_SIZE(spec_str); ++i) {
- len = STRLEN(spec_str[i]);
+ for (size_t i = 0; i < ARRAY_SIZE(spec_str); i++) {
+ size_t len = STRLEN(spec_str[i]);
if (STRNCMP(src, spec_str[i], len) == 0) {
*usedlen = len;
assert(i <= SSIZE_MAX);
@@ -7725,6 +7403,7 @@ ssize_t find_cmdline_var(const char_u *src, size_t *usedlen)
/// '<cexpr>' to C-expression under the cursor
/// '<cfile>' to path name under the cursor
/// '<sfile>' to sourced file name
+/// '<stack>' to call stack
/// '<slnum>' to sourced file line number
/// '<afile>' to file name for autocommand
/// '<abuf>' to buffer number for autocommand
@@ -7746,12 +7425,9 @@ ssize_t find_cmdline_var(const char_u *src, size_t *usedlen)
char_u *eval_vars(char_u *src, char_u *srcstart, size_t *usedlen, linenr_T *lnump, char **errormsg,
int *escaped)
{
- int i;
- char *s;
char *result;
char *resultbuf = NULL;
size_t resultlen;
- buf_T *buf;
int valid = VALID_HEAD | VALID_PATH; // Assume valid result.
bool tilde_file = false;
bool skip_mod = false;
@@ -7759,40 +7435,34 @@ char_u *eval_vars(char_u *src, char_u *srcstart, size_t *usedlen, linenr_T *lnum
*errormsg = NULL;
if (escaped != NULL) {
- *escaped = FALSE;
+ *escaped = false;
}
- /*
- * Check if there is something to do.
- */
+ // Check if there is something to do.
ssize_t spec_idx = find_cmdline_var(src, usedlen);
if (spec_idx < 0) { // no match
*usedlen = 1;
return NULL;
}
- /*
- * Skip when preceded with a backslash "\%" and "\#".
- * Note: In "\\%" the % is also not recognized!
- */
+ // Skip when preceded with a backslash "\%" and "\#".
+ // Note: In "\\%" the % is also not recognized!
if (src > srcstart && src[-1] == '\\') {
*usedlen = 0;
STRMOVE(src - 1, src); // remove backslash
return NULL;
}
- /*
- * word or WORD under cursor
- */
+ // word or WORD under cursor
if (spec_idx == SPEC_CWORD
|| spec_idx == SPEC_CCWORD
|| spec_idx == SPEC_CEXPR) {
- resultlen = find_ident_under_cursor((char_u **)&result,
+ resultlen = find_ident_under_cursor(&result,
spec_idx == SPEC_CWORD
- ? (FIND_IDENT | FIND_STRING)
- : (spec_idx == SPEC_CEXPR
- ? (FIND_IDENT | FIND_STRING | FIND_EVAL)
- : FIND_STRING));
+ ? (FIND_IDENT | FIND_STRING)
+ : (spec_idx == SPEC_CEXPR
+ ? (FIND_IDENT | FIND_STRING | FIND_EVAL)
+ : FIND_STRING));
if (resultlen == 0) {
*errormsg = "";
return NULL;
@@ -7822,16 +7492,16 @@ char_u *eval_vars(char_u *src, char_u *srcstart, size_t *usedlen, linenr_T *lnum
resultbuf = result;
*usedlen = 2;
if (escaped != NULL) {
- *escaped = TRUE;
+ *escaped = true;
}
skip_mod = true;
break;
}
- s = (char *)src + 1;
+ char *s = (char *)src + 1;
if (*s == '<') { // "#<99" uses v:oldfiles.
s++;
}
- i = getdigits_int(&s, false, 0);
+ int i = getdigits_int(&s, false, 0);
if ((char_u *)s == src + 2 && src[1] == '-') {
// just a minus sign, don't skip over it
s--;
@@ -7853,7 +7523,7 @@ char_u *eval_vars(char_u *src, char_u *srcstart, size_t *usedlen, linenr_T *lnum
if (i == 0 && src[1] == '<' && *usedlen > 1) {
*usedlen = 1;
}
- buf = buflist_findnr(i);
+ buf_T *buf = buflist_findnr(i);
if (buf == NULL) {
*errormsg = _("E194: No alternate file name to substitute for '#'");
return NULL;
@@ -7918,29 +7588,33 @@ char_u *eval_vars(char_u *src, char_u *srcstart, size_t *usedlen, linenr_T *lnum
break;
case SPEC_SFILE: // file name for ":so" command
- result = sourcing_name;
+ case SPEC_STACK: // call stack
+ result = estack_sfile(spec_idx == SPEC_SFILE ? ESTACK_SFILE : ESTACK_STACK);
if (result == NULL) {
- *errormsg = _("E498: no :source file name to substitute for \"<sfile>\"");
+ *errormsg = spec_idx == SPEC_SFILE
+ ? _("E498: no :source file name to substitute for \"<sfile>\"")
+ : _("E489: no call stack to substitute for \"<stack>\"");
return NULL;
}
+ resultbuf = result; // remember allocated string
break;
case SPEC_SLNUM: // line in file for ":so" command
- if (sourcing_name == NULL || sourcing_lnum == 0) {
+ if (SOURCING_NAME == NULL || SOURCING_LNUM == 0) {
*errormsg = _("E842: no line number to use for \"<slnum>\"");
return NULL;
}
- snprintf(strbuf, sizeof(strbuf), "%" PRIdLINENR, sourcing_lnum);
+ snprintf(strbuf, sizeof(strbuf), "%" PRIdLINENR, SOURCING_LNUM);
result = strbuf;
break;
case SPEC_SFLNUM: // line in script file
- if (current_sctx.sc_lnum + sourcing_lnum == 0) {
+ if (current_sctx.sc_lnum + SOURCING_LNUM == 0) {
*errormsg = _("E961: no line number to use for \"<sflnum>\"");
return NULL;
}
snprintf((char *)strbuf, sizeof(strbuf), "%" PRIdLINENR,
- current_sctx.sc_lnum + sourcing_lnum);
+ current_sctx.sc_lnum + SOURCING_LNUM);
result = strbuf;
break;
@@ -7966,6 +7640,7 @@ char_u *eval_vars(char_u *src, char_u *srcstart, size_t *usedlen, linenr_T *lnum
// Remove the file name extension.
if (src[*usedlen] == '<') {
(*usedlen)++;
+ char *s;
if ((s = (char *)STRRCHR(result, '.')) != NULL
&& s >= path_tail(result)) {
resultlen = (size_t)(s - result);
@@ -7995,88 +7670,21 @@ char_u *eval_vars(char_u *src, char_u *srcstart, size_t *usedlen, linenr_T *lnum
return (char_u *)result;
}
-/// Concatenate all files in the argument list, separated by spaces, and return
-/// it in one allocated string.
-/// Spaces and backslashes in the file names are escaped with a backslash.
-static char *arg_all(void)
-{
- int len;
- int idx;
- char *retval = NULL;
- char *p;
-
- /*
- * Do this loop two times:
- * first time: compute the total length
- * second time: concatenate the names
- */
- for (;;) {
- len = 0;
- for (idx = 0; idx < ARGCOUNT; idx++) {
- p = alist_name(&ARGLIST[idx]);
- if (p == NULL) {
- continue;
- }
- if (len > 0) {
- // insert a space in between names
- if (retval != NULL) {
- retval[len] = ' ';
- }
- ++len;
- }
- for (; *p != NUL; p++) {
- if (*p == ' '
-#ifndef BACKSLASH_IN_FILENAME
- || *p == '\\'
-#endif
- || *p == '`') {
- // insert a backslash
- if (retval != NULL) {
- retval[len] = '\\';
- }
- len++;
- }
- if (retval != NULL) {
- retval[len] = *p;
- }
- len++;
- }
- }
-
- // second time: break here
- if (retval != NULL) {
- retval[len] = NUL;
- break;
- }
-
- // allocate memory
- retval = xmalloc((size_t)len + 1);
- }
-
- return retval;
-}
-
/// Expand the <sfile> string in "arg".
///
/// @return an allocated string, or NULL for any error.
char *expand_sfile(char *arg)
{
- char *errormsg;
- size_t len;
- char *result;
- char *newres;
- char *repl;
- size_t srclen;
- char *p;
-
- result = xstrdup(arg);
+ char *result = xstrdup(arg);
- for (p = result; *p;) {
+ for (char *p = result; *p;) {
if (STRNCMP(p, "<sfile>", 7) != 0) {
- ++p;
+ p++;
} else {
// replace "<sfile>" with the sourced file name, and do ":" stuff
- repl = (char *)eval_vars((char_u *)p, (char_u *)result, &srclen, NULL, &errormsg, NULL);
+ size_t srclen;
+ char *errormsg;
+ char *repl = (char *)eval_vars((char_u *)p, (char_u *)result, &srclen, NULL, &errormsg, NULL);
if (errormsg != NULL) {
if (*errormsg) {
emsg(errormsg);
@@ -8088,8 +7696,8 @@ char *expand_sfile(char *arg)
p += srclen;
continue;
}
- len = STRLEN(result) - srclen + STRLEN(repl) + 1;
- newres = xmalloc(len);
+ size_t len = STRLEN(result) - srclen + STRLEN(repl) + 1;
+ char *newres = xmalloc(len);
memmove(newres, result, (size_t)(p - result));
STRCPY(newres + (p - result), repl);
len = STRLEN(newres);
@@ -8107,9 +7715,7 @@ char *expand_sfile(char *arg)
/// ":rshada" and ":wshada".
static void ex_shada(exarg_T *eap)
{
- char *save_shada;
-
- save_shada = (char *)p_shada;
+ char *save_shada = (char *)p_shada;
if (*p_shada == NUL) {
p_shada = (char_u *)"'100";
}
@@ -8193,10 +7799,6 @@ static TriState filetype_indent = kNone;
/// indent off: load indoff.vim
static void ex_filetype(exarg_T *eap)
{
- char *arg = eap->arg;
- bool plugin = false;
- bool indent = false;
-
if (*eap->arg == NUL) {
// Print current status.
smsg("filetype detection:%s plugin:%s indent:%s",
@@ -8206,6 +7808,10 @@ static void ex_filetype(exarg_T *eap)
return;
}
+ char *arg = eap->arg;
+ bool plugin = false;
+ bool indent = false;
+
// Accept "plugin" and "indent" in any order.
for (;;) {
if (STRNCMP(arg, "plugin", 6) == 0) {
@@ -8342,7 +7948,7 @@ static void ex_foldopen(exarg_T *eap)
static void ex_folddo(exarg_T *eap)
{
// First set the marks for all lines closed/open.
- for (linenr_T lnum = eap->line1; lnum <= eap->line2; ++lnum) {
+ for (linenr_T lnum = eap->line1; lnum <= eap->line2; lnum++) {
if (hasFolding(lnum, NULL, NULL) == (eap->cmdidx == CMD_folddoclosed)) {
ml_setmarked(lnum);
}