お品書き

概要 *

fileac-mode-2007.12.21.zip

  • paren,rv-region,セレクションの有無,直前に実行したコマンド を考慮したインデント
  • snippetの展開
  • (URI|ファイル名|abbrev|lispの関数,変数|バッファ内の関数,変数|Keyword|XTAGS|dabbrev)
    のインクリメンタルな補完

をC-i(TAB)のみで行えるようにするマイナーモードです。
snippetの展開には別途snippet.lが必要です。

インテリジェント補完コマンド ac-mode
の説明から想像で実装し、便利そうな機能を追加したものです。

また、いくつかの補完には専用のコマンドもあり、
文字を入力せずに補完することや、
(completeが入っていれば)部分一致/スキップマッチも可能です。

設定 *

NetInstallerで導入した方は 1 は不要です
(ni-autoload)している方は 2 の requireは不要です

  1. $XYZZY/site-lisp/以下にコピーし、バイトコンパイルしてください
  2. .xyzzy や siteinit.l に以下を参考に記述し、
    siteinit.lに書いた人は再ダンプしてください
(require "ac-mode")
;; lisp-interaction-modeで常にac-modeをON
(add-hook '*lisp-interaction-mode-hook*
          'ac-mode-on)
;; lisp-modeで常にac-modeをON
(add-hook '*lisp-mode-hook*
          'ac-mode-on)
;; ファイル全てをac-mode (バッファではない)
(add-hook '*find-file-hooks*
          'ac-mode-on)
;; migemoを使うdabbrevはこの文字数以上の時だけ(デフォルト=4)
(setf *ac-mode-dabbrev-use-migemo-more-than* 5)
;; 補完はいらないけどインデントは便利にしたい人向け
(setq-default *ac-mode-command-list* '(ac-mode-try-indent
                                       ac-mode-default-keybind))
;; java-modeで常にac-modeにし、インデントとAbbrevのみにする
(add-hook '*java-mode-hook*
          #'(lambda ()
              (ac-mode-on)
              (setf *ac-mode-command-list*
                    '(ac-mode-try-indent
                      ac-mode-try-abbrev-local
                      ac-mode-default-keybind))))
;; lisp-modeで常にac-modeにし、インデントとlisp-complete-symbolのみにする
(add-hook '*lisp-mode-hook*
          #'(lambda ()
              (ac-mode-on)
              (setf *ac-mode-command-list*
                    '(ac-mode-try-indent
                      ac-mode-try-lisp-complete-symbol
                      ac-mode-default-keybind))))
;; xyzzy lispの補完をパワーアップ
(require "ac-mode-lisp")
;; html の補完をパワーアップ (要 html+-mode)
(require "ac-mode-html+")

使い方1 *

ac-mode になっていなければ M-x ac-mode してください。
TAB(C-i) を押すと *ac-mode-command-list* で指定された順に判定し、
インデントや補完の対象でないと判断したり候補がなければ次の補完を行います。
デフォルトでは下記「現在実装されている補完モジュール」の順に1〜12までです。
また、C-u TAB を押すことによって明示的にモジュールを指定できます。
補完候補はpopup-stringで表示します。
URI補完を行うにはあらかじめ~/uri.txtにプレーンテキストで
URIを記述してください。
その際、*ac-mode-uri-regexp*にマッチしない行は無視します。

候補を表示した状態でのキーバインド

C-n次の候補を選択
C-p前の候補を選択
PageDown(C-v)次のページへ
PageUp(M-v)前のページへ
TAB(C-i)補完できれば補完、できなければ次の候補、
残り候補が1つなら決定、ファイルを補完中かつディレクトリならセパレータ挿入
C-g中止
ECS ECS中止
RET(C-m)決定
SPC決定
Apps補完の種類を変更
C-wファイルを補完中なら上のディレクトリへ
C-\ファイルを補完中ならセパレータを\に 2回続けると\\に
C-/ファイルを補完中ならセパレータを/に
a~z,記号等絞込み文字追加
C-h(BackSpace)絞込み文字1文字削除

使い方2 *

何から補完したいか、が確実に分かっている場合は
専用のコマンドを実行した方が良いこともあります。
特に、部分一致やスキップマッチを行いたいときに有効です。(要 complete+)
また、これらは文字を入力せず補完するということもできます。

補完を専用のコマンドは以下のものがあります。

  • 関数
  • 変数
  • dabbrev前方
  • dabbrev後方
  • キーワード
# dabbrevの前方/後方は、候補をユニークにする時にどれを削除しているかが違います。
# 行の補完は後方(上方向)です。

これらのコマンドは自動的にキー設定を行わないので、
ac-mode.lの「設定」を参考に各自行ってください。

