2010-05-19 24 views
16

đưa ra tất cả các giải pháp có thể có một hệ thống mẫu với GNU Emacs, ngày nay mọi người sử dụng cái gì? Tôi vẫn đang sử dụng chế độ bộ xương nhưng khi tôi đọc nó ở đây và ở đó, chúng tôi phải thực sự ít để làm như vậy.GNU Emacs: skeleton-mode, nó vẫn được sử dụng?

Bạn đang sử dụng cái gì và tại sao? (có lẽ tôi có thể chuyển sang một công cụ phổ biến hơn).

Ví dụ, với đoạn này:

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

(tín: http://www.foldr.org/~michaelw/log/programming/lisp/defpackage-skeleton)

đó (hiện đại) mẫu chế độ có thể làm như vậy (và như thế nào;))?

Cheers

Trả lời

5

Tôi sử dụng yasnippet.

Trong emacs của tôi, tôi có điều này:

(require 'yasnippet-bundle) 

Trong móc của tôi cho mỗi chế độ mà tôi muốn sử dụng đoạn (như móc c-mode của tôi, vv), tôi có điều này:

(yas/minor-mode-on) 

các đoạn "tĩnh" tôi sử dụng có sẵn, trong cấu trúc thư mục tôi sử dụng, ở đây:

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

Bạn cần tạo tệp .el bó được đề cập ở trên, một lần, khi bất kỳ đoạn mã nào thay đổi. làm theo cách này:

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

Vậy đó!

Sau đó, khi tôi ở trong tệp C# và nhập for<TAB>, tôi nhận được mẫu có vòng lặp for. Và cứ thế.


Tôi cũng sử dụng đoạn mã với mẫu đoạn mã động. Mô-đun hoàn thành mã C# tôi đã viết cuộc gọi yas/expand-snippet bằng chuỗi được tạo động được xác định mẫu để mở rộng.

Vì vậy, bạn có thể gõ

MyType.Method(<COMPLETE> 

... nơi <COMPLETE> là chìa khóa mã hoàn thành, và các mô-đun mã hoàn thành thực hiện tra cứu trên MyType.Method (, sau đó xây dựng một menu lựa chọn Khi người dùng chọn một sự lựa chọn từ trình đơn, mô-đun hoàn thành mã sẽ xây dựng mẫu, chứa các trường cho mỗi đối số cho phương thức đã chọn, sau đó nó gọi là yas/expand-snippet và mẫu đó được đưa vào bộ đệm, giống như nó là một mẫu tĩnh.Trong mẫu được tạo động, mỗi đối số cho phương thức nhận được một trường "typeover", và tôi chỉ điền vào nó, tabbing thông qua các trường.

Ý tưởng "đoạn mã động" này sẽ hoạt động với bất kỳ công cụ hoàn thành mã nào. Bạn chỉ cần một cách để ánh xạ từ một phương pháp hoặc chức năng chữ ký, như thế này:

function(int arg1, string arg2, char arg3) 

thành một chuỗi định nghĩa yasnippet mẫu, trông như thế này:

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

Và đó là một mảnh khá tầm thường của elisp.

+1

Khá gọn gàng. Tôi có lẽ sẽ cung cấp cho Yasnippet một thử và, bạn chắc chắn nên làm một screencast :) –

+0

Điều gì về screencast?) – egor7

4

tôi đã không sử dụng chế độ xương nhiều, nhưng tôi sử dụng YASnippet trong khi mã hóa trong Ruby và C. của nó khá hữu ích, nhưng tôi nghi ngờ chế độ xương là xa mạnh hơn.

+0

Bạn có thể xây dựng một chút với đoạn mã: những điều mạnh mẽ về chúng không? Nó có thể làm những thứ phức tạp như bộ xương? –

+1

Trang web của Yasnippet có tại http://code.google.com/p/yasnippet/. Nó có nguồn gốc từ đoạn trích của Textmate và sử dụng cú pháp tương tự để tạo khuôn mẫu. –

+2

Tôi không biết bộ xương. Tôi sử dụng yasnippet. Thật dễ sử dụng: chỉ cần chỉ định các mẫu trong các tệp văn bản. Nó có thể mở rộng: Tôi có thể mã đoạn (templats) bao gồm văn bản thuần túy, hoặc, mã elisp. Đó là mục đích chung: tôi có thể kích hoạt một đoạn mã tương tác, hoặc tôi có thể chèn đoạn trích từ elisp - ví dụ, từ gói hoàn thành, tôi có thể làm một cái nhìn trong bảng biểu tượng, sau đó tùy thuộc vào kết quả, chèn mẫu được tạo động chứa chữ ký phương thức. Nó chỉ hoạt động. Không bao giờ có lý do để xem bộ xương. – Cheeso

1

wiki emacs liệt kê Yasnippet là một sự thay thế có thể cho bộ xương. Đoạn trích đi kèm với yasnippet khá tốt, nhưng bạn thực sự nên viết cho riêng mình, vì sức mạnh thực sự nằm ở đó.

2

Để ghi lại: thậm chí 7 năm sau, tôi vẫn rất hài lòng với bộ xương. Rất nhiều người trong số họ có sẵn ở đó trong các tệp init của tôi: https://github.com/ska2342/ska-init-files/blob/master/dot.emacs.d/init.el

+0

Hoàn toàn với bạn trên bộ xương. Tôi chỉ mới bắt đầu tìm kiếm một hệ thống mẫu và bộ xương chỉ đơn giản là nhìn đơn giản nhất. Đó là elisp tinh khiết, đó là chính thức và - kết hợp với viết tắt - khá dễ dàng để áp dụng. Tôi không biết tình trạng của tài liệu là gì bảy năm trước, nhưng các tài liệu Emacs hiện tại về bộ xương làm tốt công việc của họ. –

Các vấn đề liên quan