[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
テキストの編集というと, text-mode でしょう.これは,M-x text-modeとします.
わざわざ書くほどの機能もありませんが,注意すべきことを書いておきます.
text-mode での段落区切りは空行 (改行だけの行) になります.
1 個目の段落です.
2 個目の段落です.
行頭にスペースがあっても段落にはなりません.
したがって, 2 個目の段落の青色のところ (スの場所) でM-q(M-x fill-paragraph) をしても,
1 個目の段落です. 2 個目の段落です. 行頭にスペースがあっても段落にはなりません.
となります.
たとえ
(setq-default tab-width 4) |
と設定していて,TABとしても 4 文字分のタブが挿入されるとは限りません.この理 由を少し詳しく説明します.
タブに関連した設定は「 tab-width 」と「 tab-stop-list 」があります.
まず,「 tab-width 」は既にある「タブ」をどのように表示するかの設定です.例えば,
(setq-default tab-width 8) |
とあれば,タブの部分が 8 文字分のスペースとして表示されます.ただし,これはあくま で表示上の問題なので,テキストは変更されません.
一方,「 tab-stop-list 」はタブキーの入力時の動作を設定します.
で,その前に,大前提の知識として, Emacs ではTAB キーを押すことは「タブを入 力すること」ではありません.タブを入力したければ,C-q TABとする必要があり ます.
では,タブとは何なのか.それは,「 tab-stop-list 」で設定された文字までカーソルを 移動することを意味します.
つまり,「 tab-stop-list 」のデフォルトは
(defcustom tab-stop-list '(8 96 104 112 120) |
となっていますので,TAB を何回か押すと, 8 , 16 , 24 文字目へとカーソルが移動 するのです.
これが,
(setq tab-stop-list '(2 4 6 8)) |
となっていると, 2 , 4 , 6 , 8 文字目にカーソルが移動します.
ちなみに, text-mode では直前の行に
This program is free software; you can redistribute it and/or modify
のような文章があれば,スペースの位置が「 tab-stop-list 」に設定されます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
text-mode では段落の区切りを認識させるために,空行を入れる必要があります.しかし, 行頭を字下げして段落の区切りとしたいこともあります.
そんな時には,M-x paragraph-indent-text-modeを text-mode のかわりに使うと便 利です.
これなら,行頭に paragraph-start で設定されている文字があれば,それは段落として認 識されます.
日本語であれば,
(setq paragraph-start '"^\\([ ・○<\t\n\f]\\|(?[0-9a-zA-Z]+)\\)")
|
のように全角スペースなども設定しておくと便利です.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
単純なテキストにまつわるいろいろなアイデアや使い方などのメモです.
○ 1 章 Meadow って何 Meadow とは...
という具合に行頭に「○」や「・」を付けて章を表すことがあります.しかし,文章が長 くなってくると,どの章がどこにあるのか訳がわからなくなってしまいます.
そこで,navi.elを使います.インストールされていれば, M-x call-naviで章の一覧が表示されますが,デフォルトでは,
1. Meadow とは
という書式にしか対応してません.
これを,
(setq navi-search-exp-text
"^\\([ \t]*[・●○]+.*\\)$")
|
と変えると,「○ Meadow とは」に対応できます.他の書式を使う場合には,「 [・● ○]+ 」の「 [] 」の中の部分を変更します.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
文章を書く時には,文字数や単語数,行数を知りたい時があります.そのための機能などを紹介します.
33.4.1 文字数,行数を数える標準機能 (2004/01/20) 33.4.2 文字数,行数を数えるコマンド (2004/01/20) 33.4.3 文字数を数える ― word-count (2003/06/27)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
お勧め度:★☆☆☆☆.少し使い難いかな.
文字数や行数を数えるための標準機能として, how-many と count-lines-region があります.
まず,M-x how-manyは指定した正規表現に一致したものの数を数える機能です.そのため,正規表現を正しく指定すれば,希望する文字の数だけを数えることができます.
正規表現については,以下のような正規表現が役に立ちます.
次に,行数については,M-=(あるいはM-x count-lines-region) で数えるこ とができます.これは,リージョンで選択し,そのリージョン間の行数を数えてくれます. ただし,改行だけの行も 1 行になります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
お勧め度:普段,あまり使わない機能.たまに使うのは,一番最後のもの.理由はなんと なく...
ネタ元:Meadow users ML
文字数や行数を数えるためのコマンドがあります.これらは,すべて範囲をリージョンで 指定して,実行します.そのため,編集しては,リージョンを指定し,と少し面倒です.
まずは,リージョン間の文字数を数えるコマンド.
(defun my-mojisuu (beg end) ;リージョンを指定して、 M-x my-mojisuu とする。 (interactive "r") ;リージョンの最初と最後の位置が beg と end に入る。 (save-excursion (save-restriction (narrow-to-region beg end) ;編集可能領域をリージョンに制限する。 (let (ch ch-id (ch-count 0)) (goto-char (point-min)) ;バッファの先頭へ (while (not (eobp)) ;バッファの最後でない間、 (setq ch (following-char)) ;現在位置の文字を ch に代入 (setq ch-id (nth 0 (split-char ch))) ;その文字の leading-charcter (if (eq 'japanese-jisx0208 ch-id) ;その文字が JIS x 0208 ならば (setq ch-count (1+ ch-count))) ;カウンタ ch-count に 1 を足す。 (if (eq 'katakana-jisx0201 ch-id) ;その文字が半角仮名でも (setq ch-count (1+ ch-count))) ;カウンタ ch-count に 1 を足す。 (forward-char 1)) ;次の文字へ進む。 (message "文字数は%d" ch-count) ;結果表示。 )))) |
次のは,リージョン間の行数と文字数を数えるコマンドです.
(defun wc-region (start end) (interactive "r") (save-excursion (save-restriction (let ((c 0) (l 0) (w 0) (in-word nil) c-after) (goto-char start) (while (< (point) end) (setq c-after (char-after (point))) ; no need (point) if emacs 20 (if (= c-after ?\n) (setq l (1+ l))) (if (or (= c-after ?\n) (= c-after ? ) (= c-after ?\C-i)) (if in-word (setq w (1+ w) in-word nil)) (setq c (1+ c) in-word t)) (forward-char)) (message (format "%d lines, %d words, %d characters" l w c)))))) |
これも行数と文字数を数えるコマンドです.
(defun my-count-lines-region (start end) (interactive "r") (save-excursion ;;これと (save-restriction ;;これは オマジナイ。 (ちゃんと調べましょう (爆)) (let ((lf-num 0)) ;;改行文字の個数用、初期化している。 (goto-char start) ;;指定領域の先頭に行く。 (while (re-search-forward "[\n\C-m]" end t) ;;改行文字のカウント (setq lf-num (+ 1 lf-num))) ;;(つまり、 search できる度に 1 足す) (message "指定領域には%d 文字 (除改行文字) 、%d 行、%d 文字 (含改行文字) ある。" (- end start lf-num) (count-lines start end) (- end start)))))) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
お勧め度:★★★☆☆.文字数が気になる人へ.これもたまに使ってます.さっきの関数 とは違って,リージョンを使用していない点が使いやすい.
http://www.taiyaki.org/elisp/word-count/src/word-count.el
21.7.1 文書整形 (機種依存文字の削除) ― text-adjust (2003/06/27)と同じ作者による elisp. M-+を押したところからカーソルがあ る位置までの文字数などをカウントしてくれます.リージョンを使用していないので,リ アルタイムで文字数などが表示され,便利です.
インストールはロードパスの通ったことろに置いて, 以下の設定を入れるだけです.
(autoload 'word-count-mode "word-count" "Minor mode to count words." t nil) (global-set-key "\M-+" 'word-count-mode) |
使い方はM-+で, マイナーモードである word-count がオンになります. すると, モードラインに文字数などが表示されます.
ただし, M-+を押した地点と現在カーソルがある地点との間の文字のみが対象になってますので, ご注意を.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacs の取り消しはとても便利です.リージョン内のテキストだけを取り消しすることも できるのです.
C-/で取り消しができることは Meadow を使っているなら,誰でも知っているでしょ う.しかし,取り消しを使う時は,普通に取り消しをしたい時だけとは限りません.
例えば,長い文章を書いていて, 1 段落目と 2 段落目を編集したとします.ここで, 2 段落目を変更後, 1 段落目の変更を取り消したいと思ったとします.
普通のエディタであれば,どうやってやりますか?
2 段落目を一度別に保存しておき,取り消す必要のないところを延々と取り消し,その後, 1 段落目を変更するといった作業をしたことはありませんか?
これは非常に無駄で馬鹿馬鹿しい作業です.
しかし, Emacs ではリージョンで選択し,C-/とするだけで,選択した範囲内の変 更のみを取り消しできるのです.
redoは undo を上書きしているので、これを使っているとリージョン内のテキ ストのみ取り消すことはできません。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
undo はC-/できますが, その取り消しはできません. そこで, redo というパッケージが便利です
http://www.wonderworks.com/download/redo.elから, ダウンロードしてロードパ スの通ったところに置き, 以下を.emacs に追加します
キーバインドは適当に変更してください. M-/がわかりやすいと思ったんだけど, これは dabbrev が使ってるんですよねぇ. . .
(require 'redo) (global-set-key meadow_text,"\C-]" 'redo) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
kill-line をバッファ端で実行すると直前の行を削除できます.
kill-line をバッファの最後で実行してもメッセージがでるだけで何も起こりません.
バッファの最後で kill-line を実行すると,直前の行を削除できます.
以下を.emacs に追加します.
(defadvice kill-line (around beg-of-line-before-kill-line activate) (save-restriction (widen) (if (= (point) (point-max)) (if (= (point) (line-beginning-position)) (progn (previous-line 1) (recenter)) (beginning-of-line))) ad-do-it)) |
普通にC-kとするだけです.これで,現在行を削除できなくなると,直前の行を削 除するようになります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
たくさんの編集を行った後で,あの時点まで戻したいという時, undo を何度も行う必要が あり,かなり面倒です.
編集が一区切りとなった時点で,その時点を記憶させておくことができます.これで,そ の後で,編集を行ってもすぐに記憶させた時点に戻ることができます.
undo-group.elをダウン ロードし,ロードパスの通ったところへ置きます.
以下を.emacs に追加します.
(require 'undo-group) |
M-x undo-group-boundaryで現時点を記憶させることができます.そして, M-x undo-groupで undo ができます.
M-x undo-group-boundaryを何度か行うと,今記憶したものは 1 番目, 1 つ前のもの は 2 番目の状態という風にどんどん記録されていきます.
これで, 2 グループ分の undo をしたいなと思ったら,C-u 2 M-x undo-groupで戻す ことができます.
undo の状態を保存しているのは「 buffer-undo-list 」という変数です.この Elisp はこ れをうまく用いています.
「 buffer-undo-list 」は通常の編集を行うと変更され,その情報をもとに通常の undo も 行われています.
そのため,適当なところでM-x undo-group-boundaryにより,記録しておいても, 場合によっては意図したように戻らないこともあります.
何かの関数が実行された時点で,記録するようにするには以下のようにします.関数 「 find-file-noselect 」の部分を適当なものに変えると,便利になるかもしれません.
(defadvice find-file-noselect (after advice-by-undo-group activate) (if buffer-undo-list () (undo-group-boundary))) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
テキストを
す | お | 強 | い | す | 病 | な | 書 | せ | だ | は | 日 | こ | ||
゜ | 仕 | い | は | よ | ん | い | き | ん | と | り | 本 | ん | ||
着 | 文 | 西 | ゜ | で | な | が | か | 思 | 縦 | 語 | に | |||
せ | 化 | 欧 | あ | い | ん | 出 | ? | い | 書 | は | ち | |||
で | の | の | る | ま | て | 来 | 縦 | ま | き | や | は | |||
` | ゜ |
のように縦書きに変換できます.
tategaki.elをダウンロードし,ロー ドパスの通ったところへ置きます.
以下を.emacs に追加します.
(require 'tategaki) |
テキストをリージョンで選択し,M-x tategaki-regionとすると,縦書きになりま す.M-x tategaki-region-htmlで縦書きの HTML を出力できます.
作者様のページは消えてしまっているようです.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
重複する行を削除できる Elisp の紹介.
重複する行を削除することができます.無駄に入っている空行などを削除できます.
uniq.elをダウンロードし て,ロードパスの通ったところへ置きます.
以下を.emacs に追加します.
(load "uniq")
|
適当な例ですが.
コメント コメント これは,重複する行を削除する Elisp です. コメント
となっている部分を,リージョンで選択して,M-x uniq-regionとすると,
コメント これは,重複する行を削除する Elisp です. コメント
となります.M-x uniq-remove-dup-linesとすると,
コメント これは,重複する行を削除する Elisp です.
となります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
フェイスにより,動作を変える Elisp の紹介.
CSS や HTML など, Meadow にはそのファイルの編集に適したモードが多数用意されてい ます.そして,これらのモードは関数やコメントなどを分かりやすく色付けしてくれます.
しかし,色をつけてくれるだけで,コメント部分だろうと,通常の関数部分だろうと動作 は変わりません.
そのため,コメントは右端で自動的に折り返して欲しいけど,プログラムは勝手に折り返 して欲しくないと思ってもそのようなことはできません.
カーソル位置のフェイスに応じて,設定を実行することができます.
これにより,コメント部分でのみ右端で折り返すといったことが可能になります.
tmmofl.elをダウンロード し,ロードパスの通ったところへ置きます.
以下を.emacs に追加します.
(require 'tmmofl) |
M-x tmmofl-mode でオンにします.デフォルトではコメントで auto-fill をオン, それ以外でオフになっています.
試すためには,コメントの記号を書き,適当に日本語を入力してみてください.右端で折 り返されるはずです.
試してみても折り返されなければ,カーソル位置のフェイスを確認してください.カーソ ル位置がコメントのフェイスの上になければいけません.行末にカーソルがあると,コメ ントフェイスにならず,動作しないことがあります.
「フェイスの上にカーソルがある状態」にするというのに,多少戸惑うかもしれませんが, 慣れれば非常に便利だと思います.
デフォルトでは以下のようになっています.
(setq tmmofl-default-actions '( ;; コメントフェイスの時 (font-lock-comment-face (lambda() (auto-fill-mode 1) ) ;; コメントフェイスでない時 (lambda() (auto-fill-mode 0))))) |
これを編集すれば,変更できます.構造は
(setq tmmofl-default-actions '( (font-lock-comment-face ;; ここにフェイス名 ;; lambda の中に実行したい設定を書く ;; 最初にあるのが,指定したフェイスの時の設定 (lambda() (auto-fill-mode 1) ) ;; 後にあるのが,指定したフェイスでない時の設定 (lambda() (auto-fill-mode 0))) ;; ここまでが一固まり ;; 他のフェイスでも設定したい時には, ;; 同じように書いていくだけでいい (font-lock-doc-face (lambda() (auto-fill-mode 1) ) (lambda() (auto-fill-mode 0))) ;; ここまでが一固まり )) |
となっています.フェイス名については15.3.2 フェイス - 文字の色, 背景色, イタリック属性等の設定 (2004/01/15)が参考になります.
モード毎に設定したい場合は,以下のように「 tmmofl-モード名 (major-mode の値)- actions 」という変数に定義します.これがあると,デフォルトの方は無視され,こちら が使われます.
(setq tmmofl-emacs-lisp-mode-actions '( (font-lock-comment-face ;; コメントフェイスの時 (lambda() (progn (auto-fill-mode 1))) ;; コメントフェイスでない時 (lambda() (progn (auto-fill-mode 0)))) (font-lock-string-face ;; 文字列のフェイスの時 (lambda() (abbrev-mode 0)) ;; 文字列のフェイスでない時 (lambda() (abbrev-mode 1))))) |
この時指定する関数はトグルする関数ではなく,オン/オフする関数でなければいけませ ん.というのも,トグルするような関数だと,編集中にカーソルを移動するたびにオン/ オフを繰り返してしまうからです.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
ある文字をある文字に変換するものを紹介します.
33.12.1 テキストを rot13 などで変換 (2004/01/20) 33.12.2 文字の整形 (2004/12/08)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
テキストを rot13 などで変換できます.
からコピーして, msgcodes.el としてロードパスの通ったところへ置きます.
以下を.emacs に追加します.
(require 'msgcodes) ;; キーバインドを追加 (msgcode-init-keys) |
リージョンを選択後,以下のキーを入力することで変換を行うことができます.参考に emacs を変換した例を各関数の最後に書いておきます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
英単語の1文字目を大文字にするなどの処理を簡単に行うことができます.
Emacs Lisp リファレンスマニュアル
Meadowの標準機能ですので,通常のMeadowで利用できます.もちろん設定済みMeadowでも 利用できます.
不要です.
以下,画面例は
GNU Emacs is "free software".
を変換した時の例です.
リージョンを選択し,M-x downcase-regionとします.これで,選択範囲の文字が すべて小文字になります.
M-x downcase-word で現在カーソルがある部分の単語のみを変換できます. C-u 2 M-x downcase-word のように引数を与えると,カーソル以降の2単語を対象に 変換を行います.
gnu emacs is "free software".
リージョンを選択し,M-x upcase-regionとします.これで,選択範囲の文字が すべて大文字になります.
M-x upcase-word で現在カーソルがある部分の単語のみを変換できます.C-u 2 M-x upcase-word のように引数を与えると,カーソル以降の2単語を対象に変換を行い ます.
GNU EMACS IS "FREE SOFTWARE".
リージョンを選択し,M-x japanese-zenkaku-region とします.
GNU Emacs is ″free software″。
リージョンを選択し,M-x japanese-hankaku-region とします.
GNU Emacs is "free software".
カタカナが含まれていると,半角カナになったり,全角の英数を半角にできたりします.
GNU Emacs is "free software".
リージョンを選択し,M-x capitalize-regionとします.これで,各単語の1文字目 のみが大文字になります.M-x capitalize-word で現在カーソルがある部分の単語 のみを変換できます.C-u 2 M-x capitalize-word のように引数を与えると,カー ソル移行の2単語を対象に変換を行います.
Gnu Emacs Is "Free Software".
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
入力した文字をいろいろな配置で表示できます.
spiral.el
Meadow Memo は Mead o 報を提供し w 情 ま な々色るす関に
のように入力した文字を配置してくれます.
ちなみに,この文は「 Meadow Memo は Meadow に関する色々な情報を提供します」と入力 してみました.
インストールと設定をしていません
spiral.el をダウンロードしてロード パスの通ったところに置きます,.
以下を .emacs に追加します
(autoload 'spiral "spiral" nil t)
|
M-x spiral と入力します.すると,ミニバッファに
String:
と表示されますので,ここで,入力したい文を入力します.
最後にRET を入力すると,その文を様々に配置して表示してくれます.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |