Sự khác biệt giữa Emacs và Vim


685

Không đi vào một cuộc tranh luận tôn giáo về lý do tại sao một người tốt hơn người kia, sự khác biệt thực tế giữa Emacs và Vim là gì? Tôi đang tìm cách học cái này hay cái khác, nhưng tôi nhận ra đường cong học tập của mỗi thứ là cao và tôi không thể quyết định. Tôi chưa bao giờ sử dụng trình soạn thảo loại này (Tôi đã luôn sử dụng IDE), vì vậy bất cứ điều gì giúp người mới là một lợi thế.


Trước khi một cuộc chiến nảy lửa bắt đầu: Tôi không hỏi cái nào tốt hơn, tôi đang hỏi sự khác biệt giữa hai thứ. Tôi muốn một so sánh khách quan .


3
Nếu bạn sử dụng máy Mac (OSX), thì bạn sẽ thấy rằng nhiều lệnh di chuyển con trỏ cơ bản của emacs hoạt động khá nhiều ở mọi nơi. (Ví dụ họ làm việc ở đây nơi tôi đang gõ nhận xét này vào trang web.) Vì vậy, đối với người dùng Mac, có một lợi ích toàn hệ thống để học ít nhất là tập hợp con sau của emacs: ^ A ^ B ^ D ^ E ^ F ^ K ^ L ^ N ^ O ^ P ^ T ^ V ^ Y
Matt

2
@JamesAnderson: theo kinh nghiệm của tôi thì ngược lại. Đã sử dụng vim được 2,5 năm, sau đó chuyển sang sử dụng emacs. Những người emacs hầu như không quan tâm ... "bất cứ điều gì phù hợp với bạn". Đây là những gì ,salespitchnói trong #emacs<fsbot> We aren't gonna lie. Emacs sucks. Some of us tolerate it, but we can't tell you if YOU'LL be able to. Try it and make up your own mind.
Silex

2
Emacs chắc chắn là một hệ điều hành tuyệt vời, nhưng chỉ thiếu một trình soạn thảo đàng hoàng.
technical_difficulty

1
@ JimmyM.G.Lim Không, nó sử dụng máy nhắn tin hiện tại trên hệ thống. Nếu bạn chạy PAGER=cat manthì con người sẽ hiển thị văn bản trực tiếp lên màn hình.
SS Anne

1
đoán rằng cảnh sát "chủ yếu dựa trên ý kiến" đã không tồn tại khi điều này được hỏi lần đầu tiên ;-) ah, thời gian đơn giản hơn ... một điều tôi sẽ nói là một lần, đọc một cuốn sách về emacs và thử nó, tôi nghĩ nó là quả bom. 3 tuần nghỉ sau tôi thấy mình đã hoàn toàn quên mất tất cả các tổ hợp phím của nó. Mặt khác, vim không thực sự là thứ của tôi, nhưng tôi có thể bán chức năng một cách đáng tin cậy khi cần sử dụng i, esc, wq.
JL Peyret

Câu trả lời:


491

(văn bản dưới đây là ý kiến ​​của tôi, nó không nên được coi là sự thật hoặc một sự xúc phạm)

Với Emacs bạn sẽ mở nó 24/7 và sống trong chương trình, hầu hết mọi thứ bạn làm đều có thể được thực hiện từ đó. Bạn viết các tiện ích mở rộng của riêng mình, sử dụng nó để ghi chú, tổ chức, trò chơi, lập trình, truy cập shell, truy cập tệp, nghe nhạc, duyệt web. Phải mất hàng tuần và hàng tuần cho đến khi bạn sẽ hài lòng với nó và sau đó bạn sẽ học những thứ mới mọi lúc. Bạn sẽ khó chịu khi bạn không có quyền truy cập vào nó và liên tục thay đổi cấu hình của bạn. Bạn sẽ không thể sử dụng các phiên bản emacs của người khác một cách dễ dàng và nó sẽ không được cài đặt. Nó sử dụng Lisp, đó là tuyệt vời. Bạn có thể biến nó thành bất cứ thứ gì bạn muốn. (bất cứ điều gì, tất cả)

Với Vim, nó hầu như luôn được cài đặt sẵn. Thật nhanh. Bạn mở một tập tin thực hiện một chỉnh sửa nhanh chóng và sau đó thoát. Bạn có thể làm việc với thiết lập cơ bản nếu bạn đang ở trên máy của người khác. Nó không hoàn toàn có thể chỉnh sửa, nhưng nó vẫn tốt hơn nhiều so với hầu hết các trình soạn thảo văn bản. Nó nhận ra rằng hầu hết thời gian bạn đang đọc / chỉnh sửa không gõ và làm cho phần đó nhanh hơn. Bạn không phải chịu đựng emacs Pinkie . Nó không quá tức giận. Nó dễ học hơn.

Mặc dù tôi sử dụng Emacs cả ngày mỗi ngày (và yêu thích nó) trừ khi bạn có ý định dành nhiều thời gian cho chương trình bạn chọn, tôi sẽ chọn vim


153
Wrt không có sẵn: Tôi khuyên bạn nên đặt .emacs và .emacs.d của mình vào một repo kiểm soát nguồn, và vì vậy việc thiết lập Emacs hoàn hảo của bạn chỉ đơn giản là vấn đề kiểm tra.
Duncan Bayne

7
Cả emacs và vim đều có thể chịu đựng những gì được mô tả ở trên: cả hai đều có thể được cấu hình đến mức không thể nhận ra được so với các dạng vanilla của chúng. Ngoài ra, tôi thứ hai việc sử dụng một vcs.
Alexej Magura

11
Bạn làm việc trên hệ thống nào, @Radu? Tôi chưa bao giờ thấy một hệ thống thực tế trong những năm 2010 có thật vithay vì vimbí danh.
ELLIOTTCABLE 19/2/2015

9
Có thể Vim dễ học hơn Emacs, nhưng thật khó hiểu khi lần đầu tiên bạn khởi động nó nếu bạn không có kinh nghiệm trước đó với nó! Tôi đã phải sử dụng google để có thể đóng nó xuống, và vẫn phải thử nhiều lần để làm cho đúng.
HelloGoodbye

9
Không bao giờ đánh giá thấp các lợi ích "được cài đặt sẵn" của VIM: nó hầu như luôn có sẵn ở bất cứ nơi nào bạn đi và có thể sử dụng được với rất ít / không tùy chỉnh. Tôi sử dụng nó mọi lúc khi sshing đến các máy khác. Đây là lý do tại sao tôi học được nó đầu tiên, và bởi vì bạn bè của tôi biết VIM và có thể giúp tôi. (Đừng đánh giá thấp sự hỗ trợ của bạn bè!)
jvriesem

137

Vim không phải là vỏ. Và nó không giao tiếp tốt với các quy trình con. Điều này gần như là do thiết kế, trong khi ở Emacs, những yếu tố này được bao gồm bởi thiết kế. Điều này có nghĩa là một số nội dung, như nhúng trình gỡ lỗi hoặc trình thông dịch (mang lại một loại IDE), rất khó trong Vim.

Ngoài ra, các phím tắt Emacs chủ yếu được truy cập thông qua các sửa đổi, và rõ ràng giao diện Vim là phương thức nổi tiếng, cho phép truy cập vào một số lượng các phím trực tiếp vô lý để thao tác.

Emacs từng là biên tập viên duy nhất trong số hai người có thể lập trình được, và trong khi Vim có nhiều cấp độ kỳ lạ với khả năng lập trình của nó, với việc bổ sung các ràng buộc Python và Ruby (và hơn nữa, tôi quên), Vim cũng có thể lập trình theo hầu hết các cách bạn quan tâm

Tôi sử dụng Vim và tôi khá hài lòng với nó.


6
Cập nhật nhỏ: Vim hỗ trợ cách giao tiếp tốt hơn với các quy trình phụ kể từ phiên bản 8.0 và 8.1 thậm chí còn giới thiệu bộ đệm đầu cuối, do đó, nó đang tiến gần hơn một chút đến emacs về vấn đề này.
DarkWiiPlayer

110

Vim:

  • tốt hơn là một trình soạn thảo đơn giản (cần ít khóa hơn cho các tác vụ đơn giản)
  • cộng đồng kịch bản tích cực hơn - ngôn ngữ nội bộ: vimscript
  • một kho lưu trữ trung tâm của tập lệnh, plugin, phối màu, ...
  • cũng có thể mở rộng trong trăn, ruby
  • có thể được thực hiện di động (emacs có một số vấn đề với điều đó)

