mirror of
https://github.com/vim/vim.git
synced 2025-11-14 23:04:02 -05:00
patch 9.1.1473: inconsistent range arg for :diffget/diffput
Problem: inconsistent range arg for :diffget/diffput
Solution: fix the range specification, place the cursor for :diffput and
:diffget consistently on the last line (Yee Cheng Chin)
Previously, `:<range>diffget` only allowed using 1 or above in the range
value, making it impossible to use the command for a diff block at the
beginning of the file. Fix the range specification so the user can now
use 0 to specify the space before the first line. This allows
`:0,$+1diffget` to work to retrieve all the changes from the other file
instead of missing the first diff block. Also do this for `:diffput`.
Also, make `:diffput` work more similar to `:diffget`. Make it so that
if the cursor is on the last line and a new line is inserted in the
other file, doing `:diffput` will select that diff block below the line,
just like `:diffget` would.
Also clean up the logic a little bit for edge cases and for handling
line matched diff blocks better.
closes: #17579
Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
476b65ebac
commit
d75ab0cbf5
11
src/diff.c
11
src/diff.c
@@ -3874,10 +3874,13 @@ ex_diffgetput(exarg_T *eap)
|
||||
{
|
||||
// Make it possible that ":diffget" on the last line gets line below
|
||||
// the cursor line when there is no difference above the cursor.
|
||||
if (eap->cmdidx == CMD_diffget
|
||||
&& eap->line1 == curbuf->b_ml.ml_line_count
|
||||
&& diff_check(curwin, eap->line1) == 0
|
||||
&& (eap->line1 == 1 || diff_check(curwin, eap->line1 - 1) == 0))
|
||||
int linestatus = 0;
|
||||
if (eap->line1 == curbuf->b_ml.ml_line_count
|
||||
&& (diff_check_with_linestatus(curwin, eap->line1, &linestatus) == 0
|
||||
&& linestatus == 0)
|
||||
&& (eap->line1 == 1 ||
|
||||
(diff_check_with_linestatus(curwin, eap->line1 - 1, &linestatus) >= 0
|
||||
&& linestatus == 0)))
|
||||
++eap->line2;
|
||||
else if (eap->line1 > 0)
|
||||
--eap->line1;
|
||||
|
||||
Reference in New Issue
Block a user