Ubuntu20.04でのEmacs on WSL2 + Windows 11
- はじめに
- 参考サイト
- gnome-terminalの起動
- パッケージ情報およびインストール済みソフトウェアのアップデート
- Emacsのインストール
- インプットメソッド fcitx
- emacsの設定
- 動作確認
- 戻る
はじめに_
テキストエディタ(エディタ)_
- text editor, in "Dictionary of Computing 5th edition," p. 532, Oxford University Press, 2004.
A program used specifically for entry and modification of data that is in a textual format. Such data may be a program written in a high-level language, a report or book written in a natural language, or numerical input for, say, a statistical program.
- IT用語辞典 e-words:テキストエディタ 【text editor】
http://e-words.jp/w/E38386E382ADE382B9E38388E382A8E38387E382A3E382BF.html
- Wekipedia.ja: テキストエディタ
- word processing, in "Dictionary of Computing 5th edition," p. 577, Oxford University Press, 2004.
A facility that enables users to compose documents using a computer with facilities to edit, re-format, store, and print documents with maximum flexibility. A typical word-processing system consists of a personal computer running a word-processing program, and an associated printer, such as an inkjet printer, capable of producing high-quality output of many different text fonts as well as diagrams and pictures.
- IT用語辞典 e-words:ワープロソフト 【word processor software】
http://e-words.jp/w/E383AFE383BCE38397E383ADE382BDE38395E38388.html
- Wekipedia.ja: ワードプロセッサ
http://ja.wikipedia.org/wiki/%E3%83%AF%E3%83%BC%E3%83%97%E3%83%AD
以上、いくつかの定義を紹介したがこれからわかる通り、エディタとワードプロセッサは違うものである。
エディタとはテキスト(普通の文字)を入力するためのソフトであり、乱暴な言い方をするとワードプロセッサから文書整形・修飾機能(太文字、斜体、拡大・縮小等)を取り去ったものともいえる。ワードプロセッサに比べて軽快に動き、かつ作成したファイルの互換性が高いため、ある程度長い文章でもエディタを愛用する人が多い。
たとえば、Windowsの代表的なエディタはメモ帳であり、ワードプロセッサはMicrosoft Wordである。
Emacs_
EmacsはUNIX/Linux上での代表的なエディタの一つである。
Emacs はUNIX上で有名かつ人気のあるエディタである。 Emacsは高度にカスタマイズ可能であり、Emacs Lispという言語で環境を記述すれば、メールやニュースのリーダーとして使用可能なのは勿論、ブラウザとしても使用可能である。タイピングソフトやプログラム作成時にデバッグする環境も構築できる。
参考サイト_
gnome-terminalの起動_
gnome-terminalの利用で設定したgnome-terminalを起動する。
Ubuntuターミナルを起動し、ターミナル上で以下を起動する。
% gterm &
パッケージ情報およびインストール済みソフトウェアのアップデート_
emacsのインストール前にパッケージ情報およびインストール済みソフトウェアのアップデートを行う。
% sudo apt update % sudo apt upgrade -y
Emacsのインストール_
% sudo apt install -y emacs emacs-mozc
emacsを起動する。起動するのを確認出来たらemacsを終了する。
% emacs &
以下のようなウィンドウが立ち上がる(背景と文字の色は以下の例と異なる場合もある)。真ん中の広い入力スペース(下画像の青枠部分)を「バッファ」、一番下の小さな入力スペース(下画像の赤枠部分)を「ミニバッファ」という。なお、以下の画像では起動したemacsのウィンドウのサイズを変更している。

