On Di, 25 Mai 2021, Andre Tann wrote:

> Hi all,
> 
> I repeatedly have the following situation, and wonder how it can be handled
> better than I do it now. These lines must be merged
> 
> /path;text
> /path;text
> /path;text
> 
> with these:
> 
> /subdir
> /longsubdir
> /longlongsubdir
> 
> Result:
> 
> /path/subdir;text
> /path/longsubdir;text
> /path/longlongsubdir;text
> 
> 
> What I do now is to mark and yank the second block, go to the first
> semicolon, and press P. Result is:
> 
> /path/subdir        ;text
> /path/longsubdir    ;text
> /path/longlongsubdir;text
> 
> But this is obviously not what I want. How can I avoid the extra blanks?

I have this annoyance a few times as well. I would go with the already 
mentioned `:s` approach to remove the whitespace, afterwards. However, I 
was wondering, if we not could do any better any perhaps have something 
like a `zp` command, that does not add any trailing spaces. 

diff --git a/src/normal.c b/src/normal.c
index 92135c18c..25f8233bb 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -2973,6 +2973,10 @@ dozet:
                }
                break;
 
+               // "zp", "zP" in block mode put without addind trailing spaces
+    case 'P':
+    case 'p':  nv_put(cap);
+              break;
 #ifdef FEAT_FOLDING
                // "zF": create fold command
                // "zf": create fold operator
@@ -7407,11 +7411,13 @@ nv_put_opt(cmdarg_T *cap, int fix_indent)
        }
        else
            dir = (cap->cmdchar == 'P'
-                                || (cap->cmdchar == 'g' && cap->nchar == 'P'))
-                                                        ? BACKWARD : FORWARD;
+                   || ((cap->cmdchar == 'g' || cap->cmdchar == 'z')
+                       && cap->nchar == 'P')) ? BACKWARD : FORWARD;
        prep_redo_cmd(cap);
        if (cap->cmdchar == 'g')
            flags |= PUT_CURSEND;
+       else if (cap->cmdchar == 'z')
+           flags |= PUT_BLOCK_INNER;
 
        if (VIsual_active)
        {
diff --git a/src/register.c b/src/register.c
index 6ba4e896d..afa83cba8 100644
--- a/src/register.c
+++ b/src/register.c
@@ -1497,6 +1497,7 @@ copy_yank_reg(yankreg_T *reg)
  * "flags": PUT_FIXINDENT      make indent look nice
  *         PUT_CURSEND         leave cursor after end of new text
  *         PUT_LINE            force linewise put (":put")
+ *         PUT_BLOCK_INNER     in block mode, do not add trailing spaces
  */
     void
 do_put(
@@ -1845,12 +1846,17 @@ do_put(
 
            yanklen = (int)STRLEN(y_array[i]);
 
-           // calculate number of spaces required to fill right side of block
-           spaces = y_width + 1;
-           for (j = 0; j < yanklen; j++)
-               spaces -= lbr_chartabsize(NULL, &y_array[i][j], 0);
-           if (spaces < 0)
+           if (flags & PUT_BLOCK_INNER)
                spaces = 0;
+           else
+           {
+               // calculate number of spaces required to fill right side of 
block
+               spaces = y_width + 1;
+               for (j = 0; j < yanklen; j++)
+                   spaces -= lbr_chartabsize(NULL, &y_array[i][j], 0);
+               if (spaces < 0)
+                   spaces = 0;
+           }
 
            // insert the new text
            totlen = count * (yanklen + spaces) + bd.startspaces + bd.endspaces;
diff --git a/src/vim.h b/src/vim.h
index 368cf3256..ef86312da 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -1068,6 +1068,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t 
*envstring);
 #define PUT_LINE       8       // put register as lines
 #define PUT_LINE_SPLIT 16      // split line for linewise register
 #define PUT_LINE_FORWARD 32    // put linewise register below Visual sel.
+#define PUT_BLOCK_INNER 64      // in block mode, do not add trailing spaces
 
 // flags for set_indent()
 #define SIN_CHANGED    1       // call changed_bytes() when line changed

Mit freundlichen Grüßen
Christian
-- 
Werfen Sie leere Konservendosen nicht weg! Bewahren Sie sie auf! Nach
einigen Jahren haben Sie dann eine schöne Sammlung alter Konservendosen.

-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_use+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_use/20210527075859.GB1800871%40256bit.org.

Reply via email to