SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
「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 にも取り込んでい
    きたい

Contenu connexe

Tendances

DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容sairoutine
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換京大 マイコンクラブ
 
Gui自動テストツール基本
Gui自動テストツール基本Gui自動テストツール基本
Gui自動テストツール基本Tsuyoshi Yumoto
 
型安全性入門
型安全性入門型安全性入門
型安全性入門Akinori Abe
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンAkihiko Horiuchi
 
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...NTT DATA Technology & Innovation
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろうShingo Omura
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
初心者向けWebinar AWSで開発環境を構築しよう
初心者向けWebinar AWSで開発環境を構築しよう初心者向けWebinar AWSで開発環境を構築しよう
初心者向けWebinar AWSで開発環境を構築しようAmazon Web Services Japan
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 

Tendances (20)

入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換
 
Marp入門
Marp入門Marp入門
Marp入門
 
Gui自動テストツール基本
Gui自動テストツール基本Gui自動テストツール基本
Gui自動テストツール基本
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろう
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
初心者向けWebinar AWSで開発環境を構築しよう
初心者向けWebinar AWSで開発環境を構築しよう初心者向けWebinar AWSで開発環境を構築しよう
初心者向けWebinar AWSで開発環境を構築しよう
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
Oss貢献超入門
Oss貢献超入門Oss貢献超入門
Oss貢献超入門
 

Similaire à 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の基本の基本晋 小沼
 
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
 
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
 

Similaire à 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の基本の基本
 
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
 
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
 

Plus 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
 

Plus de Shougo (9)

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
 

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 にも取り込んでい きたい