Hatena::Groupsubtech

subpop

2007-09-17

EmacsでPerlのモジュール名を補完する

15:09 | EmacsでPerlのモジュール名を補完する - subpop を含むブックマーク はてなブックマーク - EmacsでPerlのモジュール名を補完する - subpop EmacsでPerlのモジュール名を補完する - subpop のブックマークコメント

EmacsPerlモジュール名を補完するにはどうしたらいいのか。いい方法も思いつかないので、とりあえずこんな感じでやってみた。あほくさいけど……。

cperl-mode初回起動時に……

  1. @INC内のpackage名を全てぶっこぬく
  2. それらの名前を適当な名前で作成したバッファにつっこむ
  3. dabbrevの対象になってウマー

以下の通り@INC内を総ざらいしているので、cperl-mode初回起動時はちょっと時間がかかる。もっといい方法があれば教えてくだしあ><ノ

また、「とりあえず暇だったし何となく始めたブログ - 複数候補を選択して補完できる動的略語展開 dabbrev-expand-multiple」で公開されている、dabbrev-expand-multipleと併用するのがよいかも。

あんまりよくわからない感じだけど、↓一応デモってみた。

;; cperl-mode初回起動時に、モジュール名を全て詰め込んだバッファを作成し、
;; dabbrevでモジュール名を補完できるようにする。
(add-hook 'cperl-mode-hook
          (lambda ()
            (let ((buffer nil) (buffer-name "*PerlModules*"))
              (unless (get-buffer buffer-name)
                (setq buffer (generate-new-buffer buffer-name))
                (save-current-buffer
                  (shell-command
                   "find `perl -e 'print join(q{ }, @INC);'` -name '*.pm' -type f | xargs egrep -h -o 'package [a-zA-Z0-9:]+;' | perl -nle 's/package\s+(.+);/$1/; print' | sort | uniq"
                   buffer)
                  (set-buffer buffer)
                  (delete-window))))))

ちなみに、dabbrevの設定で↓こんな感じ(詳しくはヘルプで)にしとかないと、モジュール名の::が補完対象から無視されるので、あんまり面白くない。

(setq dabbrev-abbrev-char-regexp "\\sw\\|\\s_\\|[:-_]")

AmiraAmira2012/03/24 10:22It's really great that people are sharing this informatoin.

kuekhyhkwpkuekhyhkwp2012/03/26 00:18ccJR2z , [url=http://tvhzombnmdef.com/]tvhzombnmdef[/url], [link=http://duzaqywqlzpt.com/]duzaqywqlzpt[/link], http://uatfbhkeektl.com/