しょぼしょぼすくりぷと xyzzy > xyzzy初歩講座 > bufferの選択・移動操作あれこれ

bufferの選択・移動操作あれこれ

--

作業効率を上げるためにいろいろなバッファーの移動方法を知っておくと xyzzyを有効に使えます。ここではいくつかのバッファー移動方法を紹介します。

bufferの標準関数を知りたい方は、 htmlリファレンスや M-x apropos から"buffer"を入力してみてください。
lispサンプルを見たい人は、buffer & file 関連 lispサンプルライブラリを参考にしてください。

事前説明

そもそも:buffer(バッファ)とは? 〜〜frame,window,fileとの違い〜〜

bufferとは ファイルと似ていますが、xyzzy上のメモリにあるファイルを指しているイメージです。 そのため、書き込むまでハードディスクと差分が出ることがあります。

また window や Frameとの違いが気になるかもしれません。 windowbufferのどの範囲を表示しているのかの窓イメージです。CGやDFTなどで聞いたことがあると思いますが、"範囲"をイメージしてもらって問題ないと思います。なので、窓同士が同じ場所を見ていても、問題ありませんし、バッファを変更したら両windowの表示内容が変わります。
また、Framewindowのサイズやレイアウトも含んだxyzzyの表示全体の情報というイメージです。 2chの時の Frameはこういうレイアウトで、 HTMLやKamailを見ているときはこういうレイアウトでなどとなります。

ページ内目次

buffer移動

バッファー選択ダイアログ

ざっくり言うとbuffer listsのウインドウ版です。ジャンプができます。
F2で ダイアログを起動します。

buffer lists

先ほどのが単純にバッファー名を入力して選択するだけの機能に対して、 こちらは一覧から選べるようなLispです。バッファー名を入れなくても選ぶだけなので移動も楽です。また、まとめて保存したり閉じたりできる機能もあります。

出し方はC-x C-bと入力します。すると画面が上下に分割されてリストが表示できます。
私は以下のような物を使って 操作方法のHelpを出しています。
(defun buffer-menu-help ()
 (interactive)
 (message "s: Save / d,k: Delete(close) / x: eXecute / u:Unmark / o:Otherwindow / f: this-window / q,1:1-window / ~~:not modified / C-d: delet-back")
  )

(defun my-buffer-menu-lisp ()
 (define-key ed::*buffer-menu-mode-map* #\h 'buffer-menu-help)
 (define-key ed::*buffer-menu-mode-map* #\! 'buffer-menu-help)
 (define-key ed::*buffer-menu-mode-map* #\n 'next-line)
 (define-key ed::*buffer-menu-mode-map* #\p 'previous-line)
  )

(add-hook 'ed::*buffer-menu-mode-hook* 'my-buffer-menu-lisp)
        
buf-menu を 拡張し並べ替えやマスク機能付けたものはこちら

switch-buffer

バッファを移動するときに使うLispです。miniバッファ内にプロンプトが出てくるのでそこに対象のバッファー名を入れてJumpできます。

c-x bと入力すると下にバッファが表示されます。 矢印キーで履歴をたどれます(この機能を使っていないともちろん履歴は使えません)。

バッファー名はファイル名ではありません。ファイルと結びついたxyzzyのメモリ上の名前です(タブ表示したときに出てくる)。

ファイル・バッファ移動

ファイラーから

xyzzyについているファイラーを別ウインドウで開きます。 左右2ペインと1ペインの二つがあります。逸見さんがいうにはmintX68K用(検索するとX68Kや μEmacsで使っている人がいました)に似ているそうです。 C-c C-f(または ツール(T) -> ファイラ)で ファイラーを起動して操作できます。

途中で覗きたい時は W を押すと ファイルの一部が表示されます。 (ちなみにfind-file の 1画面ファイラーでも多分同様のことが出来ます。)

その他のファイラが気になる人はこちらをどうぞ

ファイラの活用説明ページへ

ファイラァハンタァ
http://not.s53.xrea.com/xite/compare/table.html

Tag Jump(タグジャンプ)で

まずTag ファイルを作成します。次に、ここの関数や、メソッドはどこから飛ぶのか(定義されているところ)調べたいところで タグジャンプします。そのあと飛びます。複数ある場合は選択。(メニューのツールから選べます)

飛びたい先の単語がカーソルにあるときに、(デフォルトのキーなら)F4を押すと、その宣言している箇所に飛びます。例えばJavaメソッドを使っている箇所にキャレットを合わせ、F4を押すと、そのメソッドが定義されているところに飛びます。ダイレクトタグジャンプと同じかなぁ

バックタグジャンプ(S-F4)はタグジャンプした先から戻ってきます。

タグジャンプについて(wiki) | タグジャンプについて(BlackCity Laboratory)


Grepで

特定の文字列が含まれているファイルを検索する機能です。そこにジャンプ機能がついてます。

まず Grep を 検索(S)から起動します。検索した後 検索結果として出てくる*Grep*の目的バッファの行で F10 を押すとそのファイルのその行に飛びます(便利!)。

細かく言うと、Grep直後 bufferに 検索一覧がでて、カーソルがその最後にあります。M-<で バッファの最初に移動し、F10で(その行を解析してくれて)jump示してくれます。カーソルもそちらの bufferに移動します。次の検索した項目に移動する時は F11 を押すと Grepバッファに戻らず Grepバッファの次の行で F10を押したのと同様のことをしてくれます。

その他

List-function

先ほどのがバッファ版としたらこちらは同じバッファ内の関数版です。目的の関数へ一覧から飛びます。 私のツール(jump-some-method)に似ています。これはxyzzy標準装備なので標準で十分ならいいでしょう。
M-x list-functionと入力するだけです。

参考リンク

buffer系 lisp集
lispライブラリ集



しょぼしょぼすくりぷと xyzzy | xyzzyの初歩講座(機能と操作)