Emacs org-modeを使ってみる: (3) 表の編集

このエントリーをはてなブックマークに追加

今回は表の編集について,使い方をまとめてみる.
なおUbuntu 8.04 LTSとEmacs22上で, org-6.34c (2010年1月10日リリース)の利用を前提にしている.

表の編集

org-modeの機能で驚くことは多いが,表の編集もその一つだ.
なお,以下で説明する機能の多くは, text-modeなどの他のモードでも「M-x orgtbl-mode RET」として, orgtbl-modeをマイナーモードにすることで利用可能になる.
また,日本語入力時に表が崩れる場合は,以下のパッチを当てておく.

表の入力

表は「|」で区切ってデータを入力していく.「 」はカーソル位置を示す.

  |バス|200| 

行の最後で TAB をタイプすると,整形されて次の行に移る.

  | バス | 200 |
  |      |     |

以下は,データを入力するたびに TAB をタイプする. TAB をタイプするごとにきれいに整形される!

  | バス   |   200 |
  | 電車   |   160 |
  | 新幹線 | 15000 |
  |        |       |

横線の入力には「|-」で始まる行を入力する.

  |- 
  | バス   |   200 |
  | 電車   |   160 |
  | 新幹線 | 15000 |
  |        |       |

TAB をタイプすると,横線が入力される!

  |--------+-------|
  | ス   |   200 |
  | 電車   |   160 |
  | 新幹線 | 15000 |
  |        |       |

あるいは「C-c -」で現在の行の下に横線が引かれる.

行や列の移動

  |--------+-------|
  | ス   |   200 |
  | 電車   |   160 |
  | 新幹線 | 15000 |

上の状態で,「M-DOWN」をタイプすると行が下に移動する.

  |--------+-------|
  | 電車   |   160 |
  | ス   |   200 |
  | 新幹線 | 15000 |

「M-UP」,「M-LEFT」,「M-RIGHT」は同様に行の上への移動,列の左右の移動である.

インポート

カンマ区切りやタブ区切りでデータが並べられた領域を, transient-mark-modeでリージョンとして選択して,「C-c |」をタイプすると 表に変換できる.
たとえば,以下で「昼」の位置で「C-SPC C-SPC」をタイプし,「1000」の右にカーソルを移動する.

昼食,500
夕食,1000

「C-c |」をタイプすると以下のように表に整形される.

 | 昼食 |  500 |
 | 夕食 | 1000 |

なお,ファイルからのインポートは「M-x org-table-import RET」を用いる.

エクスポート

表の場所で「M-x org-table-export RET」とタイプして,ファイル名を指定した後,以下の形式でエクスポートできる.

orgtbl-to-tsv タブ区切りのテキスト形式
orgtbl-to-csv カンマ区切りのテキスト形式
orgtbl-to-html HTML形式
orgtbl-to-latex LaTeX形式

orgtbl-mode

マイナーモードのorgtbl-modeでも,行や列の移動を行いたければ以下のように設定する.必要に応じて,他のキーの設定も追加する.

(add-hook 'orgtbl-mode-hook (function (lambda ()
  (define-key orgtbl-mode-map [?\e (return)] 'org-meta-return)
  (define-key orgtbl-mode-map [?\e (left)]   'org-metaleft)
  (define-key orgtbl-mode-map [?\e (right)]  'org-metaright)
  (define-key orgtbl-mode-map [?\e (up)]     'org-metaup)
  (define-key orgtbl-mode-map [?\e (down)]   'org-metadown)
)))

主なキーバインドのまとめ

キー 処理
TAB 次の欄へ移動.同時に表を整形
C-c C-c 移動せずに表を整形
C-c - 現在行の下に横線を挿入
M-UP 行の上への移動
M-DOWN 行の下への移動
M-LEFT 行の左への移動
M-RIGHT 行の右への移動
M-S-UP 行を削除
M-S-DOWN 行を挿入
M-S-LEFT 列を削除
M-S-RIGHT 列を挿入
M-RET 入力欄を分割