LoginSignup
0
0

More than 3 years have passed since last update.

Windows10でEmacs26を使う

Posted at
  • 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-win64C:\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.exeC:\USR\bin\にコピー

2-3. Universal Ctags

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))
0
0
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
0
0