SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
「Vimmer から見た Emacs 」




     @ShougoMatsu
自己紹介

●   Vimmer 枠の ShougoMatsu です
●   職業:普通のサラリーマン
●   Vim/Emacs 勉強会と聞いてやって来ました
●   日本では珍しい重度の Vim 病患者なので、
    「Vim」とつぶやいていないと調子が悪くなります
作ってきたプラグイン

●   auto-complete.el → neocomplcache
●   Dired.el, direx.el → vimfiler
●   anything.el(helm.el) → unite.vim
●   eshell → vimshell
●   package.el, el-get → neobundle.vim
●   hexl-mode (?) → vinarise
このスライドの目的

●   Vim と Emacs にはそれぞれ良いところと悪いとこ
    ろがある
●   Vim と Emacs の文化を知り、相互理解を深めたい
●   スライドの内容は @ShougoMatsu の独断と偏見
    に満ちています。これが Vimmer の総意だと勘違
    いしないでください。
O Vim キーマッピング

●   Emacs はモードが無いのでキーバインドが複雑
●   私には、<C-c> <C-x> … とか押せない
●   Emacs だとカーソル移動時にコントロールを押し
    忘れて泣けることがある
●   ただし、Vim もインサートモードのキーマッピングは
    Emacs 並に足りない
●   つまり、 Vim はインサートモードで Emacs と戦うと
    圧倒的に不利
O Emacs スクリプト言語

●   Vim script はよく批判される
●   例: 無名関数がない、オブジェクト指向がやりづら
    い、ライブラリの欠如、コマンドと関数の混
    在、eval(:execute) の多用、組み込み機能をカスタ
    マイズしづらい etc...
●   とはいえ、Emacs Lisp が Vim script よりも圧倒的
    に優れているわけではない
O Vim ファイル編集能力

●   Vim のモードは高速にファイルを編集するため
●   Vim のファイル編集能力は圧倒的
●   気分は人間フィルタ
●   自分もそれほど使いこなせているわけではない
●   「詰め Vi(Vim)」 はあるが、「詰め Emacs」は見た
    ことがない
●   おそらく思想の違い
O Emacs 拡張性

●   テキストエディタの枠を超えた圧倒的な拡張性
●   最初から拡張することを考えられている
●   Vim の場合はスクリプト言語が後付け
●   組み込み機能の自由自在なカスタマイズ
●   本体の機能が Emacs Lisp で記述されている
●   ただし、パフォーマンスが犠牲になっている
O Vim コミュニティ

●   Vim の方がコミュニティの力がある(日本での話)
●   Vim-users.jp, vim-jp
●   Vim 本体で貢献する日本人の存在
●   Emacs の場合、個人で活動している人はいるが、あ
    まりまとまっていない印象
●   ただ、これから Emacs のコミュニティも活性化する
    かも?
O Emacs 非同期通信

●   Emacs は標準で非同期通信が可能
●   標準添付されている Emacs でも非同期通信は多
    用されている
●   エディタ内で引きこもるには必須の機能
●   Deferred.el, concurrent.el 等の補助ライブラリ
●   Vim の場合、Python 等の外部インタフェースや
    vimproc を使用しないといけない
O Vim 正規表現

●   Emacs の正規表現はエスケープが多い
●   Vim の正規表現は '' を用いるとエスケープがいら
    ない
●   ただし、(, ), ?, + はなれない人は戸惑うらし
    い
●   更に、先読みや後読みが書きやすい
O Emacs 標準添付プラグイン

●   Emacs は標準添付プラグインが豊富
●   Eshell, org-mode, tramp, dired, ...
●   節操がない、とも言える
●   Vim の場合、標準添付プラグインは殆ど無い
●   ほとんどの場合、組み込み機能でやってしまうため
O Vim ユーザ数

●   Vim の方がユーザ数が多い
●   ただし、普通のエディタの代わりに使う人も相当数
    いる
●   Emacs の方が全体的なレベルは高い印象
●   Vim はあまり設定しなくても動くから?
O Emacs 日本語入力

●   日本語入力はモードとの相性が悪い
●   Emacs は日本語入力用のフロントエンドも充実し
    ている
●   Emacs は日本語入力中にカーソル移動ができる
●   Emacs には Org-mode もある
O Vim シンタックスハイライト

●   Vim のシンタックスハイライトは 300 種類を超える
●   シンタックスハイライトの文法もやたらと高機能
●   自分が Vim を使い始めたのはシンタックスハイラ
    イトの充実があったから
