IT pass HikiWiki - [itbase2021]エディタ emacs Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}

= emacs とは

emacs は Unix/Linux の代表的なエディタの一つです.
また, Windows や macOS に対応するバージョンも用意されています.
機能が豊富で, 様々にカスタマイズすることも可能です.
今後の実習では, たくさんのプログラムを作るためにエディタを使うことになります.

emacs の特長は次の通りです.

* 多機能
* 様々にカスタマイズ可能

ここでは, そんな emacs の使用法を学習していきましょう.


= emacs のキーボード操作の表記

GUI 環境での emacs では, マウスを使って各種操作を行うことができます.
しかし, キーボードで様々な操作を行うこともできます.

以下では, emacs で行うキーボード操作を下のように表記します.

* [Ctrl] を押しながら x を押す

    C-x

* [Ctrl] を押しながら x を押し, [Ctrl] を離さずに押したまま c を押し, [Ctrl] を離す

    C-x C-c

* [Ctrl] を押しながら x を押し, [Ctrl] を離してから k を押す

    C-x k

* [Esc] を押してから x を押す

    M-x


= コマンドキャンセル

上記の例にも挙げた

  C-x C-c

のような複数の操作を行うとき, 例えば C-x まで打ったところで
間違いであることに気づいた場合には, C-g を押すとキャンセル
できます.

訳が分からなくなったらひとまず C-g を押すというのは有効な方法です.


= ファイルオープン/クローズ

== ファイルオープン (起動)

emacs を使うには, 次のように入力します.

$ emacs [ファイル名]

引数のファイル名は既に存在するファイル名, あるいはこれから作りたい新規のファイル名を入力します. ファイル名を省略した場合, バッファのみが準備され, 保存時にそのファイル名を決定することになります.

GUI 環境では, 上の操作によって emacs のウィンドウが起動します.
このとき, コマンドを入力したターミナルは, emacs の処理を行っているため,
コマンドを受け付けなくなってしまいます.
これを避けるためには, コマンドの最後に & を付けます.

$ emacs [ファイル名] &

このとき, emacs の処理はバックグラウンドで行われるため, ターミナルが
コマンドを受け付けることができます.

また, GUI 環境では emacs のウィンドウが起動しますが, これでは処理が「重い」かもしれません.
このときには, nw オプションを付けて

$ emacs -nw [ファイル名]

とするとウィンドウを起動せずに, ターミナルの中で emacs が起動します.
この時には軽快に動作するでしょう.
ただし, この時にはそのターミナルで別のコマンドを実行することはできません (少なくともこのままでは).



== マルチウィンドウの解除

情報基盤センターの計算機では, emacs の設定のミス(?)によって, 起動時に
マルチウィンドウ (上下二つの領域) になっています.
このままでは, 編集に使える領域が狭くなってしまいますので,
以下の操作によってマルチウィンドウを解除することをお勧めします.

  C-x 1

この操作により, 編集領域が一つになります.


== ファイルクローズ

  C-x C-c

これはファイルを保存して終了することを意味します.
もしファイルが変更されていれば, emacs ウィンドウの左下に

  Save file XXX ? (y, n, !, ., q, ...)

と確認を求められるでしょう.
保存してよければ y を押しましょう.
保存せずに終了するならば n を押しましょう.
この時はさらに

  Modified buffers exist; exit anyway? (yes or no)

と確認されますので, yes と入力しましょう.

別のファイルに内容を保存して終了するには,

  C-x C-w

と入力し, 左下の

  Write file:

に続いてファイル名を入力します.


= emacs の操作色々

ここでは, emacs で使用するキーボード操作をまとめています.
これらに慣れるには使ってみるしかありません.
しかし, まずはどんな操作ができるのか, 項目を上から下まで眺めてみてください.
その上で, 下にある「練習」をやってみましょう.

== 終了, 保存

  # RT
  C-x C-c, ファイルを保存して終了
  C-x C-s, ファイルを保存
  C-x k  , ファイルを閉じる (編集を保存していない場合には確認される)
  C-x C-w, 別名のファイルに保存

== 別のファイルを開く

  # RT
  C-x C-f の後にファイル名を入力, 別のファイルを開く

== 操作のキャンセル

  # RT
  C-g, 操作のキャンセル

== カーソルの移動

  # RT
  C-b, 1文字左にカーソル移動(十字キーの「←」でも良い)
  C-f, 1文字右にカーソル移動(十字キーの「→」でも良い)
  C-n, 1文字下にカーソル移動(十字キーの「↓」でも良い)
  C-p, 1文字上にカーソル移動(十字キーの「↑」でも良い)
  C-a, 行頭にカーソル移動
  C-e, 行末にカーソル移動
  M-<, ファイルの先頭にカーソル移動
  M->, ファイルの最後にカーソル移動
  M-x goto-line の後に行番号を入力, 指定した行に移動

