LoginSignup
17
21

More than 3 years have passed since last update.

Emacs環境をアップデートする(straight.el)

Last updated at Posted at 2019-01-31

長年使ってきたMacBookPro Mid2010からMacBookAir2018に買い替えました。
きっかけがないとなかなか設定を見直さないため、何年ぶりかに実施です。

これまでは下記のようにパッケージごとに設定ファイルを分けてきたのですが、そこまでこだわった使い方をしていないため、init.elにまとめることにしました。
こだわりの設定し始めたらファイル分けたほうがいいのかもしれませんが、個人的にはスッキリして満足です。
起動時間もそこまで気になるほどじゃないのでuse-packageも使わずにいきます。

~/.emacs.d/
init.el
./inits/
    ├── 01_basic.el
    └── 02_helm.el
    └── 03_recentf.el

Emacs

straight.el

パッケージマネージャです。
init.elstraight-use-packageを書くだけでパッケージのインストールまで完了します。

init.el
(defvar bootstrap-version)
(let ((bootstrap-file
       (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
      (bootstrap-version 5))
  (unless (file-exists-p bootstrap-file)
    (with-current-buffer
        (url-retrieve-synchronously
         "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
         'silent 'inhibit-cookies)
      (goto-char (point-max))
      (eval-print-last-sexp)))
  (load bootstrap-file nil 'nomessage))

参考:Emacsパッケージマネージャ決定版:これからのパッケージ管理はstraight.elで決まり!

helm

init.el
(straight-use-package 'helm)
(helm-mode 1)
(define-key global-map (kbd "M-y") 'helm-show-kill-ring)
(define-key global-map (kbd "C-x C-f") 'helm-find-files)
(define-key global-map (kbd "C-x C-r") 'helm-recentf)
(define-key helm-map (kbd "C-h") 'helm-ff-delete-char-backward)
(define-key helm-find-files-map (kbd "TAB") 'helm-execute-persistent-action)

個人的な慣れの問題からC-hTABを定義してます。
参考:Emacs に革命を起こすパッケージ「helm」

recentf-ext

最近開いたファイルを一覧で表示してくれる。
すごいよく使う機能。
C-x C-rに設定してます。

init.el
(straight-use-package 'recentf-ext)
(recentf-mode 1)
(setq recentf-max-saved-items 200)
(setq recentf-save-file "~/.emacs.d/recentf")
(setq recentf-auto-cleanup 'never)
(setq helm-for-files-preferred-list
      '(helm-source-buffers-list
        helm-source-recentf
        helm-source-bookmarks
        helm-source-file-cache
        helm-source-files-in-current-dir
        helm-source-bookmark-set
        helm-source-locate))

company

補完用パッケージ。

init.el
(straight-use-package 'company)
(global-company-mode)
(setq company-transformers '(company-sort-by-backend-importance))
(setq company-idle-delay 0)
(setq company-minimum-prefix-length 3)
(setq company-selection-wrap-around t)
(setq completion-ignore-case t)
(setq company-dabbrev-downcase nil)
(global-set-key (kbd "C-M-i") 'company-complete)
(define-key company-active-map (kbd "C-n") 'company-select-next)
(define-key company-active-map (kbd "C-p") 'company-select-previous)
(define-key company-search-map (kbd "C-n") 'company-select-next)
(define-key company-search-map (kbd "C-p") 'company-select-previous)
(define-key company-active-map (kbd "C-s") 'company-filter-candidates)
(define-key company-active-map (kbd "C-i") 'company-complete-selection)
(define-key company-active-map [tab] 'company-complete-selection)
(define-key company-active-map (kbd "C-f") 'company-complete-selection)
(define-key emacs-lisp-mode-map (kbd "C-M-i") 'company-complete)

web-mode

HTML書くとき用。

init.el
(straight-use-package 'web-mode)
(add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode))
(defun web-mode-hook ()
  (setq web-mode-html-offset   2)
  (setq web-mode-css-offset    2)
  (setq web-mode-script-offset 2)
  (setq indent-tabs-mode nil)
  (setq tab-width 2))
(add-hook 'web-mode-hook 'web-mode-hook)

php-mode

PHP書くとき用。補完にcompany-php入れてます。

init.el
(straight-use-package 'php-mode)
(straight-use-package 'company-php)
(add-hook 'php-mode-hook
          '(lambda ()
             (company-mode t)
             (ac-php-core-eldoc-setup)
             (make-local-variable 'company-backends)
             (add-to-list 'company-backends 'company-ac-php-backend)))

screenshot
company-php

js2-mode

js書くとき用。補完にcompany-tern入れてます。

init.el
(straight-use-package 'js2-mode)
(straight-use-package 'company-tern)
(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
(add-hook 'js2-mode-hook 'tern-mode)
(add-to-list 'company-backends 'company-tern)

別途ternをインストールする必要があります。
npm install -g tern
screenshot
company-tern

flycheck

シンタックスチェック用。

init.el
(straight-use-package 'flycheck)
(add-hook 'after-init-hook #'global-flycheck-mode)

migemo

日本語インクリメンタルサーチ。

init.el
(straight-use-package 'migemo)
(straight-use-package 'helm-migemo)
(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "--emacs"))
(setq migemo-dictionary "/usr/local/Cellar/cmigemo/20110227/share/migemo/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)

参考:migemo.el : ローマ字で日本語検索する神ツールMigemoが更新されたよ!

swiper + migemo

isearchを一覧でだしてくれる。+日本語対応。

init.el
(global-set-key "\C-s" 'swiper)
(defvar swiper-include-line-number-in-search t)
(straight-use-package 'avy)
(straight-use-package 'swiper-helm)
(straight-use-package 'avy-migemo)
(avy-migemo-mode 1)
(require 'avy-migemo-e.g.swiper)

screenshot
swiper

番外:VSCode

普段はemacsなのですが、マークダウンをプレビュー見ながら書きたい時や、PDFにしたいとき用にVSCode入れました。

Extensions

  • Emacs Friendly Keymap
  • Markdown All in One
  • Markdown PDF

screenshot
markdown all in one

17
21
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
17
21