summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2014-12-13 03:17:11 +0100
committerBram Moolenaar <Bram@vim.org>2014-12-13 03:17:11 +0100
commitcc2b9d5dc08cefa0342a25ece71b21d4b4b32e00 (patch)
tree6034465936f933c63ccd81d791e8425dd1142843
parentf1d6ccf2f9c8a8ae2c0ec4577946397c103ead2b (diff)
downloadvim-git-cc2b9d5dc08cefa0342a25ece71b21d4b4b32e00.tar.gz
updated for version 7.4.543v7.4.543
Problem: Since patch 7.4.232 "1,3s/\n//" joins two lines instead of three. (Eliseo Martínez) Issue 287 Solution: Correct the line count. (Christian Brabandt) Also set the last used search pattern.
-rw-r--r--src/ex_cmds.c27
-rw-r--r--src/proto/search.pro1
-rw-r--r--src/search.c3
-rw-r--r--src/version.c2
4 files changed, 27 insertions, 6 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 86dab4797..8195eb71b 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -4408,6 +4408,8 @@ do_sub(eap)
&& (*cmd == NUL || (cmd[1] == NUL && (*cmd == 'g' || *cmd == 'l'
|| *cmd == 'p' || *cmd == '#'))))
{
+ linenr_T joined_lines_count;
+
curwin->w_cursor.lnum = eap->line1;
if (*cmd == 'l')
eap->flags = EXFLAG_LIST;
@@ -4416,10 +4418,27 @@ do_sub(eap)
else if (*cmd == 'p')
eap->flags = EXFLAG_PRINT;
- (void)do_join(eap->line2 - eap->line1 + 1, FALSE, TRUE, FALSE, TRUE);
- sub_nlines = sub_nsubs = eap->line2 - eap->line1 + 1;
- (void)do_sub_msg(FALSE);
- ex_may_print(eap);
+ /* The number of lines joined is the number of lines in the range plus
+ * one. One less when the last line is included. */
+ joined_lines_count = eap->line2 - eap->line1 + 1;
+ if (eap->line2 < curbuf->b_ml.ml_line_count)
+ ++joined_lines_count;
+ if (joined_lines_count > 1)
+ {
+ (void)do_join(joined_lines_count, FALSE, TRUE, FALSE, TRUE);
+ sub_nsubs = joined_lines_count - 1;
+ sub_nlines = 1;
+ (void)do_sub_msg(FALSE);
+ ex_may_print(eap);
+ }
+
+ if (!cmdmod.keeppatterns)
+ save_re_pat(RE_SUBST, pat, p_magic);
+#ifdef FEAT_CMDHIST
+ /* put pattern in history */
+ add_to_history(HIST_SEARCH, pat, TRUE, NUL);
+#endif
+
return;
}
diff --git a/src/proto/search.pro b/src/proto/search.pro
index f94fb69ab..07f608789 100644
--- a/src/proto/search.pro
+++ b/src/proto/search.pro
@@ -2,6 +2,7 @@
int search_regcomp __ARGS((char_u *pat, int pat_save, int pat_use, int options, regmmatch_T *regmatch));
char_u *get_search_pat __ARGS((void));
char_u *reverse_text __ARGS((char_u *s));
+void save_re_pat __ARGS((int idx, char_u *pat, int magic));
void save_search_patterns __ARGS((void));
void restore_search_patterns __ARGS((void));
void free_search_patterns __ARGS((void));
diff --git a/src/search.c b/src/search.c
index 047a73397..b64b8f6ce 100644
--- a/src/search.c
+++ b/src/search.c
@@ -12,7 +12,6 @@
#include "vim.h"
-static void save_re_pat __ARGS((int idx, char_u *pat, int magic));
#ifdef FEAT_EVAL
static void set_vv_searchforward __ARGS((void));
static int first_submatch __ARGS((regmmatch_T *rp));
@@ -272,7 +271,7 @@ reverse_text(s)
}
#endif
- static void
+ void
save_re_pat(idx, pat, magic)
int idx;
char_u *pat;
diff --git a/src/version.c b/src/version.c
index 3f439802c..fe317d053 100644
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 543,
+/**/
542,
/**/
541,