Combは、ファイル内の正規表現の発生を検索、閲覧、注釈を付けるためのネイティブEMACS LISPソリューションです。インタラクティブなインターフェイスにより、すべての結果の徹底的な分類を実行して、コード監査中の誤検知と適切な一致を排除することができます。
M-x package-install RET comb
M-x package-install-file RET /path/to/comb/
( add-to-list 'load-path " /path/to/comb/ " )
( require 'comb )これは、Combのいくつかの機能のクイックウォークスルーです。検索を実行するには:
監査するリポジトリのルートディレクトリに移動します。
Mx combを実行します。
cを押して構成モードを入力します。
目的のフィールドを埋めて、最後に検索を実行します。
閲覧する結果がいくつかある場合、 *Comb*バッファーが表示されます。ここから、結果に注釈( ! )に承認された( a / A )、拒否( r / R )または未定( u / U 、デフォルト)にステータスを変更することができます。
上記のアクションは、次の( n )または前( p )に移動できる現在の結果で動作します。これにより、 *Comb*バッファーが更新され、結果が含まれているファイルが表示されます。ステータスフィルター( fでサイクリング)に一致する結果のみが表示され、ノートフィルターRegexp( Fで設定)が表示されます。それに加えて、 t現在表示されている結果のリストを含むバッファーを生成します。これにより、スニペットを検索し、ポイントで結果にジャンプできます。
最後に、現在のセッションを保存してsし、ロードして監査( l )を再開することができます。
すべての機能とキーバインディングのリストについては、ヘルプ( h )を参照してください。
櫛で使用されるパターンは、emacs風味の正体性です( (elisp) Regular Expressions情報ノードを参照)。 Mx regexp-builderユーティリティを使用して、検索を実行する前にRegexpsをインタラクティブに試すことができます。適切な構文( Cc TAB string )を使用して、周囲を除外してください。 "
Combは、外部の糸くずから来る追加の検索結果を生成するために使用できるコールバックのリストも受け入れます。これらの関数は、 default-directoryがルートディレクトリに設定され、現在処理されているファイルに現在のバッファーが設定されていることで実行され、相対パスを引数として受け入れ、フォームの範囲のリストを返す必要があります(BEGIN . END) 。
これがコールバックの例です。
( defun my-callback ( filename )
" Match only the first occurrence of 'qwerty'. "
( when ( re-search-forward " qwerty " nil t )
( list ( cons ( match-beginning 0 ) ( match-end 0 )))))コールバック実行のエラーは致命的ではなく、 *Messages*バッファで報告されています。
いくつかの顔とオプションを構成できますcomb Group( Mx customize-group RET comb )をご覧ください。
さらに、 comb-keymapキーマップを変更することで、 *Comb*バッファーのすべてのキービンディングを変更できます。たとえば、矢印を使用して結果をナビゲートするには:
( define-key comb-keymap ( kbd " <left> " ) 'comb-prev )
( define-key comb-keymap ( kbd " <right> " ) 'comb-next )しかし、これは元のキーバインディングを解除することはありません。既存のモードとの衝突を避けるために、代わりにキーマップを完全に交換することは便利かもしれません。
( setq comb-keymap ( make-sparse-keymap ))
( define-key comb-keymap ( kbd " x " ) 'comb-quit )
( define-key comb-keymap ( kbd " ? " ) 'comb-help )
( define-key comb-keymap ( kbd " <left> " ) 'comb-prev )
( define-key comb-keymap ( kbd " <right> " ) 'comb-next )
; ; ...デフォルトのkeybindingsで使用される関数を取得するには、 comb-default-keybindings alistを参照してください。