読者です 読者をやめる 読者になる 読者になる

by shigemk2

当面は技術的なことしか書かない

LT #shibuya_el

Shibuya.el 2012年9月6日

初めての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とキーボード(emacsdvorak配列について)

キーボードこだわってる?→結構こだわってる

キーボードの配列こだわってますか?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の限界へ…

VimEmacsにはそれぞれ良いところと悪いところがある
VimEmacsの文化を知り、相互理解を得たい

  • Emacsにはモードがないので、キーバインドが複雑
  • C-c C-x とか押せない
  • Emacsだとカーソル移動時にコントロールを押し忘れてしまうことがある
  • VimもインサートモードのキーのマッピングはEmacs並に足りない
  • VimはインサートモードでEmacsと戦うと圧倒的に不利
  • Vim scriptはよく批判される(無名関数がない ライブラリがない オブジェクト指向がやりづらい コマンドと関数の混在 組み込み機能をカスタマイズしづらい)
  • Emacs LispVim Scriptより圧倒的に優れているわけではない

Vim

  • Vimのファイル編集能力
  • Vimのモードは高速にファイルを編集するため
  • Vimのファイル編集能力は圧倒的
  • 気分は人間フィルタ
  • 自分もそれほど使いこなせているわけではない
  • 本体の機能がEmacs lispで記述されている
  • ただし、パフォーマンスが犠牲になっている

Emacs

  • 圧倒的な拡張性
  • 最初から拡張することを考えている
  • カスタマイズしやすい

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とどう戦うのか
VimEmacsは良きライバルとなればよいのでしょうか。