Programing

Emacs와 Vim의 차이점

lottogame 2020. 10. 2. 21:21
반응형

Emacs와 Vim의 차이점


왜 하나가 다른 것보다 나은지에 대한 종교적 논쟁을하지 않고 Emacs와 Vim 실질적인 차이점은 무엇입니까? 나는 둘 중 하나를 배우고 싶지만 각각의 학습 곡선이 높고 결정할 수 없다는 것을 알고 있습니다. 이 유형의 편집기를 사용한 적이 없기 때문에 (항상 IDE를 사용했습니다) 초보자에게 도움이되는 모든 것이 장점입니다.


화염 전쟁이 시작되기 전에 : 나는 어느 것이 더 나은지 묻는 것이 아니라 둘의 차이점을 묻는 것입니다. 객관적인 비교를 원합니다 .


(아래 텍스트는 제 의견입니다. 사실이나 모욕으로 받아 들여서는 안됩니다.)

Emacs를 사용하면 연중 무휴 24 시간 열려 있고 프로그램 내에서 살아야합니다. 거의 모든 작업을 여기서 수행 할 수 있습니다. 자신 만의 확장 프로그램을 작성하고 메모 작성, 구성, 게임, 프로그래밍, 셸 액세스, 파일 액세스, 음악 듣기, 웹 검색에 사용합니다. 당신이 그것에 만족할 때까지 몇 주, 몇 주가 걸리고 항상 새로운 것을 배우게 될 것입니다. 액세스 권한이없고 구성을 지속적으로 변경하면 짜증이납니다. 다른 사람들의 emacs 버전을 쉽게 사용할 수 없으며 단순히 설치되지도 않습니다. 그것은 대단한 Lisp를 사용합니다. 원하는대로 만들 수 있습니다. (무엇이든)

Vim은 거의 항상 사전 설치되어 있습니다. 빠르다. 파일을 열고 빠르게 편집 한 다음 종료합니다. 다른 사람의 컴퓨터에있는 경우 기본 설정으로 작업 할 수 있습니다. 그렇게 편집 할 수는 없지만 대부분의 텍스트 편집기보다 훨씬 낫습니다. 대부분의 시간을 입력하지 않고 읽고 편집하는 것을 인식하고 해당 부분을 더 빠르게 만듭니다. 당신은 emacs pinkie로 고통받지 않습니다 . 그렇게 화 나지 않습니다. 배우기가 더 쉽습니다.

당신이 선택한 프로그램에 많은 시간을 할애하지 않는 한 매일 Emacs를 매일 사용하지만 (그리고 그것을 좋아한다) 나는 vim을 선택합니다


Vim은 셸이 아닙니다. 그리고 하위 프로세스와 잘 통신하지 않습니다. 이것은 거의 의도적으로 설계된 반면 Emacs에서는 이러한 요소가 설계에 포함되어 있습니다. 즉, 디버거 나 인터프리터 (일종의 IDE 생성)를 포함하는 것과 같은 일부 작업은 Vim에서 어렵습니다.

또한 Emacs 단축키는 주로 수정자를 통해 액세스되며, 분명히 Vim 인터페이스는 모달로 유명하여 조작을 위해 엄청난 양의 직접 키에 액세스 할 수 있습니다.

Emacs는 프로그래밍 가능한 두 가지의 유일한 편집기였으며 Vim은 Python 및 Ruby 바인딩을 추가하여 프로그래밍 가능성에 대해 이상한 수준을 많이 가지고 있지만 Vim은 대부분의 방법으로 프로그래밍 할 수 있습니다. 당신은 관심을 가질 것입니다.

저는 Vim을 사용하는데 상당히 만족합니다.


정력:

  • 간단한 편집기로 더 좋습니다 (단순 작업에 필요한 키 감소).
  • 더 활발한 스크립팅 커뮤니티-내부 언어 : vimscript
  • 스크립트, 플러그인, 색 구성표, ...
  • python, ruby에서도 확장 가능
  • 휴대용으로 만들 수 있음 (emacs에는 문제가 있음)

