Sử dụng Emacs làm IDE


169

Hiện tại quy trình làm việc của tôi với Emacs khi tôi viết mã bằng C hoặc C ++ bao gồm ba cửa sổ. Phần lớn nhất bên phải chứa tệp tôi đang làm việc. Bên trái được chia thành hai, phía dưới là một vỏ mà tôi sử dụng để nhập biên dịch hoặc tạo lệnh và trên cùng thường là một số loại tài liệu hoặc tệp README mà tôi muốn tham khảo khi tôi đang làm việc. Bây giờ tôi biết có một số người dùng Emacs khá chuyên nghiệp ngoài kia, và tôi tò mò không biết những Emacs khác có chức năng gì hữu ích nếu ý định sử dụng nó như một IDE hoàn chỉnh. Cụ thể, hầu hết các IDE thường đáp ứng các chức năng này là một số dạng hoặc dạng khác:

  • Trình chỉnh sửa mã nguồn
  • Trình biên dịch
  • Gỡ lỗi
  • Tra cứu tài liệu
  • Kiểm soát phiên bản
  • Các tính năng OO như tra cứu lớp và thanh tra đối tượng

Đối với một vài trong số này, khá rõ ràng làm thế nào Emacs có thể phù hợp với các chức năng này, nhưng phần còn lại thì sao? Ngoài ra, nếu một ngôn ngữ cụ thể phải được tập trung vào, tôi muốn nói đó là ngôn ngữ C ++.

Chỉnh sửa: Một người dùng đã chỉ ra rằng tôi nên nói cụ thể hơn khi tôi nói 'những gì còn lại'. Chủ yếu là tôi tò mò về kiểm soát phiên bản hiệu quả, cũng như tra cứu tài liệu. Ví dụ, trong SLIME, việc tìm kiếm hyperspec nhanh trên hàm Lisp khá dễ dàng. Có cách nào nhanh chóng để tìm kiếm một cái gì đó trong tài liệu C ++ STL không (nếu tôi quên cú pháp chính xác của hash_map chẳng hạn)?


5
Các câu hỏi và tất cả các câu trả lời hoàn toàn thiếu điểm IDE chính. Nhưng trước tiên, đừng hiểu sai ý tôi: Tôi nghĩ rằng không có một IDE nào ngoài đó (ngoài một số Lisp / Scheme hiếm) đến bất cứ nơi nào gần với những gì Emacs có thể cung cấp. TUY NHIÊN IDE hiện đại làm những việc như thế này: làm nổi bật ngay lập tức các lỗi mã hóa có thể xảy ra (ngay cả trên các AST không thể biên dịch một phần). IntelliJ IDEA thực hiện điều đó: nếu bạn sử dụng, giả sử, @NotNull , nó sẽ cảnh báo bạn, trong thời gian thực, về các vi phạm có thể xảy ra. Sau đó, toàn bộ "mã hóa theo ý định" : đơn giản là nó không hoạt động (chưa) dưới Emacs.
Cú phápT3rr0r

18
Một lĩnh vực khác mà IDE tốt có thể thực sự tỏa sáng: hoàn thành mã theo ngữ cảnh (một lần nữa, ngay cả trên các tệp nguồn vô tư, không thể biên dịch được). Hoàn thành mã theo ngữ cảnh p0wns hippie mở rộng bất kỳ ngày nào như nó thậm chí không buồn cười: nó chỉ đơn giản là làm cho Emacs phải xấu hổ. Một lần nữa tôi rất buồn khi IDE "trình soạn thảo văn bản" là thứ rác rưởi, rẻ tiền, ngu ngốc, thảm hại khi so sánh với Emacs. Nhưng các IDE tốt tỏa sáng trong nhiều lĩnh vực (như tái cấu trúc, hoàn thành mã theo ngữ cảnh, cảnh báo theo thời gian thực, v.v.) trong đó về cơ bản Emacs không ở đâu. Đưa cho tôi Emacs ở giữa IDE của tôi mà nói. Tôi đang khao khát ngày đó.
Cú phápT3rr0r

Điều gì về sự sụp đổ mã?
Luôn luôn học tập

