YasnippetDeutsch

Beschreibung

YASnippet (Yet Another Snippet, zu Deutsch etwa “Noch ein Schnipsel”) ist ein Vorlagensystem für Emacs. Es ermöglicht, ein getipptes Schlagwort automatisch durch eine Textvorlage zu ersetzen. Dies ist äußerst praktisch, wenn man häufig vorkommende Textfragmente im Quellcode einbauen muss. Die Schnipsel können durch Haltemarken erweitert werden, zu denen der Cursor nacheinander durch Drücken von Tab springt.

Die Vorlagen von YASnippet werden auch Schnipsel (engl.: snippet) genannt. In diesem Video wird die Installation und die Funktionsweise von YASnippet verdeutlicht (Avi, etwa 70MB).

Die vordefinierten Schnippsel decken folgende Sprachen ab: C, C++, C#, Perl, Python, Ruby, SQL, LaTeX, HTML, CSS und vieles mehr.

Zu finden ist YASnippet auf http://github.com/capitaomorte/yasnippet

Anleitung

Eine detaillierte Anleitung für YASnippet gibt es hier auf Englisch unter How to use YASnippet.

Zum Schreiben von eigenen Schnipseln gibt es dort auch eine sehr ausführliche Anleitung, auch auf Englisch.

Beispiel für LaTex

Übersetzt von http://tex.stackexchange.com/questions/51204/working-with-templates/51250#51250:

Die folgenden Schritte zeigen, wie man einen Schnipsel für LaTex erstellt:

  1. Öffne zuerst eine tex-Datei, um in den LaTeX-mode zu gelangen
  2. M-x yas/new-snippet
  3. Gib einen Namen für den neuen Schnipsel ein, beende mit Enter.
  4. Jetzt kann man das Schnipsel bearbeiten. Dazu löscht man zunächst alles durch C-x h und anschließend C-w.

Jetzt hat man einen leeren Schnipsel. Füge nun den folgenden Text in die Datei ein. Das Schnipsel sollte direkt nach \end{document} enden und nicht mit einer neuen Zeile:

    # -*- mode: snippet -*-
    # name: article
    # key: arttemp
    # --
    \documentclass{article}

    \usepackage[${1:english}]{babel}

    \title{${2:Title}}
    \author{${3:Author}}

    \begin{document}
    \maketitle

    $0

    \end{document}

Mit einem anschließenden C-c C-c wird der neue Schnipsel gesichert und steht zur Verwendung bereit. Man kann ihn jetzt verwenden, indem man in einer tex-Datei arttemp eingibt, und direkt danach Tab. Man beachte, wie mit $1, $2, $3 und $0 Sprungmarken definiert werden, von denen die ersten drei einen Standardwert besitzen. Dieser kann direkt überschrieben werden, wenn der Cursor an der entsprechenden Position steht. Hier sieht man, wie dieser Schnipsel verwendet wird: http://i.stack.imgur.com/jDBbw.gif

Noch mehr Vorlagen

Hier gibt es eine größere Auswahl an Vorlagen von Andy Stewart.

Hier gibt es einige Vorlagen für die JSP Standard Tag Bibliothek: http://github.com/eentzel/yasnippet-jstl/

Außerdem gibt es vier Pakete, um Vorlagen automatisch zu erstellen:

Auswahl einer Vorlage mit helm (anything.el)

