SlideShare a Scribd company logo
Shougo (暗黒美夢王)
我が evil-mode が嫌いな理由
〜evil-mode の闇〜
※:この発表はShougoではなく、暗黒美夢王がお送りします
お久しぶりだ、フハハハ
● 我が名は暗黒美夢王、闇の Vim を使う者……
● 最近 neovim がマイブームであり、neovim のための非同期補完プラグインを作
ろうとしている
– 現在は neovim の if_python 対応部分を書き直している
– gitter で neovim の開発者とチャットしたり
● せっかくの Emacs 勉強会なので、evil-mode について発表することにした
● Vim の話が多数スライドに登場するが、今回は内容が evil-mode なので仕様と
なる
● 内容は Vim 使用者向けかもしれない
●
VimVim勉強会以外では歌わないというポリシーがある勉強会以外では歌わないというポリシーがある
ため、歌はないため、歌はない
注意だ、フハハハ
● この発表では evil-mode 使いが気分を悪くするかもしれない
●
ただし、我はただし、我は evil-modeevil-mode の出来は良いと考えの出来は良いと考え
ているている
– evil-mode を超える Vim 風拡張は存在しない
● ここで議論するのは evil-mode の本質的な問題であり、evil-
mode が誰もがインストールするべき万能の拡張機能ではない
ということである
● 「なぜ暗黒美夢王が Vim 風拡張を使わないのか」と言い換え
てしまっても良い
ケーススタディ
● A「Vim で neo 系プラグインを設定するのにつかれた……。何
でこんなに設定する必要があるの」
● B「A君、もうVim はオワコン、やはり時代は Emacs だよ。最近
の Emacs には evil-mode があって、Vim プラグインも動くん
だ」
● A「えっ、何それ初耳だよ。Emacs はすごいんだね。よし、Emacs
+ evil-mode に早速乗り換えよう!」
● A「evil-mode のこの機能、Vim で見たことある!」
その後の A 君
● A「B 君、僕は Emacs + evil-mode でいつでも evil-mode の
設定をしているんだ。もうキミと遊んでいる時間はないよ」
● B「なんていうことだ、A君。僕よりテキストエディタの方が大事
だなんて……」
● こうして、A 君は Emacs + evil-mode に移行してテキストエ
ディタとの幸せな日々を過ごしたのでした
●
めでたし、めでたし……?
ちょっと待った!!
●
本当にその選択は大丈夫なのか?
● evil-mode は Vim plugin が動作するのか?
● Vim からの移行は楽なのか?
● 意外と知られていない evil-mode への移行のリスク
● evil-mode の利点と欠点を正しく理解するべきである
Vim script が動作しない
● evil-mode では Vim script が動作しない
● Vim script や Vim plugin の互換性は 0 %
● 既存の Vim script を全て捨て、Emacs Lisp 資産に置き換える
必要がある
●
一部対応するプラグインはあるが、細かいところで挙動は違う
● 「evil-mode では Vim script や Vim プラグインが動く」という
嘘は言わないように!
evil-mode は情報が少ない
●
使用している人が相対的に少数
●
日本語の情報は更に少ない
● tarao 氏のページは情報がまとまっていて極めて参考になる
が、ちょっと古い
http://d.hatena.ne.jp/tarao/20130303/evil_intro
●
困ったことがあっても、なかなか人に聞けない
何かの拍子に Emacs が顔を出す
● evil-mode の wrap は完全ではない
● 既存のプラグインの操作体系は evil-mode を考慮していない
●
我慢するのか、自分で設定するのか
試される Emacs Lisp 力
● evil-mode では Emacs Lisp を書かないという選択肢はない
● evil-mode 独自の概念はとても複雑
●
設定が難しく、解説を読むだけでクラクラする
http://d.hatena.ne.jp/tarao/20130304/evil_config
● Emacs Lisp を進んで書くような人は Emacs 界にも 50 人に
1人〜2人くらいしかいないのだが……
多数の拡張機能のインストールが必要
● evil-mode は機能が分割されている
●
各種プラグインを模倣した拡張機能達の例:
evil-nerdcommenter, evil-rails, evil-little-words, ...
● Vim に近づけるためには、既存の Emacs 拡張機能のインス
トールや設定を行う必要もある
あなたに自由な時間はあるか?
● evil-mode の設定は時間がかかる
● Emacs の設定も同時に行う必要がある
●
テキストエディタの「設定」は一朝一夕では無理
●
「テキストエディタは道具」という軽い認識では困難がある
●
進学、就職、結婚、子供……それらの環境の変化があっても、テ
キストエディタの設定を続けることはできるか?
– テキストエディタと人生の両立
●
我の人生はテキストエディタに捧げる……くらいの情熱が必要
neovim という選択肢
● neovim だと Vim plugin の互換性が 98%
● 既存の Vim の設定もほぼそのまま動く
– このレベルになるとVim と互換性があるといえる
– 既存の Vim に不満があり、Vim script 資産を捨てたくないならこちら
● 非同期通信、各種プログラミング言語で拡張可能、GUI クライアント、端
末機能の内蔵が特徴的
●
まだ理想には遠いが、現段階でも十分実用的
● 理論上では Lisp で拡張を開発可能
– ベースとなる仕組みはある
● 一方の Guile Emacs は……(察し)
evil-mode に向いている人
● Emacs の設定に割く時間がある
● Emacs Lisp が大好き
●
困難を自分で解決できる能力がある
● Vim script が嫌いだ
● 足りないものは Emacs Lisp で作る
● メインの開発環境は Windows ではない。もしくは UNIX 環境
へのリモートログインである
● Emacs のコミュニティは俺が盛り上げる!
evil-mode に向いていない人
● 過去の Vim script の資産が捨てられない
● Emacs の拡張機能は Vim の既存のプラグインと細かいところで
挙動が異なる
● Emacs Lisp を書きたくない
● 既に Vim script で多数のプラグインを作成している
● Vim のコミュニティが好きだ
●
テキストエディタの起動時間を気にしてしまう
● 「実は…… Vim script を書くのが好きなんです」
● Vim にパッチを書いている
暗黒美夢王の場合……
● 過去の Vim script の資産が捨てられない(プラグイン含めて数万
行)
● Emacs の拡張機能は Vim の既存のプラグインと細かいところで
挙動が異なるので気に入らない
● Emacs Lisp を書きたくない
● 既に Vim script で多数のプラグインを作成している。再実装してら
れない
● Vim のコミュニティが好きだ
●
テキストエディタの起動時間を気にしてしまう
● Vim script を書くのが好き。なぜ Dis られるのか理解できない
Emacs に移住する(した)者たちへ
● Vimmer としては悲しいが、Vim に出来ないことがあるのは事
実なので、止めはしない
● どうせ Emacs に移住するのなら Emacs をサポートしてやって
ほしい
● Emacs は誰かが新しい拡張機能を書かないと徐々に弱ってい
く
● 未来の Emacs を支えるのは、あなた達なのだ
終わりに
●
今回の解説でお分かりいただけだであろうか
● evil-mode は Vim を模倣する拡張機能としては極めて優秀だ
● evil-mode と他の Vim 風拡張機能では雲泥の差がある
● しかし、 evil-mode では Vim script が動かないので Vim と互換
性があるとは認められない
● あなたに evil-mode を使う「覚悟」はあるか?
● それは漠然と Vim を使っていた時よりも困難な道程である
● 我は evil-mode が嫌いというより、Vim フォーラムでよく見る
「間違った evil-mode の宣伝」が嫌いなのかもしれない
終わりに
● あなたは「VimをベースにしたEmacsが欲しいのか」
→ neovim
● それとも「EmacsをベースにしたVimが欲しいのか」
→ evil-mode
● 素の Emacs が最高なのか