Tôi phải nói rằng, các ý kiến ​​ở đây có lẽ không được viết bởi các lập trình viên. Tôi đọc cách Emacs không thể và không thể, nhưng các IDE khác thì có thể. Đó là âm thanh đối với tôi như thế này: một lập trình viên, người giải quyết các vấn đề bằng ngôn ngữ lập trình; có vấn đề là một số chương trình không có tính năng và do đó tệ hơn, nhưng họ không muốn tạo tính năng đó. Giống như mọi người, tại sao bạn lại trở thành lập trình viên ngay từ đầu ?? !!
red777

Câu trả lời:


76

Bạn sẽ phải cụ thể như những gì bạn có nghĩa là "phần còn lại". Ngoại trừ thanh tra đối tượng (mà tôi biết), emacs thực hiện tất cả các thao tác trên khá dễ dàng:

  • biên tập viên (hiển nhiên)
  • trình biên dịch - chỉ cần chạy M-x compilevà nhập lệnh biên dịch của bạn. Từ đó trở đi, bạn có thể chỉ M-x compilevà sử dụng mặc định. Emacs sẽ ghi lại các lỗi trình biên dịch C / C ++ (hoạt động tốt nhất với GCC) và giúp bạn điều hướng đến các dòng có cảnh báo hoặc lỗi.
  • Gỡ lỗi - tương tự, khi bạn muốn gỡ lỗi, hãy nhập M-x gdbvà nó sẽ tạo một bộ đệm gdb với các ràng buộc đặc biệt
  • Tra cứu tài liệu - emacs có các ràng buộc CScope tuyệt vời để điều hướng mã. Đối với các tài liệu khác: Emacs cũng có một trình đọc manpage và đối với mọi thứ khác, có web và sách.
  • kiểm soát phiên bản - có rất nhiều ràng buộc Emacs cho các phụ trợ VCS khác nhau (CVS, SCCS, RCS, SVN, GIT đều xuất hiện trong tâm trí)

Chỉnh sửa: Tôi nhận ra câu trả lời của tôi về tra cứu tài liệu thực sự liên quan đến điều hướng mã. Dưới đây là một số thông tin chi tiết:

Google tìm kiếm sẽ không nghi ngờ tiết lộ thêm ví dụ.

Như liên kết thứ hai hiển thị, việc tìm kiếm các chức năng (và bất cứ điều gì) trong tài liệu khác có thể được thực hiện, ngay cả khi không được hỗ trợ ngoài hộp.


3
không nên là "Mx biên dịch"?
Svante

1
Tôi nghĩ GNU toàn cầu vượt trội hơn CScope những ngày này: gnu.org/software/global
Jürgen Hötzel

@ Jürgen Hötzel: Tôi đã không sử dụng Emacs tích cực trong một thời gian. Vào thời điểm đó, tôi đã sử dụng GNU toàn cầu kết hợp với CScope, IIRC. Tôi sẽ không ngạc nhiên nếu toàn cầu có CScope phát triển vượt trội.
Ben Collins

cũng hỗ trợ lực lượng, với <a href=" p4el.sourceforge.net/p4.el.html"> p4.el </ a >
forksandhope

29

Tôi phải giới thiệu Trình duyệt mã Emacs như một môi trường kiểu IDE "truyền thống" hơn cho các emacs.

EDIT : Bây giờ tôi cũng khuyên dùng Magit cao hơn giao diện VCS tiêu chuẩn trong emacs.


Bạn chỉ cần có thể chỉnh sửa bài viết, bạn dường như có đủ rep iirc.
baudtack

19

Thay vì chạy lệnh make trong cửa sổ shell, bạn đã thử biên dịch Mx chưa? Nó sẽ chạy lệnh make của bạn, hiển thị lỗi và trong nhiều trường hợp giúp bạn dễ dàng chuyển sang dòng mã gây ra lỗi nếu đầu ra bao gồm tên tệp và số dòng.

Nếu bạn là người hâm mộ của IDE, bạn cũng có thể muốn xem gói thanh tốc độ của emacs (thanh tốc độ Mx). Và, nếu bạn chưa có, hãy tìm hiểu về cách sử dụng bảng thẻ để điều hướng mã của bạn.


15

