Wie füge ich Text nach Punkt ein?


7

Ich möchte (programmgesteuert) Text direkt nach dem Punkt einfügen (ohne ihn zu verschieben). Ich habe mir das ausgedacht:

(save-excursion (insert "my text"))

Es scheint zu funktionieren. Ist es eine gute Möglichkeit, das zu tun, was ich will? Gibt es beispielsweise Situationen, in denen dies brechen könnte? (Anders als diejenigen, bei denen insertsowieso kaputt gehen würde, wie beispielsweise schreibgeschützte Puffer.) Unterscheidet es sich von dem, was erfahrene Elisp-Hacker tun würden?


5
Ja. Nicht viel mehr zu sagen.
Shosti

Vielen Dank; Ich war ein bisschen besorgt über zB einige (seltsame?) Situationen, in denen es nicht funktionieren würde usw.
mbork

3
Sie könnten die Frage in diesem Fall umformulieren. Aber in 99% der Fälle ist save-excursion+ insertder richtige Weg.
Shosti

Ok ich werde es machen. Übrigens: Was ist die 1%?
mbork

1
Seltsame Modi mit schreibgeschützten Überlagerungen und dergleichen. Nichts, worüber man sich wirklich Sorgen machen müsste.
Shosti

Antworten:


6

Ein sehr häufiges Beispiel für dieses Verhalten ist electric-pair-modedie Emacs-Standardbibliothek. Wenn Sie diesen Modus noch nie benutzt haben, dann (zitiert aus dem Handbuch ):

Wenn Sie ein Öffnungsbegrenzer einfügen, wird automatisch auch das passende schließende Trennzeichen eingefügt, wobei ein Punkt zwischen den beiden verbleibt.

Sie können den Code überprüfen, um electric-pair-post-self-insert-functionzu sehen, wie das Einfügen ausgeführt wird. Spoiler:

(defun electric-pair-post-self-insert-function ()
  [lots of cond logic to decide if it's time to insert a matching closer]
      (save-excursion (insert closer)))))))

6

Ja, das ist die idiomatischste Art, Text nach einem mir bekannten Punkt einzufügen. save-excursionist sehr widerstandsfähig gegenüber Änderungen im Puffer, daher ist dies die bevorzugte Methode zur destruktiven Bearbeitung. Der einzige Ort, an dem Sie wahrscheinlich auf Probleme stoßen, ist der, an dem Sie Probleme mit sich insertselbst haben würden, z. B. Puffer, in denen Text schreibgeschützt ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.