Emacs:

  • không theo phương thức theo mặc định (hầu hết các biên tập viên ngày nay đã thực hiện phương pháp này). Mặc dù có chế độ tà ác mô phỏng hành vi vim.
  • Ngôn ngữ mạnh mẽ hơn để mở rộng nó (elisp là ngôn ngữ toàn diện, và trong các emacs bạn thực tế có thể xác định lại mọi thứ; trong khi trong vim, bạn không thể định nghĩa lại việc xây dựng các chức năng của trình soạn thảo. không giống bất cứ thứ gì
  • mở rộng hơn
  • hỗ trợ tuyệt vời cho các công cụ GNU (nhóm chúng)

Cá nhân, tôi thích vim - nó nhỏ, làm những gì nó phải làm và khi tôi muốn một IDE hoàn chỉnh, tôi mở VS. Cách tiếp cận của Emacs về việc trở thành một biên tập viên muốn trở thành một IDE (hay tôi nên nói là HĐH), nhưng không hoàn toàn, là IMHO, đã lỗi thời. Ngày xưa, có một ứng dụng email, ftp client, tetris, ... không có gì trong một gói (emacs) có ý nghĩa gì đó ... ngày nay, nó không còn nữa.

Tuy nhiên, cả hai đều là một chủ đề thảo luận tôn giáo giữa các lập trình viên và người dùng cộng đồng siêu người dùng, và về mặt đó, cả hai đều tuyệt vời để bắt đầu các cuộc chiến nảy lửa nếu được tiếp xúc (trong cùng một câu / câu hỏi).


47
"tốt hơn là một biên tập viên" là khá mơ hồ. Tôi muốn biết lý do tại sao.
Allen

41
@ ALLen - Có gì mơ hồ trong đó? Tôi hiếm khi gặp người dùng của cả vim và emacs, những người có vấn đề với tuyên bố đó. Ngay cả những người dùng khó tính cũng thường chấp nhận nó như một sự thật. Bạn đã sử dụng cả hai biên tập viên? Tôi tin rằng tương đối rõ ràng rằng vim có lợi thế về khía cạnh các tính năng chỉnh sửa văn bản.
Rook

36
Tôi hoài nghi rằng bất cứ ai cũng sẽ chấp nhận điều đó như một sự thật. Là một người sử dụng lâu dài cả emacs và VI đơn giản, tôi đã sử dụng vim một vài lần - nhưng "tốt hơn là một biên tập viên" phải đi đến emacs nếu không vì lý do nào khác ngoài việc lựa chọn nhiều chế độ chính và phụ để giúp bạn khi bạn gõ.
Kendall Helmstetter Gelner

61
Vim là một biên tập viên tốt hơn vì thao tác văn bản đòi hỏi ít chuyển động của bàn tay và ngón tay của bạn hơn so với emacs, ít nhất đó là kinh nghiệm của tôi.
StackedCrooking

7
Nhưng bên cạnh đó, vim có hiệu quả phù hợp hơn để chỉnh sửa: số dòng, chế độ trực quan, thao tác wint1.kaist.ac.kr/files/attach/images/59/450/ . FCOL, tôi gặp khó khăn khi nhận emacs chỉ để cuộn từng dòng một.
Rook

52

Nếu bạn đang tìm kiếm một phân tích khách quan của cả hai biên tập viên, hãy nhìn vào nguồn gốc của họ và triết lý đằng sau các thiết kế tương ứng của họ. Hãy suy nghĩ, cái nào sẽ phù hợp với bạn hơn và học nó (và học nó và học nó, bởi vì phải mất thời gian trước khi bạn khám phá tiện ích thực sự của nó so với bất kỳ IDE nào). Giới thiệu về Chỉnh sửa hiển thị với Vi được viết bởi Bill Joy và Mark Horton và anh ấy giải thích lý do tại sao anh ấy chọn thiết kế phương thức và lý do cho các nét chính khác nhau (nó giúp tôi nhớ rằng CTRL-W + W (sẽ chuyển sang W tiếp theo và nó sẽ giống với CTRL W + CTRL W, chỉ trong trường hợp bạn giữ phím CTRL trong thời gian dài hơn.

Đây là một liên kết đến dòng thời gian Emacs và có tham chiếu đến giấy Multics Emacs. Dưới đây là bài viết RMS trên Emacs , nơi tôi thấy sự căng thẳng nằm ở trình soạn thảo văn bản có thể lập trình (thậm chí từ năm 1981 trở về trước).

Tôi chưa đọc các bài báo của emacs, nhưng đã đọc bài báo vi của Bill Joy một vài lần. Cả hai đều cũ, nhưng bạn vẫn sẽ có được triết lý và bạn có thể chọn sử dụng công cụ hiện tại (vim 7.x hoặc emacs 25?)

Chỉnh sửa: Tôi quên đề cập rằng cần có sự kiên nhẫn và trí tưởng tượng để đọc cả hai bài báo này vì nó sẽ đưa bạn trở lại thời gian trong khi đọc nó. Nhưng nó là giá trị.


43
  1. Vim luôn khởi động nhanh hơn Emacs. Tôi đang nói rằng trên bất kỳ máy nào, các bản cài đặt Vim ngoài luồng sẽ khởi động nhanh hơn các bản cài đặt ngoài hộp của Emacs. Và tôi có xu hướng nghĩ rằng sau một lượng tùy chỉnh vừa phải của một trong hai, Vim vẫn sẽ khởi động nhanh hơn Emacs.

  2. Sau đó, sự khác biệt thực tế khác là chế độ của Emacs. Chúng làm cho cuộc sống của bạn dễ dàng hơn rất nhiều khi chỉnh sửa XML, C / C ++ / Java / bất cứ thứ gì, LaTeX và các ngôn ngữ phổ biến nhất mà bạn có thể nghĩ tới. Chúng làm cho bạn muốn giữ cho trình soạn thảo mở cho các phiên dài và làm việc.

Nói chung, tôi sẽ nói rằng Vim kéo bạn đến đó để thực hiện các tác vụ chỉnh sửa ngắn, nhanh; trong khi Emacs khuyến khích bạn lặn trong các phiên dài.


1
Tôi không nghĩ chế độ làm cho cuộc sống dễ dàng hơn, ngược lại. Và Larry Tesler cũng nghĩ như vậy .
Eliran Malka

2
Làm thế nào để các chế độ của Emacs giúp mã hóa? (Tôi mới biết về nó ...)
jvriesem

4
Từ lâu, tôi đã chuyển từ vi sang emacs vì bốn lý do: (a) một lần nhấp để gặp lỗi trình biên dịch tiếp theo, (b) tích hợp gdb, (c) grep và find-grep. Có thể làm những điều này trong vim bây giờ?
zzz777

"Vim luôn khởi động nhanh hơn Emacs" - nếu bạn giữ máy chủ emacs chạy, việc khởi động emacs-client rất nhanh. Tôi có các tập lệnh cho điều đó, mà tôi sao chép (sử dụng git) trên tất cả các máy của mình. (Tôi * làm * cũng sử dụng vim, thực ra, nó luôn phụ thuộc vào vị trí của tôi và nhiệm vụ là gì)
Jay

"Vim luôn khởi động nhanh hơn Emacs" - đồng thời, với tùy chọn use-packagecủa nó :defer, Emacs của tôi mở ra gần như ngay lập tức. Tôi thậm chí đã từ bỏ bằng cách sử dụng emacsclient.
Jay

37

VI luôn có sẵn và sẽ chạy trên chế độ người dùng đơn lẻ, bị hỏng nhất, đồ họa bị hỏng, không có sơ đồ bàn phím, máy liên kết chậm - vì vậy, đáng để biết cách chỉnh sửa các tệp đơn giản trong các tác vụ sysadmin.

Emacs là một giao diện người dùng hoàn chỉnh trong một trình soạn thảo. Ý tưởng là bạn kích hoạt Emacs khi bạn khởi động máy và không bao giờ rời khỏi nó. Có thể có hàng ngàn phiên hiện tại.

Việc học các khả năng của Emacs có đáng hay không so với việc sử dụng trình soạn thảo GUI / IDE và sử dụng một cái gì đó như python / awk / etc cho các tác vụ bổ sung là tùy thuộc vào bạn.


2
Tôi biết VI chỉ vì những lý do đó - nhưng ngày nay tôi sẽ nói rằng rất khó để bạn gặp phải một hệ thống UNIX mà không có ít nhất một cài đặt EMACS cơ bản, và nó có thể làm cho môi trường vỏ kém dễ chịu hơn.
Kendall Helmstetter Gelner

3
Hoặc, kẹt busybox vào một initrd và gỡ lỗi trình điều khiển lưu trữ bị hỏng cho thiết bị khởi động, vì vậy, ngay từ đầu trong quy trình init, tất cả những gì bạn có là đĩa ram ban đầu, nhưng bạn vẫn có một trình soạn thảo - vi.
smcameron

2
Sau một thời gian với vi, ngón tay của bạn biết các chuyển động - nhưng bạn không thể nhớ các phím thực sự là gì!
Martin Beckett

10
Tôi nghĩ edrằng đó là "luôn luôn có sẵn và sẽ chạy trên chế độ người dùng đơn lẻ bị tê liệt nhất, đồ họa bị hỏng, không có sơ đồ bàn phím, máy liên kết chậm." Đợi đã, năm nay là năm nào? (Thở dài - ed, tôi sẽ không bao giờ quên bạn.)
belacqua

2
@Kendall: linux Ubuntu hiện tại không đi kèm với emacs được cài đặt.
trực giác

25

Tôi là một fan hâm mộ toàn diện của Emacs, nhưng tôi biết VI từ lâu trước khi tôi biết Emacs. Điều đó nói rằng, tôi làm cho tất cả mọi người của tôi học VI vì nó luôn có sẵn ở mọi nơi. Không thể sai với một trong số họ.


2
Đây cũng là kinh nghiệm của tôi ... Emacs hoặc uEmacs không bao giờ có sẵn. Biên tập viên đầu tiên của tôi là uEmacs (trên Amiga) nhưng vì tôi đã học vim nên nó quá tiện lợi để có xung quanh.
Marius

Đây là cơ bản kinh nghiệm của tôi quá. Vi có ở khắp mọi nơi và thường được cài đặt dưới dạng $ EDITOR mặc định trên các hệ thống unix, vì vậy bạn phải biết nó nếu bạn đang làm việc với unix. Điều đó nói rằng, tôi sử dụng emacs để chỉnh sửa văn bản mỗi ngày và tôi thích nó.
Fergie

14

Có vẻ như một câu trả lời đã được chọn, nhưng sự khác biệt lớn đối với tôi luôn luôn là phương thức so với phương thức không. Vim là phương thức, có nghĩa là nó thực hiện tối ưu hóa dựa trên một bộ chế độ sử dụng cụ thể. Ít nhất đó là cách tôi luôn nhìn vào nó. Điều này làm cho việc sử dụng Vim trở thành một trải nghiệm khác vì thay vì có một khu vực làm việc mà bạn nhập mã, bạn thực sự đang nói với một môi trường để hành động trên văn bản. Đây là lý do tại sao mọi người nói những điều như với Vim bạn thực sự đang học một ngôn ngữ. : Wq và: s / foo / bar là một phần của môi trường giống như trình bao chỉnh sửa và đọc văn bản.

Mặt khác, Emacs gần với hầu hết các biên tập viên / bộ xử lý văn bản / v.v. bạn thấy hôm nay Bạn có một không gian làm việc có giao diện lập trình cao. Đó là lý do tại sao bạn thấy những thứ như email, irc, shell, v.v. Là một lập trình viên, thật dễ dàng để nghĩ theo cách nói "lấy số dòng tôi đang làm và làm gì đó với thông tin". Mong muốn rời khỏi trình chỉnh sửa trở nên ít hơn vì thay vì phải thoát, hãy mở một số ứng dụng / ngôn ngữ khác và thực hiện mọi thứ trên một số văn bản, bạn có Emacs nơi bạn có thể thực hiện những việc này trong phạm vi trình chỉnh sửa của mình.

Hai ý tưởng không nhất thiết phải tương phản, nhưng đơn giản là chúng tiết lộ hai trọng tâm khác nhau. Cá nhân tôi sử dụng Emacs, nhưng tôi đã thấy những người biết rõ về Vim và có thể nói một cách trung thực rằng đó không phải là vấn đề bạn chọn. Tôi đã thử Vim trước nhưng cuối cùng Emacs vẫn gắn bó với tôi. Đúng là cho dù bạn chọn gì, ít nhất bạn cũng nên thành thạo Vim vì nó thực sự luôn có sẵn.


13

Tôi bắt đầu với vi, đi đến emacs, rồi đến vim. Tôi đã nghĩ đến việc dùng thử Emacs để xem những gì đã thay đổi trong năm năm qua. (Nói về IDE, tôi đã bị nhật thực một thời gian, nhưng tôi thích cửa sổ đầu cuối của mình kết nối máy mac của tôi với hộp linux (của chồng).

Việc cắt và dán đã làm phiền tôi gần đây. Cắt và dán trong Vim mất nhiều bước hơn so với Emacs, IIRC. Và việc dán từ trình duyệt đến cửa sổ đầu cuối là khó chịu trừ khi bạn làm điều gì đó lạ mắt mà tôi không muốn làm, vì vậy tôi đã đưa ra cách thụt vào kỳ lạ. Tôi nghĩ rằng, chỉnh sửa nhiều tập tin trong emacs đã dễ dàng hơn. Ít nhất là nhảy từ tập tin này sang tập tin tiếp theo nếu bạn có cả hai trên màn hình.

Tôi đã không chơi với các tính năng ưa thích của vi hoặc emacs, vì tôi chỉ muốn bắt đầu kinh doanh tiền mã hóa. Tất cả những gì tôi cần là màu sắc đẹp và tab thích hợp để chuyển đổi không gian (đặc biệt quan trọng với python).

Tôi nghĩ tất cả phụ thuộc vào việc bạn muốn sử dụng :wqhoặc Ctrl-x Ctrl-s(IIRC) để lưu tệp nếu bạn không quan tâm đến nội dung ưa thích.

@mgb đã đúng. Tôi đã ở trong linux tối thiểu để sửa một cái gì đó chỉ một hoặc hai tháng trước trong một bản phân phối Debian. vi là biên tập viên duy nhất có sẵn.


1
Đây vẫn chưa phải là một và được thực hiện, nhưng nó dễ dàng hơn nhiều so với việc điều chỉnh tất cả các cài đặt làm rối các thiết bị đầu cuối. Sử dụng :set paste, sau đó dán văn bản của bạn và khi bạn hoàn thành :set nopastesẽ trở lại chế độ bình thường. Ngoài ra còn có :set pastetoggle=<F2>lệnh sẽ chuyển đổi điều này bằng cách sử dụng tổ hợp phím đã chọn của bạn.
hbar

Trong chế độ thụt lề, bạn có thể thực hiện ^R^P+để dán từ bảng ghi tạm và giữ thụt lề hiện tại. ^R^O+sẽ giảm thụt. ^R+sẽ chèn nó như thể bạn đã gõ nó. :help i_^R^Pđể biết thêm.
trực giác

3
Tôi không thể tưởng tượng việc cắt / dán trở nên dễ dàng hơn yyp. Ngoài ra, xem tại đây để cắt và dán vào và từ các cửa sổ khác nhau stackoverflow.com/a/8757876/654789
puk

@puk - Ctrl-k (yank) / Ctr-y (put) cũng dễ như trong emacs. Trong Emacs bạn cũng có nhiều thanh ghi (az), bạn có thể lưu văn bản hoặc vị trí hiện tại vào ...
Kendall Helmstetter Gelner

3
vim cũng có nhiều thanh ghi
TamaMcGlinn

12

Có một sự khác biệt rất lớn ở cấp độ hàng ngày - Vim (hoặc bất kỳ biến thể vi nào) vốn là phương thức (bạn chuyển sang chế độ lệnh mà bạn không thể chỉnh sửa) và Emacs (cùng với hầu hết các trình soạn thảo khác) thì không.

Chắc chắn, bằng cách sử dụng các menu và như vậy bạn không cần phải thực sự vào chế độ lệnh trong Vim - lúc đầu. Nhưng để sử dụng ngay cả một phần nhỏ sức mạnh của Vim, bạn sẽ làm được. Đó là trung tâm của cuộc tranh luận Vim / Emacs.

Cá nhân, tôi cũng nghĩ rằng Emacs có thể mở rộng hơn nhiều. Bạn có thể tìm thấy các gói Elisp cho nhiều thứ.

Tuy nhiên, tôi tò mò tại sao bạn lại nghĩ học một trong những điều này qua một IDE truyền thống hơn. Bạn muốn học một trong những thứ này để làm gì?


8
Tôi chỉ muốn tìm hiểu nó để xem nếu nó đứng lên với sự cường điệu của nó, phải trung thực. Tôi đã thấy cả hai người họ linh hoạt đến mức nào, và tôi đã thấy các chuyên gia thực hiện một số thứ khá điên rồ trong đó, và tôi muốn xem liệu nó có đáng để học hỏi không. Thêm vào đó, IDE của tôi không hỗ trợ Lisp. :)
Sasha Chedygov

3
Hừm. Vấn đề là có quá nhiều Emacs ... nhưng điều tôi vẫn để lại một IDE để sử dụng emacs là một loạt các tác vụ lặp đi lặp lại phức tạp, mà tôi tự động hóa bằng cách sử dụng ghi macro. Ví dụ: bạn có thể lấy một từ hoặc biểu thức hiện tại, sao chép từ đó vào "bộ đệm" (nghĩ rằng cắt / dán chỉ bạn có thể có nhiều hơn một), sau đó đi vào một tệp khác, nhập một số văn bản bằng cách sử dụng giá trị được sao chép và sau đó là một văn bản khác cũng đã sao chép giá trị, tiến con trỏ, lưu vị trí và quay lại bộ đệm đầu tiên ... sau đó lặp lại quy trình cho dòng tiếp theo của tệp gốc.
Kendall Helmstetter Gelner

1
Tôi đã sử dụng Macros rất nhiều trong cả vi và Emacs. Điều bạn đang thiếu là thực tế là Emacs có nhiều lựa chọn phương thức để truy cập trong khi sử dụng macro và thực tế là bạn có thể sử dụng bộ đệm cắt ở mọi nơi - ví dụ như ở giữa các thuật ngữ tìm kiếm. Xin vui lòng cho tôi biết làm thế nào bạn sẽ viết một macro sẽ chọn một từ của biểu thức dựa trên biểu thức chính quy, lấy thuật ngữ tìm thấy, tìm kiếm tài liệu khác về thuật ngữ đó và sau đó thay thế xung quanh nó?
Kendall Helmstetter Gelner

2
@ kendall-helmstetter-gelner - điều đó có thể với vimscript hoặc ngôn ngữ vim có các ràng buộc cho (như ruby ​​/ vim / tcl / perl). Bạn có quyền truy cập vào tất cả các chức năng và bộ đệm trình chỉnh sửa của vim từ các ngôn ngữ kịch bản.
segy

1
Điều đó thật ấn tượng nhưng để làm điều tương tự trong Emacs chỉ cần sử dụng tổ hợp phím tôi đã biết để tạo thành một macro phức tạp, thay vì phải viết nó ra bằng tay. Thật dễ dàng cho bất cứ ai biết emacs tạo ra một macro thực hiện nhiệm vụ đó nhưng tôi sẽ nói rằng không có nhiều người dùng VI có thể xây dựng macro mà bạn đặt ra mà không cần một lượng nghiên cứu hợp lý.
Kendall Helmstetter Gelner

11

Có rất nhiều điều đã được nói về cả hai biên tập viên, nhưng tôi chỉ có 5 xu để thêm. Cả hai biên tập viên đều tuyệt vời và bạn không thể sai với một trong số họ.

Tôi là một người dùng vi / vim khoảng 15 năm nay. Tôi đã thử chuyển đổi sang emacs nhiều lần nhưng mỗi lần phát hiện ra rằng vim thực sự có thể làm điều còn thiếu trong hộp mà không cần phải viết một phần mở rộng hay cài đặt một cái gì đó.

Đối với tôi, sự khác biệt chính trong các trình soạn thảo mà vim khiến bạn sử dụng môi trường / HĐH, trong khi các emacs cố gắng gói gọn nó hoặc thay thế nó. Chẳng hạn, bạn có thể thêm một ngày trong văn bản của mình bằng cách: r! Date in vim hoặc lịch bằng: r! Cal 1 2014 hoặc thậm chí thay thế nội dung của bộ đệm của bạn bằng phiên bản hex của nội dung. Ví dụ. :%! xxd, chỉnh sửa hex và sau đó quay lại với:%! xxd -r và nhiều cách sử dụng khác, như dựng sẵn grep, sed, v.v.

Một ví dụ khác là sử dụng với jqgron. Ví dụ. dán json blob vào trình chỉnh sửa và sau đó chạy cho tranifying:

:r!curl -s http://interesting/api/v1/get/stuff
:%!gron | grep 'interesting' | gron -u

HOẶC LÀ

:%!jq .path.to.stuff

Mỗi lệnh đường ống ở trên có thể được chạy riêng thông qua :%!<command>, %có nghĩa là tất cả tài liệu, nhưng cũng có thể được chạy trên vùng chọn, dòng được chọn, v.v ... Ở đây gron outputcó thể được sử dụng làm jqđường dẫn.

Bạn cũng có được chức năng chỉnh sửa hàng loạt EX, vd. Thay thế một số từ nhất định, định dạng lại mã, chuyển đổi dos-> unix ký tự dòng mới, chạy macro trên 100 tệp nói cùng một lúc. Nó dễ dàng được thực hiện với ex. Tôi không chắc chắn nếu emacs có một cái gì đó tương tự.

Nói cách khác, IMHO vim tiến gần hơn đến triết lý unix. Nó thường đơn giản và nhỏ hơn, nhưng nếu bạn biết HĐH và các công cụ của mình, bạn sẽ không cần nhiều hơn nó (VIM). Tôi chưa bao giờ làm.

Bên cạnh vi là tiêu chuẩn defacto trên bất kỳ hệ thống unix / linux nào, tại sao lại học cách sử dụng 2 công cụ làm cùng một việc. Tất nhiên một số hệ thống cung cấp mg hoặc một cái gì đó tương tự, nhưng chắc chắn không phải tất cả chúng. Unix + Vi <3.

Vâng, chỉ 5 xu của tôi.


8
"Vim tiến gần hơn đến triết lý unix." - Bạn đang nói ở đây về triết lý liên quan đến các công cụ có sẵn từ vỏ của bạn. Tuy nhiên, bản thân vỏ là một sự tích tụ lớn của các phần dựng sẵn, lịch sử, toàn cầu hóa, kiểm soát quá trình, khả năng lập trình, v.v. Emacs rõ ràng nằm gần hơn với triết lý của shell unix: cung cấp một môi trường tùy biến cao trong đó các công cụ có thể được sử dụng cùng nhau và giúp người dùng dễ dàng mở rộng bộ công cụ với các đoạn mã riêng khi chúng hoạt động. Tôi nghĩ rằng chúng ta có thể thấy rằng cả emacsvim đều bắt nguồn mạnh mẽ trong truyền thống unix.
Matt

1
Cám ơn bạn đã góp ý. Đó không phải là ý định của tôi để bắt đầu một cuộc chiến biên tập ở đây cũng không phải là để xúc phạm người dùng emacs . Tôi chỉ thấy dễ dàng và dễ mang theo hơn để gọi các lệnh thực tế từ shell (hoặc từ bên trong trình soạn thảo), trái ngược với việc viết các phần mở rộng phức tạp để gói gọn chức năng trong emacs , có xu hướng làm cho môi trường bị phình to theo thời gian. Tuy nhiên, các tiện ích mở rộng này phụ thuộc vào sở thích của người dùng và có thể được thực hiện nhưng không có nghĩa là được thực thi bởi một trong hai biên tập viên. Vì vậy, đồng ý với bạn về vị trí của emacsvi (m) trong truyền thống UNIX.
Alex

1
Chỉ để tiếp tục cuộc chiến, tôi hy vọng rõ ràng rằng tôi đã không đồng ý với sự tương tự của bạn "vim giống như một công cụ unix". Nó đơn giản xảy ra với tôi rằng trực giác này có thể được mở rộng với "và emacs giống như một vỏ unix". :-)
Matt

@Matt: Tôi thích sự tương tự. Amen đến đó. ;)
Alex

2
Bạn có thể làm mọi thứ bạn đề cập, và nhiều hơn nữa, trong emacs (ví dụ chế độ hexl sẽ đúng khi chỉnh sửa tệp trong hex với phần xem trước ascii sang một bên). Tôi cũng biết VI khá rõ, nhưng việc tạo macro dễ dàng và linh hoạt hơn rất nhiều trong Emacs, và nó có thể đơn giản thực hiện được nhiều hơn so với hầu hết các triển khai VIM hiện đại. Đó là lý do để biết điều đó, bởi vì emacs ở hầu hết các nơi và có thể cung cấp một sự tăng cường chỉnh sửa văn bản thực sự.
Kendall Helmstetter Gelner

10

Đối với tôi ưu điểm của emacs là,

  • chế độ tramp cho phép bạn chỉnh sửa các tập tin từ xa qua ssh. giống như các tập tin cục bộ.
  • tramp-mode + dired = máy khách sftp đầy đủ tính năng
  • hỗ trợ cho mọi ngôn ngữ bạn sẽ cần
  • được xây dựng trong trình giả lập thiết bị đầu cuối (chế độ hạn) để tôi có thể tiếp tục mã hóa mà không cần chuyển đổi giữa các ứng dụng.
  • khả năng mở rộng bất cứ điều gì bạn không thích bạn có thể thay đổi bằng cách sử dụng lisp.

11
FWIW: vim khá nhiều có 3 cái đầu tiên (mặc dù với các tên khác nhau. "Tramp-mode" là "netrw" trong vim). # 4 thường được coi là một lỗi, không phải là một tính năng của người dùng vim. # 5 là đúng trong vim nếu bạn thay thế "elisp" (phương ngữ tệ nhất từ ​​trước đến nay, những người bạn yêu mến Emacs của tôi nói với tôi) bằng python / mzscheme / perl / ruby ​​/ tcl / vimscript.
Laurence Gonsalves

3
Bạn có thể bình luận tại sao # 4 một lỗi?
Hamza Yerlikaya

2
Kiểm tra addon Conque cho một shell nhúng trong vim.
trực giác

9

Đối với tôi, emacs có các công cụ phát triển tốt hơn (không chỉ các công cụ dựa trên thẻ).


9

Tôi muốn đặt ở đây một trích dẫn từ cuốn sách "Nghệ thuật lập trình UNIX":

Nhiều người thường xuyên sử dụng cả vi và Emacs có xu hướng sử dụng chúng cho những thứ khác nhau và thấy nó có giá trị khi biết cả hai.

Nói chung, vi là tốt nhất cho các công việc nhỏ - trả lời nhanh thư, chỉnh sửa đơn giản cho cấu hình hệ thống và tương tự. Điều này đặc biệt hữu ích khi bạn đang sử dụng một hệ thống mới (hoặc một thiết bị từ xa qua mạng) và không có sẵn các tệp tùy chỉnh Emacs của bạn.

Emacs xuất hiện riêng cho các phiên chỉnh sửa mở rộng, trong đó bạn phải xử lý các tác vụ phức tạp, sửa đổi nhiều tệp và sử dụng kết quả từ các chương trình khác trong phiên. Đối với các lập trình viên sử dụng X trên bảng điều khiển của họ (điển hình trên các Unix hiện đại), việc khởi động Emacs ngay sau thời gian đăng nhập trong một cửa sổ lớn và để nó chạy mãi mãi, có thể truy cập hàng tá tệp và thậm chí chạy các chương trình trong nhiều luồng Emacs là điều bình thường.

Điều tôi thực sự muốn nhấn mạnh ở đây là: « Nhiều người thấy có giá trị khi biết cả hai


Điều này có lẽ đã lỗi thời. Tôi nghĩ rằng những ngày đó, khả năng sẵn có của Emacs là có Trình duyệt, SSH, Trình phát nhạc và các hệ thống chậm đã ngừng kích hoạt các ứng dụng khác khiến nó tin rằng tốt hơn là mở một ứng dụng và gắn bó với nó?
Nishant

Tin tuyệt vời là: nó không lỗi thời! Bạn có thể sử dụng Trình duyệt, Trình phát nhạc, v.v. ngoài Emacs nhưng những gì Emacs thực sự mang lại là cùng một giao diện tốt cho tất cả các chức năng này và một cách (Elisp) để mở rộng chúng.
Andriy Tykhonov

Theo tôi, quan điểm về Emacs của TAUP đã lỗi thời bởi vì, những ngày đó Emacs là một lợi thế để có một ứng dụng duy nhất có thể làm nhiều việc cùng một lúc - như irc, âm nhạc, chỉnh sửa từ xa, v.v. Tuy nhiên, ngày nay bạn có các ứng dụng tuyệt vời cho từng mục đích và bộ nhớ này không phải là vấn đề như trước đây ... Hãy tưởng tượng việc đọc Gmail trong Emacs - Ý tôi là giao diện Gmail thực sự có các phím bấm tuyệt vời được xây dựng, tùy chỉnh nó vào Ứng dụng email Emacs sẽ mất nhiều thời gian và có thể không tốt như Giao diện Gmail gốc, v.v.
Nishant

Nó không lỗi thời! :)
Andriy Tykhonov

