- OS:Windows10 Pro 64bit
- バージョン:1909
1. Emacs26.3のインストール
-
https://www.gnu.org/software/emacs/ から
emacs-26.3-x86_64.zip
をダウンロード -
C:\USR\TOOl\
で解凍 -
C:\USR\TOOL\emacs-26.3\bin\runemacs.exe
へのショートカットを作成
2. 小ツールのインストール
2-1. C/Migemo
-
https://www.kaoriya.net/software/cmigemo/ から
cmigemo-default-win64-20110227.zip
をダウンロード -
C:\USR\TOOl\
で解凍 -
C:\USR\TOOL\cmigemo-default-win64
をC:\USR\TOOL\cmigemo
にフォルダ名変更
2-2. ripgrep
-
https://github.com/BurntSushi/ripgrep から
ripgrep-12.0.1-x86_64-pc-windows-gnu.zip
をダウンロード -
C:\USR\TOOl\
で解凍 -
C:\USR\TOOL\ripgrep-12.0.1-x86_64-pc-windows-gnu\rg.exe
をC:\USR\bin\
にコピー
2-3. Universal Ctags
-
https://github.com/universal-ctags/ctags-win32/releases から
ctags-2020-04-18_f45cd56c-x64.zip
をダウンロード -
C:\USR\TOOl\
で解凍 -
C:\USR\TOOL\ctags-2020-04-18_f45cd56c-x64\ctags.exe
をC:\USR\bin\
にコピー
3. Emacs-Lispのインストール
-
$HOME/.emacs
を編集してMELPAを追加
~/.emacs
(require 'package)
(add-to-list 'package-archives
'("melpa-stable" . "https://stable.melpa.org/packages/") t)
(package-initialize)
-
Emacsを起動して
M-x package-list-packages
を実行 -
次のパッケージを
i
で選択してx
でインストール(u
で選択解除)- csharp-mode 0.9.2 (melpa-stable)
- migemo 1.9.2 (melpa-stable)
- php-mode 1.22.2 (melpa-stable)
- rg 1.8.1 (melpa-stable)
4. ~/.emacs の設定
4-1. C/Migemo
~/.emacs
;;; C/Migemo (melpa-stable)
;; https://www.kaoriya.net/software/cmigemo/
;; https://github.com/emacs-jp/migemo
(require 'migemo)
(setq migemo-command "C:/USR/TOOL/cmigemo/cmigemo.exe")
(setq migemo-options '("-q" "--emacs"))
(setq migemo-dictionary "C:/USR/TOOL/cmigemo/dict/utf-8/migemo-dict")
(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionary nil)
(setq migemo-coding-system 'utf-8-unix)
(migemo-init)
4-2. ripgrep
~/.emacs
;;; rg (melpa-stable)
;; https://github.com/dajva/rg.el
(require 'rg)
(rg-enable-default-bindings)
4-3. Majorモード
~/.emacs
;;; C# mode (melpa-stable)
(setq auto-mode-alist
(append '(("\\.cs$" . csharp-mode)) auto-mode-alist))
(autoload 'csharp-mode "csharp-mode" "Major mode for editing C# code." t)
;;; PHP mode (melpa-stable)
(setq auto-mode-alist
(append '(("\\.php$" . php-mode)) auto-mode-alist))
(autoload 'php-mode "php-mode" "Major mode for editing php code." t)
5. その他の設定
日本語
~/.emacs
;;; 漢字コードの指定 (端末画面ではterminal-coding-systemが必須)
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8-unix)
(setq default-process-coding-system '(utf-8 . utf-8))
(setq default-file-name-coding-system 'cp932)
(set-coding-system-priority 'utf-8
'cp932
'euc-jp
'iso-2022-jp)
(defun reread-file-coding()
(interactive)
(universal-coding-system-argument "sjis-dos")
(revert-buffer nil t t)
)
(global-set-key "\M-r" 'reread-file-coding)
;;; IMEの設定
(set-language-environment "Japanese")
;; フォント設定
;; http://misohena.jp/blog/2016-01-21-emacs-font-size-adjustment.html
;; MS Mincho, MS Gothic, HGれいしっく, Cica
;; https://github.com/miiton/Cica
(set-face-attribute 'default nil :family "MS Mincho" :height 110)
(set-fontset-font nil 'cp932 (font-spec :family "MS Mincho"))
(setq-default line-spacing 0.1)
キー操作
~/.emacs
;;; assign BackSpace to \C-h
(global-set-key "\C-h" 'delete-backward-char)
;;; ソースコード折り畳み表示
(add-hook 'c-mode-hook '(lambda () (hs-minor-mode 1)))
(add-hook 'c++-mode-hook '(lambda () (hs-minor-mode 1)))
(add-hook 'csharp-mode-hook '(lambda () (hs-minor-mode 1)))
(add-hook 'php-mode-hook '(lambda () (hs-minor-mode 1)))
(global-set-key "\C-\\" 'hs-toggle-hiding)
(global-set-key "\M-\\" 'hs-hide-level)
;;; disable [kanji] & [\C-\]
(global-set-key [M-kanji] 'ignore)
(global-set-key [kanji] 'ignore)
画面表示
~/.emacs
;;; 表示画面の設定 (X上ではfontset部分が必須)
(setq default-frame-alist
(append
'((line-space . "0")
(width . 80)
(height . 56)
(top . 16)
(left . 160)
; (font . "fontset-standard")
; (font . "fontset-startup")
)
default-frame-alist))
(set-foreground-color "cornsilk")
(set-background-color "#002800")
(setq hilit-mode-enable-list nil
; hilit-background-mode 'light
hilit-background-mode 'dark
hilit-inhibit-hook nil
hilit-inhibit-rebinding nil)
;;; enable visual feedback on selections
(setq transient-mark-mode t)
;;; default to better frame titles
(setq frame-title-format
(concat "%b - emacs@" system-name))
;;; モードラインの設定
(setq display-time-day-and-date t) ;; 曜日・月・日
(setq display-time-24hr-format t) ;; 24時間表示
(display-time-mode t) ;; 現在時刻
(line-number-mode t) ;; 行番号
(column-number-mode t) ;; 桁番号
(size-indication-mode t) ;; ファイルサイズ
;;; ディレクトリ表示設定
(setq dired-listing-switches "-alU")
Majorモード
~/.emacs
;;; Emacs Lispモード
(setq auto-mode-alist
(append '(("\\.emacs*" . emacs-lisp-mode)) auto-mode-alist))
;;; Shellモード
(setq auto-mode-alist
(append '(("\\.bash_*" . sh-mode)) auto-mode-alist))
;;; Makefileモード
(setq auto-mode-alist
(append '(("Makefile*" . makefile-mode)
("Makehead$" . makefile-mode)
("Make.def$" . makefile-mode)) auto-mode-alist))
;;; ChangeLogモード
(setq auto-mode-alist
(append '(("Changelog$" . change-log-mode)
("ChangeLog$" . change-log-mode)) auto-mode-alist))
;;; Octave/MATLABの設定
(setq auto-mode-alist
(append '(("\\.m$" . octave-mode)) auto-mode-alist))
;;; C++モード
(setq auto-mode-alist
(append '(("\\.c$" . c++-mode)
("\\.h$" . c++-mode)
("\\.i$" . c++-mode)
("\\.cu$" . c++-mode)) auto-mode-alist))
;;; C#モード(melpa-stable)
(setq auto-mode-alist
(append '(("\\.cs$" . csharp-mode)) auto-mode-alist))
(autoload 'csharp-mode "csharp-mode" "Major mode for editing C# code." t)
;;; PHPモード(melpa-stable)
(setq auto-mode-alist
(append '(("\\.php$" . php-mode)) auto-mode-alist))
(autoload 'php-mode "php-mode" "Major mode for editing php code." t)
(add-hook 'php-mode-user-hook
'turn-on-font-lock)
(add-hook 'php-mode-user-hook
'(lambda () (define-abbrev php-mode-abbrev-table "ex" "extends")))
;;; Jave Script(JSON)モード
(setq auto-mode-alist
(append '(("\\.jsn$" . js-mode)) auto-mode-alist))
; JSON形式の整形方法
; 1. 範囲選択
; 2. M-x json-pretty-print
タブ・インデント設定
~/.emacs
;;; 自動インデント(C-jとRetの入れ替え)
(setq electric-indent-mode nil)
;;; タブ設定
(setq-default c-basic-offset 4 ;; 基本インデント量 4
tab-width 4 ;; タブ幅 4
indent-tabs-mode nil) ;; タブ or スペースでインデント
;;; 全角空白とタブの可視化
;; http://syohex.hatenablog.com/entry/20110119/1295450495
(require 'whitespace)
(setq whitespace-style '(face
tabs
tab-mark
spaces
space-mark
trailing))
(setq whitespace-display-mappings
'((tab-mark ?\t [?\u00BB ?\t] [?\\ ?\t])))
(set-face-foreground 'whitespace-tab "#000000")
(set-face-background 'whitespace-tab "#FFFF80")
(set-face-underline 'whitespace-tab nil)
(set-face-foreground 'whitespace-space "#000000")
(set-face-background 'whitespace-space "#001800")
(set-face-bold-p 'whitespace-space nil)
(global-whitespace-mode 1)
;;; Cモード
;; http://d.hatena.ne.jp/i_s/20091026/1256557730
(add-hook 'c-mode-common-hook
'(lambda()
;;(c-set-style "bsd")
;; 連続する空白の一括削除
(c-toggle-hungry-state t)
;; タブ幅4
(setq tab-width 4)
;; インデントは空白文字で行う(TABコードを空白に変換)
(setq indent-tabs-mode nil)
;; インデント幅計算用基数
(setq c-basic-offset 4)
;; 全自動インデント有効
(setq c-auto-newline t)
;; TABキーはインデント(nilならTABコード入力)
(setq c-tabs-always-indent t)
;; 演算式が複数行にまたがる時のオフセット
(c-set-offset 'statement-cont 'c-lineup-math)
))
;;; C++モード
;; http://www.02.246.ne.jp/~torutk/cxx/emacs/indentation.html
(add-hook 'c++-mode-hook
'(lambda()
(c-set-style "bsd")
;; namespace {}の中はインデントしない
(c-set-offset 'innamespace 0)
))
;;; C#モード(melpa-stable)
;; https://qiita.com/fujimisakari/items/d043a2fae31ed740e290
(add-hook 'csharp-mode-hook
'(lambda()
;;(c-set-style "stroustrup")
;;(font-lock-add-magic-number)
;; 連続する空白の一括削除
(c-toggle-hungry-state t)
;; 全自動インデント有効
(setq c-auto-newline t)
;; TABキーはインデント(nilならTABコード入力)
(setq c-tabs-always-indent t)
;; 演算式が複数行にまたがる時のオフセット
(c-set-offset 'statement-cont 'c-lineup-math)
(setq comment-column 40)
(c-set-offset 'substatement-open 0)
(c-set-offset 'case-label '+)
(c-set-offset 'arglist-intro '+)
(c-set-offset 'arglist-close 0)
;;(auto-complete-mode)
))
;;; PHPモード(melpa-stable)
(add-hook 'php-mode-hook
(defun php-mode-hook ()
; ;; c-mode のスタイル (コメントアウトした場合 "gnu")
; (c-set-style "linux")
; ;; 連続する空白の一括削除 (必要なければコメントアウトする)
(c-toggle-hungry-state t)
; ;; コメント行のインデント (必要なければコメントアウトする)
; (setq c-comment-only-line-offset 0)
; ;; コメントのスタイル (必要なければコメントアウトする)
(setq comment-start "// "
comment-end ""
comment-start-skip "// *")
))
最終更新日付
※write-file-hooksからbefore-save-hookに変更
~/.emacs
;;; 最終更新日の自動挿入
;;; ファイルの先頭から 8 行以内に Time-stamp: <> または
;;; Time-stamp: " " と書いてあれば、セーブ時に自動的に日付が挿入されます
(if (not (memq 'time-stamp before-save-hook))
(setq before-save-hook
(cons 'time-stamp before-save-hook)))
個人設定
~/.emacs
;;; [~/.emacs] Time-stamp: <2020-04-18 14:19:13 username>
(setq user-full-name "Full Name")
(setq load-path (cons "~/.emacs.d/site-lisp/" load-path))