emacsの設定が難しい? だからこそかっこよく使おうじゃないか!

2020/01/10

emacs Linux RandomGrid Ubuntu アイデアノート 技術 構築日記

t f B! P L

宇宙史上最高のテキストエディタ"emacs"

Linux系OSはコマンドラインでOSを操作するのが当然、
ではあるのですが、
コマンドラインでソフトウェアのソースコードの編集は現実的ではないので、
当然テキストエディタを使用します。

その中でもLinuxには
宇宙史上類を見ない最高のテキストエディタ
その名も貴き emacs があります!

それ以外?
ああ、まあ他にもありますね、
軽いだけが取り柄のviとかよく知りませんけど。

emacsの利点は、
その異常な拡張性の一言に尽きるでしょう。

生で使用すればただのテキストエディタなのですが、
拡張していくことで下手な統合開発環境よりずっと高機能な開発環境になります。

しかしながらWindowsなどのテキストエディタと異なり、
拡張にはLisp(emacs Lisp)というプログラミング言語を用いた、
若干のプログラム作成が必要となります。

これはLinuxを始めたばかりの人にはたいへん取り付きにくい内容ではありますので、
今回、プログラムコーディング用のテキストエディタとして、
一通りの機能を実現させた .emacs ファイルをここにおいておきたいと思います。

使用方法

まずemacsを開き、必要なパッケージをインストールしましょう。

(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")))
(package-initialize)

自前の環境の.emacsファイルに上記記述をしたら、一度保存、
emacsを立ち上げ直します。
デフォルトのelpaは流石にもう古いので、
今から環境を立ち上げるのであれば、
消してしまって構わないでしょう。

立ち上げ直したら、
(M-x)  package-install
このコマンドを実行して一つ一つパッケージを入れていきます。
一覧で表示してくれるコマンドもあるのですが、
個人的にはコマンド一個一個打ったほうが早い気がしています。

今回インストールするパッケージは以下の6つだけです。
これだけで、それ以上の設定なしに多くのプログラム言語に対応できる、
便利なテキストエディタが完成します。
  1. counsel 依存関係のあるswiper と ivy は自動で入ります
  2. yasnipet
  3. company
  4. dumb-jump
  5. neotree
  6. symbol-overlay
各パッケージの作者様には頭が上がりません。

そしてフォントもインストールしておきましょう、
コーディングをする上ではフォントの見やすさで確実にバグを作り込む数が減ります。
下準備はこれで完了です。

.emacs ファイルの追記

以下の内容を丸々.emacsファイルに追記します。
Ubuntu環境であれば、それだけで設定は完了です。

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(inhibit-startup-screen t)
 '(package-selected-packages
   (quote
 (symbol-overlay neotree company yasnippet counsel monokai-theme hiwin))))
(custom-set-faces)

;; environmental config ----------------------------------------------
(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)

;; view config -------------------------------------------------------
(add-to-list 'default-frame-alist '(font . "Cica" ))
(load-theme 'monokai t)
(hiwin-activate)
(set-face-background 'hiwin-face "gray50")
(global-linum-mode t)
(column-number-mode t)
(menu-bar-mode 0)
(tool-bar-mode 0)
(which-function-mode t)
(show-paren-mode t)
(global-highlight-changes-mode t)
(setq show-paren-style 'expression)
(setq show-paren-delay 0)
(setq default-tab-width 4)
(setq frame-title-format "%f")
(setq mouse-wheel-scroll-amount '(1 ((shift) . 5)))
(setq mouse-wheel-progressive-speed nil)
(setq ring-bell-function 'ignore)
(set-face-attribute
 'show-paren-match-face nil
 :background "gray90"
 :foreground "gray30"
 :weight 'bold)

;; ivy config --------------------------------------------------------
(ivy-mode 1)
(setq ivy-use-virtual-buffers t)
(setq enable-recursive-minibuffers t)
(setq ivy-height 20)
(setq ivy-extra-directories nil)
(setq ivy-re-builders-alist
      '((t . ivy--regex-plus)))

;; counsel config ----------------------------------------------------
(setq counsel-find-file-ignore-regexp (regexp-opt '("./" "../")))

;; swiper config  ----------------------------------------------------
(setq swiper-include-line-number-in-search t)

;; yasnipet config  --------------------------------------------------
(yas-global-mode 1)

;; company config  ---------------------------------------------------
(global-company-mode)
(setq company-idle-delay 0)
(setq company-minimum-prefix-length 2)
(setq company-selection-wrap-around t)
(setq completion-ignore-case t)
(setq company-dabbrev-downcase nil)
(defvar company-mode/enable-yas t
  "Enable yasnippet for all backends.")
(defun company-mode/backend-with-yas (backend)
  (if (or (not company-mode/enable-yas)
    (and (listp backend)
   (member 'company-yasnippet backend)))
      backend
    (append (if (consp backend) backend (list backend))
            '(:with company-yasnippet))))
(setq company-backends (mapcar #'company-mode/backend-with-yas company-backends))

;; dumb-jump config  -------------------------------------------------
(setq dumb-jump-mode t)
(setq dumb-jump-selector 'ivy)
(setq dumb-jump-use-visible-window nil)

;; neotree -----------------------------------------------------------
(setq neo-theme 'icon)
(setq neo-persist-show t)
(setq neo-smart-open t)

;; symbol-overlay config ---------------------------------------------
(add-hook 'prog-mode-hook #'symbol-overlay-mode)
(add-hook 'markdown-mode-hook #'symbol-overlay-mode)

;; key config  -------------------------------------------------------
(windmove-default-keybindings)
(setq windmove-wrap-around t)
(global-unset-key (kbd "C-o"))
(global-set-key (kbd "M-x") 'counsel-M-x)
(global-set-key (kbd "C-x C-f") 'counsel-find-file)
(global-set-key (kbd "C-s") 'swiper)
(global-set-key (kbd "C-c g") 'counsel-git-grep)
(global-set-key (kbd "C-c C-j") 'dumb-jump-go)
(global-set-key (kbd "C-c C-b")  'dumb-jump-back)
(global-set-key (kbd "C-o") 'neotree-toggle)

いかがでしょうか?

たったこれだけの手順で、
驚くほどコーディングのしやすいemacs環境が出来上がると思います。

もちろんこの環境は、私が使いやすい、と思って作った環境なので、
もっと良い環境がほしいのであれば一つ一つ調べて更に改良していくのもいいでしょう。

皆様もぜひ楽しいLinuxライフをお過ごしください。

Translate

ページビューの合計

注意書き

基本的にごった煮ブログですので、カテゴリから記事を参照していただけると読みやすいかと存じます。

ADBlocker等を使用していると、Twitterやアクセスカウンタが表示されません。

記事を読むには差し支えませんが、情報を参照したい場合には一時例外にしていただけると全てご参照いただけます。

Featured Post

ボイドラDICEの攻略法

QooQ