> Tuy nhiên ngày nay bạn có các ứng dụng tuyệt vời cho từng mục đích này Có, nhưng bạn có tất cả các ứng dụng này với giao diện, cấu hình, trải nghiệm người dùng rất khác nhau, v.v ... Nhưng Emacs là Công cụ Một! Ví dụ, tôi rất thích các ràng buộc chính của Emacs, tôi sử dụng chúng trong trình bao trong trình duyệt. Và điều rất tốt là ít nhất một số thứ giống nhau trong các ứng dụng ...
Andriy Tykhonov

9

Lợi ích của Emacs

  • Emacs có cả giao diện không theo chế độ (theo mặc định) và giao thức theo chế độ (ví dụ: nó có thể mô phỏng vim và vi thông qua Evil, Viper hoặc Vimpulse).

  • Một trong những chương trình máy tính được port nhất. Nó chạy ở chế độ văn bản và dưới giao diện người dùng đồ họa trên nhiều hệ điều hành, bao gồm hầu hết các hệ thống giống Unix (Linux, các BSD khác nhau, Solaris, AIX, IRIX, macOSetc.), MS-DOS, Microsoft Windows, AmigaOS, và OpenVMS. Các hệ thống Unix, cả miễn phí và độc quyền, thường xuyên cung cấp Emacs kèm theo hệ điều hành.

  • Kiến trúc máy chủ Emacs cho phép nhiều máy khách gắn vào cùng một thể hiện Emacs và chia sẻ danh sách bộ đệm, hủy vòng, hoàn tác lịch sử và trạng thái khác.

  • Hệ thống trợ giúp trực tuyến phổ biến với các phím bấm, chức năng và lệnh được ghi lại khi đang di chuyển.

  • Biến thể ngôn ngữ lập trình Lisp có thể mở rộng và tùy biến (Emacs Lisp), với các tính năng bao gồm:

  • Trình quản lý tệp mạnh mẽ và có thể mở rộng (chuyển hướng), trình gỡ lỗi tích hợp và một bộ lớn các công cụ phát triển và các công cụ khác.

  • Có mỗi lệnh là một hàm Lisp của Emacs cho phép các lệnh thành DWIM (Làm những gì tôi có nghĩa) bằng cách lập trình trả lời các hành động và trạng thái tài liệu trong quá khứ. Ví dụ, lệnh chuyển đổi hoặc chia tách cửa sổ có thể chuyển sang cửa sổ khác nếu tồn tại hoặc tạo một cửa sổ nếu cần. Điều này cắt giảm số lượng tổ hợp phím và lệnh người dùng phải nhớ.

  • "Một hệ điều hành bên trong một hệ điều hành". Emacs Lisp cho phép Emacs được lập trình vượt xa các tính năng chỉnh sửa. Ngay cả một bản cài đặt cơ sở cũng chứa vài chục ứng dụng, bao gồm hai trình duyệt web, trình đọc tin tức, một số tác nhân thư, bốn ứng dụng khách IRC, một phiên bản ELIZA và nhiều trò chơi khác nhau. Tất cả các ứng dụng này đều có sẵn ở bất cứ nơi nào Emacs chạy, với cùng giao diện và chức năng người dùng. Bắt đầu với phiên bản 24, Emacs bao gồm trình quản lý gói, giúp dễ dàng cài đặt các ứng dụng bổ sung bao gồm các trình duyệt web thay thế, EMMS (Hệ thống đa phương tiện Emacs), v.v. Cũng có sẵn rất nhiều gói để lập trình, bao gồm một số nhắm mục tiêu vào các kết hợp ngôn ngữ / thư viện cụ thể hoặc các kiểu mã hóa.

