段落や見出し間を簡単に移動するxyzzy lisp - アウトラインジャンプ ツール

JumpLisp.l

xyzzyで編集しているモード毎に合わせた関数ジャンプ機能を提供します。 (モードに合わせバッファ内の関数一覧や見出し(アウトラインとして)をもうひとつのバッファに表示し、素早くアウトライン移動することをサポートします。)

概要

モードに合わせバッファ内の関数一覧や見出し(アウトラインとして)をもうひとつのバッファに表示し、素早くアウトライン移動することをサポートします。

機能

例えばjavaの関数をバッファーから探し出し、それらを一覧で表示します。 ユーザはその中から選ぶと、lispがその行へジャンプします。 作ってて楽しかったです。秀丸マクロから勉強も兼ねた個人的な移植です。
  • チラ見機能[launchしたあと spaceキーを押す]もあります。
  • 仕組み的には今のバッファーモードからmethod らしき物を サーチして popup して ユーザが選択したらその行に飛ぶという物です。
  • java method only  あります。
    • perl の sub, lisp の defun , HTML の H? タグ, Textの●▼□等に対応させました。(08/15/2002)
    • "mode-name" を利用して検索対象の見出し語を変更してます。
    • katex とか ruby , python 等には適当に変更してください。
  • (list-function)で十分な人は必要ありません。ただ、こちらは一行まるまる表示するので、引数や返値に便利でしょう。
JumpMethod_lisp_2 JumpMethod_html
html mode/ 分割時(上部がアウトラインで lisp関数の定義行のみ抜粋している) そこで n/p で移動し spaceでチラ見、retで移動する HTML mode/ ポップアップ時

使い方

ランチ(この JumpLisp.lのjump-to-some-method()関数起動)したあと
  • n / p 等で上下に移動します。
  • C-v / M-v で 大きくスクロールします。
  • Shift で その行を表示させ
  • Ret で その行に飛びます。
  • C-g / q でキャンセルして元の所に戻ります。
  • 上下左右分割の選択や、 popupでやるかは、ソースの最初の変数を設定してください。

◆キー

前の行    :  p,k
次の行    :  n,j
ジャンプ  :  RET ,
検索      :  r   <-->  s
確認      :  SPC  , v  , V
キャンセル:  C-g , C-q , q , ESC

設定

◆インストール

(load-library "JumpLisp.l")
(global-set-key '(#\C-x #\C-m)  'jumpLisp)

◆実行

java ファイルを開いて C-x C-m site-lisp/配下に .lファイルを置き .xyzzy に (load-library "JumpLisp.l")とするだけ。
(global-set-key #\F7 'jump-to-some-method )

カスタマイズ可能変数

;buffer or popup
(setq jump-method-on-buffer t)

;window分割方向
(setq jump-method-split-window-vertical t)

(setq *jump-to-some-method-list*
  (list
   (list "lisp function" "\\(Lisp\\|lisp\\)" "^[ 	]*\([ 	]*defun.*$" "lisp-mode")
   (list "HTML H-tag" "\\(HTML\\|Html\\)"  "^.*<[hH][0-9]+.*>.*" "html+-mode")
   (list "Text 見出し" "\\(Text\\|Fundamenta\\|TEXT\\)"  "^[ 	]*[○●◎▲△▽▼■□◆◇×	]+.*$"  "text-mode")
   (list "java method" "^\\(Java\\|java\\)$"  "^[ 	]*\\(\\(private\\|protected\\|public\\|static\\)?[ 	]+\\)*\\(\\w+[ 	]+\\)*\\w+[ 	]*\(.*\).*$" "java-mode")
   (list "php method" "^\\(php\\|PHP\\)$"  "^[ 	]*\\(\\(private\\|protected\\|public\\|static\\)?[ 	]+\\)*function[ 	]+[0-9_a-zA-Z]+.*$" "php-mode")
   (list "javascript function" "javascript"  "^[ 	]*.*function[ 	]*.*(.*).*$" "javascript-mode")
   (list "Ruby function" "\\(Ruby\\)" "^[ 	]*\([ 	]*\\(def\\|class\\).*$" "ruby-mode")
   (list "perl sub-routine" "Perl" "^[ 	]*sub[ 	]+\(.*\)$" "perl-mode")
   (list "python sub-routine" "Python" "^[ 	]*def[ 	]+.*:$" "python-mode")
   (list "c function" "\\(C\\|c\\)" "^[ 	]*\\([][a-zA-Z0-9_*]+ +\\)\\([_0-9a-zA-Z]+\\)[ 	]*\([^(<=+-%>;]*\)$" "c-mode")
   ))

ソース

タイトル下部参照

ひとこと

  • ""のなかで\tのタブ文字が \\w描くのではないとか
  • []の中とか\\wとかほんとにややこしい

履歴

2010/08/11 公開
2013/08/25
php モード少し対応
折り返さないように設定

2010/09/06
シンボル衝突回避リスク削減のため呼び出すモード(set-mode)を シンボルから 文字列型に

2010/09/05
ESCキー追加
ちょっとソースを見やすく修正

2003/12/23
keymapで対応

2003/12/22
C funcに対応
Delicious にシェア
Digg にシェア
reddit にシェア
LinkedIn にシェア
LINEで送る
email this
Pocket

1,260 views.



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です