Magit: Kopieren Sie Text aus dem Stage-Bereich ohne das Zeichen „+“.

7

Windows 10, Emacs 25.1, Magit

Ich wähle Text (Umschalt + Pfeil nach unten) aus dem Abschnitt Nicht bereitgestellte Änderungen aus . Hier ist ein Screenshot:

Text auswählen

Dann füge ich in einen anderen Puffer ein ( *scratch*).

Das ist das Ergebnis:

Result_paste

Ist es möglich, die führenden +s zu entfernen, wenn Linien von Diff-Hunks getötet werden?

Alex
quelle

Antworten:

8

Magit unterstützt das derzeit nicht, sollte aber machbar sein. Ich werde das wahrscheinlich bald tun. Ich könnte diese Funktion manchmal auch verwenden.

Verwenden Sie in der Zwischenzeit ein Makro, um das +s nach dem Ziehen zu ersetzen : <f3> C-d C-n <f4>....

Tarsius
quelle
1
Nach dem Ziehen mache ich als nächstes: 1) Setzen Sie den Cursor über das erste "+", 2) Starten Sie den Befehl <C-return>( cua-set-rectangle-mark), 3) Wählen Sie nur "+" (eine Spalte) und drücken Sie Entf, um alle Symbole "+" zu löschen
Alex
@Alex Könnten Sie nicht cua-rectangle-mark-modeaus dem Magit-Puffer verwenden?
0x5453
Ich benutze cua-rectangle-mark-modein einem anderen Puffer (nicht magit) nach dem Ziehen von Text.
Alex
Ohne CUA nach dem Ziehen : C-a C-f C-x C-x C-x r d.
Alan Third
4

Bis Magit so etwas unterstützt, ist das Verhalten mit einem benutzerdefinierten Befehl leicht zu ermitteln. Ich habe etwas Ähnliches wie den folgenden Befehl in meiner Konfiguration. Wenn Sie es mit einem Präfixargument aufrufen, werden die führenden Diff-Marker entfernt.

(defun km/magit-copy-region-hunk (&optional no-column)
  (interactive "P")
  (when (magit-section-internal-region-p)
    (magit-section-when hunk
      (deactivate-mark)
      (let ((text (buffer-substring-no-properties
                   (region-beginning) (region-end))))
        (kill-new (if no-column
                      (replace-regexp-in-string "^[ \\+\\-]" "" text)
                    text))))))

Bearbeiten : Mit der Entwicklungsversion von Magit (Version 2.91.0) können Sie die Diff-Markierungen entfernen, indem Sie einen Bereich eines Hunks markieren und magit-copy-section-valuemit einem Präfixargument aufrufen .

Kyle Meyer
quelle
Keine Docstrings in Ihrer Konfiguration?! Zum Schämen. :) Funktioniert aber gut +1.
Basil
1

Wenn Sie von Kyle Meyers Antwort abweichen und das Diff kopieren möchten, ohne die Präfix-Taste drücken zu müssen, können Sie Folgendes verwenden:

(defun copy-diff-region ()
  "Copy diff region without + or - markers."
  (interactive)
  (deactivate-mark)
  (let ((text (buffer-substring-no-properties
               (region-beginning) (region-end))))
    (kill-new (replace-regexp-in-string "^[\\+\\-]" "" text))))
nandkeypull
quelle