Lợi ích của các biên tập viên giống như vi

  • Lệnh chỉnh sửa là composable
  • Vi có giao diện phương thức (mà Emacs có thể mô phỏng)
  • Trong lịch sử, vi tải nhanh hơn Emacs.
  • Mặc dù gắn liền với truyền thống UNIX, nó chạy trên tất cả các hệ thống có thể triển khai thư viện C tiêu chuẩn, bao gồm UNIX, Linux, AmigaOS, DOS, Windows, Mac, BeOS, OpenVMS, IRIX, AIX, HP-UX, BSD và POSIX hệ thống.
  • Có thể mở rộng và tùy chỉnh thông qua tập lệnh Vim hoặc API cho các ngôn ngữ được dịch như Python, Ruby, Perl và Lua
  • Phổ cập. Về cơ bản, tất cả các hệ thống giống Unix và Unix đều tích hợp vi (hoặc một biến thể). Vi (và ex, nhưng không phải vim) được chỉ định trong tiêu chuẩn POSIX.
  • Môi trường cứu hộ hệ thống, hệ thống nhúng (đáng chú ý là các môi trường có busybox) và các môi trường bị ràng buộc khác thường bao gồm vi, nhưng không bao gồm emacs.

Nguồn: https://en.wikipedia.org/wiki/Editor_war