Helm ist ein Modus für Emacs, der einem die tägliche Arbeit erleichtern soll. Die folgende Funktion verknüpft YASnippet und Helm.

  (defun shk-yas/helm-prompt (prompt choices &optional display-fn)
    "Use helm to select a snippet. Put this into `yas/prompt-functions.'"
    (interactive)
    (setq display-fn (or display-fn 'identity))
    (if (require 'helm-config)
        (let (tmpsource cands result rmap)
          (setq cands (mapcar (lambda (x) (funcall display-fn x)) choices))
          (setq rmap (mapcar (lambda (x) (cons (funcall display-fn x) x)) choices))
          (setq tmpsource
                (list
                 (cons 'name prompt)
                 (cons 'candidates cands)
                 '(action . (("Expand" . (lambda (selection) selection))))
                 ))
          (setq result (helm-other-buffer '(tmpsource) "*helm-select-yasnippet"))
          (if (null result)
              (signal 'quit "user quit!")
            (cdr (assoc result rmap))))
      nil))

Popup Menü für yas-choose-value

Übernommen von http://blog.iany.me/2012/03/use-popup-isearch-for-yasnippet-prompt/

Notiz: YASnippet aus git-Installation (Version 0.8) (yas-* anstatt von yas/* Functionen und Variablen-N)

;;; use popup menu for yas-choose-value
(require 'popup)

;; add some shotcuts in popup menu mode
(define-key popup-menu-keymap (kbd "M-n") 'popup-next)
(define-key popup-menu-keymap (kbd "TAB") 'popup-next)
(define-key popup-menu-keymap (kbd "<tab>") 'popup-next)
(define-key popup-menu-keymap (kbd "<backtab>") 'popup-previous)
(define-key popup-menu-keymap (kbd "M-p") 'popup-previous)

(defun yas-popup-isearch-prompt (prompt choices &optional display-fn)
  (when (featurep 'popup)
    (popup-menu*
     (mapcar
      (lambda (choice)
        (popup-make-item
         (or (and display-fn (funcall display-fn choice))
             choice)
         :value choice))
      choices)
     :prompt prompt
     ;; start isearch mode immediately
     :isearch t
     )))

(setq yas-prompt-functions '(yas-popup-isearch-prompt yas-ido-prompt yas-no-prompt))

ido-complete yasnippet keys

Man führe folgenden Quelltext aus:

;; Completing point by some yasnippet key
(defun yas-ido-expand ()
  "Lets you select (and expand) a yasnippet key"
  (interactive)
    (let ((original-point (point)))
      (while (and
              (not (= (point) (point-min) ))
              (not
               (string-match "[[:space:]\n]" (char-to-string (char-before)))))
        (backward-word 1))
    (let* ((init-word (point))
           (word (buffer-substring init-word original-point))
           (list (yas-active-keys)))
      (goto-char original-point)
      (let ((key (remove-if-not
                  (lambda (s) (string-match (concat "^" word) s)) list)))
        (if (= (length key) 1)
            (setq key (pop key))
          (setq key (ido-completing-read "key: " list nil nil word)))
        (delete-char (- init-word original-point))
        (insert key)
        (yas-expand)))))

und lege yas-ido-expand auf eine gewünschte Tastenkombination, z.B auf C-Tab:

    (define-key yas-minor-mode-map (kbd "<C-tab>")     'yas-ido-expand)

Viel Spaß ;)

Installationsanweisungen

Standardinstallation

Um das gewöhnliche yasnippet-*.tar.bz2-Archiv zu installieren, lädt man sich dieses von dieser Seite und entpackt es in ein gewünschtes Verzeichnis. Üblicherweise ist dies ~/.emacs.d/packages/. Danach fügt man folgendes in die ~/.emacs Konfigurationsdatei ein:

    (add-to-list 'load-path "~/.emacs.d/packages/yasnippet-x.y.z")
    (require 'yasnippet) ;; not yasnippet-bundle
    (yas/initialize)
    (yas/load-directory "~/.emacs.d/plugins/yasnippet-x.y.z/snippets")

x.y.z ist dabei mit der Versionsnummer des aktuellen Paketes zu ersetzen.

Mit yasnippet-bundle.el

Für ein schnelles Testen von YASnippet lädt man sich die einfachere “bundle” Version von der selben Seite herunter. Die Installationsanleitung findet man im eingangs erwähnten Video. Wenn man jedoch plant, sich eigene Vorlagen zu erstellen (was sehr wahrscheinlich ist), oder bestehende zu ändern, so sollte man die normale Installation durchführen.

  1. Herunterladen von yasnippet-bundle-*.el als tar gz Archiv. Dieses entpacken.
  2. Die Datei yasnippet-bundle.el, in den Ordner ~/.emacs.d/packages/ einfügen. Man erstelle diesen, wenn er noch nicht existiert.
  3. Öffnen der eben abgespeicherten Datei in Emacs. Ausführen des BefehlsAlt+x eval-buffer.

Das war’s schon. Wenn man jetzt eine Datei öffnet, erscheint “YASnippet” in der Menüleiste. Hier kann man komfortabel eine Vorlage auswählen und in den Text einfügen. Außerdem kann man nun eine vordefinierte Abkürzung im Text eingeben, und diese durch Drücken von Tab durch die entsprechende Vorlage ersetzen. Möchte man beim Starten von Emacs Yasnippet automatisch laden, so trägt man folgendes in seine ~/.emacs Datei ein:

(add-to-list 'load-path "~/.emacs.d/packages")
(require 'yasnippet-bundle)

Unter Gentoo

Derzeit (Stand: Oktober 2013) befindet sich YASnippet noch im Teszweig von Gentoo. Um es trotzdem zu installieren führt man folgendes als Administrator aus:

  1. su
  2. echo "app-emacs/yasnippet" >> /etc/portage/package.keywords
  3. emerge yasnippet

Unter /usr/share/emacs/etc/yasnippet/snippets sind dann die vordefinierten Schnipsel gespeichert. Um eigene Schnipsel anzulegen, erstellt man sich dafür einen eigenen Ordner: mkdir ~/.emacs.d/mysnippets

In die Datei ~/.emacs trägt man dann folgendes ein:

(yas/initialize)
(yas/load-directory "/usr/share/emacs/etc/yasnippet/snippets")
(setq yas/root-directory "~/.emacs.d/mysnippets"); Ordner zum Abspeichern von eigenen Schnipseln
(yas/load-directory yas/root-directory); Laden der eigenen Schnipsel

Installation mit package-install in Emacs

In einem modernen Emacs ist der Befehl M-x list-packages der empfohlene Weg um Pakete aufzulisten und zu installieren. MELPA enthält einen sehr aktuellen Schnappschuss von YASnippet. Siehe auch http://melpa.milkbox.net/#installing (Englisch).

Diskussion


CategoryTemplates