2009-10-13 8 views

Odpowiedz

7

This answer daje rozwiązanie dla zawijania region (po zmodyfikowaniu go użyć kątowników).

Ta rutyna poprosi o znaczniku do użytkowania i należy oznaczyć każdy wiersz w regionie z otwartym/blisko tagu tego typu:

(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))))) 

* Uwaga: * Jeśli chciał tag do zawsze należy li, a następnie usunąć argument znacznika, usunąć tekst z połączenia do interaktywnego i zaktualizować wywołania wstawiania, aby po prostu wstawić "<li\>", jak można się spodziewać.

3

yasnippet to szczególnie dobra implementacja składni Textmate dla Emacsa. Dzięki temu możesz zaimportować wszystkie fragmenty Textmate. Jeśli zainstalujesz go potem ten fragment, który napisałem powinien robić to, co chcesz:

(defun wrap-region-or-point-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 (point) 
         (point) 
         (concat "<${1:p}>" string "$0</${1:$(replace-regexp-in-string \" .*\" \"\" text)}>")))) 

(global-set-key (kbd "C-W") 'wrap-region-or-point-with-html-tag) 

EDIT: (w porządku to jest moja ostatnia próba ustalenia to jest dokładnie tak jak w wersji TextMate jest to nawet ignoruje znaki po.. miejsce w tagu końcowym)

Przepraszam, błędnie przeczytałem twoje pytanie. Ta funkcja powinna edytować każdą linię w regionie.

(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)))) 
5

Dla sgml-mode deratives, znak obszar do tagify typu M-x sgml-tag, a następnie wpisz nazwę znacznika chcesz używać (naciśnij TAB do listy dostępnych elementów HTML dostać). Mimo to ta metoda nie pozwala na oznaczanie tagami każdej linii w regionie, można obejść to, nagrywając makro klawiatury.

0

Ten wariant odpowiedzi Trey'a również będzie prawidłowo wcięty w html.

(defun wrap-lines-region-html (b e tag) "'tag' every line in the region with a tag" (interactive "r\nMTag for line: ") (setq p (point-marker)) (save-excursion (goto-char b) (while (< (point) p) (beginning-of-line) (indent-according-to-mode) (insert (format "<%s>" tag)) (end-of-line) (insert (format "</%s>" tag)) (forward-line 1))))

Powiązane problemy