emacsは設定ファイルによってさまざまにカスタマイズ可能なエディタである。emacsの設定ファイルはホームディレクトリ下の.emacs.d/init.el としておくこととなっている。emacsを起動したとき、ホームディレクトリに.emacs.dというディレクトリが作成される。ターミナルで確認してみる。ここに設定ファイルを設置する。
% cd % ls -ld ~/.emacs.d drwx------ 1 gotoh gotoh 512 6月 26 21:56 /home/gotoh/.emacs.d
インプットメソッド fcitx_
インストールと設定_
Linuxで日本語入力をする際にはインプットメソッドというソフトウェアを利用する。
インストールする。
% sudo apt install -y fcitx fcitx-mozc % im-config -n fcitx
fcitxはインプットメソッドの一種である。インストールしたemacsを用いて、fcitxを利用できるように設定する。まず、emacsを起動する。
% cd % emacs &
~/.bash_profileのファイルを開く。メニューバーの「File」→「Open File」から .bash_profileを選択する。
もう一つのファイルを開く方法がある。マウスのカーソルをemacsのウィンドウ上に合わせて、Ctrlキーを押しながらxキーを押す(以後、Ctrlキーを押しながら何かのキーを押すのを 「C-何かのキー」と表記)、続いて C-f を押す。すると、emacsのミニバッファが以下の図のように「Find file: ~/ 」と入力待ちになる。そこで、「~/.bash_profile」となるように文字を打ち込み、Enterキーを押す。
現状の中身を以下になるように変更する。
alias gterm="/usr/bin/gnome-terminal" export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx export DefaultIMModule=fcitx if [ $SHLVL = 1 ] ; then (fcitx-autostart > /dev/null 2>&1 &) xset -r 49 > /dev/null 2>&1 fi
「File」→「Save」で保存する。emacsを一度終了する。
以下のコマンドで ~/.bash_profileを反映させる。
% source ~/.bash_profile
ちゃんと設定が反映されているかどうかを確かめる。以下のコマンドを実行し、例と同じ表示がでているならば、設定は反映されている。
% env | grep fcitx GTK_IM_MODULE=fcitx XMODIFIERS=@im=fcitx QT_IM_MODULE=fcitx DefaultIMModule=fcitx % which fcitx-configtool /usr/bin/fcitx-configtool
上記のような出力がでない場合は、~/.bash_profileの編集に失敗している。以下の手順で編集しなおすこと。
- まず、一度、別名保存する
% cd % mv ~/.bash_profile ~/bash_profile.YYYYMMDD (注:YYYYは西暦4桁、MMは月2桁、DDは日付2桁)
- 空の.bash_profileを作成する。
% touch ~/.bash_profile
- emacsで~/.bash_profileを開く
- 以下の内容を.bash_profileにコピーし、保存する。
alias gterm="/usr/bin/gnome-terminal" export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx export DefaultIMModule=fcitx if [ $SHLVL = 1 ] ; then (fcitx-autostart > /dev/null 2>&1 &) xset -r 49 > /dev/null 2>&1 fi
- .bash_profileの設定を読み込む
% source ~/.bash_profile
キーバインド「Controlキー + スペースキー」の解放(2022年6月2日追記)_
emacsで頻繁に利用するキーバインドに「Controlキー + スペースキー」があるが、標準だと直接入力モードと日本語入力モードの切り替えキーとして設定されている。そこで、「Controlキー + スペースキー」を直接入力モードと日本語入力モードの切り替えキーから外す。
以下のコマンドを実行して、インプットメソッドfcitxの設定画面を起動する。
% /usr/bin/fcitx-configtool
以下のウィンドウが開く。

タブの「全体の設定」をクリックし、以下の画面を開く。続いて「Trigger Input Method」の項の「Ctrl + Space」と書いてあるボタンをクリックする。

すると以下の赤枠で囲った部分のような小さなウィンドウが追加で開く(なお、開く位置は下の画像通りではない)。このウィンドウが開いた状態でキーボードのAltキーとスペースキーを同時に押す。

すると、以下の画像のように「Ctrl + Space」と書いてあった部分が「Alt + Space」に変わる。(2022年6月2日追記:Altキー、たとえばlaltしか反映されない場合がある。そのときは普段使わないキーを適当に割り当てること)。このようになったら変更終了。このウィンドウを閉じる。もし、「Alt + Space」になっていなければ、また、当該部分のボタンをクリックし、上の手順に戻る。

