入門 xyzzy 読書ノート 2/3

著者:

山本泰三・日枝政弘・稲川知久・佐野匡俊

出版社:

株式会社オーム社

発行年:

2005 年

ISBN:

978-4-274-06600-9

第 7 章 テキストを効率的に編集するための機能

7.1 検索/置換

  • 再検索は F5 で順方向、S-F5 で逆方向。

  • 正規表現による検索をする場合は、M-s で順方向、 M-r で逆方向。再検索をする場合は先程と同じく F5 キーが使える。

    • 手許の環境を確かめたら、M-r は単に replace-string になっているが?

  • インクリメンタルサーチは絶対に欠かせないが、 <あらかじめ専用のライブラリ isearch.l をロードしておく必要があります> (p. 83)

    (require "isearch")
    
    • C-s または C-r を押すたびに次の箇所へジャンプしていく。

    • 検索の中止は C-g を入力する。

    • <インクリメンタルサーチ中に C-w を入力すると、カーソル位置の単語の末尾までが検索文字列として取得> (p. 85) できる。

    • インクリメンタルサーチの弱点は、日本語文字列の指定が難しいこと。

  • 連続検索 (csearch) について触れているが、何が便利なのかよくわからない。

  • 置換は問い合わせ型 (query-replace) と一括型がある。

  • grep が非常に便利。

    • grep バッファで、検索結果行で F10 を押すと、別バッファにそのファイルのその行を表示する。 F11 で次の検索結果行にジャンプする。そして、一個前の検索結果行に戻りたければ C-u F11 を押す。

  • ミニバッファの grep について

    • M-x grep は入力を正規表現とみなすらしい。 <正規表現を使いたくない場合は、fgrep コマンドを使います> (p. 96)

    • カレントバッファのみを対象に検索する方法がある。 C-u M-x grep なり C-u M-x fgrep なりすればできる。

  • 一括置換

    • gresreg-dialog で、指定フォルダのファイル群に一括置換を適用できる。

    • M-x gresreg 系のコマンドで、開いている全バッファを対象に一括置換を適用できる。

      M-x gresreg

      文字列一括置換

      M-x query-gresreg

      確認しながら gresreg

      M-x re-gresreg

      正規表現で文字列一括置換

      M-x query-gresreg-regexp

      確認しながら re-gresreg

7.3 矩形処理

  • <ここでいう「矩形処理」とは、長方形に区切られた領域内のデータを切り取ったり、コピーしたり、貼り付けたりする処理のことです> (p. 100)

  • 個人的にはリージョン矩形しか利用しないので、そこだけノートをとる。

  • kill-rectangle, yank-rectangle, string-rectangle を多用していたが、 copy, clear, open, delete の各種矩形コマンドにも慣れよう。

7.4 文字の変換

  • 文字の変換機能は、日本語関連に関してはセレクションが対象となる。

  • <全角文字のひらがなは半角文字のカタカナに変換されます。(略)逆に、半角文字から全角文字へ変換する場合には、半角文字のカタカナを全角のひらがなとカタカナのどちらに変換するかを選ばなくてはなりません> (p. 109) とあるが、もう面倒だからいつでもカタカナで構わないと思う。

  • リージョンの変換。知らなかったコマンドだけノート。

    C-x C-u

    リージョンの文字を大文字に変換

    C-x C-l

    リージョンの文字を小文字に変換

7.5 編集モード

メジャーモードに関する解説。

  • c-mode では <M-; と入力すると行末に C 言語のコメントが挿入されます> (p. 111)

  • ファイルの先頭部分(具体的には 1000 文字以内)に、次の記述を含めておく。そうすると、ファイルを開いたときにメジャーモードがそれに設定される。このルールは拡張子ルールよりも強い。

    -*- Mode: モード -*-
    

    例えば c-mode を強制的に適用したい場合はこうなる:

    /* -*- Mode: c -*- */
    

7.6 詰め込み

  • M-x auto-fill-mode というマイナーモードがあるが、これは新規文書作成時に利用するのが普通のようだ。

  • 既存のテキストに対しては、fill-region 系コマンドを利用するのがわかりやすそうだ。パラグラフまたはリージョンが対象となる。

  • C++ コメントの詰め込みという、非常に実用的な例が p. 116 にある。 C-x . で詰め込み接頭辞を指定し、M-q で詰める。

7.7 略称展開

略称展開はテキスト入力の手間を大幅に軽減する機能ゆえ、ここを確実に押さえておくことが極めて重要だ。

