[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
以下では,最初に言語別に便利な機能やパッケージを紹介します.その後で,一般的に使え そうなものを紹介していきます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacs Lisp を編集した際に re-search-forward の引数は何だったかなということがあり ます.
しかし,それを調べるためには,実際のコマンドを探し読んでいく必要があります.
そんな時に, mode-info があると,
-- コマンド: re-search-forward REGEXP &optional LIMIT NOERROR REPEAT
この関数は、カレントバッファにおいて前方へ向けて正規表現 REGEXP に一
致するテキストの文字列を探索する。関数は REGEXP に一致しないテキスト
はすべて飛び越え、みつけた一致箇所の末尾へポイントを置く。ポイント
の新たな値を返す。
という風に即座に適切なヘルプを表示することができます. Emacs Lisp だけでなく, C や Ruby , Perl にも対応していますので,これを入れておくと非常に便利になります.
インストールのためには, mode-info の他に,必要なマニュアルをダウンロードする必 要があります.
info を便利に使うための Emacs lisp です.ダウンロードしておきます.
これは,個別にダウンロードしてインストールしても構いませんが,結構面倒です.
そのため,http://www.meadowy.org/meadow/dists/1.15/packages/ より, gnujdoc をダウンロードすると楽です.
各言語のマニュアルです.必要に応じてダウンロードしておきます.不要ならなしでも構 いません.
以下,インストール手順です.
手でやるにはパッチを当てて, info に変換します. Readme を参考にインストールしてく ださい.
面倒な場合は,http://www.meadowy.org/meadow/dists/1.15/packages/ にある, gnujdoc を利用します.これには,変換済みの info ファイルが含まれていますので,適 当なディレクトリにコピーするだけでインストールできます..
これも,変換済みの info ファイルが含まれていますので, ruby-jp.info と ruby-jp.info-1 〜 7 を適当なフォルダにコピーすれば終了です.
これは,変換されていませんので, Meadow で perl-ja.texi を開き,M-x texinfo-format-buffer とすれば変換できます.変換が終わったら,C-x C-s で 保存すると, info ファイルができますのでこれを適当なフォルダへコピーします.
解凍したら, manual の中に info ファイルが含まれていますので,これを適当なフォル ダにコピーします.
他にも
といったマニュアルに対応していますので,必要に応じて探して入れておきます.
私は
~/info /glibc-2.3.1 /gnujdoc /perl5.000texi-j /ruby-1.4
というフォルダ構造にしました.
ダウンロードしたファイルを site-lisp 下に置いておきます.そして,.emacs に
(setq Info-directory-list (append Info-default-directory-list (list (expand-file-name "~/info") (expand-file-name "~/info/glibc-2.3.1") (expand-file-name "~/info/gnujdoc") (expand-file-name "~/info/perl5.000texi-j") (expand-file-name "~/info/ruby-1.4") "e:/unix/Meadow/1.15/info/" ) )) (require 'mi-config) (define-key global-map "\C-hf" 'mode-info-describe-function) (define-key global-map "\C-hv" 'mode-info-describe-variable) (define-key global-map "\M-." 'mode-info-find-tag) (require 'mi-fontify) |
のような設定を追加して, Meadow を再起動します.この Info-directory-list には各 info ファイルがあるディレクトリを指定してください.
再起動後,M-x mode-info-make-all-indices を実行します.
これで完了です.
M-x help-for-help f setq とすると,日本語で説明が表示されるはずです.この ヘルプは,モードによって適切に選択され, ruby-mode では Ruby のヘルプが, C では C のヘルプが表示されます.
また,M-x help-for-helpだけでなく,M-.により,関数や変数のヘルプなど を表示できます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
プログラムを書いていると,プログラムの cvs ディレクトリや文字コードは大体決まっ ているものです.それを,毎回指定するのは面倒です.
pbf-mode を使えば,プロジェクト単位でタブ幅や文字コードなどを指定できます.
pbf-modeか https://bookshelf.jp/elc/pbf-mode.elから, pbf-mode.el をダウンロードし, ロードパスの通ったところへ置きます.
以下を .emacs に追加します.
(require 'pbf-mode) (pbf-setup) (pbf-mode t) |
さらに,プロジェクトの定義を ~/.pbf.el に書きます
(pbf-project HOME nil "My private." :directory (expand-file-name "~/")) (pbf-project MYLISP nil "mylisp." :directory (expand-file-name "~/mylisp/")) |
という風に書きます.:directory の他に c-style なども指定できるので,必要ならばソー スを読むか,pbf-mode で探 してください.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
42.3.1 自動で字下げ ― indent-region (2003/11/24) 42.3.2 indent-tabs-maybe 42.3.3 リージョンをコメントに ― comment-region (2003/06/08) 42.3.4 タブ <=> スペース変換 ― tabify, untabify (2003/06/08)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
C や emacs-lisp を作っているとき, Emacs では自動で適切な字下げを行います. しかし, プログラムをどんどん編集していくと, 字下げがバラバラになって見苦しくなってしまい ます. そんな時, リージョンを選択し, M-x indent-regionと入力します. すると, リージョン部分が正しく字下げされます.
この字下げの方法についても細かくカスタマイズできます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
インデントにタブを使うか使わないかを自動判定してくれます.
自分が作ったプログラムだけならともかく,他人のソースを編集すると設定を変える必要 に迫られることがあります.
例えば,インデントにタブを使うかどうかは好みによって変わります.
ソース内にタブがあれば,インデントにタブを使うと判断し,設定を自動的に修正してく れます.
インストールが必要です.
indent-tabs-maybe.el を ダウンロードしてロードパスの通ったところへ置きます(オリジナルから一部修正してあ ります).
以下を.emacsに追加します.
(require 'indent-tabs-maybe) |
ファイルを開くと,自動的に最初の方のテキストからインデントにタブを使うかどうかを 判断してくれます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
プログラムであやしそうなところをコメントにしたりということはよくあります.だけど, そのたびにコメントを記入していくのは大変です.
そこで,便利なのが comment-region です.方法はリージョンで選択して,M-x comment-region で一気にコメントにできます.コメントをはずすのは C-u M-x comment-region でできます.
Meadow 1.99 だと M-x comment-box も使うことができます.これは,リージョン を /* */ などでコメントにしてくれます.
別の方法としては,リージョンで選択してC-x r t ;;という風に矩形処理を利用す る方法もあります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ファイル中のタブをスペースに, あるいは逆にスペースをタブに変換する機能です.
使い方は簡単で, リージョンを選択し, M-x tabifyでタブへ, M-x untabify でスペースへ変換できます.
大したことのない地味な機能ですが, これが非常に便利です.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacs lisp や C , C++ などのプログラムを書いていると,この関数定義はどうなって いたかなと考えることはよくあります.しかし,このたびにファイルを開いて検索してと いうのは非常に面倒です.
そこで,タグジャンプという非常に便利な機能があります.これは,どのファイルに何と いう関数があるかのリスト (タグファイル) を作成しておき,それをもとに関数を定義し ているファイルの関数定義部分を開いてくれます.
この機能を使うためには,まずタグファイルを作る必要があります.作り方は簡単. shell で
etags *.el
のように指定します.これで TAGS というファイルができます.複数のディレクトリは
etags mylisp/*.el bin/*.[hc]
のようにすればできます.これで,カレントディレクトリに TAGS というファイルができ ます.
タグジャンプは M-. (find-tag) でできます.初回に限り,TAB や SPC で補完しようとすると, TAGS ファイルの場所を聞いてきますので,作った TAGS ファイルを指定します.
これで,TAB や SPC での補完を使いながら関数を指定でき,一気に関数定 義へ飛ぶことができます.
さらに, TAGS ファイルに登録されているファイルのみを全文検索することもできます. 方法は M-x tags-search です.次の検索結果へは,M-, で飛ぶことができ ます.同じように置換もできます.M-x tags-query-replace です.
同名の関数を持つファイルが複数あった時は,C-u M-. で次へ飛ぶことができます. 前へ戻るのは C-u - M-. です.
他の機能として
TAGS ファイルの切り替え → M-x visit-tags-table.
正規表現に一致した関数のみを表示 → M-x tags-apropos
タグファイルの情報をリセット → M-x tags-reset-tags-tables
タグファイルが読み込まれていると,M-TAB で関数の補完もできます.毎回,コピー したりといった手間が省け,非常に便利です.
これを使い出すと Meadow が手放せなくなってきます.
42.4.1 タグファイルの自動生成 (2003/11/18)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
TAGS ファイルを自動的に作成できます.
etags を使えば関数や変数にジャンプできるといっても,いちいちコマンドラインで TAGS ファイルを作成するのも面倒です.
タグジャンプする際に TAGS ファイルがなければ TAGS ファイルを作成してくれます.
以下を.emacs に追加します.
(defadvice find-tag (before c-tag-file activate) "Automatically create tags file." (let ((tag-file (concat default-directory "TAGS"))) (unless (file-exists-p tag-file) (shell-command "etags *.[ch] *.el .*.el -o TAGS 2>/dev/null")) (visit-tags-table tag-file))) |
普通にM-x find-tagでジャンプします. TAGS ファイルがなければ,作成してくれま す.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
etags で通常は問題ないですが,大規模なプログラムになってくるとタグの生成が面倒で すし,複数の候補には対応していません.
そこで, etags よりも高機能な gtags がお勧めです. gtags は C , C++ , Yacc , Java に対応しています.
ただ,欠点もあって少しインストールが面倒です. Cygwin だと,. /configure;make;make install でインストールできたように見えるんですが,まともに 使えないので, Borland でコンパイルする必要があります.
まずは,コンパイル方法を説明します.コンパイルには Borland のコンパイラが必要で す.
まず. PATH を修正して, Cygwin のパスをはずしておきます.
そして,GNU GLOBALより最新の global をダウンロードし,解凍しておきます.
次に, global-4.5.1/w32 の中のファイルなどをすべて global-4.5.1 へコピーします. そして, global-4.5.1/makefile.inc の WILDOBJ , BINDIR , MANDIR を以下を参考に 修正します.
CC = bcc32 AR = tlib LIBS = ..\libutil\libgloutil.lib ..\libdb\libglodb.lib ..\libglibc\libgloglibc.lib #WILDOBJ= \bc5\lib\32bit\wildargs.obj# BCC++ 5.02 WILDOBJ= "E:\Program Files\Borland\CBuilder5\Lib\wildargs.obj"# BCC++ 5.5 CFLAGS = -DHAVE_CONFIG_H -DBINDIR="\"/usr/bin\"" -I..\libutil -I..\libdb -I..\libglibc -I..\machine BINDIR = d:\home\bin MANDIR = e:\cygwin\usr\man\man1\ |
後は,コマンドプロンプトを起動し,以下のようにしてコンパイルとインストールを行い ます.コンパイル時には山のように警告が出ますが,気にしなくても大丈夫です.
cd global-4.6 make.bat make.bat install
これで, BINDIR , MANDIR で指定したディレクトリに実行ファイルと man がコピーさ れます.
コンパイルする環境がない場合は global-4.6.lzhをダウンロードし, gtags.el をロードパスの通ったところへ,それ以外をパスの通ったところへコピーしま す.
.emacs へ以下を追加します.
(autoload 'gtags-mode "gtags" "" t) (setq gtags-mode-hook '(lambda () (local-set-key "\M-t" 'gtags-find-tag) (local-set-key "\M-r" 'gtags-find-rtag) (local-set-key "\M-s" 'gtags-find-symbol) (local-set-key "\C-t" 'gtags-pop-stack) )) |
これで, gtags.el を使うことができます.
まず,タグファイルを作ります.方法は簡単.
cd source gtags -v
のように,ソースのあるディレクトリへ移動して, gtags コマンドを実行するだけです. これで,サブディレクトリも再帰的に検索して,タグファイルを作成してくれます.これ で,ソースディレクトリにいくつかのファイルができます.
次に,ソースファイルの中の適当なファイルを開きます.そして,M-x gtags-mode として, gtags-mode にします.
が可能です.他にも,
などが可能です.
gtags-mode にいちいち切り替えるのは面倒なので,適当なフックで以下のように設定し ておきます.ついでに,以下のようにしてM-rなどで入力する関数の補完候補も作 成しておきます.
(add-hook 'c-mode-common-hook
'(lambda()
(gtags-mode 1)
(gtags-make-complete-list)
))
|
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
TAGS を作成しなくても関数定義へジャンプできる
etags を使えば,関数の定義部分へジャンプできます.しかし,ソースが 1 ファイルし かない時に etags を使って TAGS ファイルを作るというのは大袈裟すぎます.かといって, isearch で済ますのも面倒なものです.
TAGS ファイルを作成しなくても,関数定義部分へジャンプできます.
ただし,ジャンプできるのは現在のファイル内にある関数のみになります.
標準で附属しています.
不要です.
Elisp や C のソースを開き,M-x imenu とします.そうすると,現在のファイル から関数定義部分を検索し,一覧を作成してくれます.
これにより,関数を補完入力することができ,その関数の定義部分へ簡単にジャンプでき ます.
以下を追加すると, C や Elisp で自動的に imenu が読み込まれ, imenu のメニューが できます.これで,メニューから好きな関数へジャンプできます.また,C-c gで imenu を起動できます.
(require 'imenu) (defcustom imenu-modes '(emacs-lisp-mode c-mode c++-mode makefile-mode) "List of major modes for which Imenu mode should be used." :group 'imenu :type '(choice (const :tag "All modes" t) (repeat (symbol :tag "Major mode")))) (defun my-imenu-ff-hook () "File find hook for Imenu mode." (if (member major-mode imenu-modes) (imenu-add-to-menubar "imenu"))) (add-hook 'find-file-hooks 'my-imenu-ff-hook t) (global-set-key "\C-cg" 'imenu) |
ネタ元:http://homepage1.nifty.com/bmonkey/emacs/elisp/.emacs
以下の設定を追加すると,mcomplete と組み合わせることができます. これにより,関数名や変数名の入力が便利になります.
当然ですが, mcomplete.el が必要です.
(defadvice imenu--completion-buffer (around mcomplete activate preactivate) "Support for mcomplete-mode." (require 'mcomplete) (let ((imenu-always-use-completion-buffer-p 'never) (mode mcomplete-mode) ;; the order of completion methods (mcomplete-default-method-set '(mcomplete-substr-method mcomplete-prefix-method)) ;; when to display completion candidates in the minibuffer (mcomplete-default-exhibit-start-chars 0) (completion-ignore-case t)) ;; display *Completions* buffer on entering the minibuffer (setq unread-command-events (cons (funcall (if (fboundp 'character-to-event) 'character-to-event 'identity) ?\?) unread-command-events)) (turn-on-mcomplete-mode) (unwind-protect ad-do-it (unless mode (turn-off-mcomplete-mode))))) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
スクリーンショット
関数を一覧表示して, ジャンプできます. 対応言語は "C++","C","Pascal","Java","Emacs-Lisp","Lisp Interaction","Perl","CPerl","TeX","Text","HTML","Ruby"です. ほんの少し編集すれば 他の言語や Texinfo などでも簡単に使えます.
http://www.ne.jp/asahi/love/suna/pub/soft/navi.el/index.htmlよりダウンロー ドして,ロードパスの通ったところに置きます.
以下を.emacs に追加します
(load-library "navi") (global-set-key [f11] 'call-navi) (global-set-key "\C-x\C-l" 'call-navi) (defun call-navi () (interactive) (navi (buffer-name))) |
後はソースを開いて,f11jyalC-x C-lで関数の一覧が表示されます.
モードラインを短くで紹介した設定を使っていると動きませ ん.どこかの日記で回避する方法が紹介されてましたが,行方不明になってしまいました.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
navi.el のように関数などの一覧を表示できます.
https://bookshelf.jp/elc/summarye.elをダウンロードし,ロードパスの通っ たところへ置きます.
以下を.emacs に追加します.
(autoload 'se/make-summary-buffer "summarye" nil t)
|
TeX のファイルや Elisp などで,M-x se/make-summary-bufferとします.そうすると, 関数などの一覧が表示されます.
一覧表示部分では削除 (一覧から削除するだけ) や並び換えなどができます.M-x help-for-help bで確認できますので,いろいろと試してみてください.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacs lisp はとにかく括弧が多い言語です. そのため, 括弧の閉じ忘れで動かないとい うこともよくあります.
こんな人に便利なのが対応する括弧を分かりやすくするためのパッケージです.
42.9.1 括弧単位,関数単位でのカーソル移動 (2003/06/08) 42.9.2 括弧をハイライトする ― show-paren (2003/06/08) 42.9.3 mic-paren (2003/06/08) 42.9.4 対応する括弧へ飛ぶ (2006/03/16)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Lisp は非常に括弧の多い言語です.それだけに対応する括弧が分かりにくくなります. また, C 言語などでも括弧をスムーズに移動できると,非常に便利になります.ここで は,そんな括弧に関連した標準のコマンドを紹介します.
下のような関数で,青色のところの括弧にカーソルがあるとします.ここで, C-M-f(Ctrl+Alt+f) を何度か入力すると,ピンクの位置へカーソルが移動します. こんな風に,順番に同レベルの式へ移動できます.C-M-bなら逆方向へ移動できま す.
(defvar lisp-mode-map (let ((map (make-sparse-keymap))) _ (set-keymap-parent map lisp-mode-shared-map)_ (define-key map "\e\C-x" 'lisp-eval-defun)_ (progn (message "test") )_ map) ) |
C-M-fとほぼ同じ.ただし,括弧単位なので,多少移動の仕方が異なる.対応する 括弧に移動したい時に使うと便利.
青の位置からピンクの位置への移動です.
(defvar lisp-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map lisp-mode-shared-map) _ (define-key map "\e\C-x" 'lisp-eval-defun) (progn (message "test") ) map) ) |
関数なら,その開始場所へ一気にジャンプできます.文章なら文の先頭 (あるいは行末) へ移動します.
移動後,M-kとすると,文単位で切り取りできます.C-a C-kと同じようなこ とを文単位でするのが,M-a M-kです.
関数単位で移動できます.
現在カーソルがある位置の式をリージョンで選択します.
式の切り取りができます.
関数全体をリージョンで選択します.
リージョン内のインデントをやり直します.
さらに,全体がどうなっているのか知りたい時には,C-x $ (set-selective-display) が便利です.これは,C-u 3 C-x $のように,引数を与 えて使います.こうすると, 3 文字以上字下げされているものは表示されなくなります. そのため,全体を見回すのに便利です.
再度,C-x $とすると,隠れていた部分を元に戻すことができます.
ただし,このようにテキストの一部を隠すコマンドは物理行移動の Emacs Lisp や設定な どとの相性が悪いです.ものによっては,カーソルが変なところへ移動してしまうことも あります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
対応する括弧をハイライトすることができます.
Meadow には標準で附属してますので,以下を .emacs に追加するだけで使うことができ ます.これで,括弧のところにカーソルを置くと,対応する括弧の色が変わります.
(show-paren-mode t) |
括弧の色は
で変更できます.
デフォルトのままだと,片方の括弧が画面外にあるとどこにあるのか分かりませんので
(setq show-paren-style 'mixed) (set-face-background 'show-paren-match-face "gray10") (set-face-foreground 'show-paren-match-face "SkyBlue") |
のように設定しておくといいでしょう.こうしておくと,片方の括弧が画面外にある時に は,括弧ではなく括弧の中の色が変化します.
デフォルトのままだと,色が派手すぎるので,適当に変更した方がいいです.
常に括弧の中の色を変えたい時には
(setq show-paren-style 'expression) |
とするとできます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
show-paren は対応する括弧をハイライトすることができますが, mic-paren ならその間 の文字を強調して表示することができます.
使い方は http://www.docs.uu.se/~mic/emacs.html よりダウンロードし, ロード パスの通ったディレクトリに置きます.
以下を .emacs に記入します.
(if window-system (progn (require 'mic-paren) (paren-activate) ; activating (setq paren-match-face 'bold) (setq paren-sexp-mode t) )) |
これで, カーソルを括弧の所に持って行くと, 対応する括弧の間にある文字が Bold で表 示されます.
(setq paren-match-face 'bold) を (setq paren-match-face 'region) とするとリージョ ンと同じ色になります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
以下のように .emacs に記入しておくと C-x %で対応する括弧に簡単に飛べるよう になります.
(progn (defvar com-point nil "Remember com point as a marker. \(buffer specific\)") (set-default 'com-point (make-marker)) (defun getcom (arg) "Get com part of prefix-argument ARG." (cond ((null arg) nil) ((consp arg) (cdr arg)) (t nil))) (defun paren-match (arg) "Go to the matching parenthesis." (interactive "P") (let ((com (getcom arg))) (if (numberp arg) (if (or (> arg 99) (< arg 1)) (error "Prefix must be between 1 and 99.") (goto-char (if (> (point-max) 80000) (* (/ (point-max) 100) arg) (/ (* (point-max) arg) 100))) (back-to-indentation)) (cond ((looking-at "[\(\[{]") (if com (move-marker com-point (point))) (forward-sexp 1) (if com (paren-match nil com) (backward-char))) ((looking-at "[])]}") (forward-char) (if com (move-marker com-point (point))) (backward-sexp 1) (if com (paren-match nil com))) (t (error "")))))) (define-key ctl-x-map "%" 'paren-match)) |
同じようなことは
;; By an unknown contributor (global-set-key "%" 'match-paren) (defun match-paren (arg) "Go to the matching paren if on a paren; otherwise insert %." (interactive "p") (cond ((looking-at "\\s\(") (forward-list 1) (backward-char 1)) ((looking-at "\\s\)") (forward-char 1) (backward-list 1)) (t (self-insert-command (or arg 1))))) |
としてもできます.これは,%で対応する括弧へカーソルを移動できます.カーソ ルが括弧の上になければ,単に%が挿入されます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ネタ元:昔どこかの ML に投稿されたものです.
Makefile を作るほど大きなものではなく, 1 ファイルの小さなプログラムをコンパイル する時に便利なものです.コメント部分にコンパイルするコマンドを書いておけば,それ をもとにコンパイルしてくれます.
使い方はコメントを参照.
;; ;; YaTeX like compile ;; ;; フックを使って current-comment-prefix をセットしておく。 ;;;; (add-hook 'c-mode-common-hook ;; '(lambda () ;; (define-key c-mode-map "\C-c\C-c" 'YaCompile) ;; (setq current-comment-prefix "/*"))) ;; ;; とかね。そうすると、"/*!g++ -o test test.c" みたいな行をバッファ先 ;; 頭からサーチして、"/*!" 以降行末までをコンパイルのコマンドとして使 ;; うわけだ。あ、"/*!g++ -o test test.c" は行頭にないとダメよ。 ;; (defvar current-comment-prefix "#" "*Default prefix string") (make-variable-buffer-local 'current-comment-prefix) (defun YaCompile () (interactive) (require 'compile) (let ((cmd compile-command)) (save-excursion (goto-char (point-min)) (if (re-search-forward (concat "^" (regexp-quote current-comment-prefix) "!\\(.*\\)$") nil t) (setq cmd (buffer-substring (match-beginning 1) (match-end 1))))) (setq compile-command (read-from-minibuffer "Compile command: " cmd nil nil '(compile-history . 1)))) (compile compile-command)) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
スペースだけの行など好ましくない部分を強調表示し,修正を促します
プログラムのソースや HTML などでは慣習的に好ましいとされる書式があります.
例えば,括弧の後に無駄なスペースは入れないとか.しかし,そのような好ましくない部 分があったとしても,スペースは普通表示されませんので気付きにくいものです.
好ましくないとされる部分を強調表示できます.
develock.el.gzをダウンロードして, ロードパスの通ったところに置きます.
以下を.emacs に追加します.
(load "develock")
|
これで, Emacs Lisp のファイルなどを開くと,色がついているはずです.
デフォルトではオンにしたくない場合は,以下を.emacs に追加します.
(setq develock-auto-enable nil) |
そして,オンにしたい時のみ,M-x develock-modeとします.
具体的にどういうものに色がつくかは以下の通り.ただし,以下のすべての色がつくとは 限りません.どの色がつくかはモードによって変わりますので,ソースで確認してくださ い,
;; 長い行では前半と後半の色が変わります ;; 前半:develock-long-line-face-1 ;; 後半:develock-long-line-face-2 ;; keywo が微妙に変わってます (defcustom develock-lisp-font-lock-keywords ;; スペースのみが続く行 ;; これも前半,後半で色が変わります ;; 前半:develock-whitespace-face-2 ;; 後半:develock-whitespace-face-3 --------------------------------------------- ;; 行末のスペースに色がつきます ;; フェイス:develock-whitespace-face-1 (setq fill-column 80)_ ;; タブの前にスペースがあるとき ;; 前半:develock-whitespace-face-1 ;; 後半:develock-whitespace-face-2 ------(setq ;; タブ スペース タブとなる時 ;; 最初のタブ:develock-whitespace-face-2 ---------(setq ;; タブやスペースのみの行 ;; develock-whitespace-face-2 - ;; 独りぼっちの括弧 ;; develock-lonely-parentheses-face ( ;; () の直前・直後に文字があればいい (develock-refontify-buffers) ) ;; 括弧のあとのスペース ;; develock-whitespace-face-2 (develock-refontify-buffers)- (- ) ;; メールアドレス ;; develock-reachable-mail-address-face [email protected] ;; 半角カタカナ ;; ここでは全角で表示しているが, ;; 半角だと思ってください ;; develock-bad-manner-face メール ;; A NAME="how to read" のようなタグ ;; で NAME の部分は小文字で ;; develock-upper-case-attribute-face ;; A の部分も小文字で ;; develock-upper-case-tag-face} <A NAME="how to read"></A>
develock はあくまで慣習的なものです.したがって,共同で作っているソースを調子に 乗って変更すると反感を買うこともあります.ご注意を.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |