編集

基本編集関数

サンプル

カーソル下の文字を得る

following-charを使う

(setq aa (following-char))

aaに文字コードが入る。例:「a」なら97、「b」なら98

コード表はここ。ここの10進の数字

部分文字列を得る

(substring 開始位置 終了位置) を使う

  ; 部分文字列を取り出す
  (setq aa "abcdefg")
  (setq bb (substring aa 2 4))		; => "cd"

バッファ内の文字列を得る

(buffer-substring 開始位置 終了位置) を使う

  ; 正規表現でマッチしたあとグルーピング#2でマッチした文字列を得る
  (setq aa (buffer-substring (match-beginning 2) (match-end 2)))

移動系関数

移動境界の検査 (p41)

bobp, eobp
ポイントがバッファの先頭、末尾にあるか検査し、t, nilを返す
bolp, eolp
ポイントが行頭、行末にあるかどうか検査し、t, nilを返す

相対移動

forward-char, backward-char
ポイントを文字単位で1つ前方、後方に進める

forward-line

ポイントを次の論理行に進める。引数を与えるとその数だけ移動。負の数は逆方向。ポイントは行の先頭にいく
forward-sexp, backward-sexp
S式単位に移動する。括弧なら何でもよい

絶対移動 (p43)

point
現在の位置のポイントを返す
mark
マーク位置のポイントを返す
region-beginning, region-end
ポイントをマーカーのうち小さい方の値を得る
point-min, point-max
バッファの先頭位置(末尾)のポイント値を返す
(goto-char ポイント値
ポイント値を持つ場所に移動する
(save-excursion 本体 .. )
入った時点のポイントなどを記憶し、抜けたときに、元いた場所に戻る
(goto-line 行番号)
指定した論理行に飛ぶ。バッファの最初の行を1行目とする
現在の論理行番号を得る
(setq cc (count-lines (point-min) (point)))
move-to-window-line
ウィンドウの先頭行を基準に指定行に移動。画面の先頭行は0, 引数を省略すると画面の中央。負は、画面の末尾から
beginning-of-line, end-of-line
ポイントを行頭、行末に移動する

編集系関数

削除系関数 (p64)

(delete-char 文字数 &optional kill フラグ)
ポイント位置から始まる文字を文字数分だけ削除
(delete-backward-char 文字数 &optional kill フラグ)
削除方向が逆
(delete-region 開始位置 終了位置)
2つの引数で指定した領域を削除
(kill-region)
2つの引数で指定いた領域を削除し、削除した文字列をkill-ringに追加する
(kill-line &optional 行数)
ポイントから行末までを削除
erase-buffer
カレントバッファの内容をすべて消去

挿入系関数 (p65)

(insert-char 文字 個数)
文字を個数だけ挿入する
(self-insert-commnad 個数)
押したキーそのものを挿入したいとき
insert : 文字列の挿入:バッファに挿入

改行は「\n」、「\」記号は「\\」と2つ重ねる

次のコードは現在のポイント位置に「改行 改行 \parbox{\parhaba}{%」を挿入する。

(insert "\n\n\\parbox{\\parhaba}{%")
concat : 文字列の結合
(concat "abc" "def")  ; ==> "abcdef"

置換 (p65)

(replace-match 新文字列 &optional 大文字小文字固定 リテラル)
直前の検索関数でマッチした部分全体を新しい文字列に置き換える

マーカー

ナローイング

リスト (p100)

リスト処理(その1)

(cons 要素 リスト
すでに存在するリストの先頭に要素を追加した新しいリストを返す
list
引数を要素とするリストを作成する
(car リスト)
リストの先頭の要素を取り出す。引数のリストそのものは変化しない
(cdr リスト)
リストの2番目以降の要素からなるリストを返す。引数のリストのそのものは変化しない
append
引数として与えられた任意個のすべてのリスト群からなるリストを新たに作る。リストどうしの結合に用いる
(equal オブジェクト1 オブジェクト2)
オブジェクト1,2の内容を比較し等価であればt、それ以外はnilを返す
eq
equalと同様に比較するが完全に同一オブジェクトの場合のみtを返す

split-string, nth, length

文字列の分割、リストの要素の数を知る、リストの要素を番号指定で取り出す

(defun test-nth ()
  "splitとnthのテスト"
  (interactive)
  (let (aa list len yy0 yy3 ppp)
    (setq aa "1st 2nd 3rd 4th")
    (setq list (split-string aa " "))
    (setq len (length list))
    (setq yy0 (nth 0 list))
    (setq yy3 (nth 3 list))
    (message "len=%d, yy0=%s, yy3=%s" len yy0 yy3)
    (sit-for 20)))
(setq book (nth 0 ppp))

出力は ==> len=4, yy0=1st, yy3=4th