Emacs」カテゴリーアーカイブ

続・Meadow3インストールメモ

今日は会社のプチ社員旅行で加賀にて蟹を食べてまいりました。
蟹食べ放題でしたが蟹はたくさん食べてると手が痛くなってくるので大量に食べるのには向かないと思いました。むき終わった蟹の身だけ出てきたら倍は食べれた。
…昔城崎で蟹三昧したときは「もう蟹は当分いいや」とトラウマになりかけたりもしたんですがね。でもやっぱりうまい。
個人的には蟹のお造りがなかったのが少々不満でしたが。

あと日帰りだとゆっくり温泉につかったりは厳しいですね。。。(かなり素早くあがったつもりだったのに男性陣を少し待たせてしまいましたすみません。でも身支度まで入れて30分以内って女子には結構きついと思うの。)

 ***

そんな素敵な思い出とはまったく関係なく懲りずにemacsメモです。
前回に引き続きMeadow3(emacs22)でハマった点。

info-lookup-symbol が C-h C-i (C-h Tab)で動かない

C-h S にバインド変更されてるようです。
goto-line/font-lock-fontify-buffer といい、結構よく使うもののバインドが変わってるなあ…。
C-h C-i に新たに何かがバインドされたわけではないっぽいのでとりあえず再定義。

 (define-key help-map "\C-i" 'info-lookup-symbol)

日本語でインクリメンタルサーチできない(SKK)

以前はSKK入れたらデフォルトでできたような気がするんだけど。気のせい…?
とりあえず手動で設定。

 (add-hook 'isearch-mode-hook
(function (lambda ()
(and (boundp 'skk-mode) skk-mode
(skk-isearch-mode-setup)))))
(add-hook 'isearch-mode-end-hook
(function (lambda ()
(and (boundp 'skk-mode) skk-mode
(skk-isearch-mode-cleanup)
(skk-set-cursor-color-properly)))))

まあ、migemoな人には関係ないですが。

PerlからImage::Magickを使いたくてImageMagickをインストールしたらMeadowが "A fatal error has occurred!" とかいって起動しなくなった

@WindowsXP(SP3)
インストールしたのは ImageMagick-6.4.5。
Meadow2はバージョン6.2.4以前しか使えないらしい、というのはあったけどMeadow3は6.2以降ならなんでもいいよって書いてあったのになあ…。

で、仕方ないので古いの(6.2.8)を落としてきてインストールしてみる。
おお、今度はちゃんとMeadow動きますぞ。
しかし "Can’t locate Image/Magick.pm"
…って、肝心のPerl用モジュールがインストールされてないよ!

そういえばインストール時に「Perl5.8用のPerlMagickモジュールを…」みたいなメッセージが出てたよ。
今入ってるの ActivePerl 5.10.0 だよ。そのせいか…?

これでは意味がないので結局6.4.5に戻す。
するとMeadow起動しない(無限ループ)
どうすんべ。。。

(ちなみに両方入れてみるというのも試してみたけど "Can’t locate loadable object for module Image::Magick" みたいなことになってうまく動きませんでした…)

っていうかMeadowから画像とか使わんし、結局MeadowがImageMagickを認識しなければ6.4.5でいいんじゃね?
と思って環境変数PATHからImageMagickのパスを取り除いてみた。
おお、問題なさそう。
コマンドラインから使うこととかないだろうしとりあえずこれでいいや。

という結論にたどり着くまでに散々いろいろググったんだけどなぜか同じ問題にあたってる人に出会えなかったのでここにメモしておくよ!
そんなに特殊な環境じゃないと思うんだけどなあ…。
なんでもかんでも新しいバージョン入れればいいってもんでもないってことか。

Meadow3 (emacs22) を入れてみたメモ

ここの固定読者にはまったく需要なさそうだけどGoogle先生からの評価はなぜか高いemacsメモのお時間です。
ようやく Meadow3 を入れてみたけどいろいろつまづいたので自分用メモですよ!
いつもにも増して「興味ない人はスルー推奨」な記事ですよ!

 ***

とりあえず、起動がびっくりするほど速くなったよ!具体的には 10秒くらい→3秒くらい。
デフォルトでUnicodeに対応してるのでmule-ucsが不要になったというのが主な理由。どんだけ重かったのmule-ucs。
あと個人的には revert-buffer-with-coding-system (C-x RET r) が地味に重宝するよ!
(文字コードを指定してファイルを再読み込み。C-x RET c → C-x C-v が一発でできるかんじ。)

 ***

以下移行にあたってのメモ。

(iswitchb-default-keybindings) でエラーが出る

 (iswitchb-mode 1)

ってするだけでいいらしいよ!

ちなみに私は↑に加えて

 (global-set-key "\C-x\C-b" 'electric-buffer-list)

を設定してます。デフォルトのバッファ切り替えにくらべるとだいぶ使いやすいと思う。
ibuffer とかも便利らしいけどどうなんだろう。

参考:MeadowFAQ – Meadow3.00で動かないものがあります

cperl-mode で「invalid-read-syntax "?"」とかエラーが出る

cperl-mode のバージョンが古い(4.32)のが悪かったようです。
CPANから 5.00 を落としてきたら直りました。

cperl-mode で「Autoloading failed to define function perl-mode」とかエラーが出る

同上

cperl-mode で「Non-hex digit used for Unicode escape」とかエラーが出る

バージョンあげてみたらなんか別のエラーがでたよ。

 \\U	Upcase until \\E .  See also \u, uc.

 \\U	Upcase until \\E .  See also \\u, uc.

と直せばいいらしい。よくわかんないけど無事動くようになりました。

参考:cperl-mode で Non-hex digit used for Unicode escape な現象が起きる
yatexでも同じ問題がおきるらしい?

マウスホイールでのスクロールがなんか速い

なんかデフォルトでスクロールが加速するような設定になってるらしいです。

 (setq mouse-wheel-progressive-speed nil)

ってやったら直りました。

 ***

ってcperl-mode関連ばっかりですね。perl使わない人にはほとんど関係ないっていう。

まあとにかくそんなかんじでなんとか使えるようになりました。快適快適。

emacsメモその3・elisp正規表現編

10000HITついでにアクセスログをながめてたら、「emacs redo」の検索で来てる人がやけに多い…
と思ったら「emacs redo」「emacs undo redo」でGoogleでもYahooでも1ページ目に表示されてるよΣ( ̄□ ̄;
うわわわわ。なんというSEO。そんなたいしたこと書いてなくてほんとすんません。

そんなわけで思い出したかのようにemacsメモ第3回です。
今回はちょっぴりマニアックに正規表現の話でも。
例によって興味ない人はスルー推奨&上級者のツッコミ歓迎ですよ!

※以下、"\" は半角バックスラッシュ(もしくは¥マーク)をあらわします。

EmacsLispの正規表現がややこしい理由

perlとかの正規表現に慣れている人から見ると、とにかくなんだかやたらとエスケープさせられる、というのが第一印象かと思います。っていうか私はそうでした。
具体的には、グループ化をあらわす "( .. )" や選択をあらわす "|" が、elispでは "\(.. \)" だの "\|"だのになります。
うん。それだけでも十分めんどいですね。
くわえて、elispの正規表現は文字列として記述され、関数に渡される前に一度評価されるというめんどくさい仕様があります。
たとえば

 (re-search-forward "\\\\")

と書くと、"\\\\" は一度評価されて "\\" となってから re-search-forward に渡されます。で、これは正規表現中では "\" をあらわしますよ、と。
そう、"\" を表現するのに "\\\\" って書かなきゃいけないんですよ。どんだけー。
同様に、"foo" または "bar" にマッチさせようと思うと、

 \\(foo\\|bar\\)

ですよ。なんのいやがらせですか。素直に "(foo|bar)" って書かせてくれよ…

re-builderべんり

正規表現書いてみたけどこれで正しいのかわかんねーよ!ってかこれ何にマッチするんだよ!
っていうときは M-x re-builder オススメ。
正規表現が文章中のどの部分にマッチするか教えてくれる。文法的にまちがった正規表現書いてたら忠告してくれる。べんり。

ちなみに

C-u C-s とかのコマンドで正規表現を入力するときは入力は評価されずそのまま関数(コマンド)に渡されるらしい。
すなわち、"foo" または "bar" なら

 \(foo\|bar\)

でよいと。
これ気づかないとハマります(ハマりました)。

というか普段正規表現使うのってほとんどはコマンドからだよね。
正規表現での置換(query-replace-regexp)(C-M-%)(←どうがんばっても片手では押せない)あたりは使いだすとやめられません。

なんだかんだいって使いこなせればかなり複雑なテキスト処理もできるので便利なんですよ(フォロー)

どうでもいいですが

"\(.. \)" っていうのがなんか顔文字っぽくて可愛い。「置いといて」みたいな。

参考

GNU Emacs Lispリファレンスマニュアル: 探索と一致


  • C-M-% 、頑張って片手で押してみました。でも ESC を使えば頑張る必要も無いですね。 – Riso (2008年09月27日 23時27分31秒)
  • あれ…Ctrl+Shift+5の時点できっつい私は人差し指が短いですかそうですか…。CtrlとShiftを小指でまとめ押しすればいけるか。 – B@管理人 (2008年09月28日 09時42分40秒)
  • 括弧系をエスケープするのって、昔ながらのUNIXの正規表現がそうなんだね。で、POSIXの拡張正規表現で要らなくなったらしいよ。(http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE)それにしても、ロケールによって「[a-z] ではすべての小文字のアルファベットにマッチしない」っていうのはどうなんだ。この前のutf8フラグ以降のperlの\wの扱いもどうかと思ったけど。厳密に指定したければ[abcdefg….]って書けってか!? – りうの (2008年10月11日 23時53分39秒)
  • へぇへぇへぇ。sedとかでも旧式表現使うのか…。多言語対応はほんとにもうなんというか日本語圏に生まれたことを恨まざるをえない(-_-) – B@管理人 (2008年10月12日 09時09分39秒)

emacsメモその2・undo/redo編

他サイトとの交流も無くひっそり運営してるつもりだったこのサイトにもぼちぼち検索から飛んでくる人が増えてきました。
っていうか「emacs」関連の検索でくる人がちらほらいるようで、その割にはたいした情報提供してねぇなあっていうのがemacs関連でよく検索する身としてはちょっぴりアレな気分だったので定期的になんか書こうと思う。
例によって興味ない人はスルー推奨・上級者のツッコミ歓迎。

 ***

さてタイトルに書いてますundo/redoです。
emacsのundoってすげーわかりにくいんですよ。いやわかってしまえばむしろ便利なんでしょうけど。一般のWindowsアプリのundoのつもりで使ってると混乱するんですよ。

具体的には「undo:ひとつ前のコマンドを取り消す」なんですが、「undo」自体もコマンドと認識されるので、undoコマンドでundoをundoできるっていう(※連続してundoしてるかぎりは直前のundoがundoされることはない)。つまり一般的なアプリでいうところのredoをundoコマンドひとつでやってしまうっていう。慣れたら便利だけど慣れないときもい。

そんな癖のあるundoですが、個人的に非常に重宝してるのは、リージョン(選択範囲)内のテキストのみに対するundoができるという点。これ地味に便利。
「ある場所の編集してて、別の部分の編集して、やっぱりはじめに編集したとこ元に戻したい(けど今編集したところは戻したくない)」っていうときにはじめに編集したとこ選択してundoすると選択範囲内の変更に対してのみundoできる。これ他のエディタではあんまり見ない(私が知らんだけかもしれませんが)。
もちろんあんまり大幅な変更があったとこを戻そうとするとおかしなことになったりもしますが、日常の実用程度には十分使えます。べんりー。

ところでemacsのマニュアルとか解説書見るとundoは「C-x u」か「C-_」って書いてあることが多いけど実は「C-/」でもできるよね。っていうのを昔は知らなくて「連続して押すのめんどいんだよ!」って思ってました。
環境とかキーボードとかによって推奨されてなかったりするんだろうか…?

 ***

ちなみに「いやもうよくわからんから普通にredoコマンドくれや」っていう人には、redo.el てのがあるらしい。私は使ったことないので詳細は知りませんが。

emacsめもその1・メジャーモード編

emacs布教日記書くとか言ってすっかり忘れてたのでなんか書いてみる。
布教というよりは「emacs以外のエディタよく知らんからなんとなく使ってるけどいまいち使いこなせてないなー」な人と情報共有できたらいいなくらいのノリで。っていうかそもそも私が使いこなせてないからメモ的な何か。

ぷろぐらまーじゃない人とかviひとすじな人とかは読み飛ばし推奨。
emacsすでに使いこなしてる人からのツッコミ歓迎。

 ***

とりあえずリンク

ぷろぐらま向け便利機能:メジャーモード編

emacsにはメジャーモードなるものがあって、編集するテキストの種類(要は何の言語書いてるか)によっていろいろカスタマイズされます。色分けとかインデントの設定とかキーバインドとか、その他各言語ごとの何かしら便利機能がいろいろ設定されます。
メジャーな言語ならデフォルトで対応してますがマイナーな言語でも対応するメジャーモードを探して入れてやればいい感じに動いたりします。
そしてどんな言語のプログラマにもemacs使いは存在するはずなのでたいがいどんな言語でも探せば見つかります。素敵。
またひとつの言語に対してもいろんなメジャーモードが開発されてたりするので、たとえばperlならデフォルトの perl-mode より cperl-mode の方が便利じゃね?とか好みで好きなもん選ぶとよいかんじです。

以下メジャーモードにともなう便利機能たち。

 ***

  • font-lock-mode

ソースが色分けされます。
メジャーモードで定義された文法に従うので、メジャーモードさえあればどんな言語でもちゃんと色分けしてくれます。まー素敵。

  • comment-dwim (M-;)
  • comment-region
  • uncomment-region

リージョン(選択範囲)をコメントアウトしたり逆にコメントをはずしたり。これを知ってるかどうかで作業効率大きく変わると思う。
ちゃんと現在使ってる言語(メジャーモード)に対応したコメント書式を自動で判別してくれるので言語ごとにコマンド使い分けなくて良いのがポイント。
コメントの入れ子とかもちゃんと対応してくれたりします。

  • indent-region (C-M-\)

リージョンを一気に自動インデントしてくれるよ。
文法エラー出たけどどこで括弧足りてないのかわかんねーよなときとかに便利と思うよ。
「Tab↓Tab↓Tab↓…」って連打することの多い人は試してみると良いよ!

  • align
  • align-regexp

リージョンをアラインメントしてくれるよ。
複数行でイコールとかコロンとかの位置をそろえたいなってときに使うと幸せになれます。
まあ私はずれてても気にs(ry

  • tabify
  • untabify

リージョン内のスペースをタブにしたりタブをスペースにしたり。
…だから何、とか置換でいいじゃんとか言われそうな気もするけどなにかと地味に便利なんだって。うん。

 ***

気が向いたら次回に続く。