初めてのemacs lisp @ainame
私の初めてはヨン様でした
shibuya.el
emacs lispの勉強→成果物はmarmaladeへ
BDD(勉強会駆動開発)
開発
emacs lispテクニックバイブル
CL Schemeを触ったことがある人は違和感なし
- メタプロが多くて素敵
- 命名規則がよく分からない
- 変数のスコープ
- 正規表現の表記方法
- 関数を覚えるのが大変
viキーバインディングを提供するマイナーモード
- hjklが楽だと思った
- 会社では書くのより読むほうが多い
- 左手小指の負担を減らしたい
hjkl-mode
jk同時押しでnormal iでemacsに戻る
githubとmarmaladeに公開
marmalade 24のpackage.elのELPA互換サイト
登録簡単、アップロード簡単
ただし使ってもらうには、elispでパスを追加してもらわなければならない。
emacs lispテクニックバイブルを読め
普段の作業をハック!!
すぐに挙げられるのも◯
「Emacs Lispのテスト」について @uk_ar
key-combo.el flex-autopair.el
Emacs Lispを公開していると…うっかりデグレ or 不具合報告の内容が理解できない
→テストで解決したい
質問「Emacs Lispのテストを書いている人」→あまりいない
ERTを使おう
ERT
Emacs24から標準添付のテストフレームワーク
標準添付のorg-modeなども採用。
書き方
(ert-deftest test1 ... やりたい処理 (should ( 真になる条件 )))
テストの登録と実行
(require 'ert) ;;テストの登録→テストの実行という流れ ;;M-x eval-bufferでテストの登録 ;;M-x ert RETでテストの実行
テストの詳細へのジャンプ
;;テスト失敗時には評価前と評価後の式が出る ;;個別のテストケースにジャンプ (ert-deftest test1() (should (eq (+ 1 1) 2))) (ert-deftest test2() (should (eq (+ 1 1) 3)))
デバッグとバックトレース
;;テストをデバッグするときにはバックトレースedebugが使用可能 ;; 1. ertバッファ上でb とすればバックトレースが見れる ;; 2. M-x edebug-defun でデバッガ起動 (ert-deftest test3() (let ((result 1)) (should (eq (1+ 1) result))))
まとめ
Emacs Lispを公開するときはぜひテストを。
ERTでやればいいんじゃないか?
UIまわりのテストは非同期に起因する罠があったりするから注意
Emacsとキーボード(emacsとdvorak配列について)
キーボードこだわってる?→結構こだわってる
キーボードの配列こだわってますか?QWERTYではなくdvorak
dvorak 左手に小指が集中している
Emacsとの相性は、可もなく不可もなく…
ただしvimは相性悪そう。
でも移行コストは蝶高い。
でも慣れれば快適。
dvorak + α のカスタマイズ
ヨク使うキーは移動する(shiftキーを押してるときはcとkを入れ替えたり、記号はshift押さないとか。)
SandS スペースキーをShiftのかわりに使う
無刻印キーボードのススメ(dvorakに移行しやすいよ!!)
小指の話
Christian Vander みたいな啓示を受けてEmacsへ
勉強会開催は存外にしんどい
企画を考える
場所を決める
発表者を集める
懇親会の手配がしんどい
メリット
主催者の知名度が上がる
知見が広がる
準備がしんどい
時間がかかる
当日運営で必死
主催者がSPOF ← 参加者が冗長化してやろうじゃなイカ
最近作った拡張(popwin.elなど)について
popwin.el ポップアップウィンドウをスマートに扱うための拡張(occurなどを下から出してくれる)
direx.el 普通のディレクトリエクスプローラ(ディレクトリのなかをtreeで表示さしてくれる)
emux.el Emacsのためのターミナルマルチプレクサ
yascroll.el OSXみたいなスクロールバー(スクロールしたいときだけスクロールバーを出せる)
気になる拡張
undo-tree.el(24だとポンコツ…?)
magit 微妙に使いづらい
次に作りたい拡張
github.el (レポジトリを作っただけ)
flymake.el + smart-compile.el的な何か
最近の活動
auto-complete v1.4 および v2.0の開発
popup.el のネイティブ実装 など
clgrep.el について
キーボード キネシス
dvorak移行も楽々。 320ドルくらい
閑話休題。
change-logからメモを書きまくる→検索をしたい。grepでサーチできるけど…
clgrep context grep 内容に沿って塊を取り出すgrep
blgrep ブロックの始まりと終わりを検索出来る
clmemoとかで検索…
「Vimmerから見たEmacs」
生粋のVimmer
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
vimmerの限界へ…
VimとEmacsにはそれぞれ良いところと悪いところがある
VimとEmacsの文化を知り、相互理解を得たい
- Emacsにはモードがないので、キーバインドが複雑
- C-c C-x とか押せない
- Emacsだとカーソル移動時にコントロールを押し忘れてしまうことがある
- VimもインサートモードのキーのマッピングはEmacs並に足りない
- VimはインサートモードでEmacsと戦うと圧倒的に不利
- Vim scriptはよく批判される(無名関数がない ライブラリがない オブジェクト指向がやりづらい コマンドと関数の混在 組み込み機能をカスタマイズしづらい)
- Emacs LispがVim Scriptより圧倒的に優れているわけではない
- Vimのファイル編集能力
- Vimのモードは高速にファイルを編集するため
- Vimのファイル編集能力は圧倒的
- 気分は人間フィルタ
- 自分もそれほど使いこなせているわけではない
- 本体の機能がEmacs lispで記述されている
- ただし、パフォーマンスが犠牲になっている
- 圧倒的な拡張性
- 最初から拡張することを考えている
- カスタマイズしやすい
Vim
コミュニティの力が高い
Emacs
個人で活動している人のほうが多い
Emacsでは非同期通信が標準で使える
エディタ内で引きこもれるには必須
Vimのほうが正規表現に優れている(Emacsでは要エスケープ)
Vimでは"を使うとエスケープがいらない
先読みや後読みが書きやすい
Emacsは標準添付プラグインが豊富
Vimは標準添付ライブラリが皆無
Vimのほうがユーザ数が多い
ただし普通のエディタの代わりに使う人も相当数いる。
Emacsのほうが全体的なレベルは高い印象。
Vimはあまり設定しなくてもいいかも?
Vimは日本語入力との相性がものすごく悪い
対してEmacsは日本語入力用のフロントエンドも充実している。
org-modeもあるから、物書きにも使える。
Vimのシンタックスハイライトは300種類を越える
シンタックスハイライトの文法もやたらと高機能。
Emacsのリリースは一時期不安定だったが、最近のEmacsは開発が
コミュニティベースで安定している。
Vimもコミュニティベースだったが、パッチを当ててリリースするのは
原作者だけ。
Vimのソースコードを読める人、パッチを書く人が少ない。
ただしVimには日本人の貢献も多い。(多言語対応、オムニ補完など)
Vimにはインデントの設定がやたらと多い。
標準インデントプラグインも充実。
Emacsはインデント設定で苦労している人がおおいかも。
Emacsはフォントを自由自在に変更できるが、Vimは当然等幅フォントのみ。
Vimはパフォーマンスがはやい。ただしVim Scriptの実行速度が高速なわけではない。
Emacsは画像表示できる。でもエディタとして使うのなら、必要だろうか?
Vimの互換性
Vimは上位互換性をとても重視している。
10年以上前のVimスクリプトが動作する。(Vimでは機能が基本的に削られない)
Emacsはバージョンアップ時に関数が消えている
Emacsはシェル連携が充実。shell-mode eshell termなど
Vimでもプラグインを導入すれば可能
まとめ
Vim は開発用の機能、Emacsは開発以外の機能に優れている
Emacsはバージョンアップ時にPDFを見れるようになったりするので、訳が分からないよ…
最近ではSulimeとかEclipseなどが現れてきていますが…
IDEとどう戦うのか
VimとEmacsは良きライバルとなればよいのでしょうか。