11
votes

Envelopper la sélection dans la balise Open / Fermer comme Textmate?

dans textmate , on peut utiliser CTRL-SHIFT-W pour envelopper le texte dans une étiquette ouverte / fermeture et Ctrl-Shift-CMD-W pour envelopper chaque ligne dans une région dans des balises ouvertes / fermées. Comment puis-je mettre en œuvre cette même fonctionnalité dans EMACS à l'aide de EMACS LISP?

emacs
textmate
vi

becomes

<li>emacs</li>
<li>textmate</li>
<li>vi</li>


0 commentaires

4 Réponses :


7
votes

Cette réponse vous donne une solution pour envelopper le région (une fois que vous l'avez modifiée pour utiliser des crochets d'angle).

Cette routine vous invitera à utiliser la balise à utiliser et étiquetez toutes les lignes de la région avec une étiquette ouverte / proche de ce type: P>

(defun my-tag-lines (b e tag)
  "'tag' every line in the region with a tag"
  (interactive "r\nMTag for line: ")
  (save-restriction
    (narrow-to-region b e)
    (save-excursion
      (goto-char (point-min))
      (while (< (point) (point-max))
        (beginning-of-line)
        (insert (format "<%s>" tag))
        (end-of-line)
        (insert (format "</%s>" tag))
        (forward-line 1)))))


0 commentaires

3
votes

Yasnippet est une mise en œuvre particulièrement bonne de la syntaxe d'extrait de Textmate pour EMACS. Avec cela, vous pouvez importer tous les extraits de Textmate. Si vous l'installez, cet extrait que j'ai écrit devrait faire ce que vous voulez:

(defun wrap-lines-in-region-with-html-tag (start end)
  "Wraps the selected text or the point with a tag"
  (interactive "r")
  (let (string)
    (if mark-active 
        (list (setq string (buffer-substring start end))
              (delete-region start end)))
    (yas/expand-snippet
     (replace-regexp-in-string "\\(<$1>\\).*\\'" "<${1:p}>"
      (mapconcat
       (lambda (line) (format "%s" line))
       (mapcar
        (lambda (match) (concat "<$1>" match "</${1:$(replace-regexp-in-string \" .*\" \"\" text)}>"))
        (split-string string "[\r\n]")) "\n") t nil 1) (point) (point))))


0 commentaires

5
votes

pour SGML-MODE DERICATIFS, Mark Région to Tagify, Type MX SGML-TAG et tapez le nom de la balise que vous souhaitez utiliser (appuyez sur TAB < / Code> Pour obtenir la liste des éléments HTML disponibles). Allez, cette méthode ne vous permet pas de tagiiser chaque ligne dans une région, vous pouvez contourner cela en enregistrant une macro de clavier.


0 commentaires

0
votes

Cette variante sur la réponse de Trey présentera également le HTML correctement.

(dégonfler des lignes d'enveloppe-région-html (bal tag) "'Tag' toutes les lignes de la région avec une étiquette" (interactif "r \ nmtag pour la ligne:") (setq p (point de point)) (sauvegarde-excursion (goto-char b) (tandis que (<(point) p) (début de ligne) (indent-en-mode) (Insérer (format "<% s>" tag)) (fin de ligne) (Insérer (format "" tag)) (ligne avant 1))))


0 commentaires