Có những góc của emacs mà một khi được phát hiện làm cho bạn năng suất hơn theo những cách bạn không bao giờ nghĩ tới. Như những người khác đã đề cập, sử dụng thẻ là một cách tuyệt vời và nhanh chóng để phóng to xung quanh mã nguồn của bạn và sử dụng M- / (dabenamev-bung) thường thực hiện chính xác những gì bạn mong đợi khi hoàn thành một tên biến.

Sử dụng xảy ra là hữu ích để có được một bộ đệm với tất cả các lần xuất hiện của một biểu thức chính quy trong một bộ đệm. Điều đó thực sự tiện lợi khi tái cấu trúc mã và tìm kiếm các đoạn mã hoặc sử dụng biến hoặc nếu bạn sử dụng các dấu TODO trong các tệp nguồn của mình và bạn muốn truy cập tất cả chúng.

Các hàm tuôn ra, các trường sắp xếp số, các hàm thay thế và hình chữ nhật có thể thực sự hữu ích để lấy kết xuất từ ​​một số công cụ và chuyển đổi nó thành dữ liệu hữu ích như chương trình elisp hoặc bảng tính được phân cách bằng dấu phẩy.

Tôi đã viết một trang về IDE giống như những điều bạn có thể làm với emacs

http://justinsboringpage.blogspot.com/2007/09/11-visual-studio-tricks-in-emacs.html

Học elisp là một cách tuyệt vời khác để trả lời cho chính bạn những gì emacs khác có thể làm ngoài những gì một IDE thông thường có thể làm.

Ví dụ: tôi đã viết blog về việc viết các chức năng của trình trợ giúp Perforce như đổ lỗi (tự viết nghĩa là bạn có thể khiến nó hoạt động chính xác như bạn muốn) ...

http://justinsboringpage.blogspot.com/2009/01/who-changed-line-your-usiness-on-last.html

Tôi cũng đã viết mã tự động tạo bình luận cho một chức năng, phù hợp với các tiêu chuẩn mã hóa mà tôi đang làm việc.

Không có mã elisp nào của tôi đặc biệt tuyệt vời và hầu hết mã này đã tồn tại trong các thư viện, nhưng nó thực sự hữu ích để có thể làm cho emacs thực hiện các công cụ tùy chỉnh xuất hiện trong một ngày làm việc.


10

Bạn có thể tìm thấy mô tả chi tiết về tích hợp kiểm soát phiên bản và emacs trên trang web của tôi . Tôi cũng đang nghiên cứu bài viết về việc sử dụng Emacs làm Môi trường phát triển cho nhiều ngôn ngữ - C / C ++, Java, Perl, Lisp / Scheme, Erlang, v.v ...


8

Đối với kiểm soát phiên bản, có một số điều bạn có thể sử dụng, tùy thuộc vào hệ thống kiểm soát phiên bản bạn sử dụng. Nhưng một số chức năng là phổ biến cho tất cả chúng.

vc.el là cách tích hợp để xử lý kiểm soát phiên bản ở cấp độ tệp. Nó có phụ trợ cho hầu hết các hệ thống kiểm soát phiên bản. Ví dụ, phụ trợ Subversion đi kèm với Emacs và có các phụ trợ git và các phần phụ khác có sẵn từ các nguồn khác.

Lệnh hữu ích nhất là Cx vv (vc-next-action) thực hiện hành động tiếp theo phù hợp cho tệp bạn đang truy cập. Điều này có thể có nghĩa là cập nhật từ kho lưu trữ hoặc cam kết các thay đổi của bạn, vc.el cũng khởi động lại Cx Cq để kiểm tra và ra các tệp nếu bạn đang sử dụng một hệ thống cần nó (như RCS).

Các lệnh rất hữu ích khác là Cx vlCx v = hiển thị cho bạn nhật ký và khác biệt hiện tại cho tệp bạn đang sử dụng.

Nhưng để có năng suất thực sự, bạn nên tránh sử dụng các lệnh vc.el một tệp khác với những điều đơn giản. Có một số gói có thể cung cấp cho bạn tổng quan về trạng thái của toàn bộ cây của bạn và cung cấp cho bạn nhiều sức mạnh hơn, và chưa kể đến khả năng tạo các cam kết mạch lạc bao trùm một số tệp.

