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>
4 Réponses :
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)))))
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))))
pour SGML-MODE CODE> DERICATIFS, Mark Région to Tagify, Type
MX SGML-TAG CODE> 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. P>
Cette variante sur la réponse de Trey présentera également le HTML correctement. P>
(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 "% s>" tag))
(ligne avant 1))))
code> p>