diff options
author | Bram Moolenaar <Bram@vim.org> | 2015-03-08 14:48:49 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2015-03-08 14:48:49 +0100 |
commit | 0f8dd840fc6a614450db60ebe405d6201a2ecc3e (patch) | |
tree | 8b102bc32309e6ac6deda12cf6c0f827323debbb /src/edit.c | |
parent | ab11a5914b04228249d429cbc2dd6c56ae6c8232 (diff) | |
download | vim-git-0f8dd840fc6a614450db60ebe405d6201a2ecc3e.tar.gz |
updated for version 7.4.658v7.4.658
Problem: 'formatexpr' is evaluated too often.
Solution: Only invoke it when beyond the 'textwidth' column, as it is
documented. (James McCoy)
Diffstat (limited to 'src/edit.c')
-rw-r--r-- | src/edit.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/edit.c b/src/edit.c index e8563cb26..48e4b131c 100644 --- a/src/edit.c +++ b/src/edit.c @@ -5879,8 +5879,9 @@ insertchar(c, flags, second_indent) char_u *p; #endif 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); /* @@ -5899,7 +5900,7 @@ insertchar(c, flags, second_indent) * before 'textwidth' */ if (textwidth > 0 - && ((flags & INSCHAR_FORMAT) + && (force_format || (!vim_iswhite(c) && !((State & REPLACE_FLAG) #ifdef FEAT_VREPLACE @@ -5916,9 +5917,12 @@ insertchar(c, flags, second_indent) /* Format with 'formatexpr' when it's set. Use internal formatting * when 'formatexpr' isn't set or it returns non-zero. */ #if defined(FEAT_EVAL) - int do_internal = TRUE; + 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() |