なぜ一方がもう一方より優れているのかという宗教的な議論に入ることなしに、EmacsとVimの間の 実用的 の違いは何ですか?どちらか一方を習得しようと思っていますが、それぞれの習熟度が高いことに気付いて、決めることはできません。私はこのタイプのエディタを使ったことは一度もありません(私はいつもIDEを使ってきました)ので、初心者に役立つものは何でもプラスです。
炎の戦争が始まる前に、私はどちらが良いのかを尋ねるのではなく、両者の違いを尋ねます。 目標 比較をお願いします。
(以下の文章は私の意見ですが、事実でも侮辱でもありません)
Emacsを使えば、毎日24時間オープンしてプログラムの中に住むことが期待されます。あなたがすることのほとんどすべては、そこからやることができます。あなたはあなた自身のエクステンションを書き、メモ書き、組織化、ゲーム、プログラミング、シェルアクセス、ファイルアクセス、音楽鑑賞、ウェブブラウジングのためにそれを使います。あなたがそれに満足するまで、それは何週間もかかり、それからあなたはいつも新しいことを学ぶでしょう。あなたがそれにアクセスすることができず、絶えずあなたの設定を変更するとき、あなたはいらいらするでしょう。他の人のemacsバージョンを簡単に使うことはできず、ただインストールされることもありません。それは素晴らしいですLISPを使用しています。あなたはそれをあなたが望むものなら何でもにすることができます。 (何でも、まったく)
Vimでは、ほとんどの場合プレインストールされています。これは速い。ファイルを開いて簡単に編集してから終了します。他の人のマシンにいる場合は、基本的な設定で作業することができます。それほど編集可能ではありませんが、それでもほとんどのテキストエディタよりはるかに優れています。あなたが読んでいる/編集しているほとんどの時間はタイプしていないことを認識し、その部分をより速くする。emacs pinkieに悩むことはありません。それほど魅力的ではありません。習得が簡単です。
あなたが選んだプログラムに多くの時間を費やすつもりでない限り、私は毎日Emacsを毎日使っています(そしてそれを愛しています)
Vimはシェルではありません。そしてそれはサブプロセスとうまく通信できません。これはほとんど設計によるものですが、Emacsではこれらの要素は設計によって含まれています。これは、デバッガやインタプリタを埋め込むこと(ある種のIDEを生成すること)のようなものがVimでは難しいことを意味します。
また、Emacsのショートカットは主に修飾子を通してアクセスされ、明らかにVimインターフェースは有名なモーダルであり、操作のための途方もない量の直接キーへのアクセスを与えます。
Emacsは以前はプログラマブルであった唯一のエディタであり、Vimはそのプログラマビリティに対して奇妙なレベルを多く持っていますが、PythonとRubyのバインディングが追加されています(さらに忘れていますが)。あなたが気にかけています。
私はVimを使っています、そしてそれにはかなり満足しています。
Vim:
Emacs:
個人的には私はvimが好きです - それは小さくて、それがするべきことをしています、そして私が本格的にIDEを開くとき、私はVSを開きます。 EmacsがIDE(またはOSと言いたい)になりたいというエディターであるというアプローチは、私見ではありませんが、時代遅れです。昔は電子メールクライアント、ftpクライアント、テトリスを持っていました... 1つのパッケージ(emacs)の中に何の意味もありませんでした...今日ではそれはもうありません。
しかしながら、両方ともプログラマーとスーパーユーザーコミュニティユーザーの間の宗教的な議論の話題であり、そしてその点で、両者は(同じ文章/質問の中で)触れられれば炎戦争を始めるのに優れています。
あなたが両方の編集者の客観的な分析を探しているなら、彼らの起源と彼らのそれぞれのデザインの背後にある哲学を見てください。どっちがあなたに合っていて、それを学ぶことができるかを考えてみてください(そして、IDEに対して真の有用性を発見するまでには時間がかかるので、それを学び、それを学びましょう)。 Viを使ったディスプレイ編集入門 はBill JoyとMark Hortonによって書かれました、そして彼はなぜ彼が様々なキーストロークのためにモーダルデザインと理論的根拠を選ぶかを説明します。 _ w _ indowこれはCTRL W + CTRL Wの場合も同じです。CTRLキーを長押しした場合の念のためです。
これは Emacsタイムライン へのリンクで、Multics Emacsの論文への参照があります。ここにRMS paper on Emacs があります。ここではストレスがプログラム可能なテキストエディタにあることがわかります(1981年以前にまでさかのぼります)。
私はemacsの論文を読んだことはありませんが、Bill Joyのvi論文を数回読んだことがあります。両方とも古いですが、それでもあなたは哲学を得るでしょう、そしてあなたは現在のツール(vim 7.xまたはemacs 25?)を使うことを選ぶかもしれません
編集: それを読んでいる間に時間を遅らせるので、私はそれが忍耐と想像力が両方の論文を読むのに必要であることを言及するのを忘れていました。しかしそれは価値があります。
EmacsよりもVimの起動は常に早かった。私は、どんなマシンでも、すぐに使えるVimのインストールが、すぐに使えるEmacsのインストールよりも早く起動すると言っています。そして私はどちらか一方の中程度のカスタマイズの後でもVimはまだEmacsより速く起動するだろうと思う傾向があります。
その後の他の実用的な違いはEmacsのモードです。 XML、C/C++/Java /その他、LaTeX、そしてあなたが考えることができる最も一般的な言語を編集するとき、それらはあなたの人生を非常に容易にします。彼らはあなたが長いセッションや仕事のためにエディタを開いたままにしたいと思うようにします。
全体として、私はVimが短くて速い編集作業のためにあなたをそれに引き寄せると言うつもりです。 Emacsはあなたが長いセッションのために飛び込むことを奨励している間。
VIは常に利用可能で、最も不自由なシングルユーザーモード、壊れたグラフィック、キーマップなし、低速リンクマシンで実行されます。そのため、sysadminタスクのためだけにその中の単純なファイルを編集する方法を知っておく価値があります。
Emacsはエディターの中の完全なユーザーインターフェースです。その考えは、あなたがマシンを起動したときにEmacsを起動し、決してそれを離れないことです。何千ものセッションが存在する可能性があります。
Emacsの機能を学ぶことが、GUIエディタ/ IDEを使用したり、python/awk/etcなどの追加のタスクを使用することに比べて価値があるかどうかはあなた次第です。
私は本格的なEmacsのファンですが、Emacsを知るずっと前から私はVIを知っていました。そうは言っても、私はすべての人にVIを習得させます。どちらにもうまくいかない。
私はviから始め、emacsに行き、そしてvimに行きました。私は過去5年間に何が変わったのかを見るためにEmacsを試してみることを考えていました。 (IDEと言えば、しばらくEclipseに入ったことがありますが、私のMacを私の(夫の)Linuxボックスに接続するのは私の端末ウィンドウが好きです)。
カットアンドペーストのことが最近私を悩ませています。 VimでのカットアンドペーストはEmacs、IIRCよりも多くのステップを踏みます。そして、ブラウザからターミナルウィンドウへの貼り付けは、あなたが私がやりたくないような気の利いたことをしない限りイライラするので、私は奇妙なインデントを我慢しました。 emacsで複数のファイルを編集する方が簡単だと思います。少なくとも両方のファイルが画面に表示されている場合は、あるファイルから次のファイルにジャンプします。
私はviとemacsのどちらの派手な機能も試していません。私はコーディングの仕事に興味があるからです。私が必要としているのはきれいな色とスペース変換への適切なタブだけです(Pythonでは特に重要です)。
気の利いたことを気にしないのであれば、ファイルを保存するために:wq
またはCtrl-x Ctrl-s
(IIRC)のどちらを使用するかは、すべて依存していると思います。
@ mgbは正しかった。私はDebianディストリビューションで、たった一か月から二か月前に、最低限のLinuxで何かを直してきました。利用可能な唯一のエディタはviです。
答えはすでに選択されているようですが、私にとって大きな違いは常にモーダルと非モーダルです。 Vimはモーダルです。つまり、特定の使用モードに基づいて最適化が行われます。少なくともそれが私がいつもそれを見た方法です。コードを入力する作業領域を持つのではなく、実際にテキストに基づいて行動するように環境に指示しているので、これはVimの使用を別の経験にします。だからこそ、人々はVimを使って本当に言語を学んでいるようなことを言うのです。 :wqと:s/foo/barは、テキストを編集して読み取るシェルのような環境の一部です。
一方、Emacsはほとんどのエディタやワープロなどに非常に近いものです。あなたは今日見ます。あなたは、高度にプログラム可能なインターフェースを持つワークスペースを持っています。それが、Eメール、IRC、シェルなどのようなものを見る理由です。プログラマーとしては、「私が行っている行番号を使って、情報を使って何かをする」と言うのは簡単です。他のアプリケーションや言語を終了してテキストを編集する代わりに、エディタの範囲内でこれらの作業を行えるEmacsがあるので、エディタを終了したくないという気持ちが少なくなります。
2つのアイデアは必ずしも対照的ではありませんが、それは単に2つの異なる焦点を明らかにするということです。私は個人的にはEmacsを使っていますが、Vimを本当によく知っていて、どちらを選んでも問題ないと正直に言うことができる人々を私は見ました。私は最初にVimを試しましたが、Emacsは私のためにこだわってしまいました。それが本当に利用可能であるので、あなたが何を選んでも、あなたは少なくともいくらかVimに熟達しているべきです。
私にとってはemacsの長所は
日々のレベルで大きな違いがあります - Vim (または他のviの変種)は本質的にモーダル(あなたが編集できないコマンドモードに入る)で、Emacs(他のほとんどのエディターと一緒に)は違います。
もちろん、メニューなどを使うことで、実際にはVimでコマンドモードに入る必要はありません - 最初は。しかし、Vimのパワーのごく一部を使用することになります。それがVim/Emacsの議論の中心です。
個人的には、私はまたEmacsがはるかに拡張性があると思います。 Elispパッケージにはたくさんのものがあります。
しかし、私が興味を持っているのは、なぜあなたがより伝統的なIDEの上でこれらのうちの1つを学ぶことを考えているのです。あなたはこれらのうちの一つを学びたいのですが何ですか?
両方の編集者について言われたことがたくさんあります、しかし私はちょうど追加する私の5ペンスを持っています。両方の編集者は素晴らしいです、そして、あなたは彼らのどちらともうまくいかないことができません。
私は現在約15年間vi/vimユーザーです。私は何度かemacsに変換しようとしましたが、そのたびに、vimがLISPの拡張を書いたり何かをインストールしたりする必要なしに、箱から出してすぐに不足していることができることを発見しました。
私にとっては、vimが環境/ OSを使うようにするエディターの主な違いは、emacsはそれをカプセル化するか置き換えようとすることです。例えば、あなたはあなたのテキストに日付を追加することができます:r!date in vim、またはcalendar with:r!cal 1 2014、あるいはあなたのバッファの内容を16進数の内容に置き換えることもできます。例えば。 :%!xxd、16進数を編集してから:%!xxd -r、その他組み込みのgrep、sedなどの用途に戻ります。
また、EXのバッチ編集機能も利用できます。特定の単語を置き換え、コードを再フォーマットし、dos-> unixの改行文字を変換して、一度に100ファイルのマクロを実行します。 exで簡単にできます。 emacsに似たようなものがあるかどうかはわかりません。
言い換えれば、私見ウイルスはunix哲学に近づいています。それは一般的に単純で小さいですが、あなたがあなたのOSとあなたのツールを知っていれば、あなたはおそらくそれを必要としないでしょう(VIM)。私はしません。
Viはどんなunix/linuxシステムでも事実上の標準ですが、なぜ同じことをする2つのツールを使うことを学ぶのか。もちろんいくつかのシステムはmgか何か類似したものを提供しますが、間違いなくそれらすべてのものではありません。 Unix + Vi <3.
まあ、私の5ペンスだけです。
ここでは、「The Art of UNIX Programming」という本から引用したいと思います。
ViとEmacsの両方を定期的に使用する人の多くは、それらを異なるものに使用する傾向があり、両方を知ることは価値があると思います。
一般的に、viは小さな仕事に最適です - メールへの素早い返信、システム設定への簡単な微調整など。新しいシステム(またはネットワーク経由のリモートシステム)を使用していて、Emacsのカスタマイズファイルが便利ではない場合に特に便利です。
Emacsは、複雑なタスクを処理し、複数のファイルを変更し、そしてセッション中に他のプログラムからの結果を使用しなければならない拡張編集セッションのためにそれ自身になります。コンソールでXを使うプログラマーにとって(これは現代のUnixでは典型的ですが)、大きなウィンドウでEmacsを起動して永遠に起動したままにしておくことは普通のことです。
私がここで最も強調したいのは、次のとおりです。« 多くの人が両方を知ることが価値があると思います 。»
Emacsの利点
Emacsは非モーダルインターフェース(デフォルト)とモーダルインターフェースの両方を持っています(例えば、Evil、Viper、またはVimpulseを通してvimとviをエミュレートできます)。
最も移植されたコンピュータプログラムの1つです。これは、ほとんどのUnixライクシステム(Linux、各種BSD、Solaris、AIX、IRIX、macOSetc)、MS-DOS、Microsoft Windows、AmigaOSなど、さまざまなオペレーティングシステム上でテキストモードでグラフィカルユーザーインターフェースの下で動作します。そしてOpenVMS。 UNIXシステムは、無料でも独自仕様でも、オペレーティングシステムにバンドルされたEmacsを提供しています。
Emacsサーバーアーキテクチャーでは、複数のクライアントが同じEmacsインスタンスにアタッチし、バッファーリストを共有したり、リングを終了したり、履歴を元に戻したり、その他の状態を元に戻したりできます。
その場で文書化されたキーバインド、機能、およびコマンドを備えた広範囲のオンラインヘルプシステム。
次のような機能を備えた、拡張可能でカスタマイズ可能なLISPプログラミング言語の変形(Emacs LISP)。
強力で拡張可能なファイルマネージャ(dired)、統合デバッガ、そして多数の開発ツールやその他のツール。
すべてのコマンドをEmacsのLISP関数にすることで、過去のアクションやドキュメントの状態にプログラムで応答することで、DWIM(Do I I意味)へのコマンドを有効にできます。たとえば、switch-or-split-windowコマンドは、存在する場合は別のウィンドウに切り替えたり、必要に応じてウィンドウを作成したりできます。これにより、ユーザーが覚えておく必要があるキーストロークとコマンドの数が削減されます。
「OS内のOS」 Emacs LISPはEmacsを編集機能をはるかに超えてプログラムすることを可能にします。基本インストールでさえ、2つのWebブラウザ、ニュースリーダー、複数のメールエージェント、4つのIRCクライアント、あるバージョンのELIZA、そしてさまざまなゲームを含む数十のアプリケーションを含んでいます。これらのアプリケーションはすべて、Emacsが動作しているところならどこでも同じユーザーインターフェースと機能で利用できます。バージョン24以降、Emacsにはパッケージマネージャが含まれているため、代替Webブラウザ、EMMS(Emacs Multimedia System)などを含む追加のアプリケーションを簡単にインストールできます。特定の言語/ライブラリの組み合わせやコーディングスタイルを対象としたものを含む、プログラミング用の多数のパッケージもあります。
vi風エディタの利点
Spacemacs のため、これら2つの違いについて考える必要さえありません。これはコミュニティ主導のEmacsディストリビューションです。
それが言ったように、
最高の編集者はEmacsでもvimでもなく、EmacsとVimです。
SpacemacsはEmacsとVimの両方の長所を兼ね備えているので、あなたの人生と仕事はずっと簡単になります。
まともなロゴもあります。
下のスクリーンショットを見てください、
私がvimよりもemacsを使うことを選んだ最大の違いは、emacsの組み込みgdbサポートでした。 Vimのデフォルトディストリビューションにはこれが含まれていないので、gdbとvimを統合するためのプロジェクトはMacVimで作業するのはほぼ不可能でした。
Emacsはviperモードを持っているので、ある意味ではスーパーセットの機能を提供します( ViperとVimpulseのEmacsには何のVim機能が欠けていますか? )。
vi(およびVIM IIRC)は軽量ですが(代わりにファイルを編集できます)、機能は少なくなります(サブプロセス通信、拡張言語)。
りんごとオレンジが好きです。どちらもデザインと理念が異なります。 Emacsはテキスト編集を行うLISPインタプリタですが、Vimはテキストエディタです。
私はVimを使っています。なぜならそれは速くて、鈍く、そして本当にテキストを操作するのが得意だからです。それはあなたの開発タスクを本当に調和させることができる構成可能な自然のキーバインディングを持っています。 Vimは1つのことを本当にうまくやるという単純な* nix哲学に基づいています - すなわちテキスト操作です。
Bash/zshとtmuxを使ってVimを拡張するのは通常簡単で、たくさんのことを学ぶことができます。私見これは良い学習曲線です。重要なことは、これらのものを統合してより実用的なアプリケーションを作成する方法を学ぶことです。 Vimを使うと統合を学ぶ必要があるでしょう。なぜならそうしなければ統合は自然に統合されないからです。私が使っているもう一つの価値のある拡張はTigです。そのncursesベースのGitフロントエンド。私はTigを黙って開くバインディングを持っているだけで、そこにすべてのGitのことをします。
最も効果的なものを決定するのはエンドユーザー次第です。 EmacsとVimが時の試練に耐えたことは彼らの価値の証明です。結局、優れたプログラマーは、創造的であるためにはペンと紙以外に何も必要としません。良いアルゴリズムはそれらをバックアップするためにエディタを必要としません。それで、両方を試して、あなたがより生産的になるものを見てください。そして学ぶべきことがたくさんあるので、これら両方のソフトウェアからデザインパターンを学びましょう!
気の利いた視点:
vi(vimではない)は職業上の必需品です。どんな環境であっても、あなたはいつも何らかの形のviを容易に手に入れることができます。 emacsにいるときはviにいることができます、unix-landでbashコマンドを作成するにはviになることができます。
Microsquishでさえ、viをサポートしなければなりません(彼らはそれを隠すのには良い仕事をしていますが)。それは、政府と公開された標準の企業のコンプライアンスのためです。
私の意見では、あなたが忙しい環境で実地の仕事をしているならば - 開発環境の中の1つの空想の道具に限定された温室の花ではなく - vimやemacsですべての派手なトリックを学んではいけません。また、編集環境を自分の意志に合わせるためにたくさんのマクロを開発してはいけません。工場環境では正当化できないこともありますが、さまざまなマシンに参加するときに邪魔になるのは非常に大きなタイムシンクです。
Bill Joyの論文を読んでください - それは、プレーンテキストを非常に速く編集することにおける非常に有能な、おそらく美しくさえある工学的演習です。パリトの法則がここに適用されます:果物の80%がバスケットの20%にあります。プレーンテキストを非常に高速に編集することは、コンピタンスを編集するための最も重要なことです。それ以外はすべてオプションであり、場合によっては有害です。
Emacsは本当にdo everything プログラムに近いもので、vi(m)は本当に単なるエディタです。あなたがテキストを編集しているなら、それらは両方とも問題ありません、しかし私はemacsを好む、なぜなら私は移動するためにホーム行から1つずらして、そして間違ったものをコマンドモードでタイプし続けなければならないからです。私はあなたはその問題を抱えていません、vi(m)はあなたのためのエディタかもしれません。
サイトからサイトへ移動する場合や、本番システムにログオンする場合はvimを使用します。
すべての* nixマシンにはデフォルトでviがインストールされています。
ほとんどのシステム管理者は、デフォルトのシェルとしてkshを好みます。 kshはvi(またはemacs)コマンドキーストロークを使用して履歴を検索し、コマンドラインを編集します。
Viがよくわからない場合は、標準の設定でunixボックスにログインしたときに重度の障害があります。
この理由だけで私はあなたの通常の毎日のエディタとしてvimをお勧めします。私はemacsのファンが素のUNIXサーバー上の設定ファイルを修正しようとしているのを見て見てきました。
vim は便利なエディタです。ファイルを開いたり、編集したり、保存したり、閉じたりするには、単純にvim filename
と入力してください。
emacs はエディタのふりをしている "オペレーティングシステム"であり、その動作を変更したりあなたが好きなように拡張したりするためにeval
コードを使うことができます。 emacsでEメールを送受信するためのmode
は、オペレーティングシステム上のEメールソフトウェアのようなものです。
簡単な編集をするとき、例えば設定ファイルを修正するとき、私は vim を使います。
そうでなければ、私は emacs を離れることはありません。
主な違いはデザインの目標です。 VIMは、作業エディタとしてのUNIX用です。 EmacsはGNUとLISPハッカーのためのものなので、いくつかのデザイン要素が混在しています。
私は自分のワークステーションでvimを使いますが、私はemacsも大好きです。
あなたの質問では、あなたはそれをLISPでプログラムしたいと言っていませんでした!しかし、あなたがあなたの答えをコメントしてきたように、私はあなたが実際にLISPプログラミングインターフェースを望んでいることを理解しました。
その正確な仕事のために、単にViを忘れてください。 EmacsとLISPの統合は素晴らしいです。 SLIMEを使うべきです。そうすれば、REPLとのすばらしい統合が可能になり、emacsバッファーなどで実行中のインタープリターに直接eval
関数、バッファー、またはファイルを追加できるようになります。
私は約2年間spacemacsと仕事をしてきました、そしてもう1年間は生産/研究環境でneovimをしています。 Spacemacsはレイヤーなどの素敵な追加機能をいくつか備えたemacsです。そしてneovimはいくつかの追加機能を備えたvimのフォークです。
私は経験の面でそれらの両方に非常に満足していません。そして私はまだ私のテキスト編集ニーズのための長期的な解決策を探しています。
これが簡単な比較です。
Neovim、vim、emacs、spacemacsなど、これらすべてのエディタはほとんどのエディタに比べてリソースの消費が少なくなっています。
Neovim/vimはemacsよりもわずかに速く、spacemacsよりも明らかに速いです。
編集経験の面で。 emacsパッケージは優れていると私は簡単に言えます。私は、それらがemacsのコアとうまく調和しているからだと思います。
Vimscriptは素晴らしいですし、Vimのエコシステムにも確かに素晴らしいプロジェクトがあります。良いことは、私がこれまで見てきたほとんどのemacsプロジェクトよりも文書化されていることです。
どちらも、使用しているパッケージによっては問題が発生する可能性があります。 Spacemacはフリーズしがちで、neovimは怖いエラーメッセージを表示する傾向があるので、そこであなたの毒を選んでください。
Vimでのモーダル編集は、直感的な概念ではありませんが、慣れれば、それを使用することをお勧めします。エディタの両方がそれを提供します。
私はEmacsのファンですが、他の開発者にVIを学ぶことを勧めます。
私はVIMについてのいくつかのコメントに気付きました。あなたが本当にそれを気にかけているのであれば、emacsをサーバモードで実行し、 'emacs'を 'emacsclient'にエイリアスしてください。クライアントは肩の上にあるサーバーをタップしてどのファイルを編集したいのかを伝えるだけなので超高速です。 MacOSXでは、emacsは287Mですが、emacsclientはわずか33Kです。
現代のハードウェアでこれが必要なのかどうかは私にはわかりません。私のMacBook Pro(2013 Retina)では、シェルから実行するとemacsがほぼ瞬時にロードされます。私は一時停止を全く検出しません。 Emacs.app(GUI版)を実行すると、3秒かかることがあります。
私がemacsについて聞いているほとんどの不満は、emacsについて誤解している人々から来ているようです。 1982年以来viとemacsの両方を使ってきたので、emacsがviよりずっと遅くロードし、私の初期のUNIXマシンの大部分の物理メモリを使ったときのことを私は間違いなく覚えています。 20年。
私が認める1つの不満は "emacs pinkie"です。私が若かったとき、これは私を全く気にしませんでした。私が58歳になった今、私の小指はemacsコードを書くためにControlキーに繰り返しアクセスすることから少し痛みを感じます。これは、 "fn"キー用のスペースを空けるために、Controlが1つ右に移動しているMacBook Proキーボードで特に当てはまります。 Controlが左下のキーである場合、それほど厄介ではありません。
キーストロークの実行::: vi editはタイプされたキーの各順列を保持します。これにより、決定木にコマンドが明確に識別されるパスが作成されます。一方、Emacsのコマンドはすぐに実行される型付きキーの組み合わせであり、ユーザーはコマンドを使用するかどうかを選択できます。
メモリ使用量とカスタマイズ可能性::: viはカスタマイズのためのより限られた容量で、より小さくより速いプログラムです、一方、Emacsは起動するのにより多くのメモリを必要とします。ただし、これは本質的にテキスト編集用に設計されたLISPプログラムの実行環境であるため、高度にカスタマイズ可能であり、多数の機能が含まれています。