7

Bây giờ bạn thậm chí không cần phải suy nghĩ về sự khác biệt giữa hai điều này vì Spacemacs . Nó là một bản phân phối Emacs hướng đến cộng đồng.

Như đã nói,

Trình chỉnh sửa tốt nhất không phải là Emacs hay vim, Đó là Emacs và Vim.

Spacemacs kết hợp tốt nhất từ ​​cả Emacs và Vim, giúp cuộc sống và công việc của bạn dễ dàng hơn nhiều.

Xem ảnh chụp màn hình bên dưới,


(nguồn: spacemacs.org )


3
Đây là gian lận ... Đó là emacs với một số cấu hình thú vị;) Thực sự có rất nhiều cấu hình
Alex

2
Điều này thật tuyệt - khi nó hoạt động. Khi điều đó không xảy ra - nếu bạn chưa biết elisp và emacs hoặc bạn không thể tìm thấy những người đóng góp cốt lõi trong trò chuyện gitter - bạn thường bị mắc kẹt và không gặp may. (đôi khi xóa thư mục melpa của bạn trong .emacs có thể khắc phục mọi thứ, mặc dù ...)
Aaron Hall

1
Mặc dù nó có nhiều thứ hơn tôi cần, tôi thực sự hài lòng với Spacemacs. Tôi có dotfiles của mình trên github để tôi có thể thiết lập máy mới một cách dễ dàng / nhanh chóng và vì tôi sử dụng ác (vim keybindings) nên tôi có đủ kỹ năng để làm việc khi tôi phải làm việc trên các máy mà tôi không thể cài đặt cấu hình spacemacs của mình.
anr78

