Emacs và Vim là hai trình soạn thảo văn bản được sử dụng rộng rãi nhất trên
Vim sử dụng các chế độ chỉnh sửa - phổ biến nhất là chế độ lệnh và chế độ chèn. Vim nhằm mục đích giảm thiểu số lượng tổ hợp phím mà người dùng phải nhấn, bởi vì vi, dựa trên Vim, được thiết kế để sử dụng trên các thiết bị đầu cuối chậm.
Emacs sử dụng các phím bổ trợ để bật các phím tắt, thường bao gồm nhấn nhiều phím đồng thời cho một chức năng. Khía cạnh này của Emacs thường bị chỉ trích.
Emacs dễ học hơn vì nó có giao diện tự nhiên hơn (đối với người dùng quen thuộc với trình soạn thảo văn bản dựa trên GUI). Vì Vim có các chế độ chỉnh sửa khác nhau, người mới bắt đầu thấy khó học hơn một chút.
Những người đam mê Vim lập luận rằng một khi người dùng làm quen với các chế độ và lệnh chỉnh sửa của Vim, nó cho phép năng suất và hiệu quả cao hơn nhiều. Chỉnh sửa tệp thường nhanh hơn với Vim so với Emacs vì giao diện điều khiển tốc độ có chủ đích của Vim. Ví dụ, chuyển động con trỏ có thể được kiểm soát thông qua H, J, K, và L chìa khóa trong chế độ bình thường. Điều này có nghĩa là tay của người dùng không cần rời khỏi vị trí "hàng gia đình", điều này giúp cải thiện hiệu quả, nhưng đi kèm với giá thêm chi phí vì chuyển đổi chế độ là bắt buộc để chọn giữa chuyển động và chỉnh sửa văn bản. Trong Emacs (với cấu hình mặc định), người dùng di chuyển con trỏ bằng phím tắt Ctrl-B hoặc Ctrl-F, điều này có thể làm chậm người dùng mới làm quen vì cần nhấn hai phím. Cải thiện năng suất và hiệu quả trong Emacs phụ thuộc vào cấu hình của môi trường chỉnh sửa thay vì chính trình soạn thảo.
Vim nhẹ hơn Emacs và sử dụng ít bộ nhớ hơn. Những người ủng hộ Vim chỉ trích việc tiêu thụ tài nguyên của Emacs với lời đề nghị truyền miệng rằng Emacs là viết tắt của "Tám mươi Megabyte và liên tục hoán đổi".
Tuy nhiên, với gnuclient, một quy trình Emacs duy nhất có thể được chạy có thể hỗ trợ nhiều khách hàng cùng một lúc. Điều này tăng tốc thời gian khởi động và giảm tổng mức sử dụng bộ nhớ, thu hẹp khoảng cách giữa Emacs và Vim.
Trong khi cả Vim và Emacs đều hỗ trợ các plugin tăng cường chức năng của chúng, Emacs hỗ trợ nhiều tùy chỉnh hơn cho môi trường soạn thảo. Đây được cho là tính năng quan trọng nhất của emacs và chịu trách nhiệm cho phần lớn sự cống hiến của emacs.
Emacs có thể được mở rộng trong elisp, trong khi Vim có ngôn ngữ kịch bản nội bộ riêng và hỗ trợ sử dụng các ngôn ngữ lập trình khác để phát triển plugin.
Emacs có thể được mở rộng nhanh chóng bằng cách xác định lại các hàm elisp tích hợp, bằng cách nhập định nghĩa mới vào Emacs hoặc bằng cách tải các tệp elisp. Các nhóm thay đổi liên quan được gọi là "chế độ" và có thể dễ dàng được cấu hình để tự động sử dụng cho các loại tệp (bộ đệm) cụ thể. Vì vậy, thật dễ dàng để xác định các chế độ cho các ngôn ngữ lập trình hoặc khung khác nhau, chẳng hạn như "chế độ lisp" hoặc "chế độ Ruby on Rails" hoặc "chế độ PHP". Các chế độ này có thể trực tiếp sửa đổi ngay cả các hành vi cốt lõi của Emacs, tự động định dạng hoặc tô màu văn bản và thêm mẫu tiêu chuẩn hoặc văn bản "soạn sẵn" như khai báo hàm và đóng. Vì vậy, các lập trình viên thấy Emacs có thể tùy biến nhiều hơn theo yêu cầu cụ thể của họ so với Vim. Tuy nhiên, một số lập trình viên có thể thấy Vim cuối cùng phù hợp hơn với môi trường lập trình của họ do hoạt động theo phương thức hoàn toàn tùy biến và hoàn toàn không kém.
Vim cũng có thể được mở rộng khi đang bay bằng cách sử dụng chế độ lệnh. Chế độ lệnh cho phép các tùy chọn cấu hình được đặt, các chức năng được xác định và macro được thực hiện. Trên thực tế, các tệp cấu hình cho Vim chỉ là các lệnh có thể được nhập thông qua chế độ lệnh.
Cả Vim và Emac đều có giao diện người dùng đồ họa. Hầu như tất cả các mục menu trên giao diện đồ họa cho cả hai trình soạn thảo chỉ đơn giản là cách xử lý lệnh tắt hoặc cấu hình nhanh. GUI cho trình soạn thảo không cung cấp hầu như bất kỳ chức năng bổ sung nào ngoài các chức năng có sẵn trong CLI (giao diện dòng lệnh)
Emacs sử dụng XDisplay hoặc gtk2 cho GUI của nó. Vim có thể sử dụng nhiều thư viện GUI khác, chẳng hạn như gtk, gnome, gnome2, motif, athena và neXtaw, ngoài gtk2.