現在実装されている補完モジュール *

  1. ac-mode-try-indent
      直前に実行したコマンドがbeginning-of-defun(M-C-A)
      またはend-of-defun(M-C-E)ならその関数を、
      直前に実行したコマンドがforward-paragraph(M-})
      またはbackward-paragraph(M-{)ならその段落を、
      セレクションがあればセレクションを、
      rv-regionで反転していればリージョンを、
      parenで強調していれば強調している範囲を、
      行頭または左側が空白のみの場合はその行をインデント。
  2. ac-mode-try-complete-URI
      キャレット位置の文字列が*ac-mode-uri-regexp*にマッチすれば、
      *ac-mode-uri-list-file*で指定したファイルから
      *ac-mode-uri-regexp*にマッチする行を抽出して補完します。
  3. ac-mode-try-complete-file
      キャレット位置が*ac-mode-file-regexp*にマッチすれば
      ファイルとみなして補完します。
  4. ac-mode-try-expand-snippet
      snippet.lがインストールされていればsnippetの展開を行います。
  5. ac-mode-try-abbrev-local
      abbrev-modeがtならローカルなabbrevテーブルから補完します。
  6. ac-mode-try-abbrev-global
      abbrev-modeがtならグローバルなabbrevテーブルから補完します。
  7. ac-mode-try-complete-variable
      現在のバッファから変数定義を抽出し補完します。
  8. ac-mode-try-complete-function
      (list-function)で表示される関数一覧から補完します。
  9. ac-mode-try-lisp-complete-symbol
      lisp-mode,lisp-interaction-modeの場合、
      (lisp-complete-symbol)で補完される関数・変数から補完します。
  10. ac-mode-try-complete-keyword
      メジャーモードにキーワードファイルが
      用意されていればキーワードから補完します。
  11. ac-mode-try-complete-xtags
      XTAGSが存在すれば関数・変数から補完します。
  12. ac-mode-try-dabbrev-current-buffer
      現在のバッファからDabbrevします。
      ed::*migemo-on* がtならmigemoを使った検索を行います
  13. ac-mode-try-dabbrev-all-buffer
      全バッファからDabbrevします。
      ed::*migemo-on* がtならmigemoを使った検索を行います
  14. ac-mode-default-keybind
      メジャーモードのC-i(TAB)と同じ動きをします。
  15. ac-mode-insert-tab-code
      タブコード[	]を挿入します

履歴 *

2007.12.21

  • 補完はカーソルが単語の上 or 末尾にあるときのみにした

2007.04.22

  • Appsを押してもモジュール変更が出来なくなっていたのを修正

2007.03.22

  • ac-mode-try-complete-variableをexportした

2007.03.16

  • ac-mode.l : typo修正
  • ac-mode-lisp.l : defun/defmacroのlambda-list-keywordsを追加
  • ac-mode-lisp.l : *ac-mode-lisp-key-list*に関数追加
  • ac-mode-lisp.l : handler-caseのエラーのシンボルを少し増やした
  • ac-mode-lisp.l : format追加
  • ac-mode-lisp.l : キーの挿入を追加

2007.03.14

  • ac-mode-lisp-complete-libraryのバグ修正

2007.03.14

  • "タグ作成を別バッファで行うようにした
  • C++スタイルのコメントの開始文字に/が設定されている場合は
  • 文字列中でなければパスとみなさないようにした"

2007.03.05

  • エラー修正
  • 補完中にC-iしたらモジュールを固定して部分一致やスキップマッチが出来るようにした
  • dabbrev前方/後方は反対側を検索しないようにした
  • SPCを*ac-mode-internal-map*から外した(半角スペースでも絞り込めるように)
  • 補完中に非シンボル文字を入力したら補完を終了するようにした
  • インデントを2回連続で行ったり変更が加えられなかった場合はdabbrev後方を行うようにした
  • ac-mode-css.l追加

2007.03.02

  • ac-mode-html+.l : 属性が取り得る値を補完
  • ac-mode-html+.l : LinkTypesの補完を追加
  • ac-mode-html+.l : ContentTypes?の補完を追加
  • ac-mode-html+.l : Tabindexの補完を追加
  • ac-mode-html+.l : Classの補完を追加
  • ac-mode-html+.l : Idの補完を追加
  • ac-mode-html+.l : 閉じタグのないタグは/を入れるようにした
  • ac-mode-html+.l : abbrevで定義されているタグ/属性は補完後に展開するようにした
  • ac-mode-html+.l : 属性が2重に補完できないようにした
  • ac-mode-html+.l : 値を持たない属性を考慮するようにした
  • ac-mode-lisp.l : abbrevで定義されている&keyは補完後に展開するようにした
  • ac-mode-lisp.l : ライブラリ名の補完追加
  • ac-mode.l : dabbrevやfileは最初からuniqueの場合でも即補完しないようにした
  • ac-mode.l : カレントバッファの変数定義を補完するモジュール追加(タグファイル生成用の関数を使用)
  • ac-mode.l : 1種類の補完のみを行うコマンドを追加(カレントバッファのdabbrev後方/前方, キーワード, 関数, 変数, 行)
  • ac-mode.l : 現在選択中の候補をtemporaryなセレクションで表示するようにした

2007.02.27

  • *ac-mode-complete-user-list*にalistを渡されてもいいようにした
  • 最初からuniqueな時と途中まで補完できるときに、いきなり補完するようにした
  • scope.lで定義していたlisp/html用の設定をac-modeに同梱するようにした

2007.02.22

  • scope.lとのインタフェース(?)をさらに色々

2007.02.19

  • ffapが導入されていればURI補完の際にffapのヒストリも使うようにした
  • message, plain-error quitが2つ出る*do-completionのバグにとりあえず対応
  • scope.lとのインタフェース(?)を色々

コメント *

最新の10件を表示しています。 コメントページを参照

  • 現状では無理です。かなり弄れば出来なくはないと思いますが、面倒そうなので気が向いたらやってみます。(完成まで持っていける確証もありませんが…) -- シロ? 2007-06-18 (月) 13:45:58
  • 複数の補完法の候補を同時に表示する事はできませんか。
    snippet と davvrev と xtags 補完を同時に表示させたいのですが、
    そういう風にはできていないようで。

complete+ でも、前方一致の後に真ん中での一致も表示させるとか、
前方一致の補完候補の最後に真ん中一致の候補を表示するという要素を
追加してもらえると、曖昧な検索をしたいときに便利になります。

あとコードを見ていると、nconc で問題ないところでも append を
使っているところが多そうですが、 nconc にすると地味ですが速くなります。 -- NKN? 2007-06-24 (日) 13:04:48

  • 候補を同時に表示するのはとりあえず(めっさアドホックな奴が)出来たような気がするのでしばらく使ってみて良かったら書き直します。
    complete+は:smartにすると先頭一致しなかったら部分一致して、という風にできますが、それでは駄目ですか?
    両方とも具体的にどのような場面で便利に使えそうなのか教えてもらえると助かります。
    nconcは存在が頭から消えてました。見つけた奴からやってみようと思います。 -- シロ? 2007-06-26 (火) 19:58:43
  • 候補の同時表示、対応ありがとうございます。
    よさそうなのができたら、公開してください。

complete+ で、自分のしたかったことは、 :always で、候補の並び順を先頭
一致、部分一致と表示する順番でした。 :always での表示を、この様にはで
きないでしょうか。 -- NKN? 2007-07-01 (日) 16:36:31

  • 1 -- 163已覚利? 2007-08-12 (日) 06:06:59
  • *ac-mode-uri-list-file*の指定をしていない場合(?)にuriの補完がうまくできていないようです。 -- 2008-03-10 (月) 09:23:41
  • uriではなくてファイル名でした。C:\applications\というディレクトリがあったとして、C:\aと入力してac-mode-complete-or-indentすると表示がc:\aacationsとなり、Enterを押すとC:\aapplications\となってしまうようです。 -- 2008-03-10 (月) 21:37:04
  • 上と同じく、バックスラッシュ区切りによるパス補完がうまくできないです。 -- sato? 2008-10-06 (月) 01:08:32
  • ac-mode便利に使わせてもらってます。しかしLaTeXモードでac-mode-try-complete-keywordが動かないようなので、質問させて下さい。

ac-mode-command-list*は次のように設定しています。 *

(setf *ac-mode-command-list*

	'(ac-mode-try-abbrev-local
	  ac-mode-try-complete-keyword
	  ac-mode-try-dabbrev-current-buffer
	)

)
abbrev, dbbrevはきちんと動くのですが、keywordのみ動作しません。\be(ここでtab)してもtabコードが挿入されるだけです。何か設定ミスなどがあるようでしたら言って下さい。
また、LaTeXには LaTeX-complete-keyword があるようですが、lispなどと同じようにac-mode-try-latex-complete-keywordのようなものを実装される予定はありますか? もしあるようでしたら是非お願いします。
以上、長くなりましたがよろしくお願いします。 -- neko? 2009-02-11 (水) 10:58:32

  • Prin ce ai scris tu, incep sa imi dau seama cum e Germania(chiar daca nu am fost niciodata).asta pentru ca inca mai simt aerul si atmosfera din Balcescu, noi astia care am fost cu capul maan…Ietrebrrea este daca Balcescu seamana cu Germania si la calitatea persoanelor care erau in 12B?Take care -- Kamryn? 2016-05-15 (日) 00:00:15
お名前:

Tag: xyzzy script 移植モノ



添付ファイル: fileac-mode-2007.12.21.zip [詳細] fileac-mode-2007.04.22.zip 15件 [詳細] fileac-mode-2007.03.22.zip 583件 [詳細] fileac-mode-2007.03.16.zip 529件 [詳細] fileac-mode-2007.03.14.zip 523件 [詳細] fileac-mode-2007.03.05.zip [詳細] fileac-mode-2007.03.02.zip 517件 [詳細]
トップ   編集 凍結 差分 BACKUP 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-12-21 (金) 05:08:42 (3387d)