== 画面位置の変更

  # RT
  C-v, 1 画面後ろへスクロール
  M-v, 1 画面前へスクロール
  C-l, カーソル位置が画面の中央になるようにスクロール

== 文字削除

  # RT
   delimiter = %

  C-d% カーソル位置の文字を1文字削除
  C-k% カーソルのある位置から行末までを削除
  C-[space]% 削除する領域の先頭をマーク *下の注意文参照*
  C-w% マークした個所からカーソルの位置までを削除

* 注意

  Mac では C-[space] が別のショートカットに割り当てられており, emacs に C-[space] が受け付けられない.
  解除方法は, "Mac" "emacs" "C-space" 等のキーワードで検索すると解説ページを見つけることができる.
#例えば((<ここ|URL:http://d.hatena.ne.jp/ux00ff/20130128/1359332210>)).

C-k および C-w で削除 (カット) された内容はキルリングと呼ばれる
一時的な保存領域に送られます.
キルリングの内容は, C-y を押すことでペーストすることができます.
また, C-k を繰り返すことで, 複数の行を一度にキルリングに収めることもできます.

== コピーアンドペースト

  # RT
   delimiter = %

  C-[space]% コピーする領域の先頭をマーク
  M-w% マークした個所からカーソルの位置までをコピー
  C-y% ペースト

== アンドゥ(取り消し)

  # RT
  C-x u, 直前の変更を取り消す

== 検索

  # RT
  C-s, 順方向 (下に向かって) に検索
  C-r, 逆方向 (上に向かって) に検索

== 置換

  # RT
  M-x replace-string [Enter] の後に置換される文字列と置換する文字列を入力: 置換
  M-x query-replace [Enter] の後に置換される文字列と置換する文字列を入力: 置換するかどうか確認しながら置換

== 別ファイルの読込

  # RT
  C-x i の後にファイル名を入力, カーソル行の下にファイルを読み込んで挿入


= 練習