Hầu hết trong số này bị ảnh hưởng nặng nề hoặc dựa trên pcl-cvs / pcvs ban đầu cho CVS. Thậm chí còn có hai người bọn họ mà đi kèm với lật đổ, psvn.eldsvn.el . Có gói cho git, vv


8

Được rồi, mọi người ở đây đang đưa ra gợi ý hoàn hảo để biến emacs thành một IDE tuyệt vời.

Nhưng bất cứ ai cũng nên nhớ rằng, khi bạn tùy chỉnh các emacs của mình với rất nhiều phần mở rộng (đặc biệt là với các phần để kiểm tra kiểu khi đang di chuyển, tra cứu định nghĩa chức năng, v.v.) emacs của bạn sẽ tải rất chậm cho trình soạn thảo.

Để khắc phục điều này, tôi rất khuyên bạn nên sử dụng emacs trong server mode.

Nó khá đơn giản để sử dụng, không cần tùy chỉnh tập tin init của bạn. Bạn chỉ cần bắt đầu emacs trong chế độ daemon;

emacs --daemon

Điều này sẽ tạo ra một máy chủ emacs, sau đó bạn có thể kết nối nó từ thiết bị đầu cuối hoặc từ gui. Tôi cũng khuyên bạn nên tạo một số bí danh để dễ gọi.

alias ec="emacsclient -t"
alias ecc="emacsclient -c &"
# some people also prefer this but no need to fight here;
alias vi="emacsclient -t"

Bằng cách này, emacs sẽ kích hoạt nhanh hơn cả gedit, hứa.

Một vấn đề có thể xảy ra ở đây, nếu bạn đang chạy emacs daemon từ người dùng thông thường của mình, có lẽ bạn không thể kết nối máy chủ emacs như root.

Vì vậy, nếu bạn cần mở một tệp có quyền truy cập root; sử dụng trampthay thế. Chỉ cần chạy ứng dụng khách emacs của bạn với người dùng bình thường và mở các tệp như thế này;

C-x C-f
/sudo:root@localhost/some/file/that/has/root/access/permissions
# on some linux distro it might be `/su:root@...` 

Điều này làm cho cuộc sống của tôi dễ dàng hơn, tôi có thể mở IDE python tùy chỉnh nặng của mình trong vài giây theo cách này. Bạn cũng có thể muốn thêm emacs --daemon vào hệ thống khởi động hoặc tạo tệp máy tính để bàn cho emacsclient. Tùy bạn.

Thông tin thêm về emacs daemon và emacs client có thể được tìm thấy tại wiki;

http://www.emacswiki.org/emacs/EmacsAsDaemon

http://www.emacswiki.org/emacs/EmacsClient


1
Tôi biết điều này là năm năm sau, nhưng tôi cũng đang sử dụng nó: nếu bạn thiết lập, EDITOR="emacsclient -t" VISUAL="emacsclient -c"bạn có thể thực hiện chỉnh sửa dựa trên sudo với sudo -ehoặc sudoedit, đôi khi thích sử dụng TRAMP (thường là vì lý do kiểm toán). Bạn cũng có thể invoke emacsclient với --alternate-editor= ( cần không gian ở cuối) và nó sẽ khởi chạy trình nền nếu nó không hoạt động, trong đó loại bỏ sự cần thiết phải đặt daemon trong hệ thống khởi động nếu bạn sẵn sàng để chờ đợi cho nó trở thành đầu tiên khi bạn chạy trình soạn thảo trên mỗi lần khởi động.
Darael

7

Tôi đồng ý rằng bạn nên tìm hiểu về biên dịch Mx (liên kết lỗi đó và lỗi tiếp theo của Mx với một chuỗi khóa ngắn).

Tìm hiểu về các ràng buộc để kiểm soát phiên bản (ví dụ: vc-diff, vc-next-action, v.v.)

Nhìn vào sổ đăng ký. Bạn không chỉ có thể nhớ các vị trí trong bộ đệm mà cả cấu hình cửa sổ (Cx rw - window-configure-to-register).


6

Điểm bắt đầu (có thể không rõ ràng) để khám phá các tính năng VC của Emacs là Mx vc-next-action .