More Related Content

What's hot

分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
NTT Communications Technology Development
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
murachue
 
Redmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたRedmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみた
Kohei Nakamura
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
 
Jetson活用セミナー ROS2自律走行実現に向けて
Jetson活用セミナー ROS2自律走行実現に向けてJetson活用セミナー ROS2自律走行実現に向けて
Jetson活用セミナー ROS2自律走行実現に向けて
Fixstars Corporation
 
Shougoの開発環境
Shougoの開発環境Shougoの開発環境
Shougoの開発環境
Shougo
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
Kota Saito
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
Rootlessコンテナ
Akihiro Suda
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
 
やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門
Tomohiko Himura
 
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみたLinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
Hiraku Toyooka
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
 
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
whywaita
 

What's hot (20)

分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
Redmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたRedmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみた
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
Jetson活用セミナー ROS2自律走行実現に向けて
Jetson活用セミナー ROS2自律走行実現に向けてJetson活用セミナー ROS2自律走行実現に向けて
Jetson活用セミナー ROS2自律走行実現に向けて
 
Shougoの開発環境
Shougoの開発環境Shougoの開発環境
Shougoの開発環境
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
Rootlessコンテナ
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門
 
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみたLinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
 

Similar to 我が evil-mode を嫌いな理由 〜evil-mode の闇〜