6

Sự khác biệt lớn nhất đối với tôi khi chọn sử dụng emacs so với vim là sự hỗ trợ gdb tích hợp trong emacs. Vim không có điều này trong phân phối mặc định của nó và dự án tích hợp gdb và vim gần như không thể hoạt động với MacVim


1
Tôi đã sử dụng Vim để chỉnh sửa và Xcode để gỡ lỗi, nó ít hơn lý tưởng nhưng có thể thực hiện được ..
StackedCrooking

4

Nó giống như táo và cam. Cả hai đều có thiết kế và triết lý khác nhau. Vim là Trình soạn thảo văn bản trong khi Emacs là Trình thông dịch Lisp thực hiện Chỉnh sửa văn bản.

Tôi sử dụng Vim vì nó nhanh, lắt léo và thực sự giỏi trong việc điều khiển văn bản. Nó có một ràng buộc khóa tự nhiên có thể kết hợp có thể làm cho các nhiệm vụ phát triển của bạn thực sự hài hòa. Vim dựa trên philiosphy đơn giản * làm một việc thực sự tốt - tức là Thao tác văn bản.

Mở rộng Vim bằng bash / zsh và tmux thường dễ dàng và cho phép bạn học được rất nhiều thứ. IMHO đây là một đường cong học tập tốt. Điều quan trọng là học cách tích hợp những thứ này để có được một ứng dụng làm việc lớn hơn. Với Vim, bạn sẽ cần học tích hợp vì nó không tích hợp một cách tự nhiên trừ khi bạn nói với nó cách làm. Một phần mở rộng đáng giá khác mà tôi sử dụng là Tig. Đây là một tiêu đề dựa trên Git. Tôi chỉ có một ràng buộc mở ra âm thầm Tig và sau đó tôi làm tất cả những thứ Git ở đó.

Tùy thuộc vào người dùng cuối để quyết định những gì hoạt động tốt nhất. Việc Emacs và Vim đứng trước thử thách của thời gian là bằng chứng cho sự xứng đáng của họ. Cuối cùng, một lập trình viên giỏi không cần gì nhiều hơn một cây bút và một tờ giấy để sáng tạo. Các thuật toán tốt không cần người chỉnh sửa để sao lưu chúng. Vì vậy, hãy thử cả hai và xem những gì làm cho bạn năng suất hơn. Và tìm hiểu các mẫu thiết kế từ cả hai phần mềm này vì có rất nhiều điều để tìm hiểu và khám phá!



3

Emacs thực sự là một chương trình làm mọi thứ và vi (m) thực sự chỉ là một trình soạn thảo. Nếu bạn đang chỉnh sửa văn bản, cả hai đều ổn, nhưng tôi thích emacs hơn, đơn giản vì tôi phải chuyển một hàng ra khỏi hàng nhà để di chuyển xung quanh và tiếp tục gõ những thứ sai trong chế độ lệnh. Tôi không có vấn đề đó, vi (m) có thể là biên tập viên cho bạn.


2

Một quan điểm vàng da:

vi (không phải vim) là một sự cần thiết chuyên nghiệp. Bạn luôn có sẵn một số dạng vi dễ dàng, bất kể môi trường nào. Bạn có thể ở vi khi ở trong emacs, bạn có thể ở vi để xây dựng các lệnh bash trong unix-land.

Ngay cả microsquish cũng phải hỗ trợ vi (mặc dù họ làm rất tốt việc che giấu nó) vì chính phủ và công ty tuân thủ các tiêu chuẩn được công bố.

Theo tôi, nếu bạn đang làm việc thực tế trong môi trường bận rộn - không phải là một bông hoa nhà tù bị giam cầm trong một giàn khoan ưa thích trong môi trường phát triển, hoặc trong học viện - biết nhiều về một biên tập viên ưa thích là một khuyết tật công việc. Đừng tìm hiểu tất cả các thủ thuật ưa thích trong vim hoặc emacs và đừng phát triển một loạt các macro để làm cho môi trường chỉnh sửa uốn cong theo ý bạn. Đó là một khoảng thời gian khổng lồ cản trở bạn khi bạn tham gia vào các máy khác nhau mà bạn có thể không thể biện minh được trong môi trường nhà máy.

Đọc bài viết của Bill Joy - đây là một bài tập kỹ thuật rất có thẩm quyền, thậm chí là đẹp, trong việc chỉnh sửa văn bản đơn giản rất, rất nhanh. Quy tắc của Parito áp dụng ở đây: 80% trái cây nằm trong 20% ​​giỏ. Chỉnh sửa văn bản đơn giản rất nhanh là mấu chốt của năng lực chỉnh sửa - tất cả những thứ khác là tùy chọn - và đôi khi gây tổn thương.


3
Bạn đang nói về tờ giấy nào? Bạn ít nhất có thể đặt tên, nếu không phải là một liên kết?
darkfeline

