Macのような操作をEmacsで実現する設定

Emacsは非常にカスタマイズ性が高いエディタで、キーバインドを自由に設定することができます。特に、Macの操作に慣れているユーザーにとって、Emacsのデフォルトのキーバインドは少し使いづらいかもしれません。そこで、Macのような操作をEmacsで実現するための設定例を紹介します。この設定を使えば、Emacsでも直感的に作業を進めることができるようになります。

## 設定内容

以下に示す設定を`.emacs`ファイルに追加してください。

```emacs-lisp
(global-set-key "\M-@" "\C-@") ; マーク
(global-set-key "\M-x" "\C-w") ; 切り取り
(global-set-key "\M-c" "\M-w") ; コピー
(global-set-key "\M-v" "\C-y") ; ペースト
```

### 詳細説明

1. **マーク (`\M-@` -> `\C-@`)**
   - Emacsのデフォルトでは、マークを設定するのに`C-@`（Ctrl + @）を使用します。この設定では、Macの`Cmd-Shift-2`に相当する操作を`M-@`（Meta + @）にリバインドしています。
   
2. **切り取り (`\M-x` -> `\C-w`)**
   - 通常、Emacsでテキストを切り取るには`C-w`（Ctrl + w）を使用しますが、Macの`Cmd-x`に対応するように`M-x`（Meta + x）に変更しています。

3. **コピー (`\M-c` -> `\M-w`)**
   - テキストをコピーする場合、Emacsでは`M-w`（Meta + w）を使用しますが、これをMacの`Cmd-c`に対応させるため`M-c`（Meta + c）にリバインドしています。

4. **ペースト (`\M-v` -> `\C-y`)**
   - Emacsではペースト操作に`C-y`（Ctrl + y）を使用しますが、Macの`Cmd-v`に対応するように`M-v`（Meta + v）に変更しています。

### Metaキーについて

Emacsでは、`Meta`キーは重要な役割を果たしますが、慣れていないユーザーにとっては少し戸惑うことがあるかもしれません。`Meta`キーは以下の方法で使用できます：

- **AltキーをMetaキーとして使用**: 多くのキーボードでは、`Alt`キーが`Meta`キーとして機能します。例えば、`Alt-x`は`M-x`として解釈されます。
- **EscキーをMetaキーとして使用**: `Meta`キーが無い場合、`Esc`キーを押してから次のキーを押すことで、`Meta`キーの操作と同じになります。例えば、`Esc`キーを押してから`x`を押すと、`M-x`と同じ効果があります。
- **Caps LockキーをMetaキーとして再設定**: `Caps Lock`キーを`Meta`キーとして再設定することもできます。この方法はMacユーザーにとって特に便利です。システム環境設定からキーボード設定に移動し、修飾キーを変更することで設定できます。

このように、Metaキーを使う方法は複数ありますので、自分に合った方法を選んでください。

この設定を行うことで、Macに慣れたユーザーでも、直感的にEmacsを操作することができます。Emacsの柔軟なカスタマイズ機能を活用して、快適な編集環境を整えましょう。


## その他、おすすめの`.emacs`設定

参考までに、私の `.emacs`の中身は現状こんな感じです。

```emacs-lisp
;; スタートアップメッセージを表示させない
(setq inhibit-startup-message t)
;; 色の設定
(load-theme 'manoj-dark t)
;; 環境を日本語、UTF-8にする
(set-locale-environment nil)
(set-language-environment "Japanese")
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(prefer-coding-system 'utf-8)
;; ホワイトスペースを自動で削除する
(add-hook 'before-save-hook 'delete-trailing-whitespace)
;; 起動時に分割
;(setq w (selected-window))
;; 列数を表示する
(column-number-mode t)
;; 行数を表示する
(if (version<= "26.0.50" emacs-version)
    (global-display-line-numbers-mode)
  ) 
(if (version= "24.3.1" emacs-version)
    (global-linum-mode 1)
    (setq linum-delay t)
    (defadvice linum-schedule 
      (around my-linum-schedule () activate)
      (run-with-idle-timer 0.2 nil #'linum-update-current)
      )  
    )
(setq linum-format "%4d ")
;;fringe(フレーム左右の余白部分,行番号との境界)の色
;;(custom-set-faces
;; '(fringe ((t (:background "gray30")))))
;; カーソル行をハイライトする
;;(global-hl-line-mode t)
;; 対応する括弧を光らせる
(show-paren-mode 1)
;; スクロールは１行ごとに
(setq scroll-conservatively 1)
;; "yes or no" の選択を "y or n" にする
(fset 'yes-or-no-p 'y-or-n-p)
;; Symbolic link to Git-controlled source file; follow link? (y or n)」という確認メッセージを表示しない
(setq vc-follow-symlinks t)
;; 格納ディレクトリーの変更
;;   (対象ディレクトリー . 格納ディレクトリー) のリスト
(setq backup-directory-alist '((".*" . "~/.ehist")))
;; png, jpg などのファイルを画像として表示
(setq auto-image-file-mode t)
;; 選択した範囲に色をつける
(transient-mark-mode t)
;; オリジナルコマンドの設定
(global-set-key "\M-@" "\C-@") ; マーク
(global-set-key "\M-x" "\C-w") ; 切り取り
(global-set-key "\M-c" "\M-w") ; コピー
(global-set-key "\M-v" "\C-y") ; ペースト
```

---

*この記事は、ChatGPT4oと協力して生成しました。*