diff options
Diffstat (limited to 'src/nvim/edit.c')
| -rw-r--r-- | src/nvim/edit.c | 10 | 
1 files changed, 7 insertions, 3 deletions
| diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 8dc2844d8e..6ca1fd24d7 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -5017,8 +5017,9 @@ insertchar (    int textwidth;    char_u      *p;    int fo_ins_blank; +  int force_format = flags & INSCHAR_FORMAT; -  textwidth = comp_textwidth(flags & INSCHAR_FORMAT); +  textwidth = comp_textwidth(force_format);    fo_ins_blank = has_format_option(FO_INS_BLANK);    /* @@ -5037,7 +5038,7 @@ insertchar (     *	      before 'textwidth'     */    if (textwidth > 0 -      && ((flags & INSCHAR_FORMAT) +      && (force_format            || (!ascii_iswhite(c)                && !((State & REPLACE_FLAG)                     && !(State & VREPLACE_FLAG) @@ -5051,8 +5052,11 @@ insertchar (      /* Format with 'formatexpr' when it's set.  Use internal formatting       * when 'formatexpr' isn't set or it returns non-zero. */      int do_internal = TRUE; +    colnr_T virtcol = get_nolist_virtcol() +                    + char2cells(c != NUL ? c : gchar_cursor()); -    if (*curbuf->b_p_fex != NUL && (flags & INSCHAR_NO_FEX) == 0) { +    if (*curbuf->b_p_fex != NUL && (flags & INSCHAR_NO_FEX) == 0 +        && (force_format || virtcol > (colnr_T)textwidth)) {        do_internal = (fex_format(curwin->w_cursor.lnum, 1L, c) != 0);        /* It may be required to save for undo again, e.g. when setline()         * was called. */ | 
