Frage

Wie kann ich eine Linie 10 mal leicht in Emacs kopieren? Ich kann nicht eine Kopie-line-Verknüpfung oder Funktion finden. Ich kann mit C-aC-SPCC-eM-w mühsam der Linie zu kopieren, aber wie kann ich es dann mehr als einmal einfügen?

Irgendwelche Ideen, bevor ich meine eigenen Funktionen gehen und schreiben.

War es hilfreich?

Lösung

Kopieren :

Wenn Sie häufig mit Linien arbeiten, möchten Sie vielleicht Kopie (kill-ring-save) und schneiden (kill-region) arbeiten auf Linien machen, wenn keine Region ausgewählt ist:

(defadvice kill-ring-save (before slickcopy activate compile)
  "When called interactively with no active region, copy a single line instead."
  (interactive
   (if mark-active (list (region-beginning) (region-end))
     (list (line-beginning-position)
           (line-beginning-position 2)))))
(defadvice kill-region (before slickcut activate compile)
  "When called interactively with no active region, kill a single line instead."
  (interactive
   (if mark-active (list (region-beginning) (region-end))
     (list (line-beginning-position)
           (line-beginning-position 2)))))

Dann können Sie die Zeile mit nur M-w kopieren.

Einfügen :

Oft wird ein Präfix Argument führt nur eine mehrfach Aktion, so dass Sie C-u 10 C-y zu arbeiten erwarten würden, aber in diesem Fall C-y verwendet, um seine Argumentation zu verstehen, welches Element des Kill-Rings "Ruck" (Paste). Die einzige Lösung, die ich denken kann, ist, was kronoz sagt: ein Makro mit Cx (Cy Cx) aufzeichnen und dann lassen Sie das Argument von Cu statt kmacro-end-and-call-macro gehen (das ist Cu 9 Cx e oder auch nur C-9 Cx e oder M-9 Cx e).

Eine andere Möglichkeit, : Sie können auch nur in M-x viper-mode bleiben und verwenden yy10p:)

Andere Tipps

können Sie ein Tastatur-Makros für die Verwendung: -

C-C-C-x k (C-Y-C-j-C x) C-9 u C-x E

Erklärung: -

  • C-a: Zum Zeile beginnen
  • C-k: Kill Zeile
  • C-x (: Starten Sie die Aufnahme Tastatur Makro
  • C-y: Yank getötet Zeile
  • C-j: An die nächste Zeile
  • C-x): Stoppen Sie die Aufnahme Tastatur Makro
  • C-u 9: Wiederholung 9 mal
  • C-x e: Führen Sie Tastatur-Makros

Sie können dies wissen, aber für viele Befehle ein "C-u 10" Präfix wird den Trick. Leider für den C-y yank Befehl "C-u" neu definiert bedeutet "zurück, dass viele Elemente in dem Kill-Ring gehen, und riss das Element".

Ich dachte, Sie könnten in der Lage sein, das verwenden copy-zu-Register und Einfügen-Befehle registrieren mit der C-u Präfixbefehl, aber offenbar, dass entweder nicht funktioniert.

Auch C-x z, "wiederholen letzter Befehl" scheint zu C-u immun zu sein.

Ein anderer Gedanke wäre M- zu verwenden: eine Eval Prompt zu bekommen und ein bisschen elisp eingeben. Ich dachte, so etwas wie (DOTIMES '10 ‚yank) könnte es tun, aber es scheint nicht zu.

So ist es C-u wie unter Verwendung von auf einem Makro kann in der Tat die besten sieht man kurz tun kann, Ihre eigene kleine Funktion zu schreiben.

ich eine Stimme hatte, habe ich für kronoz Antwort stimmen würde.

Sie brauchen nicht beide C-x) und C-x e in diesem Beispiel.

Sie können nur das wiederholen Argument geben gerade zu C-x). Dies stoppt die Aufnahme und wiederholt das Makro, in einem Schritt. Oder Sie können überspringen C-x) und fahren Sie geradeaus bis C-x e, da C-x e wird die Aufnahme beenden, bevor die Wiederholungen zu tun.

Welche Art und Weise zu wählen, hängt davon ab, wie Sie Ihre Wiederholungszahl zu arbeiten. Für C-x) sagen Sie, wie viele Wiederholungen Sie insgesamt (also 10 in diesem Fall wollte). Für C-xe müssen Sie sagen, wie viele Wiederholungen sind links (d 9).


C-C-k C-k wird auch die Newline töten, so müssen Sie es sich später nicht zurückstellen. Es ist schneller als die Markierung verwendet, und nicht müssen Sie alle Variablen ändern.

Noch besser (es sei denn, Sie in einem Terminal sind), können Sie C-S-Rück * verwenden, um die gesamte Zeile zu töten, und zwar unabhängig davon, wo Sie sind drin.

[* Wenn Sie X Windows verwenden, stellen Sie sicher Umschalttaste gedrückt, um ( nicht alt) oder Sie können Ihre Sitzung beenden!]

Apropos Terminals, M-9 ist eine gute Alternative, wenn Sie feststellen können nicht Typ C-9.