Emacs 同様、xyzzy も静的展開と動的展開を実装している。経験上、使用頻度は動的展開のほうが圧倒的に大きい。

  • C-x / で、入力途中の単語に対し、動的略称展開候補を順次表示する。

    • キーバインドは普通 M-/ に変えると使いやすい。

  • C-x \ で、入力途中の単語に対し、動的略称展開候補をポップアップリストに表示する。

  • *dabbrevs-no-undo* 変数は知らなかった。

静的展開 (M-x abbrev-mode) は仕込みの質がすべて。

  • M-x edit-abbrevs, M-x list-abbrevs で編集可能

7.9 キーボードマクロ

  • <C-u の後に 0 を入力すると、無限回繰り返されます。ただし、編集可能領域の先頭/末尾にカーソルが到着すると止まります> (p. 127)

  • 暴走したキーボードマクロを <強制的に停止させるには C-g を入力> (p. 128) すればよい。

  • CSV データの整形にキーボードマクロを応用する例は、とてもよく出来ている。ミニバッファでの Lisp 式評価がマクロに組み込まれているのが、例として素晴らしい。

7.10 その他の編集方法

  • 今まで何度も顔を出していた digit-argument の説明。 C-u 数字M-数字 のどちらでも構わない。

  • C-u C-x C-f は「文字エンコーディングを指定してファイルを開く」。

  • テキストの整形コマンドとして列挙されているものを眺めていたら、見慣れぬものが多い。どうやら center-region と indent-region 以外を string-rectangle と delete-region で代用していたからのようだ。

  • 空白文字の処理コマンドは覚えておいたほうがよい。

    • C-x C-o 複数の空行を削除。常に利用機会がある。

    • M-\ カーソル前後の空白文字を削除。

    • M-/ カーソル前後の空白文字をまとめて半角空白文字一個に圧縮。プログラムコード編集時に利用しがち。キーバインドは多分これと違うものにしている。

    • M-^ カーソル前後の空白文字と直前の改行を削除。複数行にまたがるような関数のパラメータ行を編集するのに便利。

第 8 章 テキストを自在に移動するための機能