Nó thực hiện "hoạt động kiểm soát phiên bản logic tiếp theo" trên tệp hiện tại, tùy thuộc vào trạng thái của tệp và phụ trợ VC. Vì vậy, nếu tệp không thuộc kiểm soát phiên bản, nó sẽ đăng ký nó, nếu tệp đã được thay đổi, các thay đổi sẽ được gửi, v.v.

Phải mất một chút để làm quen, nhưng tôi thấy nó rất hữu ích.

Liên kết khóa mặc định là Cx vv


4

Có một TFS.el để tích hợp emacs vào Microsoft TFS . Nó hoạt động với bất kỳ TFS nào, kể cả TFS chạy Codeplex.com.

Các bước cơ bản để thiết lập:

  1. Đặt tfs.el trong đường dẫn tải của bạn.

  2. Trong tệp .emacs của bạn:

    (require 'tfs)
    (setq tfs/tf-exe  "c:\\vs2008\\common7\\ide\\tf.exe")
    (setq tfs/login "/login:domain\\userid,password")
          -or-
    (setq tfs/login (getenv "TFSLOGIN"))  ;; if you have this set
  3. cũng trong tệp .emacs của bạn, đặt các ràng buộc khóa cục bộ hoặc toàn cục cho các lệnh tfs. như vậy

    (global-set-key  "\C-xvo" 'tfs/checkout)
    (global-set-key  "\C-xvi" 'tfs/checkin)
    (global-set-key  "\C-xvp" 'tfs/properties)
    (global-set-key  "\C-xvr" 'tfs/rename)
    (global-set-key  "\C-xvg" 'tfs/get)
    (global-set-key  "\C-xvh" 'tfs/history)
    (global-set-key  "\C-xvu" 'tfs/undo)
    (global-set-key  "\C-xvd" 'tfs/diff)
    (global-set-key  "\C-xv-" 'tfs/delete)
    (global-set-key  "\C-xv+" 'tfs/add)
    (global-set-key  "\C-xvs" 'tfs/status)
    (global-set-key  "\C-xva" 'tfs/annotate)
    (global-set-key  "\C-xvw" 'tfs/workitem)

Ừm ... điều này có nghiêm túc ủng hộ việc đặt mật khẩu của bạn vào văn bản gốc trong tệp .emacs của bạn không?
TED

@TED ​​- không, chỉ là một minh họa. Bí mật nên được lưu trữ ở nơi khác đọc từ elisp.
Cheeso

3

biên dịch, lỗi tiếp theo và lỗi trước đó là tất cả các lệnh khá quan trọng để phát triển C ++ trong Emacs (cũng hoạt động tốt trên đầu ra grep). Etags, visit-tags-table và find-tag cũng rất quan trọng. xong.el là một trong những vụ hack lớn chưa từng thấy trong thế kỷ 20 và có thể tăng tốc độ hack C ++ của bạn bằng một mức độ lớn. Oh và chúng ta đừng quên ediff.

Tôi vẫn chưa học cách sử dụng kiểm soát phiên bản mà không cần truy cập shell, nhưng bây giờ tôi đang chạy cam kết thường xuyên hơn (với git) tôi có thể sẽ phải làm.


3

Bạn cũng có thể tìm thấy thanh tab hữu ích. Nó mô phỏng hành vi duy nhất tôi bỏ lỡ khi chuyển từ Eclipse sang Emacs. Giới hạn cho "," và "." để di chuyển đến thanh tab trước và thanh tiếp theo, nó sẽ giúp bạn chuyển đổi bộ đệm bằng Ctrl-x b mọi lúc.

Thật không may, trang web được đề cập không cung cấp phiên bản chính xác để tải xuống. Tuy nhiên, hầu hết các phiên bản Ubuntu đều cung cấp nó trong các gói emacs-goodies của chúng.


1
Thật tuyệt, tôi đang tìm cách để có được một phiên bản mới hơn của thanh tab. Đối với những người không có trên Ubuntu, bạn có thể tìm thấy nó ở đây. packages.ubuntu.com/karmic/emacs-goodies-el
Ibrahim

3

Tôi sử dụng emacs trên Windows. mô-đun biên dịch là tốt, nhưng tôi muốn biên dịch thông minh hơn về dòng lệnh biên dịch mà nó gợi ý. Có thể sử dụng "Biến tệp" để chỉ địnhcompile-command , nhưng tôi muốn thứ gì đó thông minh hơn thế một chút. Vì vậy, tôi đã viết một chức năng nhỏ để giúp đỡ. Nó đoán lệnh biên dịch để sử dụng, để nhắc người dùng khi chạy compile.

Hàm đoán tìm tệp vbproj hoặc csproj hoặc sln và nếu tìm thấy, nó gợi ý msbuild. Sau đó, nó nhìn vào tên tệp bộ đệm, và tùy theo đó, gợi ý những điều khác nhau. Tệp .wxs có nghĩa là đó là một dự án WIX và bạn có thể muốn xây dựng một MSI, vì vậy logic đoán gợi ý một lệnh nmake cho MSI. Nếu đó là mô-đun Javascript, thì đề xuất là chạy jslint-for-wsh.js để lint tệp .js. Như một dự phòng, nó gợi ý bước sóng.

Mã tôi sử dụng trông như thế này:

(defun cheeso-guess-compile-command ()
  "set `compile-command' intelligently depending on the
current buffer, or the contents of the current directory."
  (interactive)
  (set (make-local-variable 'compile-command)
       (cond
        ((or (file-expand-wildcards "*.csproj" t)
             (file-expand-wildcards "*.vcproj" t)
             (file-expand-wildcards "*.vbproj" t)
             (file-expand-wildcards "*.shfbproj" t)
             (file-expand-wildcards "*.sln" t))
         "msbuild ")

        ;; sometimes, not sure why, the buffer-file-name is
        ;; not set.  Can use it only if set.
        (buffer-file-name
         (let ((filename (file-name-nondirectory buffer-file-name)))
           (cond

            ;; editing a .wxs (WIX Soluition) file
            ((string-equal (substring buffer-file-name -4) ".wxs")
             (concat "nmake "
                     ;; (substring buffer-file-name 0 -4) ;; includes full path
                     (file-name-sans-extension filename)
                     ".msi" ))

            ;; a javascript file - run jslint
            ((string-equal (substring buffer-file-name -3) ".js")
             (concat (getenv "windir")
                     "\\system32\\cscript.exe c:\\users\\cheeso\\bin\\jslint-for-wsh.js "
                     filename))

            ;; something else - do a typical .exe build
            (t
             (concat "nmake "
                     (file-name-sans-extension filename)
                     ".exe")))))
        (t
         "nmake "))))


(defun cheeso-invoke-compile-interactively ()
  "fn to wrap the `compile' function.  This simply
checks to see if `compile-command' has been previously set, and
if not, invokes `cheeso-guess-compile-command' to set the value.
Then it invokes the `compile' function, interactively."
  (interactive)
  (cond
   ((not (boundp 'cheeso-local-compile-command-has-been-set))
    (cheeso-guess-compile-command)
    (set (make-local-variable 'cheeso-local-compile-command-has-been-set) t)))
  ;; local compile command has now been set
  (call-interactively 'compile))

;; in lieu of binding to `compile', bind to my monkeypatched function
(global-set-key "\C-x\C-e"  'cheeso-invoke-compile-interactively)

Tôi đã thử làm điều này như "trước lời khuyên" cho hàm biên dịch nhưng không thể làm cho nó hoạt động tốt. Vì vậy, tôi đã xác định một chức năng mới và ràng buộc nó với cùng tổ hợp tổ hợp phím mà tôi đã sử dụng compile.


EDIT hiện có " smarter-compile.el " đưa ý tưởng này tiến thêm một bước.


2

Về tra cứu tài liệu: điều đó phụ thuộc vào (các) ngôn ngữ lập trình của bạn.

Thư viện C và các cuộc gọi hệ thống thường được ghi lại trong các trang man. Cho rằng bạn có thể sử dụng M-x man. Một số điều có thể được ghi lại tốt hơn trong các trang thông tin; sử dụng M-x info.

Đối với elisp chính nó, sử dụng C-h f. Đối với python, sử dụng >>> help(<function, class, module>)trong trình thông dịch.

Tôi thấy rằng hầu hết các ngôn ngữ khác cung cấp tài liệu ở dạng html. Đối với điều đó, hãy thử một trình duyệt nhúng (tôi sử dụng w3m). Đặt BROWSERbiến môi trường của bạn thành tập lệnh bao quanh emacsclient -e "(w3m-goto-url-new-session \"$@\")"(trên * nix), trong trường hợp có thể mở trình duyệt và bạn muốn mở trình duyệt bên trong emacs.


2

Tôi biết đây là một bài viết rất cũ. Nhưng câu hỏi này là hợp lệ cho người mới bắt đầu emacs.

IMO cách tốt nhất để sử dụng emacs làm ide là sử dụng giao thức máy chủ ngôn ngữ với emacs. Bạn có thể tìm thấy tất cả các thông tin về các máy chủ ngôn ngữ trong trang web được liên kết.

Để thiết lập nhanh, tôi khuyên bạn nên vào trang này eglot . IMO eglot làm việc đó khá tốt. Nó tích hợp tốt với các gói hoàn thành tự động như công ty. Cung cấp tìm tài liệu tham khảo, và nhiều hơn nữa.

Ngoài ra đối với trình gỡ lỗi, bạn có thể cần trình gỡ lỗi cụ thể cho các ngôn ngữ cụ thể. Bạn có thể sử dụng gdb từ bên trong emacs. Chỉ cần gõ M-x gdb.

Để biên dịch mã của bạn, tốt nhất là sử dụng các lệnh shell. Tôi đang làm việc trên dự án này eproj . Sẽ mất một thời gian để hoàn thành nó. Nhưng tất cả những gì nó làm là ánh xạ lệnh shell đến loại dự án. Và xây dựng dự án của bạn thông qua shell. Nó thực hiện tương tự để thực hiện lệnh. Tôi có thể cần giúp đỡ để hoàn thành dự án này. Nó chưa sẵn sàng để sử dụng, nhưng nếu bạn biết một chút về elisp, bạn có thể xem qua mã.

Ngoài ra, tốt nhất là sử dụng lệnh biên dịch emacs.

Để kiểm soát phiên bản, tôi chưa thấy gói nào khác có thể phù hợp với sức mạnh của pháp sư . Nó đặc trưng cho git. Ngoài ra đối với git còn có một gói git-timemachine khác, mà tôi thấy rất hữu ích.

Tra cứu đối tượng và tra cứu lớp được cung cấp bởi giao thức máy chủ ngôn ngữ.

Một cây dự án có thể được sử dụng cho giao diện giống như ide với treemacs .

Ngoài ra còn có một thư viện tương tác dự án được gọi là đạn .

Để tự động hoàn thành, tôi thấy chế độ công ty rất hữu ích.

Emacs thực sự có thể được thực hiện để làm bất cứ điều gì.


1

Trong những năm gần đây, Clang trở thành một phần quan trọng trong hỗ trợ Emacs C ++. Atila Neves đã có buổi nói chuyện trên CppCon 2015: "Emacs như một C ++ IDE"

Đó là cuộc nói chuyện dài 16 phút, nơi anh thể hiện các giải pháp cho các chủ đề sau:

  • Chuyển đến định nghĩa
  • Tự động hoàn thành
  • Làm nổi bật cú pháp nhanh
  • Tìm tập tin trong dự án

Các slide có thể được tìm thấy ở đây .


0

Theo kiểu cửa sổ Unix hoặc X, tôi không biết rằng có một IDE tích hợp hoạt động cho mọi thứ.

Để tương tác với trình gỡ lỗi, chỉ cần một thành phần của IDE, hãy xem xét realgud . Một điều khác mà tôi thấy hữu ích là các trình phân tích cú pháp cho thông điệp vị trí, do đó nếu bạn có dấu vết ngăn xếp cuộc gọi và muốn chỉnh sửa tại một vị trí cụ thể trong cửa hàng, giao diện mặt trước này sẽ làm được điều đó.

Cho đến nay chương trình này có thể sử dụng cải tiến. Nhưng sau đó nó cũng có thể sử dụng những người làm việc trên nó để cải thiện nó.

Tuyên bố miễn trừ trách nhiệm: Tôi làm việc trên realgud


0

Hãy thử chế độ lsp. Bây giờ bạn có thể sử dụng chức năng IDE khác bên trong emacs kết nối với máy chủ. Tìm kiếm thêm thông tin: chế độ lsp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.