2
"Ngay cả MS cũng phải hỗ trợ vi." Bạn có thể sao lưu này?
dodgethesteamler

1

Nếu bạn di chuyển nhiều từ trang này sang trang khác hoặc công việc của bạn liên quan đến việc đăng nhập vào hệ thống sản xuất thì vim là cách để đi.

Tất cả các máy * nix sẽ được cài đặt vi theo mặc định.

Hầu hết các sysdamin thích ksh làm vỏ mặc định. ksh sử dụng tổ hợp phím vi (hoặc emacs) để tìm kiếm lịch sử và chỉnh sửa dòng lệnh.

Nếu bạn không biết rõ, bạn sẽ bị tàn tật nặng nề khi đăng nhập vào hộp unix với cấu hình tiêu chuẩn.

Vì lý do này một mình tôi muốn giới thiệu vim như là biên tập viên bình thường hàng ngày của bạn. Tôi đã thấy những người hâm mộ emacs xé tóc ra khi cố gắng sửa đổi các tập tin cấu hình trên một máy chủ unix xương trần.


1
Đối với bash hãy thử sử dụng set -o vitrong của bạn .bashrc, thay vì set -o emacs, được sử dụng theo mặc định. Tôi không bao giờ sử dụng ksh, nhưng nó có thể giống nhau.
sjas

1

Trong câu hỏi của bạn, bạn đã không đề cập rằng bạn muốn nó lập trình trong Lisp! Nhưng như bạn đã nhận xét câu trả lời của mình, tôi đã hiểu rằng bạn thực sự muốn có giao diện lập trình LISP.

Đối với nhiệm vụ chính xác đó, chỉ cần quên Vi. Tích hợp Emacs với LISP thật tuyệt vời! Bạn nên sử dụng SLIME. Sau đó, bạn sẽ có sự tích hợp tuyệt vời với REPL, có thể thực hiện các evalchức năng, bộ đệm hoặc tệp trực tiếp vào một trình thông dịch đang chạy trong bộ đệm emacs và hơn thế nữa ...


1
Vâng, tôi biết điều này, nhưng tôi tìm kiếm một biên tập viên Lisp đàng hoàng không phải là lý do của tôi để hỏi câu hỏi này - đó chỉ là một ví dụ. Cảm ơn đã phản hồi mặc dù!
Sasha Chedygov

1

Tôi đã làm việc với spacemacs khoảng 2 năm và neovim khoảng một năm nay trong môi trường sản xuất / nghiên cứu. Spacemacs là emacs với một vài tính năng bổ sung tuyệt vời như các lớp, v.v. Và neovim là một nhánh của vim một lần nữa với một số tính năng bổ sung.

Tôi khá không hài lòng với cả hai về kinh nghiệm. Và tôi vẫn đang tìm kiếm một giải pháp lâu dài cho nhu cầu chỉnh sửa văn bản của mình.

Đây là một so sánh đơn giản:

  • Neovim, vim, emacs, spacemacs, v.v ... tất cả các biên tập viên đó đều tiêu thụ ít nguồn tài nguyên hơn so với hầu hết các biên tập viên ngoài kia.

  • Neovim / vim nhanh hơn một chút so với emacs, nhanh hơn đáng kể so với spacemacs.

  • Về mặt kinh nghiệm chỉnh sửa. Tôi có thể dễ dàng nói rằng các gói emacs cảm thấy vượt trội. Tôi nghĩ đó là bởi vì chúng kết hợp tốt hơn với cốt lõi của emacs.

  • Vimscript rất hay và chắc chắn cũng có những dự án tuyệt vời trong hệ sinh thái vim. Điều tốt là chúng được ghi nhận tốt hơn hầu hết các dự án emacs tôi đã thấy cho đến nay.

  • Cả hai có thể bị trục trặc tùy thuộc vào gói bạn đang sử dụng. Spacemacs có xu hướng đóng băng, và neovim có xu hướng hiển thị các thông báo lỗi đáng sợ, vì vậy hãy chọn chất độc của bạn ở đó.

  • Chỉnh sửa phương thức trong vim, không phải là một khái niệm trực quan, nhưng một khi bạn đã quen với nó, bạn sẽ muốn nó. Cả hai biên tập viên cung cấp rằng.


1
"Chỉnh sửa phương thức (...) một khi bạn đã quen với nó, bạn muốn nó ở bất kỳ đâu" - điều đó thật thú vị. Tôi đã dành nhiều năm để sử dụng Emacs với chế độ tà ác, và sử dụng để chỉnh sửa phương thức, và bây giờ trở lại không theo phương thức ... Nó chỉ cảm thấy tốt hơn. Tôi nghĩ rằng điều này không chỉ phụ thuộc vào con người, mà còn phụ thuộc vào bối cảnh / thời gian trong cuộc sống / bất cứ điều gì. Hương vị, tôi cho rằng. :)
Jay

1
@ Tôi đoán, nhưng bạn không bỏ lỡ, những thứ như chọn cột và nhảy xung quanh với ": XX"?
Kaan E.

Không thực sự ... đôi khi tôi sử dụng lựa chọn hình chữ nhật của Emacs và thay vì: xx Tôi thực hiện "Mg g XX" - một vài lần nhấn phím, nhưng tôi hiếm khi cần phải đi thẳng vào một dòng. Thông thường, một ứng dụng Emacs (trình gỡ lỗi, v.v.) sẽ gửi tôi đến đúng dòng.
Jay

0

Thực hiện tổ hợp phím ::: vi chỉnh sửa giữ lại từng hoán vị của các phím đã nhập. Điều này tạo ra một đường dẫn trong cây quyết định xác định rõ ràng bất kỳ lệnh nào, trong khi các lệnh Emacs là sự kết hợp của các phím được gõ ngay lập tức, khiến người dùng có quyền lựa chọn sử dụng lệnh hay không.

Sử dụng bộ nhớ và khả năng tùy biến ::: vi là một chương trình nhỏ hơn và nhanh hơn, với khả năng tùy chỉnh hạn chế hơn, trong khi đó, Emacs mất nhiều thời gian hơn để khởi động và cần nhiều bộ nhớ hơn. Tuy nhiên, nó có khả năng tùy biến cao và bao gồm một số lượng lớn các tính năng, vì về cơ bản nó là môi trường thực thi cho chương trình Lisp được thiết kế để chỉnh sửa văn bản.


0

vim là một trình soạn thảo tiện dụng, bạn gõ đơn giản vim filenameđể mở tệp, chỉnh sửa, lưu và đóng.

emacs là một "hệ điều hành" giả vờ là một biên tập viên, bạn có thể evalviết mã để thay đổi hành vi của nó và mở rộng nó theo ý muốn. A modeđể nhận / gửi email trên emacs giống như một phần mềm email trên hệ điều hành.

Khi thực hiện chỉnh sửa đơn giản, ví dụ, sửa đổi tệp cấu hình, tôi sử dụng vim .

Nếu không, tôi không bao giờ rời khỏi emacs .


0

Tôi nghĩ rằng sự khác biệt chính là mục tiêu thiết kế. VIM dành cho UNIX là một trình soạn thảo hoạt động. Emacs dành cho các tin tặc GNU và lisp, vì vậy nó có một số yếu tố thiết kế hỗn hợp.

Tôi sử dụng vim trên máy trạm của mình, trong khi tôi cũng thích emacs.


0

Tôi là một người hâm mộ Emacs nhưng khuyến khích các nhà phát triển khác học VI vì:

  1. bạn có thể sử dụng VI để chỉnh sửa các tệp thực hiện emacs.
  2. VI bao gồm các lệnh ed và mọi người dùng UNIX nên biết ed và sed.

Tôi đã nhận thấy một số ý kiến ​​về VIM bắt đầu nhanh hơn emacs. Nếu bạn thực sự quan tâm đến điều đó, hãy chạy emacs ở chế độ máy chủ và bí danh 'emacs' thành 'emacsclient'. Máy khách cực nhanh vì tất cả những gì nó làm là chạm vào máy chủ trên vai và nói cho nó biết tập tin nào bạn muốn chỉnh sửa. Trên MacOSX, emacsclient chỉ có 33K trong khi emacs là 287M.

