home(h) links(l) memo(m) profile(r)
memo(m)  >  emacs関係

メモ〜emacs関係

Index

インストール

Macへのインストール

現在はMac用バイナリ(Emacs for Mac OS X)が提供されている。提供サイト[19]からディスクイメージをダウンロードし、ダウンロードしたディスクイメージをマウント。Emacsアイコンをアプリケーションフォルダにドラッグするだけでインストール完了。

2016/09/12現在、Mac用バイナリの最新バージョンは24.5-1。以下は、少し古いEmacs22(Carbon Emacs)、より新しいのEmacs23(Cocoa Emacs)に関する情報。後者のインストール方法について15,17。但し、バックスラッシュが入力できない、php-modeがデフォルトでは入っていない点はEmacs 24でも同じみたい。

1. Emacs本体をダウンロードして解凍
GNU Project ArchivesまたはGNU Mirrorのいずれかからダウンロードする。2011/09/29現在の最新バージョンは23.3。
$ cd ~/download
$ wget http://ftp.gnu.org/pub/gnu/emacs/emacs-23.3a.tar.gz
$ tar -zxvf emacs-23.3a.tar.gz
2. IMEパッチをダウンロードして解凍
そのままではバックスラッシュ(\)が入力できず、円マーク(¥)しか入力できない。Emacs22では Alt(M)-¥ でバックスラッシュが入力できていたが、Emacs23では M-¥ is undefined となる。このパッチを当てることでデフォルトで入力される値がバックスラッシュになる(但し今度は円マークを入力する術がないみたい)。
$ wget http://jaist.dl.sourceforge.jp/macemacsjp/47986/inline_patch-23.2-beta3.tar.gz
$ tar -zxvf inline_patch-23.2-beta3.tar.gz
3. IMEパッチを当てる
$ cd emacs-23.3
$ patch -p 0 <../inline_patch-23.2-beta3/emacs-inline.patch
4. インストール
$ ./configure --with-ns --without-x
$ make bootstrap
$ make install
5. php-modeの導入
php-modeを使うのであれば別途入れる。Emacs22では別途入れる必要はなかったように思う。23での手順詳細はPHPモードのインストール参照。
6. アプリケーションフォルダにコピー
$ cp -rf nextstep/Emacs.app /Applications/Emacs_23.3.app

また、また、ソースからインストールしても一応動作したが、デフォルト状態では円マーク(バックスラッシュ)が入力できない、日本語などが扱いづらい(変換区間が変更できない、F7でカタカナに変換できないなど)、M-w でコピーしようとするとアプリケーションが閉じられてしまう(メニューの[Edit]-[Copy]からであればコピーOK)など不都合があるよう。以下はMac OS X 10.6.8での状況。

# tar -zxvf emacs-23.4.tar.gz
# ./configure
...
configure: error: The following required libraries were not found:
     libjpeg libpng libgif/libungif libtiff
Maybe some development libraries/packages are missing?
If you don't want to link with them give
     --with-jpeg=no --with-png=no --with-gif=no --with-tiff=no
as options to configure
# 画像関係のライブラリ類がないと言われた。finkでインストールしてもなぜか状況は変わらないので適用を除外して再configure
$ ./configure --with-jpeg=no --with-png=no --with-gif=no --with-tiff=no
$ make
$ src/emacs -Q # インストールしなくてもとりあえずこれで動く。
$ sudo make install
$ make clean # ビルドファイルの消去
$ which emacs
/usr/local/bin/emacs
$ emacs

Windowsへのインストール

GNU EmacsはWindows用のバイナリが提供されているが、そのままビルドしたものは日本語入力に難があるらしい。日本語入力切り替え(IME ON)時、インライン入力ができるように最低限のソースコード変更をしてビルドしたものが配布されている14

検索と置換

正規表現による置換

M-x replace-regexp は指定したパターンに一致する任意のものを置換(無条件置換)

M-x query-replace-regexp RET regexp(検索条件) RET newstring(置換パターン) RET
または
C-M-% regexp RET newstring RET
は指定したパターンに一致する任意のものを置換(問い合わせ型置換)
C-M-sで前方正規表現検索、C-M-rで後方正規表現検索。

例:3桁の数字+":"の後に改行を挿入する。
C-M-% [0-9][0-9][0-9]: RET ¥& C-q j RET
C-q jで改行コードを挿入)

文字そのものを指定するには前に \を置いてエスケープする必要があるものは以下の通り。

\ * + . ? [ ] ^ $ - | /
※Perlの正規表現とは異なり "{ } ( )" のエスケープは不要。逆に正規表現文字として用いるには直前に \ を記す必要あり。

指定文字列 内容 事例
.(ピリオド) 改行以外の任意の1文字
a.b
a で始まり、b で終わる任意の3文字の文字列。
○:aab、abb、aZb、a1b、a b(2文字目は半角空白)、a.b、a,b
×:ab、aabb

例:alt属性の値を消去する。

		C-M-% alt=".+" <RET> alt="" <RET>
	      

単にピリオドなら最長のパターンにヒット。最短にしたいなら.?と直後に疑問符を付け足す。

		【例】
		<div class="poo">hogehoge</div><div class="pii">fugafuga</div>
		→class属性「 class="(任意の文字列)"」を除去

		C-M-% class=".+" <RET> <RET>
		→<div"poo">hogehoge</div><div class="pii">fugafuga</div>
		C-M-% class=".+?" <RET> <RET>
		→<div"poo">hogehoge</div><div class="pii">fugafuga</div>
	      

alt=" の後、次の " までの間に、任意の1文字以上の文字列が来るものを対象に、その任意の1文字以上を削除する(0文字の文字列と置換)。

* 直前の正規表現を0回以上繰り返したもの

最長のパターンに適合する。最短パターンに適合させるには*?を用いる。

	    【例】"f" の後、"o" を0回以上含んだ文字列を消去する
	    C-M-% fo* <RET> <RET>
	    ※f、fo、foo、fooo、などが適合する。

	    【例】"c" と "ar" の間に "a" を0回以上含んだ文字列を消去する
	    C-M-% ca*ar <RET> <RET>
	    ※car、caar、caaar、などは適合し、cdar などは適合しない。

	    【例】alt属性の属性値全て(.(任意の1文字)を*(0回以上繰り返し)した文字列
	    =任意の0文字以上の文字列)を消去する。
	    C-M-% alt=".*" <RET> alt=""

	    【例】下記文字列から"'key' => '任意の文字列', "を削除する。
	    <文字列>
	    $colinf['id'] = array('key' => 'id', 'name' => 'pdbid');
	    $colinf['comment'] = array('key' => 'comment', 'name' => 'structure name');
	    $colinf['keyword'] = array('key' => 'keyword, 'name' => 'function keyword');
	    <コマンド>
	    C-M-% 'key' => '.+?' <RET> <RET>
	    ※+の後に?を付けて最短指定をしないと、最長のパターンが検索され、
	     "'key' => 'id', 'name' => 'pdbid' " などがヒットしてしまう。

	    【例】
	    <置換前文字列>
	    <ul>
	    <li><a href="http://www.whocc.no/atc_ddd_index/?code=J05AH01">J05AH01</a> − ザナミビル(リレンザ、<a href="index.php?p=113">113</a>)</li>
	    <li><a href="http://www.whocc.no/atc_ddd_index/?code=J05AH02">J05AH02</a> − オセルタミビル(タミフル、<a href="index.php?p=113">113</a>)</li>
	    </ul>
	    <置換後文字列>
	    <ul>
	    <li[[ATC:J05AH01]] − ザナミビル(リレンザ、<a href="index.php?p=113">113</a>)</li>
	    <li>[[ATC:J05AH02]] − オセルタミビル(タミフル、<a href="index.php?p=113">113</a>)</li>
	    </ul>
	    <コマンド>
	    C-M-% <a href="http:\/\/www\.whocc\.cc.*?">\([0-9A-Z]+\)<\/a> RET [[ATC:\1]] RET
	    ※cc.*?のように ? で最短マッチ指示をしないと、後の <\/a> までがマッチしてしまう。
	  
+ 直前の正規表現を1回以上繰り返したもの
(* とは異なり、0回はヒットしない)
fo+
f の後、o を1回以上含んだ文字列
○:fo、foo、fooo、など
×:f など
ca+ar
carの間に、a を1回以上含んだ文字列
○:caar、caaar、など
×:car、cdar など
? 直前の正規表現を0回または1回繰り返したもの
(* とは異なり、2回以上はヒットしない)
fo?
f の後、o を0回か1回含んだ文字列
○:f、fo など
×:foo、fooo など
ca?ar
carの間に、a を0回または1回含んだ文字列
○:car、caar など
×:caaar、cdar など
[ ... ] []内の記述が示す文字集合
[ad]
a 1文字か d 1文字のどちらかに一致。
[ad]*
a 0文字以上か d 0文字以上のどちらかに一致、つまり a または d のどちらかだけで構成される文字列(空も含む)
[a-z]
ASCII小文字の中から任意の1文字。
[a-z$%.]
ASCII小文字、$%、ピリオドの中から任意の1文字。
[]a]
]a
] の文字自体を指定したい場合は、] を最初の文字として指定する。
[]-]
]-
- の文字自体を指定したい場合は、- を最初か最後の文字として指定して、範囲指定の後に置く。
[]^-]
]--
^ の文字自体を指定したい場合は、^ を文字集合の2文字目以降に置く。
C-M-% ¥([^a ]¥)¥([-,]¥)¥([^u ]¥) <RET> ¥1¥2 ¥3
(aと空白を除く1文字)+(-か,)+(uと空白を除く1文字)→(-か,)の後に空白を挿入(osaka-u を osaka- u にしてしまわないための措置)
C-M-% ¥([(,]¥)- <RET> ¥1--
直前に ( か , がある - のみ -- と置換する。
C-M-% \* [0-9]\.[0-9]+<RET>---
「半角空白5個+"*"+数字1桁+"."+数字」を半角ハイフン3つに置換
("*"と"."を文字列として認識させるには前に¥を置いてエスケープする必要あり)。
C-M-% ¥([。、?!]¥)C-q C-j[ C-q <TAB>]*<RET>¥1
文末文字(。、?!)+改行+0個以上の空白またはTABを検索し、「改行+0個以上の空白またはTAB」を除去する。
[^ ... ] [^ ]内の記述が示す文字集合を除いたもの
[^a-z0-9A-Z]
英数字を除く全ての文字(改行文字なども含む)。
C-M-% C-q C-j ¥([^0-9]¥) <RET> (半角空白)¥1
「改行+数字以外」の時、改行を半角空白に置換(改行+数字の時は何もしない)。
C-q C-jは改行、¥1は検索文字列中1つ目の¥(¥)の中身を指す。)
^ 行頭にあるもののみヒット。
^foo
行頭にあるfooのみ一致。
○:foo、fooo、fooabcde
×:yafoo
	      【例】各行頭にかっこ ( を挿入
	      C-M-% ¥(^.¥) <RET> (¥1
	      行頭にある(^)任意の1文字(.)を検索し、あれば(+その任意の1文字と置換。		
	    
$ 行末にあるもののみヒット。
foo$
行末にあるfooのみ一致。
○:foo、yafoo、abcdefoo
×:foof
x+$
行末にxが1文字以上ある文字列。
○:x、ix、ipx、axx
×:abxc
w/W 単語構成文字/単語構成文字以外
C-M-%,¥(¥w¥)<RET>, ¥1
後に単語構成文字が来ているコンマ(,)の直後に半角空白を付加する置換
○:,abc→, abc
×:, abc
C-M-%
¥(.html">¥)<C-q j>¥W+<span class="jp">¥(.+¥)</span><C-q j>¥W+¥(</a>¥)
<RET>¥1¥2¥3
<a href="manual_intro.html">
		<span class="jp">はじめに</span>
		</a>
		<a href="manual_install.html">
		<span class="jp">インストール</span>
		</a>
	      

<a href="manual_intro.html">はじめに</a>
		<a href="manual_install.html">インストール</a>
	      
¥1:.html"
¥2:span要素内の文字列
¥3:</a>
¥(...¥) これに囲まれた表現を後に呼び出す事ができる(後方参照)
	      【例1】(.+=任意の1文字以上の文字列).htm の拡張子だけを.htmlに変更する
		(1番目のマークした表現(=. の前の部分)はそのまま)
	      C-M-% ¥(.+¥).htm <RET> ¥1.html
	      【例2】直前に ( か , がある - のみ -- と置換する。
	      C-M-% ¥([(,]¥)- <RET> ¥1--
	      【例3】下記1〜4が並んだものの1と2の間に3のコピーを挿入する。
	      
  1. #Jmoljs_jmol
  2. ">jmol
  3. (1文字以上の任意の文字列)
  4. </a></li>
C-M-% ¥(#Jmoljs_jmol¥)¥(">jmol¥)¥(.+¥)¥(</a></li>¥) ¥1¥3¥2¥3¥4 例:#Jmoljs_jmol">jmolInitialize</a></li> → #Jmoljs_jmolInitialize">jmolInitialize</a></li> 【例4】同一内容の行が2行続いた場合は1つにする C-M-% \(^.+$\)C-q C-j\1 <RET> \1 <RET>

※perlの正規表現では括弧および括弧閉じの前に円マーク(バックスラッシュ)は不要。

※emacsでは呼び出す際の指定は「¥数字」。perlの正規表現では「$数字」と違うので注意。

¥{x,y¥} 直前のブロックのx回以上y回以下の繰り返しにマッチする。
a¥{3,5¥}
3回以上5回以下の"a"の繰り返しにマッチする。aaaaaaaaaaaaはマッチ。
¥| 選択肢を指定する。
¥(foo¥|bar¥)
foo または barにのみマッチする。

参考サイト:GNU Emacsマニュアル: 探索と置換

確認しながら置換

M-x replace-string だと確認なしに無条件置換。 各々確認しながらの置換(問い合わせ型置換)はM-% またはM-x query-replace

正規表現を使った置換は、 C-M-% regexp <RET> newstring <RET>、または M-x query-replace-regexp <RET> regexp <RET> newstring <RET>

置換中のキー操作について。

SPCまたはy
置換して次を検索
DELまたはn
置換せず次を検索
RETまたはq
置換を終了する
.(ピリオド)
現在注目しているパターンを置換してから終了する
!
これ以降問い合わせをせず残り全てを置換する
^
1つ前の出現箇所に戻る(誤って置換してしまった場合など)

前条件で再検索

検索は「C-s」逆方向検索は「C-r」 検索状態で「C-s」で、前回条件の呼び出し。

つまり、「C-s C-s」で前回条件での検索。

もっと前の条件を使いたいときは、検索リンク(search ring)を利用。 「M-p / M-n」 でリング内移動。目的の要素が表示された状態で、必要に応じて編集し、「C-s / C-r」で検索開始。

参考:GNU Emacsマニュアル: 探索と置換

正規表現検索

前方正規表現検索:C-M-s または M-x isearch-forward-regexp

後方正規表現検索:C-M-r または M-x isearch-backward-regexp

正規表現の記述方法は正規表現による置換参照。

改行コードを含んだ置換

; を ; +改行 に置換したい場合
M-x replace-string =&gt; &quot;;&quot; =&gt; &quot;;C-qC-j&quot;
; の後 C-qC-j を入力すると、下のメッセージウインドウ内で改行される。

その他入力編集関係

一括インデント

  1. インデントしたい範囲の端にカーソルを置く
  2. C-Spaceでマーク
  3. インデントしたい範囲の他方の端までカーソル移動
  4. C-M-バックスラッシュまたは、M-x indent-regionを実行(但し前者はバックスラッシュの代わりに円マークしか入力できずエラーになるよう?)

参考サイト:おいぬま日報(不定期)(2006-08)

インデント解除

Alt + Tab

カーソル移動

C-n
下にスクロール
C-p
上にスクロール

画面スクロール関係

C-l
現在のカーソル位置が上下方向中央に来るように画面をスクロール(recenter)。
C-M-l
有益な情報が画面の上に来るように発見的方法でスクロール(reposition-window)。
arg C-l
カーソル位置(ポイント)がarg行目に来るようにスクロールする(recenter)。

参考サイト:GNU Emacsマニュアル: Display

指定した行番号に飛ぶ

M-x goto-line
M-g g

参考サイト:ESSUsage - RjpWiki

対応するタグに飛ぶ

htmlモードを含むSGMLモードで、

Schemeモードでのコマンド

コマンド動作
C-x C-e、または C-M-x カーソル直前のS式を評価
C-c C-e カーソルのS式を含むトップレベルのS式を評価
C-c C-l ファイルをロード(効かない?)
C-c C-r リージョンを評価
C-c C-z Schemeのインタプリタが動いているバッファフォーカスを移動
M-C-f 次のS式へ移動
M-C-b 前のS式へ移動
M-C-a カーソルのS式を含むトップレベルのS式の先頭に移動
M-C-e カーソルのS式を含むトップレベルのS式の末尾に移動
M-C-d 1つ内側のS式へ移動(効かない?)
M-C-u 1つ外側のS式へ移動
M-C-space カーソルのS式の次のS式をマーク
M-C-t カーソルのS式の前後の式を交換

参考文献:Kahuaプロジェクト『プログラミングGauche』オライリー・ジャパン、ISBN 978-4-87311-348-7

バックスラッシュの入力

正規表現置換などで、バックスラッシュを入力しようと思うのに、円マーク(¥)が入力されて困ったが、Alt(Opt) + ¥で入力できることが判明。マーク領域一括インデント(C-M-\)も入力できず、M-x indent-regionとわざわざ打ち込み、その度に「C-M-\で同じことができまっせ」というメッセージを吐かれていた。但し、Emacs 24ではこの方法は効かず、初期設定ファイルの調整でも今のところ対処不可(Mac 10.11にて)。他のソフトで入力したものをコピー&貼り付けするしかない?

参考文献・サイト:

インデントしてセミコロン(scheme-modeのみ?)

M-;
行の後半にコメント追記するのに使用。一定の位置にインデントした上でセミコロンが入力される。

自動インデントのON/OFF

改行したりすると自動的にインデントが適用される「自動インデント」が有効になっていると、htmlコードのpreタグで意図しないインデントが表示にまで反映されるなど不都合なことがある。

この機能のON/OFFは、Emacs設定(Preferences)の[Editing]-[Electricity]-[Electric Indent mode]で設定する。onかoffのどちらかを選択する。

あるいは、Emacs設定ファイル(~/.emacs.d/init.elなど)に以下の1行を書けば良い[26]

(electric-indent-mode -1)

TAB、改行の入力

Emacsでは多くのモードでTABの入力はインデントとして機能する。純粋にTAB文字を入力したいときのキー操作は次の通り。

C-q TAB (Ctrl+Q を押した後、TABキーを押す)
    

参考サイト:Emacs - [物理のかぎしっぽ]

改行でも同様のことが言える。 改行を入力するつもりが、入力内容の決定の意味になってしまうことがある(検索や置換など)。 下記コマンドで、改行入力が可能。

C-q C-j
    

C-q Enterではうまく動作しないみたい(^Mが挿入される)。

コメントアウト(PHP)

PHPモード時、C-c C-cで選択範囲の各行がのコメントアウトされる(各行の内容が「/*」と「*/」で挟まれる)。

インデント幅の変更

php-modeで範囲選択を行い、TABを押して自動インデントをかけるとインデント幅は4文字になっていた。これを2文字に変更した手順。

1. 初期設定ファイルを編集

初期設定ファイル(~/.emacs.d/init.elなど、Windows環境はWindowsにおけるHOMEの場所参照)に以下の記述を追加。

;; set the width of indent to 2
(add-hook 'php-mode-hook
          (lambda ()
            (setq tab-width 2)
            (setq c-basic-offset 2)))
2. Emacsを再起動して設定を反映

大文字小文字変換

M-l
後続の単語を小文字に変換する(downcase-word)。
M-u
後続の単語を大文字に変換する(upcase-word)。
M-c
後続の単語の1文字目だけを大文字に2文字目以降を小文字に変換する(capitalize-word)。
M-- M-l
ポイントの直前の単語を小文字に変換する(downcase-word)。
M-- M-u
ポイントの直前の単語を大文字に変換する(upcase-word)。
M-- M-c
ポイントの直前の単語を1文字目だけを大文字に2文字目以降を小文字に変換する(capitalize-word)。
C-x C-l
選択領域内の文字列を小文字に変換する(downcase-region)
C-x C-u
選択領域内の文字列を大文字に変換する(upcase-region)
K
ひらがな→カタカナ変換、またはその逆
qq
日本語をOFFにする(Ubuntuの場合、Emacs上でOFFでも日本語ONにできる。その場合、非インライン入力となり、確定すると入力される)
qz
日本語をONにする
C-_C-x u
操作取り消し(Undo)
C-g C-_
操作をもう一度実行(Redo)…Undoで戻り過ぎた場合にこれが使える

なお、領域内変換のコマンド(downcase-region、upcase-region)は既定では無効になっていて、最初に利用しようとすると、有効にするかどうか確認を求められる。"y"で答えると以後有効となり確認を求められなくなる。この設定は~/.emacs.el(put 'upcase-region 'disabled nil)などと記述するのと同じ(確認に"y"で答えると、この記述が自動的に追加される)。

参考文献・サイト:

文字を入れ替え

C-t
カーソル位置の文字を直前の文字と入れ替える(例:ab→ba
M-t
カーソル位置が語頭である場合直前の語と、語頭でない場合は直後の単語と入れ替える。
【例】
There is a large white dog. → There is a white large dog.
There is a large white dog. → There is a large dog white.
www.hoge.com → hoge.www.com
www.hoge.com → www.com.hoge 

文字をコード入力?

たまたま見つけた。

C-c C-n [文字1文字]
出るのはasciiコードかな。

制御文字を入力

制御文字は C-q + C-X で入力する。Xはキャラクターコードに相当する順序のアルファベットを指定する。例えば改行コード(LF、0A(16)=10(10))は10番目のアルファベットである「j」をXの部分に指定する[9]

文字 キャラクターコード 入力方法 備考
改行(Line Feed) 0A(10) C-q + C-j Linux系および最近のMacでは改行にLFを使う。
復帰(Carriage Return) 0C(13) C-q + C-m Win系では改行にLF+CRを使う。
タブ 09(9) C-q + C-i

Undo/Redo

操作の取り消し、再実行

C-_ または C-x u
操作取り消し(Undo)
C-g C-_
操作をもう一度実行(Redo)…Undoで戻り過ぎた場合にこれが使える

参考文献・サイト:

モード

viモード

UNIX系システムで一般的なテキストエディタvi相当のキー動作環境にモード変更する方法。これにすれば、カーソル移動などと文字入力が分離でき、小指でCtrlキー押しが減少する…かもしれない…と思うが、慣れないうちは扱いずらい。しかもj(1つ下にカーソル移動)やk(1つ上にカーソル移動)をすると、「wrong-type-argument: number-of-marker-p, t」と出続ける。

viモードへの入り方は(1)M-x vi-mode(2).emacsに以下の記述をしておくとESC ESCで viモードに入ることができて便利とのこと。
(define-key global-map "\e\e" 'vi-mode)
※追記した後はEmacsを再起動すること。

参考サイト:Meadow/Emacs memo: 他のソフトのエミュレーション

[13]

VIモードに入る
  • ESC-ESC
  • M-x viper-mode
VIモードから出る
  • M-x viper-go-away

強制的にモードを変更する

M-x モード名 <RET>
    
【例】LaTeXモードにする
M-x latex-mode <RET>
    

参考文献・サイト:

LaTeX入力支援モード(YaTeX、野鳥)

(1)野鳥サイトからソースダウンロード
shell> wget http://www.yatex.org/yatex1.73.tar.gz
(2)展開
shell> tar zxvf yatex1.73.tar.gz
shell> cd yatex1.73
(3)makefile編集
#
# Makefile for YaTeX
#

# Edit these variables to be suitable for your site
PREFIX	= /usr/local

## mule2
#EMACS = mule
EMACS = mule
#EMACSDIR= ${PREFIX}/lib/${EMACS}
EMACSDIR= ${PREFIX}/lib/${EMACS}
## emacs20
#EMACS	= emacs
#EMACSDIR= ${PREFIX}/share/${EMACS}
## XEmacs
#EMACS	= xemacs
#EMACSDIR= ${PREFIX}/lib/${EMACS}
## Meadow (Sample)
#EMACS	= meadow
#EMACSDIR = c:/usr/local/meadow
## CarbonEmacs on Darwin (Sample)
#EMACS = /Applications/Emacs.app/Contents/MacOS/Emacs
EMACS = /Applications/Emacs.app/Contents/MacOS/Emacs
#PREFIX = /Applications/Emacs.app/Contents/Resources
PREFIX = /Applications/Emacs.app/Contents/Resources
#EMACSDIR = ${PREFIX}
EMACSDIR = ${PREFIX}

LISPDIR	= ${EMACSDIR}/site-lisp/yatex
# LISPDIR	= ${EMACSDIR}/site-packages/lisp/yatex
DOCDIR	= ${LISPDIR}/docs
HELPDIR	= ${EMACSDIR}/site-lisp
INFODIR	= ${PREFIX}/info

TAR	= tar
INSTALL	= install -c -m 444
MKDIR	= mkdir -p
INSTINFO= install-info


# Comment out below if you are using Emacs Windows(meadow, etc)
GEO	= -geometry 80x20+0+0

###################
# Do not edit below
###################
(以下略)
(4)インストール
shell> make install
if [ ! -d /Applications/Emacs.app/Contents/Resources/site-lisp/yatex ]; 
then mkdir -p /Applications/Emacs.app/Contents/Resources/site-lisp/yatex; fi
if [ ! -d /Applications/Emacs.app/Contents/Resources/site-lisp/yatex/docs ]; 
then mkdir -p /Applications/Emacs.app/Contents/Resources/site-lisp/yatex/docs; fi
if [ ! -d /Applications/Emacs.app/Contents/Resources/info ]; 
then mkdir -p /Applications/Emacs.app/Contents/Resources/info; fi
for f in *.el; do \
 rm -f /Applications/Emacs.app/Contents/Resources/site-lisp/yatex/${f}c; \
done
install -c -m 444 *.el* yatex.new /Applications/Emacs.app/Contents/Resources/site-lisp/yatex
install -c -m 444 docs/yatexj.tex docs/yatexe.tex docs/yatex.ref docs/yatexref.eng
 docs/yatexadd.doc docs/yatexgen.doc docs/qanda docs/qanda.eng docs/htmlqa docs/htmlqa.eng
 docs/yahtmlj.tex docs/yahtmle.tex /Applications/Emacs.app/Contents/Resources/site-lisp/yatex/docs
install -c -m 444 docs/yatexj docs/yatexe docs/yahtmlj docs/yahtmle /Applications/Emacs.app/Contents/Resources/info
install -c -m 444 help/YATEXHLP.jp help/YATEXHLP.eng /Applications/Emacs.app/Contents/Resources/site-lisp
--------------------------------
If you have install-info command, type 'make install-info'.
If not, add next lines into your site's info dir manually.
* YaTeX: (yatexj). Yet Another tex-mode for Emacs. (Japanese).
* YaTeX-e: (yatexe). Yet Another tex-mode for Emacs. (English).
* yahtml: (yahtmlj). Yet Another HTML-mode for Emacs. (Japanese).
* yahtml-e: (yahtmle). Yet Another HTML-mode for Emacs. (English).
(4)Emacsの設定→~/.emacs に追記
(setq auto-mode-alist
      (cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist))
(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)
(setq tex-command "platex")
    

…これで動くはずだが、動かないみたい?

YaTeXコマンド

参考文献・サイト:

htmlファイルをXML編集モード(nxmlモード)で開く

html5文書をEmacsで開くとxhtmlモードではなくhtmlモードになる。これだと閉じタグなどが自動補完されない。XML編集モード(nxmlモード)にすればそのような問題が解消される上、タグの整合性のチェックなどもやってくれるらしい。ただ導入にはまずhtml5-elをインストールする必要あり。手順を見るとGitHubから落としてきてmakeすればいいと軽く書かれているが、GitHubから落としてきて...の部分がまだよく分からないのでとりあえず保留。

入力モード変更

C-\Ctrl + \)で日本語入力などのON/OFFが切り替えられる…が、ローカル環境ではなぜかロシア語モードとなってキー配列が変わるため、同じキー操作ではC-\を入力したことにならず戻せない(メニューバーの[Options][Mule][Toggle Input Method (C-\)]で変更可能)。

PHPモードのインストール

バージョンにより手順は異なる。

Emacsバージョン 手順
23 sourceforgeからダウンロードしてきてコンパイル。
24 MELPAのphp-modeをインストール(→パッケージ管理12。2016/10/03現在、MELPAのphp-modeはobsoleteの扱いとなっていて、対応バージョンはEmacs 24。Emacs 25以降ではうまく動作しない? →対応するようになった?37 38
25〜 marmaladeのphp-modeをインストール34→やっぱり現在はMELPA由来の方がいい?37
【(改)Emacs 25〜の場合】37 39
確認環境:macOS Mojave (10.14.2) + GNU Emacs 26.1 (build 1, x86_64-apple-darwin14.5.0, NS appkit-1348.17 Version 10.10.5 (Build 14F2511)) of 2018-05-31
mymac:~ user$ cd /Applications/Emacs.app/Contents/Resources/site-lisp
wgetコマンドが使えないときはブラウザなどで以下の場所にダウンロードしてもよい
mymac:~ site-lisp wget https://raw.githubusercontent.com/emacs-php/php-mode/master/php-mode.el
mymac:~ site-lisp wget https://raw.githubusercontent.com/emacs-php/php-mode/master/php-project.el

~/.emacs などに以下の記述を追記。
(require 'php-mode)

【Emacs 25の場合】
~/.emacs.d/init.el に以下の記述を追加して marmalade レポジトリが使える状態にしておく
$ cat ~/.emacs.d/init.el
...

(require 'package) # この指定がないとEmacs起動時エラーがでた[35]
(add-to-list 'package-archives
             '("marmalade" . "https://marmalade-repo.org/packages/"))
...

メニューの[Options]-[Manage Emacs Packages]をクリック(または「M-x package-list-packages」を入力
php-modeを探してphp-mode文字列上でクリック→このパッケージのページが別バッファに表示される。
Statusのところに「Delete」と書かれていたら一旦ここをクリックしてDeleteする
Statusのところに「Available from melpa -- Install」となっていてもこのInstallをクリックするとEmacs 25では使えないmelpaのものがインストールされてしまう。
Other versionsのところに記載されている「1.5.0 (marmalade)をクリックしインストールする。

【Emacs 24の場合】
確認環境:確認環境はUbuntu 12.04 64bit + GNU Emacs 23.3.1 (x86_64-pc-linux-gnu, GTK+ Version 2.24.10)
user@mypc:~$ cd ダウンロード
user@mypc:~/ダウンロード$ ls php-mode-1.13.1.zip
php-mode-1.13.1.zip
user@mypc:~/ダウンロード$ unzip php-mode-1.13.1.zip
Archive:  php-mode-1.13.1.zip
4a68bcc406a7f68676aef4556fd9c4a0629676ab
   creating: php-mode-1.13.1/
 extracting: php-mode-1.13.1/.gitignore
...
  inflating: php-mode-1.13.1/tests/issue-9.php  
  inflating: php-mode-1.13.1/tests/issue-99.php  
  inflating: php-mode-1.13.1/tests/template.php
user@mypc:~/ダウンロード$ sudo cp php-mode-1.13.1/php-mode.el /usr/local/share/emacs/23.3/site-lisp/
user@mypc:~/ダウンロード$ 
※Emacsを起動し以下のコマンドをEmacs上で実行
M-x : byte-compile-file
Input file: /usr/local/share/emacs/23.3/site-lisp/php-mode.el

【Emacs 23】17
Emacs 23以降ではパッケージ管理機能を使ってインストールすることも可能(→パッケージ管理)。
$ cd ~/download
$ wget http://sourceforge.net/projects/php-mode/files/php-mode/1.5.0/php-mode-1.5.0.tar.gz
$ tar -zxvf php-mode-1.5.0.tar.gz
$ open emacs-23.3/nextstep/Emacs.app
emacs上で
  1. M-x byte-compile-file
  2. ~/download/php-mode-1.5.0/php-mode.el
このコンパイル処理で生成されるphp-mode.elcをコピー
$ cp php-mode-1.5.0/php-mode.elc emacs-23.3/nextstep/Emacs.app/Contents/Resources/site-lisp
下記2行を~/.emacs.d/init.elに追記。
(autoload 'php-mode "php-mode" "Major mode for editing php code." t)
(setq auto-mode-alist (append '(("\\.php$" . php-mode)) auto-mode-alist))

ディレクトリエディタ

C-x dを入力するとディレクトリを聞かれる。ディレクトリパスの後にEnterを入力すると指定したディレクトリ内のファイルリストがディレクトリエディタモード(dired)で表示される。C-x C-f(ファイルやディレクトリを開くコマンド)で、指定したファイルがディレクトリであった場合も同じ。M-x term(ターミナル起動)などをしなくてもファイル操作などができる。Dired上でmkdir、gzipなどもできるらしい[18]

Diredのバッファは読み取り専用で文字挿入などを行うことはできない。入力された文字はDiredのコマンドとして解釈される。コマンドの中には処理対象とするものにフラグを付けたりするものもあれば、フラグが付いているファイルなどに対して何かのアクションを行うものもある。

コマンド一覧

コマンド 内容
C-x d Diredモードに入る
M-x dired
C-x C-f(指定したパスがディレクトリであった場合)
C-x n カーソルを下に移動
n
<スペース>
C-x p カーソルを上に移動。BSの場合、移動後の行に表示されたファイルに削除フラグが付いていた場合、削除フラグを外す(GNU Emacs 22.3.1 (i386-apple-darwin9.8.0, Carbon Version 1.6.0)同梱のヘルプではDELキーとなっていたが、実際はその動作をしたキーはBSだった。)
p
<バックスペース(BS)>
j 指定したファイル・ディレクトリにカーソルを移動
M-x dired-goto-file
d カーソルのある行に表示されているファイルを、削除対象ファイルとしてフラグを付ける。フラグのついたファイルの行頭には「D」の文字が表示される。
M-x dired-flag-file-deletion
u カーソルのある行に表示されているファイルから、削除対象ファイルとするフラグを外す
M-x dired-unmark
x フラグのついたファイルを削除する(expunging)。最初にフラグのついた対象ファイルリストが表示され、削除して良いかの確認を求められる。yesと答えれば削除が実行される。noと答えるか、C-gを入力すれば削除フラグはそのままでDiredに戻る。対象がディレクトリであった場合、中身が空であればファイルと同じように削除することができる。中身があった場合は通常削除できないが、dired-recursive-deletes変数の値をnon-nilにすれば中身があるディレクトリでも中身ごと消すことができる。
M-x dired-do-flagged-delete
# 自動保存ファイル(ファイル名の先頭と末尾が#となっているファイル)全てに削除フラグをつける
~ バックアップファイル(ファイル名の末尾が~となっているファイル)全てに削除フラグをつける
& Flag for deletion all files with certain kinds of names which suggest you could easily create those files again.
.(ピリオド) Flag excess numeric backup files for deletion. The oldest and newest few backup files of any one file are exempt; the middle ones are flagged.
% d 正規表現 <RET> ファイル名が指定した正規表現にマッチするファイルに削除フラグを付ける。

正規表現によるファイル名変更

以下の表現でファイル名変更ができる。正規表現が使えるが、現在カーソルのある行に表示されているファイルしか対象にせず、複数のファイルを一括処理できないようだが、それなら個別していしても手間は変わらない気がする。

% r (対象ファイル名)<RET> (変更後ファイル名)<RET>

例:pdb の後に任意の3文字があり、更にその後に rel_j.html が来るファイルに対して、rel の前に _(アンダースコア)を挿入する。 pdb090rel_j.htmlpdb090_rel_j.html など。

% r \(pdb...\)rel_j.html <RET> \1_rel_j.html <RET>

このコマンド実行後、置き換えますか? と聞かれるので、何らかの方法で表示中の全ファイルを対象にしてファイル名変更ができるように思うのだが方法が不明。

他アプリとの連携

ブラウザで表示する

C-c C-vで、編集しているファイルをブラウザで解釈して表示。 (X)HTMLモードのみ?

gauche関係

gauche処理にかける

  1. gaucheインタプリタ起動
    M-x run-scheme

    ※"Searching for program: no such file or directory, scheme"と表示されて起動できない時は以下の設定変更を行う

    1. M-x customize-group
    2. scheme
    3. "Scheme Program Name" の値を編集(Gaucheなら"gosh")
    4. "State"ボタンをクリックし"Set for Current Session","Save for future Sessions"をクリック

    参考文献・サイト:How do I get a scheme interpreter working inside Emacs? - Stack Overflow

  2. gaucheソースファイルを読み込み、評価したい部分にカーソルを置く。
  3. C-M-x

ファイル全体をgauche処理にかける

  1. 処理にかけたいファイルをあらかじめ開いておく(C-x C-f <RET> path&filename <RET>
  2. gaucheインタプリタ起動
    M-x run-scheme
  3. C-c C-l <RET>

領域選択

次の操作で、カーソルの直後にあるひとまとまりの式を切り取ったり、クリップボードにコピーしたりできます。

  1. C-M-<SPC>
  2. C-w(切り取り)、M-w(貼り付け)

実行可能スクリプトにする

スクリプトの1行目に以下の記述を行う。これによって、ファイル名を指定して実行するだけで、gaucheで処理される。

#!(gosh をフルパスで記述)

例えば、「#!/usr/local/bin/gosh」のように書く。

なお、goshの場所は以下のコマンドにより確認できる。

who gosh <RET>

各種設定

モード変更

M-x モード名で編集モードを変更できる。

モード名 内容 備考
html-mode (x)htmlモード ファイル中にxhtmlの宣言があればxhtmlモードになるよう。

メジャーモードをXHTMLに変更する方法

HTMLヘッダー部分のDOCTYPEにXHTMLであることを記述すれば自動的にXHTMLモードで開いてくれるみたい。拡張子は.htmlのままでOK。

ただ、逆にXHTMLの宣言がない文書を強制的にXHTMLモードで開くのは簡単ではないよう。 (スクリプト類で共通メニュー部分と個別コンテンツを結合して表示させている場合、XMLやDoctypeの宣言記述は共通メニュー部分にしか含まれないため、個別コンテンツを編集する際XHTMLモードとならず不便)

メジャーモードの指定は M-x [モード名]で行えるが、M-x xhtml-modeという指定はできない。これは、XHTMLモードがHTMLモードの一部で、ファイルを判定して自動的にモードを修正するようになっているため。その辺りの設定は MacOSX+Carbon Emacs 22.1.1 の場合、/Applications/Emacs.app/Contents/Resources/lisp/textmodes/sgml-mode.elに記述されている。このファイルを修正すれば常時XHTMLモードで起動することも可能かと思われるが、うまくいかない。

暫定対策として、ファイル中にHTMLコメントとして下記記述を入れておく(XML宣言の有無でXHTMLかどうかを判定しているようであるため)。これがあればXHTMLモードで起動できた。

<!--
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
	"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-->
    

参考サイト:

ターミナルの文字コード

M-x termでターミナルがemacs内で起動できるが、この文字コードの設定。utf-8にするには以下の通り~/.emacsに記述(ターミナルだけなら全部も要らない気がするけど)。

(set-language-environment "japanese")

(prefer-coding-system 'utf-8-unix)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(setq default-buffer-file-coding-systems 'utf-8)
    

参考文献・サイト:

三点リーダ(…)などの表示が化けるのを防ぐ

いつからか、Carbon Emacs(Mac用Emacs)で三点リーダ(…)の表示が中黒点に化けるようになった(GNU Emacs 22.3.1 Carbon Version 1.6.0 of 2010-01-10 on gs674-seijiz.localで確認)。これを解消するには「Mule-UCS」をインストールすればよいらしい[1]。Mule-UCSはEmacs(Meadow)でUnicodeの読み書きを可能にするモジュールのようなものらしい。2 を参考にインストールする。

1. Mule-UCSをダウンロードする
$ cd ~/download
$ wget http://www.meadowy.org/~shirai/elisp/mule-ucs.tar.gz
またはウェブブラウザを使ってダウンロード
2. ダウンロードしたtarballを解凍展開
$ tar -zxvf mule-ucs.tar.gz
またはMac OSのFinder上で上記ファイルをダブルクリック
3. 展開してできたフォルダ(mule-ucs-20061127-1)をMule-UCSにリネームして移動
$ mv mule-ucs-20061127-1 /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS
またはMac OSのFinder上で上記ディレクトリを移動
4. コンパイル
$ cd /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS
$ /Applications/Emacs.app/Contents/MacOS/Emacs -q --no-site-file -batch -l mucs-comp.el
$ cd lisp/jisx0213
$ /Applications/Emacs.app/Contents/MacOS/Emacs -q --no-site-file -batch -l x0213-comp.el
5. emacs設定ファイル編集

emacs設定ファイルに以下の記述を追記。記述場所は「(set-language-environment "Japanese")」より前。

(require 'un-define)
(require 'jisx0213)

...これでも直らない。コンパイル時にエラーが出ていたので、正常にコンパイルできていないのかもしれない。

$ cd /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS
$ /Applications/Emacs.app/Contents/MacOS/Emacs -q --no-site-file -batch -l mucs-comp.el
Loading subst-ksc...
Loading subst-gb2312...
Loading subst-big5...
Loading subst-jis...
Remove old byte-compiled files-----
Compiling 1st stage-----

In end of data:
mucs.el:590:1:Warning: the following functions are not known to be defined:
    mucs-setup-conversion, mucs-refresh-conversion
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/mucs.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/mucs-type.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/mucs-error.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/mucs-ccl.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/mccl-font.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/tbl-mg.elc

In transformate-list-structure:
trans-util.el:117:20:Warning: `error' called with 2 args to fill 0 format
    field(s)

In update-charset-id-table:
trans-util.el:169:11:Warning: variable assignment to constant
    `charset-id-table'
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/trans-util.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/txt-tbl.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/tae.elc

In toplevel form:
mule-uni.el:139:13:Warning: assignment to free variable
    `unicode-vs-mule-ucs-unicode-multichar-assoc'
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/mule-uni.elc

In ucs-representation-encoding-backend:
unicode.el:65:65:Warning: value returned from (logior (lsh (charset-id
    (char-charset char)) 16) (char-codepoint char)) is unused
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/unicode.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/utf.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/un-data.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/un-tools.elc

In unidata-read-until:
unidata.el:213:39:Warning: `error' called with 1 args to fill 0 format
    field(s)

In end of data:
unidata.el:312:1:Warning: the following functions are not known to be defined:
    char-to-ucs, ucs-to-char
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/unidata.elc
Compiling 2nd stage!!---
Loading unicode...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uascii.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-1.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-2.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-3.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-4.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-5.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-7.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-8.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-9.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-14.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-15.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uipa.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/ujisx0208.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/ujisx0212.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/ugb2312.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-1.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-2.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-3.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-4.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-5.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-6.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-7.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/ubig5.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uksc5601.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/ujisx0201.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/utis620.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uethiopic.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiscii.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/usisheng.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/ulao.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uviscii.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/utibetan.el (source)...
! This CCL interpreter has automatic EOL conversion facility.

In end of data:
un-define.el:933:1:Warning: the following functions are not known to be
    defined: find-charset, w32-regist-font-encoder
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/un-define.elc
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/usupple.el (source)...
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/un-supple.elc
$ cd lisp/jisx0213
$ /Applications/Emacs.app/Contents/MacOS/Emacs -q --no-site-file -batch -l x0213-comp.el
Loading subst-ksc...
Loading subst-gb2312...
Loading subst-big5...
Loading subst-jis...
Mule-UCS set up-----
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/mucs-comp.el (source)...
Remove old byte-compiled files-----
Remove ./lisp/mucs.elc
Remove ./lisp/mucs-type.elc
Remove ./lisp/mucs-error.elc
Remove ./lisp/mucs-ccl.elc
Remove ./lisp/mccl-font.elc
Remove ./lisp/tbl-mg.elc
Remove ./lisp/trans-util.elc
Remove ./lisp/txt-tbl.elc
Remove ./lisp/tae.elc
Remove ./lisp/mule-uni.elc
Remove ./lisp/unicode.elc
Remove ./lisp/utf.elc
Remove ./lisp/un-data.elc
Remove ./lisp/un-tools.elc
Remove ./lisp/unidata.elc
Remove ./lisp/un-define.elc
Remove ./lisp/un-supple.elc
Compiling 1st stage-----

In end of data:
mucs.el:590:1:Warning: the following functions are not known to be defined:
    mucs-setup-conversion, mucs-refresh-conversion
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/mucs.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/mucs-type.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/mucs-error.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/mucs-ccl.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/mccl-font.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/tbl-mg.elc

In transformate-list-structure:
trans-util.el:117:20:Warning: `error' called with 2 args to fill 0 format
    field(s)

In update-charset-id-table:
trans-util.el:169:11:Warning: variable assignment to constant
    `charset-id-table'
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/trans-util.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/txt-tbl.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/tae.elc

In toplevel form:
mule-uni.el:139:13:Warning: assignment to free variable
    `unicode-vs-mule-ucs-unicode-multichar-assoc'
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/mule-uni.elc

In ucs-representation-encoding-backend:
unicode.el:65:65:Warning: value returned from (logior (lsh (charset-id
    (char-charset char)) 16) (char-codepoint char)) is unused
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/unicode.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/utf.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/un-data.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/un-tools.elc

In unidata-read-until:
unidata.el:213:39:Warning: `error' called with 1 args to fill 0 format
    field(s)

In end of data:
unidata.el:312:1:Warning: the following functions are not known to be defined:
    char-to-ucs, ucs-to-char
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/unidata.elc
Compiling 2nd stage!!---
Loading unicode...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uascii.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-1.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-2.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-3.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-4.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-5.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-7.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-8.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-9.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-14.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiso8859-15.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uipa.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/ujisx0208.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/ujisx0212.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/ugb2312.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-1.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-2.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-3.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-4.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-5.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-6.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/u-cns-7.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/ubig5.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uksc5601.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/ujisx0201.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/utis620.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uethiopic.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uiscii.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/usisheng.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/ulao.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/uviscii.el (source)...
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/utibetan.el (source)...
! This CCL interpreter has automatic EOL conversion facility.

In end of data:
un-define.el:933:1:Warning: the following functions are not known to be
    defined: find-charset, w32-regist-font-encoder
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/un-define.elc
Loading /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/reldata/usupple.el (source)...
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/un-supple.elc
Compiling 1st stage-----
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/jisx0213/x0213-cdef.elc
Loading subst-ksc...
Loading subst-gb2312...
Loading subst-big5...
Loading subst-jis...

In end of data:
jisx0213/x0213-font.el:58:1:Warning: the function `w32-regist-font-encoder' is
    not known to be defined.
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/jisx0213/x0213-font.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/jisx0213/x0213-csys.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/jisx0213/x0213-util.elc
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/jisx0213/x0213-char.elc

In setup-iso-2022-jp-3-mcharset-environment:
jisx0213/x0213-mime.el:46:14:Warning: reference to free variable
    `mime-charset-coding-system-alist'
jisx0213/x0213-mime.el:46:14:Warning: assignment to free variable
    `mime-charset-coding-system-alist'
jisx0213/x0213-mime.el:54:23:Warning: reference to free variable
    `charsets-mime-charset-alist'
jisx0213/x0213-mime.el:54:57:Warning: assignment to free variable
    `charsets-mime-charset-alist'

In setup-iso-2022-jp-3-eword-environment:
jisx0213/x0213-mime.el:60:13:Warning: reference to free variable
    `eword-charset-encoding-alist'
jisx0213/x0213-mime.el:62:19:Warning: assignment to free variable
    `eword-charset-encoding-alist'

In setup-iso-2022-jp-3-mime-edit-environment:
jisx0213/x0213-mime.el:68:13:Warning: reference to free variable
    `mime-charset-type-list'
jisx0213/x0213-mime.el:70:19:Warning: assignment to free variable
    `mime-charset-type-list'
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/jisx0213/x0213-mime.elc
Compiling 2nd stage!!---
Wrote /Applications/Emacs.app/Contents/Resources/site-lisp/Mule-UCS/lisp/jisx0213/x0213-udef.elc

参考文献・サイト

  1. Emacs 22.1 で「…」が文字化けするので Mule-UCS を入れる - 暇つぶし
  2. Meadow3 に Mule-UCS をインストールする ハードなソフトの話/ウェブリブログ

日本語が簡体字フォントになってしまうのを防ぐ

Emacs 24.5 Mac版で、表題の問題が発生した。設定ファイル(Emacs 22の設定をそのまま流用)に以下の記述を追加[20]

    
;; 以下が Mac 用のフォント設定
(when (memq window-system '(mac ns))
  (global-set-key [s-mouse-1] 'browse-url-at-mouse)
  (let* ((size 14)
	 (jpfont "Hiragino Maru Gothic ProN")
	 (asciifont "Monaco")
	 (h (* size 10)))
    (set-face-attribute 'default nil :family asciifont :height h)
    (set-fontset-font t 'katakana-jisx0201 jpfont)
    (set-fontset-font t 'japanese-jisx0208 jpfont)
    (set-fontset-font t 'japanese-jisx0212 jpfont)
    (set-fontset-font t 'japanese-jisx0213-1 jpfont)
    (set-fontset-font t 'japanese-jisx0213-2 jpfont)
    (set-fontset-font t '(#x0080 . #x024F) asciifont))
  (setq face-font-rescale-alist
	'(("^-apple-hiragino.*" . 1.2)
	  (".*-Hiragino Maru Gothic ProN-.*" . 1.2)
	  (".*osaka-bold.*" . 1.2)
	  (".*osaka-medium.*" . 1.2)
	  (".*courier-bold-.*-mac-roman" . 1.0)
	  (".*monaco cy-bold-.*-mac-cyrillic" . 0.9)
	  (".*monaco-bold-.*-mac-roman" . 0.9)
	  ("-cdac$" . 1.3)))
  ;; C-x 5 2 で新しいフレームを作ったときに同じフォントを使う
  (setq frame-inherited-parameters '(font tool-bar-lines)))

Emacs再起動時、エラーメッセージがEmacsのコマンド出力に出ていたので、下記2行をコメントアウト。

;;(require 'un-define)
;;(require 'jisx0213)

フォントサイズが多少大きくなったが、ちゃんと日本語フォントになったよう。

パッケージ管理

Emacsのパッケージ管理機能を使うと、Emacs内で機能の追加削除などを行うことができる[27]。 Emacs 24以降ではこの機能が同梱されている。 Emacs 23では同梱されていないが、別途インストールすることで利用可能となる[28]。 MELPAというgithubで管理されているパッケージレポジトリも存在する[28]

Emacs 24+Mac 10.6.8で ~/.emacs.d/init.elに以下の記述を追加してEmacsを再起動する。

(require 'package)
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/"))
(package-initialize)

あとは、(1)メニューの[Options]-[Manage Emacs Packages]をクリック (2)インストールしたいパッケージ名の上にカーソルを移動してクリック (3)表示された別バッファ中の「Install」にカーソルを移動してクリック。以上の手続きでコンパイルなんかも自動的に実行してインストールしてくれる。

MELPAを入れるとphp-modeもインストールできた。

  1. [Options]-[Manage Emacs Packages]をクリック
  2. 「C-s melpa」で「melpa-upstream-visit」を探し、カーソルがその文字列上のどこかにある状態でクリック→このパッケージに関するバッファが開く
  3. 未インストール状態であればStatus行に「Available from melpa -- Install」と表示されている。この「Install」のどこかにカーソルがある状態でクリック→インストールされる
  4. 再度[Options]-[Manage Emacs Packages]をクリック
  5. 「C-s php-mode」でphp-modeが見つかるはず、上記と同様にしてphp-modeもインストール
  6. 念のためEmacs再起動
  7. これで拡張子が .php のファイルを開くと php-mode になった

Windows 8.1にて確認。

WindowsにおけるHOMEの場所

EmacsでC-x C-f ~/を実行すればHOMEの場所は分かる[29]。手元の環境で試したところc:/Users/ユーザ名/AppData/Roamingだった。

既定の文字コード設定

新規テキストファイルを作成した時、初期状態で適用される文字コードを指定するには、Emacs初期設定ファイル(HOME/.emacs.d/init.el)に以下の記述を行う[30]

【書式】
(set-default-coding-systems '文字コード+改行コード)

【例】UTF-8、Windows環境用改行コード(改行=Linefeed+Carriage Return)に設定
(set-default-coding-systems 'utf-8-dos)

文字コード関係

内容 操作
文字コードを指定してファイルを開く C-x RET x 文字コード RET C-x C-f
現在開いているファイルを別の文字コードで読み直す C-x RET c 文字コード RET C-x C-v RET
文字コードを指定してファイルを保存 C-x RET f 文字コード RET C-x C-s
文字コード指定文字
OS種別(改行コード) JIS Shift JIS EUC-JP UTF-8
UNIX (LF) junet-unix sjis-unix euc-japan-unix utf-8-unix
DOS (LF+CR) junet-dos sjis-dos euc-japan-dos utf-8-dos
Mac (CR) junet-mac sjis-mac euc-japan-mac utf-8-mac
現システム junet sjis euc-japan utf-8

Carbon Emacs 22ではAlt(Option)+¥でバックスラッシュが入力できていたが、Emacs 24.5.1ではC-¥なんてキーバインドはないよとおこられバックスラッシュが入力できなかった。正規表現検索・置換で¥をバックスラッシュの代わりとは思ってくれないため正規表現が書けなかったが、Emacs設定ファイル(~/.emacs.d/init.elなど)に以下の記述を行うことにより、パターン入力時に¥キーの入力でバックスラッシュが入力されるようになり、正規表現記述もできるようになった[25]

;; バックスラッシュが入力できない件への対策
(define-key global-map [165] [92]) ;; 165が¥(円マーク) , 92が\(バックスラッシュ)を表す

...そう思ったが、モードによっては依然バックスラッシュが入力できない。htmlモードが該当。基本モード(Fundamental)、PHPモードなどでは常時バックスラッシュ(逆に円マークが入力できない)。

Windows環境でディレクトリリストを表示するモード(diredモード)で文字化けを防ぐには、ファイル名コーディングをShift JISに設定すれば良い。具体的には、Emacs初期設定ファイルに以下の内容を記載する[31]

(prefer-coding-system 'utf-8-unix)	; 日本語入力のための設定
(setq default-file-name-coding-system 'shift_jis) ;diredで日本語file名出力

情報表示

全行数を表示

C-x l
Page has nnn lines (mmm + ooo)

文字リストを表示

[33]

M-x list-charset-chars
Charactor set: ascii
Characters in the coded character set ascii.
-----------------------------------------------------------------------
        0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
     0x	C-@	C-a	C-b	C-c	C-d	C-e	C-f	C-g	C-h	TAB	C-j	C-k	C-l	RET	C-n	C-o
     1x	C-p	C-q	C-r	C-s	C-t	C-u	C-v	C-w	C-x	C-y	C-z	ESC	C-\	C-]	C-^	C-_
     2x	 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/
     3x	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?
     4x	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O
     5x	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_
     6x	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o
     7x	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~	DEL

その他

ヘルプ

下記コマンドでマニュアル的文書が表示される。

M-x info

またC-x C-x C-hで各モードに応じたコマンドヘルプが表示される。

マニュアル?

マニュアル的文書の場所

ウインドウを半透明にする

Emacsの設定ファイル(~/.emacs.d/init.el または ~/.emacs.el)に以下の1行を追記する[7]

【書式】
(add-to-list 'default-frame-alist '(alpha . 透明度指定))

既定の透明度のみを指定する場合、透明度指定に0から100までの整数を指定する。0は完全透明、100は完全不透明を意味する。但し、透明度下限設定値(既定値は20)よりも小さな値は設定できない。

アクティブウインドウと非アクティブウインドウとの透明度を指定する場合、透明度指定に「(アクティブウインドウの透明度 非アクティブウインドウの透明度)」の形式で指定する。それぞれの透明度指定は上記既定の透明度指定の場合と同じく0から100までの整数で指定する。

uft-8のエンコードでマルチバイト文字を含む文書が保存できない

utf-8のエンコードでないと表示できない文字を含むテキストファイルを編集しても保存時エラーが出る問題に対処するには、以下の記述をEmacsの初期設定ファイル(~/.emacs.d/init.el)に追記する[8]

(set-language-environment 'utf-8)
(set-keyboard-coding-system 'utf-8-mac) ; For old Carbon emacs on OS X only
(setq locale-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(prefer-coding-system 'utf-8)

スクロール量の調整

スクロール量の調整方法について[10][11]

下書きバッファを再度開く

下書き(scratch)バッファを閉じてしまい、再度開きたい時は Ctrl-x, b, *scratch*, RET36

スクラッチに書いたS式を評価

スクラッチにS式を書き、そのS式のどこかにカーソルがある状態で C-M-x を入力すれば、ミニバッファに評価結果が表示される40

(font-family-list)
↓
("Al Bayan" "Al Nile" "Al Tarikh" "American Typewriter" "Andale Mono" "Arial" "Arial Black" "Arial Hebrew" "Arial Hebrew Scholar" "Arial Narrow" "Arial Rounded MT Bold" "Arial Unicode MS" ...)