3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SICP のために Emacs の環境を整えた

Last updated at Posted at 2024-05-31

SICP のために Emacs の環境を整えた

Emacs をやるならなんか目標がほしいなという思いつきで環境構築。メモには org-mode を使う。

テキストは真鍋訳

Youtube に MIT の講義があったので興味がある方はどうぞ

Github には SICP の解答例やライブラリなどが公開されているので詰まったりソースコードが動かなかった場合は検索するといいだろう。

環境

  • OS: Ubuntu
  • Emacs:version 29.3
  • Scheme: gauche 0.9.10-3build1
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.4 LTS"

エディタに求めるもの

1.  必要
    1.  動作の軽さ
    2.  起動の速さ
    3.  外部プログラムの使いやすさ
    4.  正規表現による置換
2.  ほしい
    1.  矩形選択
    2.  連番の入力補助
3.  あったらうれしい
    1.  矢印キーなしの移動
    2.  入力補完機能

インストール

gauche は apt で一発で入った。

$ sudo apt-get install gauche

以下では自分で Emacs をコンパイルしますが、大体のパッケージマネージャーからインストールできますから、管理者権限があって、こだわりが無いならそっちからインストールしても大丈夫です。

Emacs は GNU のサイトから tar ボールをダウンロードしてきて、
解凍、./configuremake をすればコンパイルできる。

GNU Emacs download - GNU Project

コンパイルをしようとすると足りないライブラリがアレコレでてくるので
一個一個 apt search して install すれば良し。わからなければパッケージ名でググるとだいたい解決する。

このときのオプションは次のようにした

$ ./configure --prefix=/home/user --with-imagemagick --with-json --with-native-compilation

--prefix= はビルドする場所を選ぶことができる。管理者権限なしでもビルドができる。
--with-native-compilation はバイトコンパイルされた設定ファイルを使えるようになる。動作が速くなるらしい。必ず入れよう。
--with-json json を使うので入れた
--with-imagemagick 同上

ただ、--with-jsonをつけてビルドしようとしてパッケージが足りない場合、apt searchが教えてくれる候補パッケージが多すぎて分かりづらい。

$ sudo apt install libjansson-dev

で動いた。

今回はホームにビルドしたので .bashrc に

# 好きな場所に emacs を置ける
$ alias E='~/bin/Emacs/emacs'

などと書き込んでおくと便利

設定

Emacs の設定ファイルは init.el です。
中身は基本的に2020年代のEmacs入門をそのままコピペする。

それから、個人的な設定をしていく。
ファイルは上記の記事に倣って ~/.emacs.d に置きます。

以下、私の例

;;; 個人的な設定

;; 起動画面を映さない
(setq inhibit-startup-screen t)
;; 行番号を表示
(global-display-line-numbers-mode)
;; gauche 設定
;; gosh が呼び出せるようになる
(custom-set-variables '(scheme-program-name "/usr/bin/gosh -i"))
(autoload 'scheme-mode "cmuscheme" "Major mode for scheme." t)
(autoload 'run-scheme "cmuscheme" "Run a n inferior Scheme process." t)

;;; キーバインド
(add-hook 'scheme-mode-hook
    #'(lambda ()
        ;; 直前の S 式を gosh インタープリタに送る
        (define-key scheme-mode-map (kbd "<f5>")  'scheme-send-last-sexp)
        ;; gosh インタープリタを開く
        (define-key scheme-mode-map (kbd "<f6>")  'run-scheme))
)

最後に init.el をバイトコンパイルする

# 上記の通り alias E='~/bin/Emacs/emacs' している
# ~/.emacs.d 以外に init.el を置きたい場合は各自深めてください

$ E --batch -f batch-byte-compile ./init.el

バイトコンパイル時に警告が出るが動く。

便利コマンド早見表

必須というわけではないが便利なコマンドの表

key name description
C-a 行頭に移動
C-e 行末に移動
C-SPC 選択開始
M-< バッファの最初に移動
M-> バッファの最後に移動
C-x o other-window window 移動
C-x 2 window を 2 分割
C-M-\ indent-region 選択範囲内の自動インデント
C-M-q indent-sexp 直前の S 式の自動インデント
M-g i imenu 見出しから移動
M-s o occur 正規表現で見出しを作る
C-c C-x TAB org-clock-in 時間カウントし始める
C-c C-x C-o org-clock-out 時間カウント終わる
C-c C-x C-x org-clock-in-last 時間カウント再開

感想

  • Emacs Lisp によるカスタマイズ性が高い
    • プラグインの文化が根付いていると感じた
      • あまり深入りしないようにしたい
  • キーバインドが辛い
    • 手が小さいので、指をいっぱいに伸ばすよりモードでキーの意味が変わるほうが好き
  • Org-mode が最高
    • チェックボックス
    • 画像表示
    • 折り畳み
    • テーブル
    • タイマー
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?