2009-10-13 41 views

cevap

7

This answer size bölgeyi (eğer açı parantezleri kullanmak değiştirmek kez) sarılması için bir çözüm sunar.

Bu rutin kullanımı etiket için isteyecektir ve bu tür bir açma/kapama etiketiyle bölgedeki her satırını etiketlemelisiniz:

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

* Not: * Eğer için tag isteseydi her zaman li olun, sonra tag argümanını kaldırın, \nMTag for line: metnini aramayı interaktif olarak kaldırın ve "<li\>"'u beklediğiniz gibi eklemek için ekleme çağrılarını güncelleyin.

3

yasnippet Emacs için TextMate snippet'inizin sözdizimi özellikle iyi bir uygulamasıdır. Bununla birlikte, tüm Textmate snippet'lerini içe aktarabilirsiniz. Sonra takarsanız, yazdığım bu pasajı istediğini yapmalıdır:

(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: (Okay, bu sabitleme benim son girişimi bu TextMate versiyonu gibi tam olarak Hatta sonra karakterleri yok sayar.. bitiş etiketindeki boşluk)

Üzgünüm, sorunuzu yanlış yorumluyorum. Bu işlev bölgedeki her satırı düzenlemelidir.

(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

sgml-mode deratives için işareti bölge tipi M-x sgml-tag, tagify ve (mevcut HTML öğelerinin listesini almak için basın TAB) kullanmak ister etiket adını yazın. Bu yöntem, bir bölgedeki her satırı etiketlemenize izin vermiyorsa da, bir klavye makrosu kaydederek bu konuda çalışabilirsiniz.

0

Trey'in cevabındaki bu varyasyon ayrıca html'yi doğru bir şekilde girecektir.

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

İlgili konular