2010-05-19 4 views
16

GNU Emacs를 사용하는 템플릿 시스템을 가질 수있는 가능한 모든 해결책이 주어지면 오늘날 사람들은 무엇을 사용하고 있습니까? 나는 아직도 스켈레톤 모드를 사용하고있다. 그러나 내가 여기 저기에 그것을 읽었을 때, 우리는 정말로 그렇게 할 수 없을 것이다.GNU Emacs : skeleton-mode, 아직도 사용 되나요?

무엇을 사용하고 있으며 그 이유는 무엇입니까? (아마도 더 인기있는 도구로 전환 할 수 있습니다).

(define-skeleton mwe:cl-defpackage-skeleton 
    "Inserts a Common Lisp DEFPACKAGE skeleton." 
    (skeleton-read "Package: " (if v1 
           (file-name-sans-extension 
            (file-name-nondirectory 
            (buffer-file-name))))) 
    (if (setq v1 (bobp)) ";;; -*- Mode:Lisp; Syntax:ANSI-Common-Lisp;") 
    & (if buffer-file-coding-system 
     (concat " Coding:" 
       (symbol-name 
       (coding-system-get buffer-file-coding-system 
            'mime-charset)))) 
    & " -*-" 
    & \n 
    & \n "(defpackage #:" str 
    \n "(:nicknames" ("Nickname: " " #:" str) & ")" | '(kill-whole-line -1) 
    \n "(:use #:CL" ((slime-read-package-name "USEd package: ") " #:" str) ")" 
    ")" \n 
    \n 
    (if v1 "(in-package #:") & str & ")" & \n & 
    \n 
    _) 

이 조각 주어진 예를 들어

(학점 : http://www.foldr.org/~michaelw/log/programming/lisp/defpackage-skeleton) 동일 할 수있는 (현대) 템플릿 모드

(방법을))?

건배

답변

5

나는 yasnippet을 사용합니다. 내 이맥스에서

나는이 있습니다

(yas/minor-mode-on) 
:

나는 (등 내 C 모드 후크, 등) 미리보기를 사용하려면 각 모드에 대한 내 후크에서
(require 'yasnippet-bundle) 

,이이 내가 사용

"정적"조각은 여기, 디렉토리 구조에서 내가 사용을 사용할 수 있습니다

http://cheeso.members.winisp.net/srcview.aspx?dir=emacs&file=snippets.zip

위에서 언급 한 번들 .el 파일을 생성해야합니다. 단편이 변경되면 한 번. 다음과 같이하십시오.

(require 'yasnippet) 
(yas/compile-bundle 
; the starting point 
"c:/your/path/yasnippet.el" 

; the bundle file to generate 
"c:/your/path/yasnippet-bundle.el" 

; the snippet dir from which to generate the bundle 
"c:/your/path/snippets") 

그게 전부입니다!

그렇다면 C# 파일에서 for<TAB>을 입력하면 for 루프가있는 템플릿이 생깁니다. 등등.


동적 조각 템플릿에도 yasnippet을 사용합니다. 내가 작성한 C# 코드 완성 모듈 yas/expand-snippet에는 확장 할 템플릿을 정의하는 동적으로 생성 된 문자열이 있습니다.

그래서, 당신은 <COMPLETE> 코드 완성 기능 키입니다

MyType.Method(<COMPLETE> 

를 ... 입력 할 수 있으며, 코드 완성 모듈이 MyType.Method에 조회를 수행합니다 (다음, 선택 메뉴를 구축 사용자가 메뉴에서 선택 사항을 선택하면 코드 완성 모듈이 선택한 메소드의 각 인수에 대한 필드를 포함하는 템플릿을 빌드 한 다음 yas/expand-snippet을 호출하고 해당 템플리트가 버퍼에 주입되고, 마치 정적 템플릿이었던 것처럼 동적으로 생성 된 템플릿에서 메서드에 대한 각 인수는 "typeover"필드를 가져오고 필드를 탭하여 채 웁니다.

"동적 스 니펫"아이디어는 모든 코드 완성 엔진에서 작동합니다. 이처럼 보이는 yasnippet 템플릿 정의 문자열에

function(int arg1, string arg2, char arg3) 

: 당신은이 같은 방법 또는 함수 서명에서 매핑 할 수있는 방법이 필요

function(${1:int arg1}, ${2:string arg2}, ${3:char arg3}) 

을 그리고 그것은 꽤 사소한 부분입니다 elisp.

+1

아주 깨끗합니다. 아마 Yasnippet에 시도해 볼 것이고, 당신은 분명히 스크린 캐스팅을해야 할 것입니다. –

+0

스크린 캐스트는 어떻습니까?) – egor7

4

나는 많은 해골 모드를 사용하지 않은,하지만 꽤 유용한 루비와 C. 그 코딩 동안 나는 YASnippet를 사용하지만, 나는 해골 모드가 훨씬 더 강력하다 생각한다.

+0

yasnippet을 조금 더 자세히 설명해 줄 수 있습니까? 골격처럼 복잡한 일을 할 수 있습니까? –

+1

Yasnippet 웹 사이트는 http://code.google.com/p/yasnippet/입니다. Textmate의 스 니펫에서 파생되었으며 템플리트 작성과 유사한 구문을 사용합니다. –

+2

해골을 모른다. 나는 유골을 사용합니다. 사용하기 쉽습니다. 텍스트 파일에 템플릿을 지정하기 만하면됩니다. 확장 성 : 일반 텍스트 또는 elisp 코드로 구성된 스 니펫 (templats)을 코딩 할 수 있습니다. 일반적인 목적입니다. 스 니펫을 대화식으로 트리거하거나 elisp의 스 니펫을 삽입 할 수 있습니다. 예를 들어 완료 패키지에서 심볼 테이블에서 훑어보기를 수행 한 다음 결과에 따라 동적으로 생성 된 템플릿을 삽입합니다. 메소드 서명이 들어 있습니다. 그냥 작동합니다. 해골을 볼 이유가 없었습니다. – Cheeso

1

emacs 위키에서는 Yasnippet을 스켈레톤 대신 사용할 수 있습니다. yasnippet과 함께 제공되는 스 니펫은 매우 훌륭하지만 진정한 힘이 거기에 있기 때문에 직접 작성해야합니다.

2

기록을 위해 : 심지어 7 년 후에 나는 여전히 해골에 매우 만족합니다. 저기서 제 init 파일에 많은 것들이 있습니다 : https://github.com/ska2342/ska-init-files/blob/master/dot.emacs.d/init.el

+0

전적으로 당신과 함께 해골을 가지고 있습니다. 나는 최근에 템플릿 시스템과 스켈레톤을 찾기 시작했다. 그것은 순수한 elisp입니다. 그것은 공식적이며 - 약자와 결합하여 - 적용하기 쉽습니다. 나는 7 년 전 문서의 상태가 무엇인지 모르지만, 현재의 Emacs 문서가 스켈레톤에 관해서는 잘하고있다. –

관련 문제