Diff Mode †
- 拡張子を.patchにするとdiff modeになる
- パッチを編集したいときは、ESC X toggle-read-only する
- パッチの中の不要なファイルは diff-file-kill (ESC K) で消す
Menu Bar †
sakuraのレンタルサーバーで、OSがFreeBSD 7.1になって emacs 22.3 が使えるようになった。だが、X11対応で作られておらず nwモードで立ち上がる。
最近はコマンドのキー・バインドを覚える余裕が無いので、Menu Barを頼りに使うことが多いのだが、nwモードでMenu Barを使うのは結構厄介だ。 Menu Barを呼び出すキー・バインドは、常識的な F10 で良いのだが、 このキー・バインドはGNOME Terminal等から使う場合は、すでに使われてしまっている。
GNOME Terminalで [編集:キーボードショートカット:メニューのショートカット・キーを無効にする] にチェックすると、F10キーがemacsに渡るようになる。
使用している端末でそのような設定が無い場合は、M+` (Alt + Shift + `) というキーの組み合わせでMenu Barを呼び出すことになる。
Bookmark †
使えそうで使えない bookmark 機能。 dired のバッファでも bookmark (C-x r m)できる。 プロジェクト毎に独立したファイルに保存できれば良いのだが。~/.emacs に lisp でプログラムを書く必要があるのだろうか。 複数の emacs を立ち上げると、終了するときにそれぞれが自動保存するため、~/.emacs.bmk が壊れてしまう。
TAGジャンプ †
タグファイルを作れば、関数名、#defineされた定数、typedefされたタイプ名が、シンボル名として検索できる。
$ cd src $ etags *.[ch]
emacsの中からなら、diredでディレクトリを呼び出して、M-! etags *.c *h としてもよい。 カレント・ディレクトリに TAGS というファイルができる。 emacsでソースを呼び出して、TAGジャンプさせる
- M-. 定義部分に飛ぶ
- C-x 4 . 別ウィンドウに表示する
Time Stamp †
ファイルの最初から8行以内に Time-stamp: <> と書いてから ESC-x time-stamp とすれば時刻を入れてくれる。.emacs でカスタマイズして、Last-Update 等のようにファイルの保存時に自動的に入れることも出来る。
<愚痴>たったこれだけ(Time Stamp を入れる)のことをどうやるのか調べる手段がなさすぎ。ソースを読めって..最近の Linux Distribution では、emacs-lisp のソースは入ってないし、めったに使わない情報のために膨大なソースを入れるのもなんだかなぁ</愚痴>
X11 Clipboard とリージョン(region) †
xtermの表示内容をマウスの左ボタンで選択して、別のxtermに中ボタンで貼り付けるという操作は、直感的でわかりやすいので良く使う。
ほんの数行の設定を別のコンピュータに移す場合、いちいちファイルを作って転送してとやるより、端末を呼び出してその場で編集してしまったほうが簡単だ。 ところが、xtermの選択範囲(x11のselection)を、emacsの編集画面で中ボタンを押して貼り付けようとすると、成功するときと失敗するときがある。 emacsを立ち上げてから一度もリージョン(region)を使っていないとうまくいくようだが、 そうで無い場合は、リージョンとして保存してあるバッファの内容を貼り付けてしまう。
M-x clipboard-yank
というコマンドを使えば、x11のclipboadの内容を貼り付けることができる。
ところが、これでも貼り付けに失敗することがある。xtermで左ボタンを選択してできる selection 領域は、clipboard ではないから、clipboard-yank では出てこないからだ。 面倒だが、xclipboard を立ち上げて New ボタンを押して selection を clipboard に 変えて、clipboard-yank としなければならないようだ。
逆に emacs のリージョンを clipboard に送るには、.emacs に以下のように書いておく必要がある。
(setq x-select-enable-clipboard t)
全く「誰か何とかしてくれ」と叫びたくなる面倒さだ。Mac や Windows のクリップボックスが如何に良くできているか(というかポリシーを貫いているか)が分かる例だ。
F10 †
gnome-terminal で emacs-nw を使っていると F10 とかぶるので [編集:キーボードショートカット] で無効にする。
Quick Reference Key Bindings †
コピーペースト | ||
C-SPC | マークの設定 | |
ESC-w | コピー | |
C-w | 切り取り | |
C-y | 貼り付け | |
C-x h | バッファ全体のコピー | |
検索・置換 | ||
ESC-x | replace-string | |
ESC-x | query-replace | |
SPC | 置き換え | |
DEL | スキップ | |
ESC | 終わり | |
! | 以後全て | |
^ | 前へ | |
履歴 | ||
C-/ | undo | |
C-x ESC ESC | repeat-complex-command | |
M-p | previous-complex-command | |
M-n | next-complex-commnad | |
その他 | ||
C-q C-M | 改行文字の挿入 |
日本語入力(leim) †
C-\ とするとモードライン・インジケータに 'Aあ' というような表示が出る。 このモードで C-h I <RET> とすると説明が出る。Windows に比べると、 変換がかなり変だったりキー操作がかなり異なるので注意。
quail入力中 | |
K | カタカナに変換 |
変換候補表示中 | |
C-o | 文節を伸ばす |
C-i | 文節を縮める |
C-f | 次の文節 |
C-p | 前候補 |
l | 次の候補グループ |
L | 前の候補グループ |
C-c | キャンセル |
変なローマ字
よみ | 私の記憶 | quail |
ん | nn | n' |
ちょう | cyou | chou |
でぃすく | dhisuku | dyisuku |
バッファの保存時の漢字コードの指定 †
C-x RET f "euc-japan-unix" | EUC-JP UNIX改行を指定 |
C-x RET f "sjis-dos" | Shift-JIS DOS改行を指定 |
コードを指定して読み込み †
普通に開くと文字化けする場合
C-x RET c "utf-8-unix" | 次のコマンドの漢字コードを指定 |
この後ファイルを開けば良い |
すでに開いているファイルが化けている場合
C-x RET c "utf-8-unix" RET M-x revert-buffer | 漢字コードを指定してから読み直す |
Canna + Egg †
ESC k | カタカナ変換 |
Anthy †
動作 | キーバインド |
入力モードの切替 | C-\ |
変換 | space |
変換する文節をひとつ前へ | C-b |
変換する文節をひとつ後へ | C-f |
変換する文節を一番前へ | C-a |
変換する文節を一番後へ | C-e |
変換する対象を広げる | C-o |
変換する対象を狭める | C-i |
次の変換候補へ | C-n |
前の変換候補へ | C-p |
変換のやりなおし | C-g or BackSpace |
変換の確定 | Enter or C-j or C-m |
全角カタカナの切替(トグル) | q |
半角カタカナの切替(トグル) | C-q |
半角英数モードへ | l |
全角英数モードへ | L |
半角・全角英数モードからの復帰 | C-j |
その他のTips †
Buffer内のgrep | 'M-x occur' または、'C-u M-x occur'(前後の行も表示) |
TABとSpaceの変換 | リージョンを設定して 'M-x tabify' または 'M-x untabify' |
キーマクロ | 開始 'C-x (' 終了 'C-x )' 実行 'C-x e' |
ファイルのブックマーク | 登録 'C-x r m' 一覧 'C-x r l' |
Buffer書き換え禁止 | 'C-x C-q' トグル動作 または 'M-x view-mode' |
カーソル位置の文字コード | 'C-x =' |
バイナリ編集モード | 'M-x hexl-mode' |
バイナリ16進入力 | 'C-M-x 16進コード |
改行文字の置き換え | 'C-q C-j (C-jは任意のコントロール文字でもよい) |
色付けを一時的にOFF/ON | M-x font-lock-mode' |
一時的にフォントのサイズを変える | 'M-x text-scale-adjust' または 'C-x C-0' 'C-x C-+' 'C-x C--' *1*2 |