O Emacs 開発安定性

●   一時期リリースが不定期だったが、最近のEmacs
    は開発がコミュニティベースで安定している
●   Vim もコミュニティベースだが、パッチを当ててリ
    リースするのは原作者の Bram Moolenaar 氏
●   いつリリースされるかはBram氏にしかわからない
●   Vim のソースコードを読める人・パッチを書く人が
    少ない
●   ただし、Vim には日本人の貢献も数多い(多言語
    対応・オムニ補完)
O Vim インデント

●   Vim はなぜかインデントの設定がやたらと多い
●   標準のインデントプラグインも充実している
●   自作するのも難しくはない
●   Emacs はインデント設定で苦労している人が多い
    印象がある
O Emacs フォント

●   Emacs は任意の位置でフォントを自由自在に変更
    できる
●   もはやワープロのようである
●   Vim は等幅フォントのみ。一部フォントを変更できる
    が制限が多い
●   Web ブラウザやプレゼンテーションツールを実現す
    るには必須の機能
●   プログラマ用のエディタとして考えると必須機能で
    はない
O Vim パフォーマンス

●   Vim が(ある程度)拡張性を犠牲にしても、組み込
    み機能を重視する理由
●   ほとんどの機能が組み込みなので組み込み機能は
    圧倒的なパフォーマンスを誇る
●   単純なエディタとしてみた場合、速度はとても重要
●   ただし、 Vim script の実行速度が高速なわけでは
    ない
O Emacs 画像表示

●   個人的に、Emacs の羨ましい機能で 1, 2を争う
●   エディタとして考えるといらない
●   エディタとして考えないとほしい
●   まずは誰かパッチを書いてくれる人がいないかと
    思っている
O Vim 互換性

●   Vim は上位互換性をとても重視している
●   10 年以上前の Vim スクリプトが動作
●   基本的に機能は削られない(非推奨になることは
    ある)
●   Emacs はバージョンアップ時に関数が消えている
    ……
●   Vimでは、新機能を使う時くらいしかバージョン
    チェックすることはない
O Emacs シェル連携

●   標準で、shell-mode, eshell, term とやたらとたく
    さんある
●   Emacs から出ない生活の実現
●   Vim でもプラグインを導入すれば可能。しかし標準
    では無理
まとめ

●   Vim は開発用の機能、Emacs は開発以外の機能
    に優れている
●   Emacs はバージョンアップ時に PDF を見れるよう
    になったりするので、もはや訳分からないことになっ
    ている
●   どっちがよいかはもはや個人の好み
●   個人的には Emacs の機能も羨ましい
●   不満があったら Vim script を書いたほうが速いの
    で Emacs に移る気はない
終わりに

●   最近 Sublime なんとか、や Eclipse などが現れて
    きていますが……
●   「IDEとどう戦うのか」
●   Vim と Emacs はこれからも良きライバルになって
    行きましょう
●   そして Emacs の良い所は Vim にも取り込んでい
    きたい

Mais conteúdo relacionado

Mais procurados

オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMPYusuke Kagata
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門増田 亨
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと信之 岩永
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxShota Shinogi
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計Kouji YAMADA
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)Mikiya Okuno
 
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについてSEGADevTech
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングKohsuke Yuasa
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 

Mais procurados (20)

オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 

Semelhante a Vimから見たemacs

Shougoの開発環境
Shougoの開発環境Shougoの開発環境
Shougoの開発環境Shougo
 
PasteHub at kansai emacs 9th
PasteHub at kansai emacs 9thPasteHub at kansai emacs 9th
PasteHub at kansai emacs 9thKiyoka Nishiyama
 
初心者Vimmerによるvim+rails開発
初心者Vimmerによるvim+rails開発初心者Vimmerによるvim+rails開発
初心者Vimmerによるvim+rails開発Daisuke Kikuchi
 
Vim = VM
Vim = VMVim = VM
Vim = VMShougo
 
おすすめVimプラグインまとめ
おすすめVimプラグインまとめおすすめVimプラグインまとめ
おすすめVimプラグインまとめShun Iwase
 
最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm晃 遠山
 
DevEnv Tryit.vim Phrase.vim
DevEnv Tryit.vim Phrase.vimDevEnv Tryit.vim Phrase.vim
DevEnv Tryit.vim Phrase.vimt9md
 
Vimの基本の基本
Vimの基本の基本Vimの基本の基本
Vimの基本の基本晋 小沼
 
Unite vim
Unite vim Unite vim
Unite vim Shougo
 
VimとRubyのアツい関係
VimとRubyのアツい関係VimとRubyのアツい関係
VimとRubyのアツい関係Misao X
 
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティスeZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティスericsagnes
 
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくったCommon Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくったt-sin
 
Vim衆のつどい
Vim衆のつどいVim衆のつどい
Vim衆のつどいYuki Kokubun
 
Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境Satoshi imai
 
2016 04-15 nl-nagoya_vim8
2016 04-15 nl-nagoya_vim82016 04-15 nl-nagoya_vim8
2016 04-15 nl-nagoya_vim8cohama
 
Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識alwei
 
vim入門 (vim study #1)
vim入門 (vim study #1)vim入門 (vim study #1)
vim入門 (vim study #1)bpstudy
 

Semelhante a Vimから見たemacs (20)

Shougoの開発環境
Shougoの開発環境Shougoの開発環境
Shougoの開発環境
 
VimM#3
VimM#3VimM#3
VimM#3
 
PasteHub at kansai emacs 9th
PasteHub at kansai emacs 9thPasteHub at kansai emacs 9th
PasteHub at kansai emacs 9th
 
初心者Vimmerによるvim+rails開発
初心者Vimmerによるvim+rails開発初心者Vimmerによるvim+rails開発
初心者Vimmerによるvim+rails開発
 
Vim = VM
Vim = VMVim = VM
Vim = VM
 
おすすめVimプラグインまとめ
おすすめVimプラグインまとめおすすめVimプラグインまとめ
おすすめVimプラグインまとめ
 
Tdd vim
Tdd vimTdd vim
Tdd vim
 
最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm
 
DevEnv Tryit.vim Phrase.vim
DevEnv Tryit.vim Phrase.vimDevEnv Tryit.vim Phrase.vim
DevEnv Tryit.vim Phrase.vim
 
Vimの基本の基本
Vimの基本の基本Vimの基本の基本
Vimの基本の基本
 
Unite vim
Unite vim Unite vim
Unite vim
 
VimとRubyのアツい関係
VimとRubyのアツい関係VimとRubyのアツい関係
VimとRubyのアツい関係
 
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティスeZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
 
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくったCommon Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
 
Vim衆のつどい
Vim衆のつどいVim衆のつどい
Vim衆のつどい
 
Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境
 
2016 04-15 nl-nagoya_vim8
2016 04-15 nl-nagoya_vim82016 04-15 nl-nagoya_vim8
2016 04-15 nl-nagoya_vim8
 
Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識
 
vim入門 (vim study #1)
vim入門 (vim study #1)vim入門 (vim study #1)
vim入門 (vim study #1)
 
rucs_vim LT
rucs_vim LTrucs_vim LT
rucs_vim LT
 

Mais de Shougo

Vim conf2019
Vim conf2019Vim conf2019
Vim conf2019Shougo
 
Neosnippet.vim + Deoppet.nvim in Vim conf 2017
Neosnippet.vim + Deoppet.nvim in Vim conf 2017Neosnippet.vim + Deoppet.nvim in Vim conf 2017
Neosnippet.vim + Deoppet.nvim in Vim conf 2017Shougo
 
カードゲームで学ぶテキストエディタ
カードゲームで学ぶテキストエディタカードゲームで学ぶテキストエディタ
カードゲームで学ぶテキストエディタShougo
 
deoplete: The dark powered auto completion plugin for neovim
deoplete: The dark powered auto completion plugin for neovimdeoplete: The dark powered auto completion plugin for neovim
deoplete: The dark powered auto completion plugin for neovimShougo
 
Let's talk about neovim
Let's talk about neovimLet's talk about neovim
Let's talk about neovimShougo
 
neovim = VM
neovim = VMneovim = VM
neovim = VMShougo
 
An introduction to neocomplete
An introduction to neocompleteAn introduction to neocomplete
An introduction to neocompleteShougo
 
neobundle.vimについて+おまけ
neobundle.vimについて+おまけneobundle.vimについて+おまけ
neobundle.vimについて+おまけShougo
 
modern X86 environment
modern X86 environmentmodern X86 environment
modern X86 environmentShougo
 
Ultimate completion environment with neocomplcache in vim
Ultimate completion environment with neocomplcache in vimUltimate completion environment with neocomplcache in vim
Ultimate completion environment with neocomplcache in vimShougo
 

Mais de Shougo (10)

Vim conf2019
Vim conf2019Vim conf2019
Vim conf2019
 
Neosnippet.vim + Deoppet.nvim in Vim conf 2017
Neosnippet.vim + Deoppet.nvim in Vim conf 2017Neosnippet.vim + Deoppet.nvim in Vim conf 2017
Neosnippet.vim + Deoppet.nvim in Vim conf 2017
 
カードゲームで学ぶテキストエディタ
カードゲームで学ぶテキストエディタカードゲームで学ぶテキストエディタ
カードゲームで学ぶテキストエディタ
 
deoplete: The dark powered auto completion plugin for neovim
deoplete: The dark powered auto completion plugin for neovimdeoplete: The dark powered auto completion plugin for neovim
deoplete: The dark powered auto completion plugin for neovim
 
Let's talk about neovim
Let's talk about neovimLet's talk about neovim
Let's talk about neovim
 
neovim = VM
neovim = VMneovim = VM
neovim = VM
 
An introduction to neocomplete
An introduction to neocompleteAn introduction to neocomplete
An introduction to neocomplete
 
neobundle.vimについて+おまけ
neobundle.vimについて+おまけneobundle.vimについて+おまけ
neobundle.vimについて+おまけ
 
modern X86 environment
modern X86 environmentmodern X86 environment
modern X86 environment
 
Ultimate completion environment with neocomplcache in vim
Ultimate completion environment with neocomplcache in vimUltimate completion environment with neocomplcache in vim
Ultimate completion environment with neocomplcache in vim
 

Vimから見たemacs

  • 1. 「Vimmer から見た Emacs 」 @ShougoMatsu
  • 2. 自己紹介 ● Vimmer 枠の ShougoMatsu です ● 職業:普通のサラリーマン ● Vim/Emacs 勉強会と聞いてやって来ました ● 日本では珍しい重度の Vim 病患者なので、 「Vim」とつぶやいていないと調子が悪くなります
  • 3. 作ってきたプラグイン ● auto-complete.el → neocomplcache ● Dired.el, direx.el → vimfiler ● anything.el(helm.el) → unite.vim ● eshell → vimshell ● package.el, el-get → neobundle.vim ● hexl-mode (?) → vinarise
  • 4. このスライドの目的 ● Vim と Emacs にはそれぞれ良いところと悪いとこ ろがある ● Vim と Emacs の文化を知り、相互理解を深めたい ● スライドの内容は @ShougoMatsu の独断と偏見 に満ちています。これが Vimmer の総意だと勘違 いしないでください。
  • 5. O Vim キーマッピング ● Emacs はモードが無いのでキーバインドが複雑 ● 私には、<C-c> <C-x> … とか押せない ● Emacs だとカーソル移動時にコントロールを押し 忘れて泣けることがある ● ただし、Vim もインサートモードのキーマッピングは Emacs 並に足りない ● つまり、 Vim はインサートモードで Emacs と戦うと 圧倒的に不利
  • 6. O Emacs スクリプト言語 ● Vim script はよく批判される ● 例: 無名関数がない、オブジェクト指向がやりづら い、ライブラリの欠如、コマンドと関数の混 在、eval(:execute) の多用、組み込み機能をカスタ マイズしづらい etc... ● とはいえ、Emacs Lisp が Vim script よりも圧倒的 に優れているわけではない
  • 7. O Vim ファイル編集能力 ● Vim のモードは高速にファイルを編集するため ● Vim のファイル編集能力は圧倒的 ● 気分は人間フィルタ ● 自分もそれほど使いこなせているわけではない ● 「詰め Vi(Vim)」 はあるが、「詰め Emacs」は見た ことがない ● おそらく思想の違い
  • 8. O Emacs 拡張性 ● テキストエディタの枠を超えた圧倒的な拡張性 ● 最初から拡張することを考えられている ● Vim の場合はスクリプト言語が後付け ● 組み込み機能の自由自在なカスタマイズ ● 本体の機能が Emacs Lisp で記述されている ● ただし、パフォーマンスが犠牲になっている
  • 9. O Vim コミュニティ ● Vim の方がコミュニティの力がある(日本での話) ● Vim-users.jp, vim-jp ● Vim 本体で貢献する日本人の存在 ● Emacs の場合、個人で活動している人はいるが、あ まりまとまっていない印象 ● ただ、これから Emacs のコミュニティも活性化する かも?
  • 10. O Emacs 非同期通信 ● Emacs は標準で非同期通信が可能 ● 標準添付されている Emacs でも非同期通信は多 用されている ● エディタ内で引きこもるには必須の機能 ● Deferred.el, concurrent.el 等の補助ライブラリ ● Vim の場合、Python 等の外部インタフェースや vimproc を使用しないといけない
  • 11. O Vim 正規表現 ● Emacs の正規表現はエスケープが多い ● Vim の正規表現は '' を用いるとエスケープがいら ない ● ただし、(, ), ?, + はなれない人は戸惑うらし い ● 更に、先読みや後読みが書きやすい
  • 12. O Emacs 標準添付プラグイン ● Emacs は標準添付プラグインが豊富 ● Eshell, org-mode, tramp, dired, ... ● 節操がない、とも言える ● Vim の場合、標準添付プラグインは殆ど無い ● ほとんどの場合、組み込み機能でやってしまうため
  • 13. O Vim ユーザ数 ● Vim の方がユーザ数が多い ● ただし、普通のエディタの代わりに使う人も相当数 いる ● Emacs の方が全体的なレベルは高い印象 ● Vim はあまり設定しなくても動くから?
  • 14. O Emacs 日本語入力 ● 日本語入力はモードとの相性が悪い ● Emacs は日本語入力用のフロントエンドも充実し ている ● Emacs は日本語入力中にカーソル移動ができる ● Emacs には Org-mode もある
  • 15. O Vim シンタックスハイライト ● Vim のシンタックスハイライトは 300 種類を超える ● シンタックスハイライトの文法もやたらと高機能 ● 自分が Vim を使い始めたのはシンタックスハイラ イトの充実があったから
  • 16. O Emacs 開発安定性 ● 一時期リリースが不定期だったが、最近のEmacs は開発がコミュニティベースで安定している ● Vim もコミュニティベースだが、パッチを当ててリ リースするのは原作者の Bram Moolenaar 氏 ● いつリリースされるかはBram氏にしかわからない ● Vim のソースコードを読める人・パッチを書く人が 少ない ● ただし、Vim には日本人の貢献も数多い(多言語 対応・オムニ補完)
  • 17. O Vim インデント ● Vim はなぜかインデントの設定がやたらと多い ● 標準のインデントプラグインも充実している ● 自作するのも難しくはない ● Emacs はインデント設定で苦労している人が多い 印象がある
  • 18. O Emacs フォント ● Emacs は任意の位置でフォントを自由自在に変更 できる ● もはやワープロのようである ● Vim は等幅フォントのみ。一部フォントを変更できる が制限が多い ● Web ブラウザやプレゼンテーションツールを実現す るには必須の機能 ● プログラマ用のエディタとして考えると必須機能で はない
  • 19. O Vim パフォーマンス ● Vim が(ある程度)拡張性を犠牲にしても、組み込 み機能を重視する理由 ● ほとんどの機能が組み込みなので組み込み機能は 圧倒的なパフォーマンスを誇る ● 単純なエディタとしてみた場合、速度はとても重要 ● ただし、 Vim script の実行速度が高速なわけでは ない
  • 20. O Emacs 画像表示 ● 個人的に、Emacs の羨ましい機能で 1, 2を争う ● エディタとして考えるといらない ● エディタとして考えないとほしい ● まずは誰かパッチを書いてくれる人がいないかと 思っている
  • 21. O Vim 互換性 ● Vim は上位互換性をとても重視している ● 10 年以上前の Vim スクリプトが動作 ● 基本的に機能は削られない(非推奨になることは ある) ● Emacs はバージョンアップ時に関数が消えている …… ● Vimでは、新機能を使う時くらいしかバージョン チェックすることはない
  • 22. O Emacs シェル連携 ● 標準で、shell-mode, eshell, term とやたらとたく さんある ● Emacs から出ない生活の実現 ● Vim でもプラグインを導入すれば可能。しかし標準 では無理
  • 23. まとめ ● Vim は開発用の機能、Emacs は開発以外の機能 に優れている ● Emacs はバージョンアップ時に PDF を見れるよう になったりするので、もはや訳分からないことになっ ている ● どっちがよいかはもはや個人の好み ● 個人的には Emacs の機能も羨ましい ● 不満があったら Vim script を書いたほうが速いの で Emacs に移る気はない
  • 24. 終わりに ● 最近 Sublime なんとか、や Eclipse などが現れて きていますが…… ● 「IDEとどう戦うのか」 ● Vim と Emacs はこれからも良きライバルになって 行きましょう ● そして Emacs の良い所は Vim にも取り込んでい きたい