それでは実際に emacs を使ってみましょう. 以下の
((<URL:#[練習1]>)), ((<URL:#[練習2]>)), ((<URL:#[練習3]>)), ((<URL:#[練習4]>)), ((<URL:#[練習5]>)) をやってみてください.

== [練習1]

適当な文章を書き込んだファイルを emacs をつかって実際に作り,
rensyu.txt というファイル名で保存してみましょう.

* 文例

  One of the most primordial questions is "Why is this planet to
  be the Earth?" In order to answer this fundamental question,
  people in the Department of Planetology in the Kobe University
  are aiming at comprehensive understanding of the evolution of
  the Earth, planetary and solar systems. The method of our
  research includes theoretical analysis, observations,
  laboratory experiments, and computer simulations. By making
  full use of these methods, various processes occurring at
  spaces from the center of the Earth to the edge of the solar
  system are investigated.

* emacs を使ったテキスト作成

$ emacs rensyu.txt & <-- rensyu.txt という名前の新規ファイルを emacs で開く
     ...              <-- 編集
     ...


* ファイルの内容の確認

以下のコマンドで書き込んだ内容が表示されましたか? 表示されれば OK です.

$ cat rensyu.txt


== [練習2]

先ほど編集したファイルを emacs で開いて, 下のように編集してみましょう.
編集には下にある「emacs の操作色々」の内容が役に立つかもしれません.

編集内容:
* "the" を検索し, 文章中に何回含まれているか数える.
  * 目で見て数えることはできるが, 検索の練習
* "the" を "za" に置換する.
* "The method of our research ..." の文をコピー&ペーストして 5 回繰り返す.
* どこかの 1 行 (例えば 3 行目) を削除する.
* 別のファイル名 (rensyu2.txt) で保存する.
* etc...

$ emacs rensyu.txt     <-- [練習1] で作成した rensyu.txt を emacs で開く
     ...                <-- 適宜, 操作・編集してみましょう
     ...

以下のコマンドで変更した内容が表示されましたか? 表示されれば OK です.

$ cat rensyu2.txt

どうですか? うまく作成できましたか?


== [練習3]

既に書いたように情報基盤センターの emacs では, 設定のミス(?)によって起動時にマルチウィンドウに
なっています. emacs の設定ファイルを編集することで, 起動時にシングルウィンドウになるように
してみましょう.

個人の emacs の設定のためのファイルは ~/.emacs.d ディレクトリに収められることになっています.
今回は, その中にある基本的な設定を行うファイル, init.el, を編集します.
(このファイルやディレクトリ .emacs.d は存在していないかもしれません.
自分のホームディレクトリにファイルやディレクトリがない場合には新たに作成してください.)

  $ emacs   ~/.emacs.d/init.el  &

マルチウィンドウになって起動しますので, C-x 1 によってウィンドウを一つにしましょう.

ファイルの下から 6, 7 行目の

  (require 'tex-site)
  (require 'tex-jp)

を下のように変更します (行頭に ";" を挿入します)

  ;(require 'tex-site)
  ;(require 'tex-jp)

編集できたら次に, ファイルの最後に下のように追記しましょう.

  (setq inhibit-startup-message t)

追記できたら, C-x C-c で保存して終了しましょう.

これで次に emacs を起動した時にはウィンドウが一つになっています.

  $ emacs &


なお, 逆の言い方をすると, emacs ではマルチウィンドウにすることによって, 複数のファイルを
同時に編集することもできます.
興味があれば, emacs, マルチウィンドウ などのキーワードで調べてみると良いでしょう.


== [練習4]

Unix/Linux コマンドの回では, alias でコマンドに別名を付けることを学びました.
しかし, コマンドラインで alias するだけでは, ログインしなおしたときや
別のターミナルでは設定が戻ってしまいます.
それを避けるためには, 設定ファイルに alias を書いておきます.

現在の環境の設定ファイルは, ホームディレクトリにある .bash_profile と .bashrc です.
まず, これらのファイルがホームディレクトリにあるかどうか確認してみましょう.
(情報基盤センターの初期設定では, これらのファイルはないかもしれません.)
(macOS では .zshrc かもしれません.)

  $ ls -a
  ...   .bash_profile  .bashrc   ...

.(ドット) で始まる名前のファイルは, ls に -a のオプションを付けないと
表示されないことを思い出してください.

もしそれらのファイルが既にあれば, それを編集しましょう.
もしなければ新しく作りましょう.

では, emacs を使って, まず .bash_profile に下の設定を書き加えましょう.
(もし .bash_profile が既に存在していて, 同じような行があれば, 新たに
書く必要はありません.)
(macOS では .zshrc かもしれません. 以下, 適宜読み替えてください.)
emacs で .bash_profile を開きます.

  $ emacs .bash_profile &

このファイルの中には, 下の 1 行を書きます.

  . ~/.bashrc

書き終わったら保存して終了します.

次に, emacs を使って, .bashrc に alias の設定を付け加えてみましょう.
emacs で .bashrc を開きます.

  $ emacs .bashrc &

そしてファイルの最後に下の行を書きましょう.

  alias rm='rm -i'
  alias mv='mv -i'
  alias cp='cp -i'

書き終わったらファイルを保存して終了しましょう.

なお, mv と cp にも -i オプションがあります.
これらのオプションを付けると, それぞれ,
移動 (mv) およびコピー (cp) するとき, 移動/コピー先に同じ名前の
ファイルがある場合に本当に上書きしてよいのかどうかを確認します.

これで準備ができましたが, 今はファイルに設定を書いただけで, 設定が
読み込まれていないため, 設定が有効になっていません.
新しいターミナルを立ち上げてみましょう.

ではファイルを削除してみましょう.

  $ ls
  $ touch hoge.txt                 <- 空のファイル hoge.txt を作成する
  $ ls
  $ rm hoge.txt
  rm: remove regular empty file 'hoge.txt'?

ファイルを削除するかどうか確認されるようになりました.

または, 下のようにすることでコピー(や移動)についても確認できるでしょう.

  $ ls
  $ touch hoge1.txt hoge2.txt     <- 空のファイル hoge1.txt hoge2.txt を作成する
  $ ls
  $ cp hoge1.txt hoge2.txt
  cp: overwrite 'hoge2.txt'?

これで大事なファイルを間違って消す (上書きする) ことが (ある程度) 回避できます.

また, .bash_profile と .bashrc に設定を書いたことで, 次に新しいターミナルを立ち上げたときや
次にログインした時には上の設定が自動的に適用されていて, ファイルの
削除のとき, あるいは mv, cp によって上書きするときには常に確認されるように
なります.


== [練習5]

emacs で, 自分が知っている・考える地球の特徴を文章としてまとめましょう.
日本語でも英語でも構いません.
ただし, 1 行あたりの文字数を揃えて改行してください. (英語の
場合には単語の途中で改行してはいけません. 揃えた文字数に達
しないところで改行してください.)

* 文例

  地球は太陽系にある 8 つの惑星の一つであり, ...


= 参考資料