Tdd vim
Tdd vimTdd vim
Tdd vim
Tak Nishikori
 
おすすめVimプラグインまとめ
おすすめVimプラグインまとめおすすめVimプラグインまとめ
おすすめVimプラグインまとめ
Shun Iwase
 
とある Perl Monger の働き方
とある Perl Monger の働き方とある Perl Monger の働き方
とある Perl Monger の働き方
Yusuke Wada
 
anyframeを使おう
anyframeを使おうanyframeを使おう
anyframeを使おう
Hideaki Miyake
 
neobundle.vimについて+おまけ
neobundle.vimについて+おまけneobundle.vimについて+おまけ
neobundle.vimについて+おまけ
Shougo
 
PHP懇親会
PHP懇親会PHP懇親会
PHP懇親会kaz_29
 
5年間Yokohama.vimをやってみて感じた事
5年間Yokohama.vimをやってみて感じた事5年間Yokohama.vimをやってみて感じた事
5年間Yokohama.vimをやってみて感じた事
gu4
 
PasteHub at kansai emacs 9th
PasteHub at kansai emacs 9thPasteHub at kansai emacs 9th
PasteHub at kansai emacs 9th
Kiyoka Nishiyama
 
neovim = VM
neovim = VMneovim = VM
neovim = VM
Shougo
 
俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり) 俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり)
Seiichiro Ishida
 

Similar to 我が evil-mode を嫌いな理由 〜evil-mode の闇〜 (11)

Tdd vim
Tdd vimTdd vim
Tdd vim
 
おすすめVimプラグインまとめ
おすすめVimプラグインまとめおすすめVimプラグインまとめ
おすすめVimプラグインまとめ
 
rucs_vim LT
rucs_vim LTrucs_vim LT
rucs_vim LT
 
とある Perl Monger の働き方
とある Perl Monger の働き方とある Perl Monger の働き方
とある Perl Monger の働き方
 
anyframeを使おう
anyframeを使おうanyframeを使おう
anyframeを使おう
 
neobundle.vimについて+おまけ
neobundle.vimについて+おまけneobundle.vimについて+おまけ
neobundle.vimについて+おまけ
 
PHP懇親会
PHP懇親会PHP懇親会
PHP懇親会
 
5年間Yokohama.vimをやってみて感じた事
5年間Yokohama.vimをやってみて感じた事5年間Yokohama.vimをやってみて感じた事
5年間Yokohama.vimをやってみて感じた事
 
PasteHub at kansai emacs 9th
PasteHub at kansai emacs 9thPasteHub at kansai emacs 9th
PasteHub at kansai emacs 9th
 
neovim = VM
neovim = VMneovim = VM
neovim = VM
 
俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり) 俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり)
 

More from Shougo

Vim conf2019
Vim conf2019Vim conf2019
Vim conf2019
Shougo
 
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
Shougo
 
カードゲームで学ぶテキストエディタ
カードゲームで学ぶテキストエディタカードゲームで学ぶテキストエディタ
カードゲームで学ぶテキストエディタ
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 neovim
Shougo
 
Let's talk about neovim
Let's talk about neovimLet's talk about neovim
Let's talk about neovim
Shougo
 
An introduction to neocomplete
An introduction to neocompleteAn introduction to neocomplete
An introduction to neocomplete
Shougo
 
Unite vim
Unite vim Unite vim
Unite vim
Shougo
 
Vim = VM
Vim = VMVim = VM
Vim = VMShougo
 
modern X86 environment
modern X86 environmentmodern X86 environment
modern X86 environment
Shougo
 
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
Shougo
 

More from 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
 
An introduction to neocomplete
An introduction to neocompleteAn introduction to neocomplete
An introduction to neocomplete
 
Unite vim
Unite vim Unite vim
Unite vim
 
Vim = VM
Vim = VMVim = VM
Vim = VM
 
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
 

Recently uploaded

RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19
GrapeCity, inc.
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 
RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19
GrapeCity, inc.
 
RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19
GrapeCity, inc.
 
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdfクラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
TatsuyaHanayama
 