emacsの設定_
設定ファイル init.el の設置_
以下に述べる設定ファイルは GitHub:yuichigoto yg-emacs-initsからダウンロードできる。設置方法は以下の通り。
% cd ~/.emacs.d % git clone https://github.com/yuichigoto/yg-emacs-inits.git
ディレクトリを確認する。
% ls yg-emacs-inits
設定ファイルは ~/.emacs.d/init.elである。init.elを設置する。
% cp yg-emacs-inits/init-leaf.el ./init.el
emacsの設定パッケージleaf.el_
本設定ファイルは2020年代のEmacs入門に従って、leafというパッケージシステムを使っている。
今回の設定ファイルでは以下のツールを使えるようにしている。
- 日本語変換エンジン mozc
- Windowsのフォント
- ivy
- migemo (cmigemo)
Windowsフォントの利用_
フォントも自由に設定できる。せっかくWindows上でemacsを使うのでWindowsのフォントを使用してみる(参考:Windows Subsystem for Linux + X Windowを1.024倍くらい使いこなすための方法)。
まず、WindowsのフォントをUbuntuから使えるようにする。Windowsのフォントデータがあるディレクトリを参照できるようにシンボリックリンクを作成する。
% sudo ln -s /mnt/c/Windows/Fonts /usr/share/fonts/windows
以下のように/usr/share/fonts/windowsが/mnt/c/Windows/Fontsを指示していたら、シンボリックリンクの作成に成功している。
% ls -l /usr/share/fonts/windows lrwxrwxrwx 1 root root 20 4月 12 13:11 /usr/share/fonts/windows -> /mnt/c/Windows/Fonts
Ubuntu側のフォントデータを再構成する(Windows側のフォントデータを組み込む)。
% sudo fc-cache -fv
使用できるフォントは以下のコマンドで調べられる。
% fc-list
絞り込む場合はgrepコマンドを使う。
% fc-list | grep MS (MSゴシックなどのみを抜き出す) % fc-list | grep Yu (游ゴシックなどのみを抜き出す) % fc-list | grep Meiryo (メイリオ、メイリオUIなどのみを抜き出す)
今回の設定ではメイリオフォントを使っている。init.elでの該当部分は以下のとおり。
;; emacsで使用するフォントの設定 ;; Windows上のフォント(メイリオフォント)を使っているので ;; 先にWindows上のフォントを利用できるように設定すること。 (progn (add-to-list 'default-frame-alist '(font . "Meiryo-13.5")) (custom-set-faces '(variable-pitch ((t (:family "Meiryo")))) '(fixed-pitch ((t (:family "Meiryo")))) ))
ミニバッファ拡張ツールivy_
ターミナル上で以下のコマンドを実行する。
% sudo apt install -y elpa-counsel
2020年代のEmacs入門の記載を利用している。ただし、migemoとの併用ができなかったのでswiperの設定をコメントアウトしている。init.elでの該当部分は以下のとおり。
;;; ミニバッファの拡張機能 ivy ;;; ref. https://emacs-jp.github.io/tips/emacs-in-2020 ;;; ref. https://github.com/abo-abo/swiper (leaf ivy :doc "Incremental Vertical completYon" :req "emacs-24.5" :tag "matching" "emacs>=24.5" :url "https://github.com/abo-abo/swiper" :emacs>= 24.5 :ensure t :blackout t :leaf-defer nil :custom ((ivy-initial-inputs-alist . nil) (ivy-use-selectable-prompt . t)) :global-minor-mode t :config ; 2020/4/12 後藤注:Migemoと併用する方法が ; わからないのでコメントアウトしている。 ;(leaf swiper ; :doc "Isearch with an overview. Oh, man!" ; :req "emacs-24.5" "ivy-0.13.0" ; :tag "matching" "emacs>=24.5" ; :url "https://github.com/abo-abo/swiper" ; :emacs>= 24.5 ; :ensure t ; :bind (("C-s" . swiper))) (leaf counsel :doc "Various completion functions using Ivy" :req "emacs-24.5" "swiper-0.13.0" :tag "tools" "matching" "convenience" "emacs>=24.5" :url "https://github.com/abo-abo/swiper" :emacs>= 24.5 :ensure t :blackout t :bind (("C-S-s" . counsel-imenu) ("C-x C-r" . counsel-recentf)) :custom `((counsel-yank-pop-separator . "\n----------\n") (counsel-find-file-ignore-regexp . ,(rx-to-string '(or "./" "../") 'no-group))) :global-minor-mode t)) (leaf prescient :doc "Better sorting and filtering" :req "emacs-25.1" :tag "extensions" "emacs>=25.1" :url "https://github.com/raxod502/prescient.el" :emacs>= 25.1 :ensure t :custom ((prescient-aggressive-file-save . t)) :global-minor-mode prescient-persist-mode) (leaf ivy-prescient :doc "prescient.el + Ivy" :req "emacs-25.1" "prescient-4.0" "ivy-0.11.0" :tag "extensions" "emacs>=25.1" :url "https://github.com/raxod502/prescient.el" :emacs>= 25.1 :ensure t :after prescient ivy :custom ((ivy-prescient-retain-classic-highlighting . t)) :global-minor-mode t)
日本語インクリメンタル検索 cmigemoのインストール_
emacs上で文字列検索する際にはC-sというコマンドで検索するが、通常だとアルファベットはアルファベット、ひらがな+漢字はひらがな+漢字でしか検索できない。しかし、migemoというスクリプトをインストールすると、ひらがな+漢字をアルファベット(ローマ字)で検索できるようになり、とても便利。
migemoのインストール
% sudo apt install -y cmigemo elpa-migemo
init.elでの該当部分は以下の通り
;; ローマ字検索を可能にするパッケージMIGEMO (progn (require 'migemo) (setq migemo-command "cmigemo") (setq migemo-options '("-q" "--emacs")) (setq migemo-dictionary "/usr/share/cmigemo/utf-8/migemo-dict") (setq migemo-user-dictionary nil) (setq migemo-regex-dictionary nil) (setq migemo-coding-system 'utf-8-unix) (load-library "migemo") (migemo-init))
スペルチェッカーaspellのインストール(必要に応じて)_
この設定は後藤の作業環境のために記載しているので、不要ならば読み飛ばすこと。
emacs上で英語論文などを書く際に簡易的なスペルチェッカーaspell(emacsで使うときはispell)を利用する。
aspellのインストール
% sudo apt install -y aspell
このままemacs上でipsellを実行すると「Error: No word lists can be found for the language "ja_JP"」というエラーメッセージが出てしまうので、ホームディレクトリに.aspell.confというファイルを用意する。
% echo "lang en_US" > ~/.aspell.conf
init.elでの該当部分は以下の通り
;; For Aspell (progn (setq-default ispell-program-name "aspell") (eval-after-load "ispell" '(add-to-list 'ispell-skip-region-alist '("[^\000-\377]+"))))
leaf.plのバイトコンパイル_
leaf.plはinit.elを修正するたびに以下のコマンドでバイトコンパイルをする必要がある。init.elcというファイルがバイトコンパイルで生成されるファイル。
% cd ~/.emacs.d % emacs --batch -f batch-byte-compile init.el % ls init.elc init.elc
動作確認_
起動時のウィンドウサイズの変更_
init.elの以下の部分でemacsのウィンドウサイズを設定している。
;; emacsのウィンドウサイズの設定 (if window-system (progn (set-frame-size (selected-frame) 80 25)))
背景、文字の色、カーソルの色の変更_
init.elの以下の部分で設定している。現状は背景が黒、文字が白、カーソルが白となっている。
;; 背景、文字の色、カーソルの色の指定 (progn (set-background-color "black") (set-foreground-color "white") (set-cursor-color "white"))
日本語入力_
init.elの以下の部分で設定している。
;; Setting for Japanese Input (progn (set-language-environment "Japanese") ;; ターミナルから呼び出したときにターミナルに ;; 渡す文字コード (set-terminal-coding-system 'utf-8-unix) ;; 新しく開いたファイルを保存しておくときの ;; 文字コード (prefer-coding-system 'utf-8-unix) ;; emacsをXのアプリケーションへ貼り付ける ;; ときの文字コード (set-clipboard-coding-system 'utf-8)) (progn (require 'mozc) (setq default-input-method "japanese-mozc") ; 変換候補が変換対象のすぐ下に表示される。 ;(setq mozc-candidate-style 'overlay)) ; 変換候補がミニバッファに表示される。こちらのほうが無難 (setq mozc-candidate-style 'echo-area))
適当なファイルで漢字変換を行ってみる。適当なファイルとして ~/tmp.txt を作成する。
% cd % touch ~/tmp.txt
次にemacs上で ~/tmp.txt を開く。キーバードから開く(C-x f)で開くと、ivyによるミニバッファの拡張を体験できる。
tmp.txtを開いたら、C-\ (Ctrlキーを押しながら、バックスラッシュキー)を押す。すると以下のように日本語入力ができるようになる(emacsの左下に[Mozc]と表示される)。「あした」と入力すると以下のように変換候補がでる。スペースキーを押すと変換できる。もう一度 C-\ を押すと通常入力モードになる。

C-\ を押してもemacsの左下に[Mozc]と表示されない場合は、emacsにおいてキーボードが英語配列として認識されている可能性がある。
次に変換時の挙動をカスタマイズする。ターミナルで以下のコマンドをうち、mozcの設定ウィンドウを起動する。
% /usr/lib/mozc/mozc_tool -mode=config_dialog
「キー選択の設定」項目で挙動を変更できる。特にこだわりがなければ「ことえり」にして、「OK」を押す。
タブ、全角スペースの可視化_
タブや全角スペースを表示する設定をしている。プログラムを書くようになると、プログラム中に全角スペースが含まれることでエラーになることがある。該当部分は以下のとおり。
;;参考: ;; https://www.emacswiki.org/emacs/WhiteSpace ;; https://qiita.com/itiut@github/items/4d74da2412a29ef59c3a ;; https://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_0000-0FFF (progn (require 'whitespace) (global-whitespace-mode 1) (setq whitespace-style '( face ; 可視化 trailing ; 行末 tabs ; タブ spaces ; スペース empty ; 先頭、末尾のスペース space-mark ; 全角スペースの別記号表記 tab-mark ; タブの別記号表記 )) (setq whitespace-display-mappings '( (space-mark ?\u3000 [?\u20DE]) ; 全角スペースを別記号で表記 (tab-mark ?\t [?\u00BB ?\t] [?\\ ?\t]) ; タブを別記号で表記 )) (setq whitespace-trailing-regexp "\\([ \u00A0]+\\)$") (setq whitespace-space-regexp "\\(\u3000+\\)") (set-face-attribute 'whitespace-trailing nil :foreground "RoyalBlue4" :background "RoyalBlue4" :underline nil) (set-face-attribute 'whitespace-tab nil :foreground "orange red" :background "yellow4" :underline nil) (set-face-attribute 'whitespace-space nil :foreground "gray40" :background "light gray" :underline nil))
どのようになるのか試してみる。
- サンプルファイルをダウンロードしてみる。
% cd % wget http://www.aise.ics.saitama-u.ac.jp/~gotoh/Download/Samples/Example.whitespace.txt % ls Example.whitespace.txt (ダウンロードできていることを確かめる)
- emacsでExample.whitespace.txtを開く(emacs上で C-x C-f ~/Example.whitespace.txtを開く)
- 下の画像のようにタブや全角スペースが色付き表示される。

日本語インクリメンタル検索_
日本語で検索できるかどうか試してみる。
- サンプルファイルをダウンロードしてみる。
% cd % wget http://www.aise.ics.saitama-u.ac.jp/~gotoh/Download/Samples/Example.utf8.txt % ls Example.utf8.txt (ダウンロードできていることを確かめる)
- emacsでExample.utf8.txtを開く(emacs上で C-x C-f ~/Example.utf8.txtを開く)
- 検索してみる。C-s pasokon
- 下の画像のように「パソコン」が検索候補としてヒットする。C-sを押すたびに次候補へ進む
- 検索終了する場合はEnterキーを押す

aspellの利用方法(必要に応じて)_
emacsで、新しいファイルをつくり、スペルチェックしてみる。
- emacs上でC-x C-f (Controlキーを押しながらxキーを押す、その後Controlキーを押しながらfキーを押す)で~/new.txtを作成
- 「I wish I were a birb.」と打つ
- M-x ispell とコマンドを実行
- 「birb」に対して変換候補がでたならばaspellはちゃんと動いている。
- C-x C-sで保存する。