8.1 カーソルの移動

  • M-f, M-b について <日本語の場合には、漢字やカタカナや記号などの出現箇所を区切りとして移動します> (p. 135)

  • M-}, M-{ で段落単位でキャレットを移動する。一瞬素直にスクロールしたほうが早いのではと思ったが、まさに今編集している reST 形式のテキストでは、段落単位で移動するのも便利だ。

8.2 グローバルマーク

  • C-F2 でそんなダイアログボックスが出る。しおり機能だが、どうせ使わない。

8.3 タグジャンプ

これも使わない。grep で間に合っている。

第 9 章 複数のファイルを効率的に編集するための機能

9.1 セッション

  • xyzzy のコマンドラインオプションに、セッションを指定するものがある。

    $ xyzzycli -s xxx.ssn
    

9.3 ファイラ

grep と gresreg は便利かもしれない。

第 10 章 テキストの編集を補助するための機能

<特に文字エンコーディングは、Windows のテキストエディタとして最高レベルの完成度> (p. 173) とあるが、少なくとも日本語に関しては不自由したことがない。

10.1 印刷

  • ヘッダとフッタの書式を指定することができる。日付の書式をカスタマイズしたいことが多いはずなので、これは押さえたい。

10.2 バックアップ

  • 設定ダイアログのバックアップファイル画面で、「バックアップファイルをつくる」のチェックを外せば、当該機能を無効化できる。

10.3 多言語

  • フォントの設定を共通設定ダイアログのフォントタブで行う。

  • 文字セットに対応したフォントの調べ方が p. 192 の囲み記事にある。 Internet Explorer のインターネットオプションダイアログにある、全般タブのフォント設定画面を見て、「テキスト形式フォント」にリストされるフォントのどれかならば、 xyzzy で利用できるらしい。

  • <xyzzy には、ラテン語(フランス語、ドイツ語、イタリア語など)入力支援用の Lisp が用意されています。(略)簡単なラテン語入力環境としては十分です> (p. 193)

    • (require "iso8859-1")

    • 例えば C-x 8 " U とキーインすると、大文字の U にウムラウトが付いた文字が得られる。

この後、中国語、ロシア語、東アジア言語、フランス語等の OS 別入力方法の解説がある。個人的には無用なトピックなので、ノート割愛。

10.4 改行コード/文字エンコーディング

  • 次のコマンドは必修。

    C-x C-k n

    現在のバッファの改行コードを変更

    C-x C-k f

    現在のバッファの文字エンコーディングを変更

  • ファイル新規作成時の改行コード、エンコーディングを指定する方法がある。

    (setq *default-fileio-encoding* *encoding-euc-jp*)
    (setq *default-eol-code* *eol-lf*)
    

10.5 クリップコードエンコーディング

クリップボードにテキストが入っている場合に、 xyzzy にその文字エンコーディングをどのように解釈させるかを指定する機能か。

  • メニューアイテムの「クリップボードエンコーディング」か、 M-x change-clipboard-encoding でエンコーディングを変更できる。

  • <相手側のアプリケーションが Shift-JIS でしか受け取れないのであれば、クリップボードエンコーディングは Shift-JIS にしておかなければなりません> (p. 211)

  • xyzzy のバッファに <表示されている文字を適切にファイルに保存できるかどうかはバッファエンコーディングに依存します> (p. 214)

第 11 章 他のアプリケーションに代わりになる機能

11.1 電卓

  • M-x calc で電卓バッファ登場。バッファを閉じるには kill-buffer でよい。

  • set と入力すると、電卓変数が一覧できる。

    • set 変数名=値 で変数に値をセットする。

    • 1 / 3 を小数値として表示したい場合は set ratio=float とする。

    • 自分で変数を定義することができる。いきなり r=3 のように評価すればよい。

    • 自分で関数を定義することができる。

      $ add(x,y)=x+y
      function
      $ add(3,2)
      5
      
    • かなりの数のビルトイン関数がある。

第 12 章 その他の標準機能

12.1 外部プログラムの実行

ここでは <バッファの内容をフィルタプログラムに通す> (p. 243) 方法を習得しよう。

C-x &

外部プログラムを非同期実行して、その標準出力をバッファに表示する。 ls, find, make 等向き。

C-x #

バッファ全体をフィルタプログラムの結果で置き換える。 sort, uniq 等向き。

C-x |

リージョンをフィルタプログラムの結果で置き換える。

  • msdev や devenv は C-x & で。ありがたいことに、コンパイルエラーを grep バッファ同様に F10 と F11 キーで発生箇所にジャンプできる。

12.2 その他の機能

buffer-menu

  • C-x C-b 画面でのキー操作方法を、次のものだけは少なくとも記憶しておくこと。

削除マークをつける

d k

各種マークを取り消す

u

マークに従って実行

x

calendar

  • M-x calendar でカレンダーバッファが出現する。デスクトップのそれと比べ、祝日を見るのに便利という利点がある。法律が変わるたびに calendar.l をメンテナンスする必要があるが。

第 13 章 拡張 Lisp の導入

13.2 手動で導入する

パッケージによる導入方法の違いもあるが、基本的には以下の手順になる。

  1. $XYZZY/site-lisp に Lisp ファイルを置く。

  2. ~/.xyzzy を編集して、その機能を有効にするようなコードを追加する。

  3. xyzzy を再起動する。

第 14 章 機能のカスタマイズ

14.1 キーバインド

  • <特定のキーに対応した機能が知りたければ、 describe-key を使い知りたいキーを入力することによりその説明が表示されます> (p. 286)

  • xyzzy 全体の キーバインドを変更するには、初期設定ファイルに次のように記述する。

    (global-set-key キー入力 コマンド)
    
  • 全体ではなく、メジャーモードのキーバインドを変更する場合は、このようになる。

    (require モジュール名)
    (define-key モードのキーマップ キー入力 コマンド)
    

14.3 各機能のカスタマイズ例

フックの概念を押さえるだけでよい。

14.4 初期設定ファイル

  • .xyzzy と siteinit.l の違いを押さえる。

    • .xyzzy は各ユーザーがそれぞれ持っていると考える。

    • xyzzy は siteinit.l の評価後に .xyzzy を評価する。

    • siteinit.l の更新は Ctrl + Shift 押しの xyzzy 再起動で完遂となる。

    • .xyzzy はバイトコンパイルの対象にできない。

  • 囲み記事。xyzzy は $XYZZYHOME$HOME よりも優先する。

  • .xyzzy を分割するテクニックがある。

    (load-file "~/myfoo.l")
    (load-file "~/mybar.l")
    

    ポイントは、各 Lisp ファイルはバイトコンパイルができるということ。