Bhyve Management Daemon Version 3.0 on FreBSD
Bhyve Management Daemon Version 3.0 on FreBSDBhyve Management Daemon Version 3.0 on FreBSD
Bhyve Management Daemon Version 3.0 on FreBSD
Yuichiro Naito
 
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet DocumentationRaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
GrapeCity, inc.
 
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 

Recently uploaded (8)

RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
 
RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19
 
RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19
 
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdfクラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
 
Bhyve Management Daemon Version 3.0 on FreBSD
Bhyve Management Daemon Version 3.0 on FreBSDBhyve Management Daemon Version 3.0 on FreBSD
Bhyve Management Daemon Version 3.0 on FreBSD
 
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet DocumentationRaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
 
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
 

我が evil-mode を嫌いな理由 〜evil-mode の闇〜

  • 1. Shougo (暗黒美夢王) 我が evil-mode が嫌いな理由 〜evil-mode の闇〜 ※:この発表はShougoではなく、暗黒美夢王がお送りします
  • 2. お久しぶりだ、フハハハ ● 我が名は暗黒美夢王、闇の Vim を使う者…… ● 最近 neovim がマイブームであり、neovim のための非同期補完プラグインを作 ろうとしている – 現在は neovim の if_python 対応部分を書き直している – gitter で neovim の開発者とチャットしたり ● せっかくの Emacs 勉強会なので、evil-mode について発表することにした ● Vim の話が多数スライドに登場するが、今回は内容が evil-mode なので仕様と なる ● 内容は Vim 使用者向けかもしれない ● VimVim勉強会以外では歌わないというポリシーがある勉強会以外では歌わないというポリシーがある ため、歌はないため、歌はない
  • 3. 注意だ、フハハハ ● この発表では evil-mode 使いが気分を悪くするかもしれない ● ただし、我はただし、我は evil-modeevil-mode の出来は良いと考えの出来は良いと考え ているている – evil-mode を超える Vim 風拡張は存在しない ● ここで議論するのは evil-mode の本質的な問題であり、evil- mode が誰もがインストールするべき万能の拡張機能ではない ということである ● 「なぜ暗黒美夢王が Vim 風拡張を使わないのか」と言い換え てしまっても良い
  • 4. ケーススタディ ● A「Vim で neo 系プラグインを設定するのにつかれた……。何 でこんなに設定する必要があるの」 ● B「A君、もうVim はオワコン、やはり時代は Emacs だよ。最近 の Emacs には evil-mode があって、Vim プラグインも動くん だ」 ● A「えっ、何それ初耳だよ。Emacs はすごいんだね。よし、Emacs + evil-mode に早速乗り換えよう!」 ● A「evil-mode のこの機能、Vim で見たことある!」
  • 5. その後の A 君 ● A「B 君、僕は Emacs + evil-mode でいつでも evil-mode の 設定をしているんだ。もうキミと遊んでいる時間はないよ」 ● B「なんていうことだ、A君。僕よりテキストエディタの方が大事 だなんて……」 ● こうして、A 君は Emacs + evil-mode に移行してテキストエ ディタとの幸せな日々を過ごしたのでした ● めでたし、めでたし……?
  • 6. ちょっと待った!! ● 本当にその選択は大丈夫なのか? ● evil-mode は Vim plugin が動作するのか? ● Vim からの移行は楽なのか? ● 意外と知られていない evil-mode への移行のリスク ● evil-mode の利点と欠点を正しく理解するべきである
  • 7. Vim script が動作しない ● evil-mode では Vim script が動作しない ● Vim script や Vim plugin の互換性は 0 % ● 既存の Vim script を全て捨て、Emacs Lisp 資産に置き換える 必要がある ● 一部対応するプラグインはあるが、細かいところで挙動は違う ● 「evil-mode では Vim script や Vim プラグインが動く」という 嘘は言わないように!
  • 8. evil-mode は情報が少ない ● 使用している人が相対的に少数 ● 日本語の情報は更に少ない ● tarao 氏のページは情報がまとまっていて極めて参考になる が、ちょっと古い http://d.hatena.ne.jp/tarao/20130303/evil_intro ● 困ったことがあっても、なかなか人に聞けない
  • 9. 何かの拍子に Emacs が顔を出す ● evil-mode の wrap は完全ではない ● 既存のプラグインの操作体系は evil-mode を考慮していない ● 我慢するのか、自分で設定するのか
  • 10. 試される Emacs Lisp 力 ● evil-mode では Emacs Lisp を書かないという選択肢はない ● evil-mode 独自の概念はとても複雑 ● 設定が難しく、解説を読むだけでクラクラする http://d.hatena.ne.jp/tarao/20130304/evil_config ● Emacs Lisp を進んで書くような人は Emacs 界にも 50 人に 1人〜2人くらいしかいないのだが……
  • 11. 多数の拡張機能のインストールが必要 ● evil-mode は機能が分割されている ● 各種プラグインを模倣した拡張機能達の例: evil-nerdcommenter, evil-rails, evil-little-words, ... ● Vim に近づけるためには、既存の Emacs 拡張機能のインス トールや設定を行う必要もある
  • 12. あなたに自由な時間はあるか? ● evil-mode の設定は時間がかかる ● Emacs の設定も同時に行う必要がある ● テキストエディタの「設定」は一朝一夕では無理 ● 「テキストエディタは道具」という軽い認識では困難がある ● 進学、就職、結婚、子供……それらの環境の変化があっても、テ キストエディタの設定を続けることはできるか? – テキストエディタと人生の両立 ● 我の人生はテキストエディタに捧げる……くらいの情熱が必要
  • 13. neovim という選択肢 ● neovim だと Vim plugin の互換性が 98% ● 既存の Vim の設定もほぼそのまま動く – このレベルになるとVim と互換性があるといえる – 既存の Vim に不満があり、Vim script 資産を捨てたくないならこちら ● 非同期通信、各種プログラミング言語で拡張可能、GUI クライアント、端 末機能の内蔵が特徴的 ● まだ理想には遠いが、現段階でも十分実用的 ● 理論上では Lisp で拡張を開発可能 – ベースとなる仕組みはある ● 一方の Guile Emacs は……(察し)
  • 14. evil-mode に向いている人 ● Emacs の設定に割く時間がある ● Emacs Lisp が大好き ● 困難を自分で解決できる能力がある ● Vim script が嫌いだ ● 足りないものは Emacs Lisp で作る ● メインの開発環境は Windows ではない。もしくは UNIX 環境 へのリモートログインである ● Emacs のコミュニティは俺が盛り上げる!
  • 15. evil-mode に向いていない人 ● 過去の Vim script の資産が捨てられない ● Emacs の拡張機能は Vim の既存のプラグインと細かいところで 挙動が異なる ● Emacs Lisp を書きたくない ● 既に Vim script で多数のプラグインを作成している ● Vim のコミュニティが好きだ ● テキストエディタの起動時間を気にしてしまう ● 「実は…… Vim script を書くのが好きなんです」 ● Vim にパッチを書いている
  • 16. 暗黒美夢王の場合…… ● 過去の Vim script の資産が捨てられない(プラグイン含めて数万 行) ● Emacs の拡張機能は Vim の既存のプラグインと細かいところで 挙動が異なるので気に入らない ● Emacs Lisp を書きたくない ● 既に Vim script で多数のプラグインを作成している。再実装してら れない ● Vim のコミュニティが好きだ ● テキストエディタの起動時間を気にしてしまう ● Vim script を書くのが好き。なぜ Dis られるのか理解できない
  • 17. Emacs に移住する(した)者たちへ ● Vimmer としては悲しいが、Vim に出来ないことがあるのは事 実なので、止めはしない ● どうせ Emacs に移住するのなら Emacs をサポートしてやって ほしい ● Emacs は誰かが新しい拡張機能を書かないと徐々に弱ってい く ● 未来の Emacs を支えるのは、あなた達なのだ
  • 18. 終わりに ● 今回の解説でお分かりいただけだであろうか ● evil-mode は Vim を模倣する拡張機能としては極めて優秀だ ● evil-mode と他の Vim 風拡張機能では雲泥の差がある ● しかし、 evil-mode では Vim script が動かないので Vim と互換 性があるとは認められない ● あなたに evil-mode を使う「覚悟」はあるか? ● それは漠然と Vim を使っていた時よりも困難な道程である ● 我は evil-mode が嫌いというより、Vim フォーラムでよく見る 「間違った evil-mode の宣伝」が嫌いなのかもしれない
  • 19. 終わりに ● あなたは「VimをベースにしたEmacsが欲しいのか」 → neovim ● それとも「EmacsをベースにしたVimが欲しいのか」 → evil-mode ● 素の Emacs が最高なのか