Emacs :

  • 기본적으로 모달이 아닙니다 (오늘날 대부분의 편집자는이 접근 방식을 사용했습니다). vim 행동을 모방하는 악의 모드 가 있지만 .
  • 확장을위한 더 강력한 언어 (elisp는 완전한 언어이며 emacs에서는 거의 모든 것을 재정의 할 수 있습니다. 반면 vim에서는 편집기의 기능을 재정의 할 수 없습니다. 단점은 vimscript가 오늘날의 동적 언어와 비교적 유사하지만 elisp는 거의 닮지 않음)
  • 더 확장 가능
  • GNU 도구에 대한 탁월한 지원 (그들)

개인적으로 저는 vim을 선호합니다. 작고,해야 할 일을하고, 완전한 IDE를 원할 때 VS를 엽니 다. IDE (또는 OS라고 말해야한다면)가되고 싶은 편집기가되는 Emacs의 접근 방식은 구식 인 IMHO입니다. 예전에는 이메일 클라이언트, ftp 클라이언트, 테트리스, ... 하나의 패키지 (emacs)에 포함되지 않은 것들이 어느 정도 의미가있었습니다. 오늘날에는 더 이상 그렇지 않습니다.

그러나 둘 다 프로그래머와 수퍼 유저 커뮤니티 사용자 사이의 종교적 토론의 주제이며, 그 점에서 둘 다 접촉하면 불꽃 전쟁을 시작하는 데 탁월합니다 (같은 문장 / 질문에서).