In Emacs 22 und höher, die standardmäßig startet F3 ein Makro und F4 Ende / wiederholt einen Makro. Sie drücken Sie einfach F3 die Aufnahme zu starten, drücken Sie F4, wenn Sie fertig sind, und drücken Sie F4 wieder das Makro zu wiederholen. (F4 nimmt auch ein Argument.)


Putting all dies zusammen, erhalten 10 Exemplare der aktuellen Zeile:

  • C-S-Rück: kill diese Zeile
  • F3: Start Makro
  • C-y: zerren die Zeile
  • C-1 C-0 F4: machen, dass 10 yanks

Nicht ganz so kurz wie y y 10 p, aber ziemlich nah dran. :)

Hier ist eine Funktion, die ich von einem OS / 2-Port des Emacs nahm. (Ja, ich habe eine Zeit lang Emacs gewesen verwenden.)

;; Author: Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de>
(defun emx-dup-line (arg)
  "Duplicate current line.
Set mark to the beginning of the new line.
With argument, do this that many times."
  (interactive "*p")
  (setq last-command 'identity) ; Don't append to kill ring
  (let ((s (point)))
    (beginning-of-line)
    (let ((b (point)))
      (forward-line)
      (if (not (eq (preceding-char) ?\n)) (insert ?\n))
      (copy-region-as-kill b (point))
    (while (> arg 0)
      (yank)
      (setq arg (1- arg)))
    (goto-char s))))

Ich habe die Grenze bis F9 d:

(global-set-key [f9 ?d]    'emx-dup-line)

Dann würde ich C-u 10 F9 d verwenden, um eine Zeile 10-mal zu duplizieren.

Der einzige Weg, ich weiß, beliebige Befehle zu wiederholen, ist die „Wiederholung des durch das Argument“ -Funktion von Tastaturmakros zu verwenden.

C-C-Raum nach unten M-w-x C (C-Y-C-x) C-9 C-x E

  • C-a: Zum Zeile beginnen
  • C-space: Set Marke
  • nach unten: Zur folgenden Zeile beginnen
  • M-w: Copy Region
  • C-x (: Start Tastatur-Makros
  • C-y: Yank kopierte Zeile
  • C-x): End-Tastatur Makro
  • C-9 C-x e. Tastatur-Makros neunmal Ausführen

Das ist irgendwie schwach im Vergleich zu vim. Aber nur, weil Vim ist erstaunlich effizient bei dieser Art der Sache.

Wenn Sie wirklich für modal vi-ähnliche Interaktion sehnen, eine des vi-Emulation Modi, wie viper-Modus nutzen könnte. Überprüfen Sie im Abschnitt "Emulation" von Online-Emacs-Handbuch.

Sie wollen die Linie töten: C-C-k, und dann die C-y oder

?

Ich weiß nicht, von einer direkten Äquivalent (C-y 10-mal ist das Beste, was ich weiß), aber Sie können in Viper interessiert sein, die ein vi Emulationspaket für Emacs ist. Es ist Teil der Standard-Emacs-Distribution.

Basierend auf Baxissimo Antwort I defuned folgt aus:

(defun yank-n-times (arg)
  "yank prefix-arg number of times. Not safe in any way."
  (interactive "*p")
  (dotimes 'arg (yank)))

Stellen Sie, dass bis zu einem gewissen Schlüssel, nennen Sie es mit einem Präfix Argument, und los geht es.

Bearbeiten (auch den interaktiven Anruf oben geändert wird weniger lausig)

Oder hier ist eine Version, die Art von Ruck-Pop ersetzen:

(defun yank-n-times (&optional arg)
  "yank prefix-arg number of times. Call yank-pop if last command was yank."
  (interactive "*p")
  (if (or (string= last-command "yank")
      (string= last-command "yank-pop"))
      (yank-pop arg)
    (if (> arg 1)
    (dotimes 'arg (yank))
      (message "Previous arg was not a yank, and called without a prefix."))))

Die Nachricht ist ein bisschen eine Lüge, aber man sollte es nicht ohne Präfix von mehr als 1 nennt sowieso, also.

Nicht sicher, ob es eine gute Idee, aber ich ersetzt M-y mit dieser, ich werde sehen, wie das geht.

Sie können eine Zeile (oder einen Bereich) zehnmal mit weniger Tastenanschläge zerren:

  • markiert eine Zeile (oder Region)
  • zerren den ausgewählten Text 10mal:

C-w C-x ( C-y C-1 C-0 C-x )

Alternativ können Sie die F3 und F4 Funktionstasten auf der Tastatur Makro beginnen und enden:

C-w F3 C-y C-1 C-0 F4

Sie erhalten die Zeile mit C-k, machen Sie den nächsten Befehl zehnmal passieren mit C-u 10, dann fügen Sie die Zeile mit C-y. Ganz einfach.

Wenn Sie immer C-k wollen die ganze Linie zu tun, können Sie einstellen, kill-ganze-line bis t. Nicht mehr das Hantieren mit C-a oder C-e.

Es gibt eine Menge Sie mit ausgefallenen Kill Ringe tun können, Register und Makros, und ich ermutige Sie, sie zu lernen, aber eine Linie zehnmal zerren muss nicht hart oder fremd sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top