vim-patch:8.0.0523: dv} deletes part of a multi-byte character.

Problem:    dv} deletes part of a multi-byte character. (Urtica Dioica)
Solution:   Include the whole character.
bf3d58073f
This commit is contained in:
Jan Edmund Lazo 2018-06-07 19:33:42 -04:00
parent db68d1d638
commit 34c0688790
2 changed files with 33 additions and 15 deletions

View File

@ -130,7 +130,7 @@ typedef struct SearchedFile {
* *
* returns FAIL if failed, OK otherwise. * returns FAIL if failed, OK otherwise.
*/ */
int int
search_regcomp ( search_regcomp (
char_u *pat, char_u *pat,
int pat_save, int pat_save,
@ -2121,7 +2121,7 @@ static int check_linecomment(char_u *line)
* Show the match only if it is visible on the screen. * Show the match only if it is visible on the screen.
* If there isn't a match, then beep. * If there isn't a match, then beep.
*/ */
void void
showmatch ( showmatch (
int c /* char to show match for */ int c /* char to show match for */
) )
@ -2377,8 +2377,14 @@ findpar (
++curr; ++curr;
curwin->w_cursor.lnum = curr; curwin->w_cursor.lnum = curr;
if (curr == curbuf->b_ml.ml_line_count && what != '}') { if (curr == curbuf->b_ml.ml_line_count && what != '}') {
if ((curwin->w_cursor.col = (colnr_T)STRLEN(ml_get(curr))) != 0) { char_u *line = ml_get(curr);
// Put the cursor on the last character in the last line and make the
// motion inclusive.
if ((curwin->w_cursor.col = (colnr_T)STRLEN(line)) != 0) {
--curwin->w_cursor.col; --curwin->w_cursor.col;
curwin->w_cursor.col -=
(*mb_head_off)(line, line + curwin->w_cursor.col);
*pincl = true; *pincl = true;
} }
} else } else
@ -2483,7 +2489,7 @@ static int cls(void)
* Returns FAIL if the cursor was already at the end of the file. * Returns FAIL if the cursor was already at the end of the file.
* If eol is TRUE, last word stops at end of line (for operators). * If eol is TRUE, last word stops at end of line (for operators).
*/ */
int int
fwd_word ( fwd_word (
long count, long count,
int bigword, /* "W", "E" or "B" */ int bigword, /* "W", "E" or "B" */
@ -2666,7 +2672,7 @@ finished:
* *
* Returns FAIL if start of the file was reached. * Returns FAIL if start of the file was reached.
*/ */
int int
bckend_word ( bckend_word (
long count, long count,
int bigword, /* TRUE for "B" */ int bigword, /* TRUE for "B" */
@ -2756,7 +2762,7 @@ static void find_first_blank(pos_T *posp)
/* /*
* Skip count/2 sentences and count/2 separating white spaces. * Skip count/2 sentences and count/2 separating white spaces.
*/ */
static void static void
findsent_forward ( findsent_forward (
long count, long count,
int at_start_sent /* cursor is at start of sentence */ int at_start_sent /* cursor is at start of sentence */
@ -2776,7 +2782,7 @@ findsent_forward (
* Find word under cursor, cursor at end. * Find word under cursor, cursor at end.
* Used while an operator is pending, and in Visual mode. * Used while an operator is pending, and in Visual mode.
*/ */
int int
current_word ( current_word (
oparg_T *oap, oparg_T *oap,
long count, long count,
@ -3084,7 +3090,7 @@ extend:
* Find block under the cursor, cursor at end. * Find block under the cursor, cursor at end.
* "what" and "other" are two matching parenthesis/brace/etc. * "what" and "other" are two matching parenthesis/brace/etc.
*/ */
int int
current_block ( current_block (
oparg_T *oap, oparg_T *oap,
long count, long count,
@ -3282,7 +3288,7 @@ static int in_html_tag(int end_tag)
/* /*
* Find tag block under the cursor, cursor at end. * Find tag block under the cursor, cursor at end.
*/ */
int int
current_tagblock ( current_tagblock (
oparg_T *oap, oparg_T *oap,
long count_arg, long count_arg,
@ -3465,7 +3471,7 @@ theend:
return retval; return retval;
} }
int int
current_par ( current_par (
oparg_T *oap, oparg_T *oap,
long count, long count,
@ -3632,7 +3638,7 @@ extend:
* as a quote. * as a quote.
* Returns column number of "quotechar" or -1 when not found. * Returns column number of "quotechar" or -1 when not found.
*/ */
static int static int
find_next_quote ( find_next_quote (
char_u *line, char_u *line,
int col, int col,
@ -3664,7 +3670,7 @@ find_next_quote (
* as a quote. * as a quote.
* Return the found column or zero. * Return the found column or zero.
*/ */
static int static int
find_prev_quote ( find_prev_quote (
char_u *line, char_u *line,
int col_start, int col_start,
@ -3694,7 +3700,7 @@ find_prev_quote (
* Find quote under the cursor, cursor at end. * Find quote under the cursor, cursor at end.
* Returns TRUE if found, else FALSE. * Returns TRUE if found, else FALSE.
*/ */
int int
current_quote ( current_quote (
oparg_T *oap, oparg_T *oap,
long count, long count,
@ -3920,7 +3926,7 @@ current_quote (
* Find next search match under cursor, cursor at end. * Find next search match under cursor, cursor at end.
* Used while an operator is pending, and in Visual mode. * Used while an operator is pending, and in Visual mode.
*/ */
int int
current_search ( current_search (
long count, long count,
int forward /* move forward or backwards */ int forward /* move forward or backwards */
@ -4116,7 +4122,7 @@ int linewhite(linenr_T lnum)
* Find identifiers or defines in included files. * Find identifiers or defines in included files.
* If p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase. * If p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase.
*/ */
void void
find_pattern_in_path ( find_pattern_in_path (
char_u *ptr, /* pointer to search pattern */ char_u *ptr, /* pointer to search pattern */
int dir, /* direction of expansion */ int dir, /* direction of expansion */

View File

@ -2387,3 +2387,15 @@ func Test_changelist()
%bwipe! %bwipe!
let &ul = save_ul let &ul = save_ul
endfunc endfunc
func Test_delete_until_paragraph()
if !has('multi_byte')
return
endif
new
normal grádv}
call assert_equal('á', getline(1))
normal grád}
call assert_equal('', getline(1))
bwipe!
endfunc