Tôi không chắc chắn bất kỳ điều này là cần thiết trên phần cứng hiện đại. Trên MacBook Pro của tôi (2013 Retina), emacs tải gần như ngay lập tức khi tôi chạy nó từ vỏ. Tôi phát hiện không có tạm dừng ở tất cả. Khi tôi chạy Emacs.app (phiên bản GUI), có thể mất tất cả 3 giây.

Hầu hết các khiếu nại tôi nghe về emacs dường như đến từ những người hiểu sai về emacs. Đã sử dụng cả vi và emacs từ năm 1982, tôi chắc chắn nhớ một thời gian các emac tải chậm hơn vi và sử dụng hầu hết bộ nhớ vật lý trong các hộp UNIX đầu tiên của tôi, nhưng đó không còn là trường hợp nữa và đã không còn ít nhất 15- 20 năm.

Một khiếu nại tôi sẽ thừa nhận là "emacs Pinkie". Điều này không bao giờ làm phiền tôi khi tôi còn trẻ. Bây giờ tôi 58 tuổi, Pinkie của tôi có một chút đau khi liên tục truy cập vào phím Control để theo dõi emacs. Điều này đặc biệt đúng trên bàn phím MacBook Pro nơi Control được di chuyển một vị trí sang bên phải để nhường chỗ cho phím "fn". Nó gần như không gây khó chịu khi Control là phím dưới cùng bên trái.


Bạn cũng có thể "đổ" emacs, về cơ bản có nghĩa là chụp ảnh nhanh các tiện ích mở rộng đã được biên dịch mà bạn mong muốn. Emacs bắt đầu nhanh hơn nhiều theo cách này, nhưng phải mất một chút thời gian để xác định tiện ích mở rộng nào bạn muốn đưa vào.
Phil Harbison

Ngoài ra, bạn có thể chơi "Towers Of Hà Nội" trong emacs. Làm thế nào là mát mẻ? :)
Phil Harbison

Re: "emacs Pinkie". Trên một số bàn phím cũ hơn, ví dụ: Sun Type 3/4, mà HHKB Professional dựa trên, Điều khiển được đặt ở vị trí Caps Lock thông thường. Tôi không có trải nghiệm emacs mà bạn có, tuy nhiên, tôi rất nhanh chóng quen với việc có Control trên hàng nhà. Đến nỗi tôi đã thực hiện thay đổi đó trên tất cả các bàn phím của mình (MacBook Pro cũng vậy). HHKB có một số cải tiến hơn nữa, ví dụ, Backspace ngay phía trên Enter và Esc bên cạnh 1.
martinweiss

@PhilHarbison có thể giải thích chi tiết về "bãi rác"?
A_P

0

Tôi là người dùng vim trước, sau đó tôi chuyển sang emacs, sau đó sang vim, bây giờ tôi lại thử nghiệm với emacs.

  • Cả hai đều là những biên tập viên tuyệt vời.
  • Cả hai đều rất mở rộng ngày hôm nay
  • Cả hai đều có plugin và cộng đồng tuyệt vời

Khi các nhà phát triển chúng tôi gõ rất nhiều, và cuối cùng đối với tôi, di chuyển trong bộ đệm và tệp là các tác vụ lặp đi lặp lại lớn nhất, vì vậy tôi muốn có một trình soạn thảo nơi tôi CÓ THỂ DI CHUYỂN NHANH CHÓNG!

Động lực để thử nghiệm với emacs một lần nữa là tôi đã làm cho nó Ctrl dẫn đến các phím bấm nhanh hơn vim và dễ dàng lý luận hơn.

Trong vim bạn có các chế độ, bạn có chế độ chèn, chế độ trực quan, chế độ bình thường, điều gì xảy ra khi bạn nhấn một cái gì đó phụ thuộc vào chế độ mà bạn đang sử dụng, là một trạng thái phù hợp để chỉnh sửa. Bạn di chuyển, nhập vào chế độ chèn, chỉnh sửa, thoát khỏi chế độ chèn và di chuyển lại. Tôi thường xuyên đánh mất bản thân nếu tôi bỏ lỡ một ấn ESC hoặc đại loại như thế này.

Trong emacs không có chế độ, về cơ bản, bạn nhấn Ctrl bằng màu hồng và gõ tổ hợp phím, như Cx Cf, Cx Cs, Cx Cc. Có những keybind mà bạn cần giải phóng khóa ctrl, tôi ghét cái này và luôn thay thế chúng bằng những phím bấm được điều khiển.

Tôi nghĩ rằng cách tiếp cận emacs nhanh hơn để suy nghĩ và loại, nhưng vim có một sức mạnh khác, để. Các lệnh của nó có thể ghép lại được, chúng thường có định dạng. Ví dụ: để xóa một dòng bạn có thể sử dụng dd, để xóa một từ dw. Các plugin sử dụng tính năng chặt chém đó, với plugin vim-Surround, bạn có thể xóa các trích dẫn bằng DS "(xóa vòm"), xóa đến tiếp theo / dt/. Xóa lên đến trước /: dT/vân vân. Vì vậy, miễn là bạn học được những điều di chuyển bắt đầu trở nên rất thú vị.

Tóm tắt, hôm nay tôi đã nói rằng các phím bấm của emacs nhanh hơn để chỉnh sửa macro và các lệnh vim mạnh mẽ hơn cho vi điều khiển

Tôi đã sử dụng vim trong năm năm qua vì vậy tôi chỉnh sửa suy nghĩ chủ yếu về các từ, dòng, xung quanh, khối, v.v. Xóa dòng này, xóa dấu ngoặc kép, thay thế dấu ngoặc kép, xóa từ trong con trỏ, tôi đang cố gắng tìm ra emacs di chuyển cho điều đó

Như một trích dẫn cuối cùng tôi sẽ nói rằng, tôi quan tâm đến fzf hơn là về emacs hoặc vim, tôi rất thích có một trình soạn thảo hoàn toàn dựa trên fzf


-9

Thứ nhất Vi (nhận thức ban đầu) không được sử dụng ngày hôm nay. Mà bạn nói là một số dẫn xuất Vim.

Để mở rộng chức năng Vim, bạn phải biên dịch lại Vim, Emacs không.

Emacs có Vim tự (chế độ viper).

Emacs thường cần cài đặt thủ công, Vim thường được cài đặt sẵn trên tất cả các hệ điều hành Unix như OS (nhưng nếu bạn có quyền truy cập ssh để lưu trữ chế độ tramp win Vim :).

Nếu bạn thử Vim, bạn ghét Emacs, vì vậy hãy bắt đầu từ Emacs trước.

Đồng thời đọc http://www.dina.dk/~abraham/reluda/vi-tutorial.html (liên kết đi xuống để sử dụng cái này )

Tìm kiếm Anwer trong hxxp: //en.wikipedia.org/wiki/Editor_war


8
Bạn không cần phải biên dịch lại vim để mở rộng nó. Bạn thậm chí không cần phải bỏ vim.
quá nhiều php

1
Có vimscript / Python / Ruby / etc truy cập vào tất cả các cấu trúc bên trong Vim không? Nếu codebase biên tập giúp mở rộng hoặc độ phức tạp của độ mở rộng trên một mức độ phức tạp của EDITOR?
gavenkoa

1
Phần lớn các tập lệnh Vim như MACROS không chọn lọc. Để mở rộng Vim, bạn cần các plugin ((
gavenkoa

1
Vi không được sử dụng?!?! Gì? Là nvi được coi là bản gốc? Hay một 'vi truyền thống'? Rất nhiều hệ thống như FreeBSD, ArchLinix gói vi hoặc nvi truyền thống và tôi rất biết ơn vì điều đó. Một số hệ thống như Debian đi với vim ở chế độ tương thích theo mặc định (cảm giác gần giống như vi truyền thống)
Alex

1
@gavenkoa, tôi hoàn toàn đồng ý với Alex, rõ ràng bạn chưa bao giờ thử một hệ thống yêu cầu cài đặt thủ công như Gentoo, một số BSD hoặc Arch Linux. Ngoài ra, «Nếu bạn thử Vim, bạn ghét Emacs, vì vậy hãy bắt đầu từ Emacs trước.» sẽ khiến tôi thử VIM trước, và bạn cũng vậy, nếu bạn suy nghĩ một chút. Điều đó nhắc nhở tôi về những người nói không nên thử lập trình chức năng trước. Tôi buồn tôi đã không thử nó sớm hơn ...
JMCF125
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.