두 편집자 모두에 대한 객관적인 분석을 찾고 있다면 그들의 기원과 각각의 디자인이면에있는 철학을 살펴보십시오. 어느 것이 당신에게 더 잘 맞는지 생각하고 배우십시오 (그리고 IDE에 대한 진정한 유틸리티를 발견하기까지 시간이 걸리기 때문에 배우고 배우십시오). 소개는 바이올렛과 편집을 표시하는 빌 조이 (Bill Joy)와 마크 호튼에 의해 작성되었습니다 그는 다양한 키 스트로크 (가 CTRL-W + W (다음으로 전환됩니다 것을 기억하는 것이 나에게 도움을위한 모달 디자인과 이론적 근거를 선택하는 이유라고 그는 설명 W indow과 CTRL 키를 길게 누른 경우에만 CTRL W + CTRL W도 동일합니다.

다음은 Emacs 타임 라인에 대한 링크 이며 Multics Emacs 문서에 대한 참조가 있습니다. 여기에 Emacs 에 대한 RMS 논문이 있습니다 . 여기서 스트레스는 프로그래밍 가능한 텍스트 편집기에 있습니다 (심지어 1981 년 이전에도).

나는 emacs 논문을 읽지 않았지만 Bill Joy의 vi 논문을 몇 번 읽었습니다. 둘 다 오래되었지만 여전히 철학을 얻을 수 있으며 현재 도구 (vim 7.x 또는 emacs 25?)를 사용하도록 선택할 수 있습니다.

편집 : 나는 그것을 읽는 동안 시간을 ​​거슬러 올라 가기 때문에이 두 논문을 읽으려면 인내와 상상력이 필요하다는 것을 언급하는 것을 잊었습니다. 그러나 가치가 있습니다.


  1. Vim은 항상 Emacs보다 빠르게 시작했습니다. 어떤 컴퓨터에서든 Vim의 기본 설치는 Emacs의 기본 설치보다 더 빨리 시작될 것입니다. 그리고 어느 쪽이든 적당히 사용자 정의한 후에도 Vim이 Emacs보다 더 빨리 시작될 것이라고 생각하는 경향이 있습니다.

  2. 그 후, 다른 실질적인 차이점은 Emacs의 모드였습니다. XML, C / C ++ / Java / 무엇이든, LaTeX 및 생각할 수있는 가장 널리 사용되는 언어를 편집 할 때 삶을 훨씬 더 쉽게 만듭니다. 그들은 긴 세션과 작업을 위해 편집기를 열어두기를 원합니다.

대체로 Vim이 짧고 빠른 편집 작업을 위해 사용자를 끌어 들였다고 말할 것입니다. Emacs는 긴 세션을 위해 다이빙을 권장합니다.


VI는 항상 사용할 수 있으며 가장 심각한 단일 사용자 모드, 깨진 그래픽, 키맵 없음, 느린 링크 머신에서 실행됩니다. 따라서 sysadmin 작업을 위해 간단한 파일을 편집하는 방법을 아는 것이 좋습니다.

Emacs는 편집기의 완전한 사용자 인터페이스입니다. 아이디어는 기계를 시작할 때 Emacs를 실행하고 절대 떠나지 않는 것입니다. 수천 개의 세션이있을 수 있습니다.

GUI 편집기 / IDE를 사용하고 추가 작업을 위해 python / awk / etc와 같은 것을 사용하는 것에 비해 Emacs의 기능을 배우는 것이 가치가 있는지 여부는 귀하에게 달려 있습니다.


나는 본격적인 Emacs 팬보이이지만 Emacs를 알기 훨씬 전에 VI를 알고있었습니다. 즉, 항상 어디서나 사용할 수 있기 때문에 모든 사람들이 VI를 배우게합니다. 둘 중 하나에 잘못 갈 수는 없습니다.


이미 답이 선택된 것 같지만 나에게 가장 큰 차이점은 항상 모달 대 비 모달이었습니다. Vim은 모달이므로 특정 사용 모드 집합을 기반으로 최적화를 수행합니다. 적어도 그것이 내가 항상 그것을 보는 방법입니다. 이렇게하면 코드를 입력하는 작업 영역이있는 대신 실제로 환경에 텍스트 작업을 지시하기 때문에 Vim을 사용하는 것이 다른 경험이됩니다. 이것이 사람들이 Vim에서 당신이 정말로 언어를 배우고 있다고 말하는 이유입니다. : wq 및 : s / foo / bar는 모두 텍스트를 편집하고 읽는 환경과 같은 쉘의 일부입니다.

반면에 Emacs는 대부분의 편집기 / 워드 프로세서 등에 훨씬 더 가깝습니다. 오늘 보시죠. 고도로 프로그래밍 가능한 인터페이스가있는 작업 공간이 있습니다. 그렇기 때문에 이메일, irc, 셸 등과 같은 것을 볼 수 있습니다. 프로그래머로서 "내가있는 줄 번호를 가져 와서 정보를 가지고 무언가를하십시오"라고 생각하는 것은 쉽습니다. 편집기를 종료하고 다른 앱 / 언어를 열고 일부 텍스트에서 작업을 수행하는 대신 편집기의 범위 내에서 이러한 작업을 수행 할 수있는 Emacs가 있기 때문에 편집기를 떠나려는 욕구가 줄어 듭니다.

두 아이디어가 반드시 대조되는 것은 아니지만 단순히 두 가지 다른 초점을 드러내는 것입니다. 개인적으로 저는 Emacs를 사용하지만 Vim을 정말 잘 알고 어떤 것을 선택하든 상관 없다고 솔직하게 말할 수있는 사람들을 보았습니다. Vim을 먼저 시도했지만 Emacs는 결국 저를 고수했습니다. 무엇을 선택하든 Vim은 항상 사용할 수 있으므로 적어도 어느 정도 능숙해야한다는 것은 사실입니다.


나는 vi로 시작하여 emacs로 갔다가 vim으로 갔다. 나는 지난 5 년 동안 무엇이 바뀌 었는지보기 위해 Emacs를 시험해 볼 생각을하고 있습니다. (IDE에 대해 말하면 한동안 이클립스에 들어 갔지만 내 Mac을 (남편의) 리눅스 상자에 연결하는 터미널 창을 선호합니다).

잘라내어 붙여 넣기 때문에 최근에 나를 괴롭 혔습니다. Vim에서 잘라 내기 및 붙여 넣기는 Emacs, IIRC보다 더 많은 단계를 수행합니다. 그리고 브라우저에서 터미널 창으로 붙여 넣는 것은 내가하고 싶지 않은 멋진 일을하지 않는 한 짜증나 기 때문에 이상한 들여 쓰기를 참았습니다. emacs에서 여러 파일을 편집하는 것이 더 쉬웠다 고 생각합니다. 둘 다 화면에 표시되는 경우 최소한 한 파일에서 다음 파일로 이동합니다.

나는 코딩 사업을 좋아하기 때문에 vi 또는 emacs의 멋진 기능을 가지고 놀지 않았습니다. 내가 필요한 것은 예쁜 색상과 공간 변환에 대한 적절한 탭 (특히 파이썬에서 중요 함)입니다.

나는 당신이 멋진 것들을 신경 쓰지 않는다면 파일 을 사용 :wq하거나 Ctrl-x Ctrl-s(IIRC)를 사용하여 파일을 저장할 것인지에 달려 있다고 생각합니다 .

@mgb가 정확했습니다. 나는 데비안 배포판에서 한두 달 전에 무언가를 고치기 위해 최소한의 리눅스를 사용했습니다. vi는 사용 가능한 유일한 편집기였습니다.


일상적인 수준에는 큰 차이가 있습니다. Vim (또는 모든 vi 변형)은 본질적으로 모달 (편집 할 수없는 명령 모드로 이동)이고 Emacs (대부분의 다른 편집기와 함께)는 그렇지 않습니다.

물론 메뉴 등을 사용하면 처음에는 실제로 Vim에서 명령 모드로 들어갈 필요가 없습니다. 하지만 Vim의 성능 중 극히 일부만 사용하면됩니다. 이것이 Vim / Emacs 논쟁의 핵심입니다.

개인적으로 Emacs가 훨씬 더 확장 가능하다고 생각합니다. 많은 것에 대한 Elisp 패키지를 찾을 수 있습니다.

그래도 왜 더 전통적인 IDE를 통해이 중 하나를 배우려고 생각하는지 궁금합니다. 이것들 중 하나를 배우고 싶은 것이 무엇입니까?


저에게 emacs의 장점은 다음과 같습니다.

  • tramp-mode를 사용하면 ssh를 통해 원격 파일을 편집 할 수 있습니다. 로컬 파일과 같습니다.
  • tramp-mode + dired = 완전한 기능을 갖춘 sftp 클라이언트
  • 필요한 모든 언어를 지원합니다.
  • 터미널 에뮬레이터 (term-mode)가 내장되어있어 애플리케이션 간 전환없이 코딩을 계속할 수 있습니다.
  • 당신이 좋아하지 않는 것은 무엇이든 lisp를 사용하여 변경할 수 있습니다.

두 편집자 모두에 대해 많은 말이 있지만 추가 할 5 펜스가 있습니다. 두 편집자 모두 훌륭하며 둘 중 하나에 잘못 갈 수는 없습니다.

저는 현재 약 15 년 동안 vi / vim 사용자입니다. 나는 emacs로 변환을 여러 번 시도했지만 매번 vim이 lisp 확장 프로그램을 작성하거나 무언가를 설치할 필요없이 실제로 누락 된 작업을 수행 할 수 있다는 것을 발견했습니다.

저에게 vim이 환경 / OS를 사용하게 만드는 편집기의 주요 차이점은 emacs가이를 캡슐화하거나 대체하려고합니다. 예를 들어 vim에서 : r! date로 텍스트에 날짜를 추가하거나 : r! cal 1 2014로 달력을 추가하거나 버퍼의 내용을 16 진 버전의 내용으로 바꿀 수도 있습니다. 예 : : %! xxd, 16 진수를 편집 한 다음 : %! xxd -r 및 내장 grep, sed 등과 같은 더 많은 다른 용도로 돌아옵니다.

또 다른 예는 함께 사용이다 jqgron. 예 : json blob을 편집기에 붙여 넣은 다음 변환을 실행합니다.

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

또는

:%!jq .path.to.stuff

위의 각 파이프 명령 은를 통해 개별적으로 실행할 수 있습니다 :%!<command>. 여기서는 %모든 문서를 의미하지만 선택 항목, 선택한 행 등에서도 실행할 output수 있습니다 . 여기서 gron jq경로 로 사용할 수 있습니다 .

EX 일괄 편집 기능도 사용할 수 있습니다. 특정 단어를 바꾸고, 코드를 다시 포맷하고, dos-> unix 개행 문자를 변환하고, 한 번에 100 개의 파일에서 매크로를 실행합니다. ex로 쉽게 할 수 있습니다. emacs에 비슷한 것이 있는지 확실하지 않습니다.

즉, IMHO vim은 유닉스 철학에 더 가깝습니다. 일반적으로 더 간단하고 작지만 OS와 도구를 알고 있다면 VIM이 제공하는 것보다 더 많이 필요하지 않을 것입니다. 나는 결코하지 않는다.

vi는 모든 유닉스 / 리눅스 시스템에서 사실상 표준 인 것 외에도 동일한 작업을 수행하는 두 가지 도구를 사용하는 방법을 배워야합니다. 물론 일부 시스템은 mg 또는 이와 유사한 것을 제공하지만 확실히 전부는 아닙니다. Unix + Vi <3.

글쎄, 내 5 펜스.


나를 위해 emacs는 더 나은 개발 도구를 가지고 있습니다 (태그 기반 도구뿐만 아니라).


여기에 "The Art of UNIX Programming"이라는 책의 인용문을 넣고 싶습니다.

정기적으로 vi와 Emacs를 모두 사용하는 많은 사람들은 서로 다른 용도로 사용하는 경향이 있으며 둘 다 아는 것이 중요하다고 생각합니다.

일반적으로 vi는 작은 작업에 가장 적합합니다. 메일에 대한 빠른 응답, 시스템 구성에 대한 간단한 조정 등입니다. 새 시스템 (또는 네트워크를 통해 원격 시스템)을 사용하고 있고 Emacs 사용자 정의 파일이 편리하지 않은 경우 특히 유용합니다.

Emacs는 복잡한 작업을 처리하고, 여러 파일을 수정하고, 세션 중에 다른 프로그램의 결과를 사용해야하는 확장 된 편집 세션을 위해 자체적으로 제공됩니다. 콘솔에서 X를 사용하는 프로그래머의 경우 (최신 Unix에서 일반적으로 사용되는) 로그인 시간 직후에 큰 창에서 Emacs를 시작하고 영원히 실행되도록 두는 것이 일반적입니다. 수십 개의 파일을 방문하고 여러 Emacs 하위 창에서 프로그램을 실행하는 경우도 있습니다.

여기서 강조하고 싶은 것은 다음과 같습니다.« 많은 사람들이 두 가지를 모두 아는 것이 중요하다고 생각합니다


Emacs의 이점

  • Emacs에는 비 모달 인터페이스 (기본)와 모달 인터페이스가 모두 있습니다 (예 : Evil, Viper 또는 Vimpulse를 통해 vim 및 vi를 에뮬레이션 할 수 있음).

  • 가장 많이 이식 된 컴퓨터 프로그램 중 하나입니다. 대부분의 Unix 계열 시스템 (Linux, 다양한 BSD, Solaris, AIX, IRIX, macOS 등), MS-DOS, Microsoft Windows, AmigaOS를 포함한 다양한 운영 체제의 텍스트 모드 및 그래픽 사용자 인터페이스에서 실행됩니다. 및 OpenVMS. 무료 및 독점 유닉스 시스템은 운영 체제와 함께 번들로 제공되는 Emacs를 자주 제공합니다.

  • Emacs 서버 아키텍처는 여러 클라이언트가 동일한 Emacs 인스턴스에 연결하고 버퍼 목록, 킬 링, 실행 취소 기록 및 기타 상태를 공유 할 수 있도록합니다.

  • 키 바인딩, 기능 및 명령을 즉시 문서화하는 광범위한 온라인 도움말 시스템.

  • 확장 가능하고 사용자 정의 가능한 Lisp 프로그래밍 언어 변형 (Emacs Lisp), 다음과 같은 기능 포함 :

  • 강력하고 확장 가능한 파일 관리자 (dired), 통합 디버거, 대규모 개발 및 기타 도구 세트.

  • 모든 명령을 Emacs Lisp 함수로 사용하면 과거 작업 및 문서 상태에 프로그래밍 방식으로 응답하여 DWIM (Do What I Mean) 명령을 사용할 수 있습니다. 예를 들어 switch-or-split-window 명령은 다른 창이있는 경우 다른 창으로 전환하거나 필요한 경우 새로 만들 수 있습니다. 이렇게하면 사용자가 기억해야하는 키 입력과 명령의 수가 줄어 듭니다.

  • "OS 내부의 OS". Emacs Lisp를 사용하면 Emacs를 편집 기능 이상으로 프로그래밍 할 수 있습니다. 기본 설치에도 2 개의 웹 브라우저, 뉴스 리더, 여러 메일 에이전트, 4 개의 IRC 클라이언트, ELIZA 버전 및 다양한 게임을 포함하여 수십 개의 응용 프로그램이 포함되어 있습니다. 이러한 모든 응용 프로그램은 동일한 사용자 인터페이스와 기능으로 Emacs가 실행되는 모든 곳에서 사용할 수 있습니다. 버전 24부터 Emacs에는 패키지 관리자가 포함되어있어 대체 웹 브라우저, EMMS (Emacs Multimedia System) 등을 포함한 추가 응용 프로그램을 쉽게 설치할 수 있습니다. 또한 특정 언어 / 라이브러리 조합 또는 코딩 스타일을 대상으로하는 일부를 포함하여 프로그래밍을위한 다양한 패키지를 사용할 수 있습니다.

vi와 유사한 편집기의 이점

  • 편집 명령은 구성 가능
  • Vi에는 모달 인터페이스가 있습니다 (Emacs가 에뮬레이트 할 수 있음)
  • 역사적으로 vi는 Emacs보다 빠르게로드됩니다.
  • UNIX 전통과 밀접한 관련이 있지만 UNIX, Linux, AmigaOS, DOS, Windows, Mac, BeOS, OpenVMS, IRIX, AIX, HP-UX, BSD 및 POSIX 호환을 포함하여 표준 C 라이브러리를 구현할 수있는 모든 시스템에서 실행됩니다. 시스템.
  • Python, Ruby, Perl 및 Lua와 같은 해석 언어 용 Vim 스크립트 또는 API를 통해 확장 및 사용자 정의 가능
  • 어디에나 있는. 기본적으로 모든 Unix 및 Unix 계열 시스템에는 vi (또는 변형)가 내장되어 있습니다. Vi (그리고 ex, 그러나 vim은 아님)는 POSIX 표준에 지정되어 있습니다.
  • 시스템 복구 환경, 임베디드 시스템 (특히 busybox가있는 시스템) 및 기타 제한된 환경에는 종종 vi가 포함되지만 emacs는 포함되지 않습니다.

출처 : https://en.wikipedia.org/wiki/Editor_war


이제 Spacemacs 때문에이 둘의 차이점에 대해 생각할 필요조차 없습니다 . 커뮤니티 중심의 Emacs 배포판입니다.

말했듯이

최고의 편집기는 Emacs도 vim도 아니고 Emacs와 Vim도 있습니다.

Spacemacs는 Emacs와 Vim의 장점을 결합하여 삶과 업무를 훨씬 쉽게 만들어줍니다.

또한 괜찮은 로고가 있습니다.

아래 스크린 샷을 참조하십시오.


(출처 : spacemacs.org )


vim보다 emacs를 사용하기로 선택한 가장 큰 차이점은 emacs에 내장 된 gdb 지원입니다. Vim은 이것이 기본 배포판에 포함되어 있지 않으며 gdb와 vim을 통합하기위한 프로젝트는 MacVim으로 작업하는 것이 거의 불가능했습니다.


Emacs has viper-mode, so in some real sense, it provides a superset of features (excepting those described in What Vim features are missing in Emacs with Viper and Vimpulse?).

vi (and VIM IIRC) is lighter weight (it can edit files in place), but offers fewer features (subprocess communication, extension language).


Its like apples and oranges. Both have different design and philosphy. Vim is a Text Editor while Emacs is a Lisp Interpreter that does Text Editing.

I use Vim because its fast, sleak, and really good at manipulating texts. It has a composable natural key binding that can make your development tasks really harmonic. Vim is based on the simple *nix philiosphy of doing one thing really well - i.e Text Manipulation.

Extending Vim using bash/zsh and tmux is usually easy and allows you learn a lot of things. IMHO this is a good learning curve. The key thing is to learn how to integrate these things to get a larger working application. With Vim you'll need to learn integration because it doesn't naturally integrate unless you tell it how to. Another worthwhile extension which I use is Tig . Its an ncurses based Git frontend . I just have a binding that opens Tig silently and then I do all the Git stuff there.

Its up to the end user to decide what works best. That Emacs and Vim has stood the test of time is proof of their worthiness. Eventually a good programmer needs nothing more than a pen and a paper to be creative. Good algorithms don't need editors to back them. So try them both and see what makes you more productive. And learn design patterns from both these softwares as there are plenty to learn and discover!


A jaundiced point of view:

vi (not vim) is a professional necessity. You always have some form of vi easily available, no matter what the environment. You can be in vi when in emacs, you can be in vi to build bash commands in unix-land.

Even Microsquish has to support vi (although they do a good job of hiding it) because of gov't and corporate compliance with published standards.

In my opinion, if you are in a hands-on job in a busy environment--not a hothouse flower confined to one fancy rig in a development environment, or in academia--knowing a lot about a fancy editor is a job handicap. Don't learn all the fancy tricks in vim or emacs, and don't develop a bunch of macros to make the editing environment bend to your will. It's an enormous time sink that gets in your way when you attend to different machines that you probably can't justify in a factory environment.

Read Bill Joy's paper--it is a very competent, perhaps even beautiful, engineering exercise in editing plain text very, very fast. Parito's rule applies here: 80% of the fruit is in 20% of the baskets. Editing plain text very very fast is the crux of editing competence--all else is optional--and sometimes hurtful.


Emacs is really more of a do everything program, and vi(m) is really just an editor. If you are editing text, they are both fine, but I prefer emacs, simply because I have to shift one off the home row to move around, and keep typing the wrong things in command mode. I you don't have that problem, vi(m) may be the editor for you.


If you move around a lot from site to site or your job involves loging on to production systems then vim is the way to go.

All *nix machines will have vi installed by default.

Most sysdamins prefer ksh as the default shell. ksh uses vi (or emacs) command keystrokes to search history and edit the command line.

If you dont know vi well you are severely handicapped when you log into a unix box with a standard configuraton.

For this reason alone I would recommend vim as your normal every day editor. I have seen emacs fans tear there hair out trying to amend config files on a bare bones unix server.


vim is a handy editor, you simple type vim filename to open the file, edit, save and close.

emacs is an "operating system" pretend to be an editor, you can eval code to change its behavior, and extend it as you like. A mode to receive/send email on emacs is like an email software on operating system.

When doing simple editing, for example, modify a config file, I use vim.

Otherwise, I never leave emacs.


In your question, you haven't mentioned that you want it to program in Lisp! But as you have been commenting your answers, I have understood that you actually want a LISP programming interface.

For that precise task, simply forget about Vi. Emacs integration with LISP is wonderful! You should use SLIME. You will then have wonderful integration with the REPL, being able to eval functions, buffers or files directly into a running interpreter in an emacs buffer and much more...


Keystroke execution::: vi editing retains each permutation of typed keys. This creates a path in the decision tree which unambiguously identifies any command , whereas Emacs commands are a combination of typed keys executed immediately, which leaves the user with the choice of whether or not to use a command.

Memory usage and customizability::: vi is a smaller and faster program, with a more limited capacity for customization, whereas, Emacs takes longer to start up and requires more memory. However, it is highly customizable and includes a large number of features, as it is essentially an execution environment for a Lisp program designed for text-editing.


I think the main difference is the design target. VIM is for UNIX as a working editor. Emacs is for GNU and lisp hackers, so it has some mixed design element.

I use vim on my workstation, while I love emacs too.


I am an Emacs fan but encourage other developers to learn VI because:

  1. you can use VI to edit the emacs makefiles.
  2. VI includes ed commands and every UNIX user should know ed and sed.

I've noticed several comments about VIM starting faster than emacs. If you really care about that, run emacs in server mode and alias 'emacs' to 'emacsclient'. The client is super fast since all it does is tap the server on the shoulder and tell it which file you want to edit. On MacOSX, emacsclient is only 33K while emacs is 287M.

I'm not sure any of this is necessary on modern hardware. On my MacBook Pro (2013 Retina), emacs loads almost instantaneously when I run it from the shell. I detect no pause at all. When I run Emacs.app (the GUI version) it might take all of 3 seconds.

Most complaints I hear about emacs seem to come from people misinformed about emacs. Having used both vi and emacs since 1982, I definitely remember a time when emacs loaded much slower than vi and used most of the physical memory in my early UNIX boxes, but that is no longer the case and has not been for at least 15-20 years.

One complaint I will concede is "emacs pinkie". This never bothered me at all when I was younger. Now that I'm 58, my pinkie does get a bit sore from repeatedly accessing the Control key for emacs chording. This is especially true on the MacBook Pro keyboard where Control is moved one position to the right to make room for the "fn" key. It's not nearly as annoying when Control is the bottom left key.


I have worked with spacemacs for about 2 years and neovim for about a year now in a production/research environment. Spacemacs is emacs with couple of nice extra features like layers etc. And neovim is a fork of vim again with some extra features.

I am quite unsatisfied with both of them in terms of experience. And I am still on the look out for a long term solution for my text editing needs.

Here is a simple comparison:

  • Neovim, vim, emacs, spacemacs, etc all of those editors consume less ressources compared to most of the editors out there.

  • Neovim/vim is slightly faster than emacs, noticably faster than spacemacs.

  • In terms of editing experience. I can easily say that emacs packages feel superior. I think that's because they blend in better with the core of emacs.

  • Vimscript is nice and there are certainly great projects in the vim ecosystem as well. The good thing is they are better documented than most emacs projects I have seen so far.

  • Both can be glitchy depending on the package you are using. Spacemacs tend to freeze, and neovim tend to display scary error messages, so pick your poison there.

  • Modal editing in vim, is not an intuitive concept, but once you get used to it, you want it anywere. Both of the editor provide that.


Firstly Vi (original realization) not used today. That you say is some Vim derivation.

To extend Vim functionality you must recompile Vim, Emacs not.

Emacs has Vim in self (viper-mode).

Emacs usually need manually installation, Vim typically preinstalled on all Unix like OS (but if you have ssh access to host tramp-mode win Vim :).

If you try Vim you hate Emacs, so start from Emacs first.

Also read http://www.dina.dk/~abraham/religion/vi-tutorial.html (link go down so use this)

Anwer search in hxxp://en.wikipedia.org/wiki/Editor_war

참고URL : https://stackoverflow.com/questions/1430164/differences-between-emacs-and-vim

반응형