⌨️

電通大生の脳死Emacs撲滅運動とVimのすゝめ - 1

2024/12/12に公開

この記事は, team411アドベントカレンダー Advent Calendar 2024 12日目の記事です.

昨日の記事はまくらさんの色んな無料Web APIを使ってみよう!についての記事でした.

APIは自動化の時にサーバーからデータを取ってくるのに必要なので, 勉強しておいて損はありませんね.

私も早く勉強せねば...

また, 同様の記事をMMA Advent Calendarでも書いているので, ぜひそちらもご参照ください.

https://zenn.dev/sasori_256/articles/f8dbb50a3b73cb

はじめに

カフェイン片手に限界突破しようとしている皆さん, ごきげんよう. 電通大1年生のむつみんです.

この記事では, 電気通信大学の情報の授業で用いられるテキストエディタ「Emacs」を脳死で使ってしまっている学生たちを救い出すことを目的としています.

対象読者

  • 電通大生
  • その他授業などででEmacsを使っている大学生
  • Vimに少しでも興味がある人

この記事で紹介すること

  • テキストエディタのカスタマイズの重要性
  • Vimの基本的なカスタマイズ
  • EmacsとVimの違い
  • Neovimの概要

Emacsは古来より用いられるコマンド操作式の由緒正しきテキストエディタの一つではあるのですが, 授業で使うとなると如何せんただのメモ帳のように使ってしまっている方が多いように感じます. Emacsを使いこなせるようにコマンドを少しづつ覚えていくならまだしも, 矢印キーでカーソルで移動したり, マウス操作で文字を選択したり, 挙句の果てには保存などコマンドで一発の操作までまでわざわざボタンをクリックして行う方も...

このままではいけない!

テキストエディタは皆さんが将来プログラマーになるなら一生付き合うものであり, 少しでもタイムパフォーマンス(以下タイパ)を向上させることがプログラマ人生をより良くする一手となるのです.

そのため, Emacsをただのメモ帳で終わらせるぐらいならばいっそのことVimを使ってしまいましょう.

テキストエディタの基本

Vimとは

そもそもVimとは何ぞや? という方が多いと思います. Vimとは, CUI(キャラクターユーザインタフェース)で操作可能なテキストエディタであり, 操作を全てキーボード操作で完結できるという強みがあります.

コーディング作業においては通常, 文字を打ち込むことよりもマウスを操作してファイル内を飛び回ったり, ファイル間を往復したりすることが多いことでしょう.

VS Codeなどでもマウス操作はたった数回ならばキーボードから手を放してマウスに持っていくという時間も気にならないでしょう.
しかしそれが何十回, 何百回と積み重なっていけば想像以上に時間を取られ, ストレスを感じることこの上なし.

その点Vimではモード変換などを駆使し, 操作をキーボードで完結できるため無駄なマウス操作を減らすことができ, ストレスフリーなコーディング環境を体験することができます.

さらに, CUIで作動することからサーバー上でも簡単に操作ができるため, 修正のためにわざわざローカル上でファイルを修正してアップするという手間も省くことができます.

Vimは現代で重要なタイパの向上を推し進めてくれるのです.

じゃあEmacsはどうなんだ

EmacsもVimと同様に, キーボード操作で全てを完結できるエディタです.

GUIとCUIどちらにも対応していますが, CUIを使っている人はほぼいません.

そのため, Emacsのウィンドウ上で様々な作業を行います.

両者の違い

VimもEmacsもカスタマイズ性に優れていたり, ホームポジションから大きく手を動かすことが少なくて済むという点で基本理念は似通っているところがあります.

しかし,

似ているならどっちでもいいじゃん...

と言いたくなりますが, 操作方法など根本的な部分から両者とも全然違います.

Vimの基本的な操作は各種モードによってサポートされており, 例えばiでインサートモードに入って文字の入力を行い, Escキー(設定でjjなどの簡単な入力をEscに対応させることも可能)でノーマルモードになることで複数行を跨ぐようなカーソル移動やその他の便利な操作を行うことが可能です.

基本的にはEmacsのコマンドとしてControl, Meta(Alt)キーを押しながらあれこれと操作することができます.

例えば, VimとEmacsでは両方ともカーソル移動の際に矢印キーを使わなくても済むように操作方法が設定されています.
具体的には次の表の通りに対応しています(C-xはControlを押しながらx).

editor
Vim h j k l
Emacs C-b C-n C-p C-f

Vimでは

  • hjkl

というキーボード上で連続したキーを使うことでホームポジションの維持がしやすくなり, Emacsでは

  • b: back
  • f: forward
  • p: previous
  • n: next

というように行う操作の頭文字を割り当てて意味を覚えやすくなっています(キーボード上での位置はバラバラですが).

ここで言いたいのは, 皆さんがこれまでタイピングで学んできたように, ホームポジションの維持がタイパ向上に重要なのです.

わざわざマウスや矢印キーで操作するよりもこれらコマンドを活用した方が断然タイパが良いということですね.

個人的には, 毎回小指を犠牲にしてControlキーを押しながらほとんどの操作を行うよりも, そのままキーを押すだけで操作が可能なVimの方が断然良いと感じていますが, ここまでなら好みや宗教の問題と言えます.

また他にも, EmacsはGUIベースな機能が多いため, サーバー上で動かすにはGUIウィンドウ表示ツールが必要になったりするなど少々手間がかかったり, 起動が遅かったりなどの違いがあります.

脳死Emacsユーザーに伝えたい

電気通信大学でEmacsは前学期に学校の授業で触れて, テスト問題でもEmacsに関する問題が出題されるなど, 学校標準のテキストエディタとして扱われています(上級生で使い続けている人はほぼいませんが).
一年生は大抵そのまま後学期もEmacsを使い続ける場合が多いようですが, 冒頭でも触れたように脳死でEmacsをそのままWindowsのメモ帳と同じような感覚で使っている人のなんと多いことか...

そんな皆さんに伝えたい.

どうせ使うならカスタマイズして使いこなせるようになれ!!!

と.

皆さん大好きVS Codeですら拡張機能などでカスタマイズが可能だというのに, これらのテキストエディタでカスタマイズしない手はありません.

やりましょう, カスタマイズ.
将来の貴重な時間のためにも.

Vim導入のすゝめ

とはいっても操作方法も分からないままいきなり完全にVimに移行することは大変です.

そしてほとんどの人が現在VS Codeを使ってコードを書いていると思います.

ならばこそ, VS Codeの拡張機能を使ってVimを使ってみましょう.

既にある程度までカスタマイズがされている状態なので, 残りは気になるキーマッピングを設定するだけになっています.

また, もしVimに惹かれていてすぐにでも環境に導入したいなら以下を参考にしてください.

Windows

こちらのサイトから日本語に対応したVimをダウンロードできます.

https://www.kaoriya.net/software/vim/

ダウンロードしたらフォルダのパスを通してあげましょう.

Mac

homebrewでインストールしてあげて, パスを通してあげましょう.

$ brew update
$ brew install lua
$ brew install macvim --devel --with-lua
$ echo $PATH #で/usr/local/binが無い場合
$ export PATH="/usr/local/bin:$PATH"

Linux(Ubuntu)

sudoとapt-getなどで一発です.

$ sudo apt-get install vim

Vimの基本

以下の記事にVimの基本操作が載っているので参考にしてください.

https://qiita.com/Keitachan/items/74381b969bcca81b4798

さらに, Vimでは.vimrcファイルをホームディレクトリ上に作成することで簡単にカスタマイズできます.

私が使っている.vimrcから何かしらピックアップしてみました.

VS Code拡張機能を使っている方もキーマッピングなどを参考にしてください.

""____________________________________________________________________
"" basic
""____________________________________________________________________
set nocompatible
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,cp932,euc-jp,sjis
set fileformats=unix,dos,mac
set ambiwidth=double
set backspace=indent,eol,start
set clipboard+=unnamedplus
set splitbelow
set splitright

""____________________________________________________________________
"" visual
""____________________________________________________________________
set number
set ruler
set title
set cursorline
set virtualedit=onemore
set showmatch
set matchpairs+=<:>,:,:,:,:,:,:source $vimruntime/macros/matchit.vim " vimの「%」を拡張する
set visualbell
set whichwrap=b,s,h,l,<,>,[,],~ " 左右移動で行末から次の行へ移動
set wrap
set linebreak
set showbreak==>>>
set foldmethod=syntax
set foldlevelstart=99
set listchars=tab:>-,trail:-,extends:>,precedes:<,nbsp:%
set list  " show space and line break symbols
set spell
syntax on

""____________________________________________________________________
"" tab
""____________________________________________________________________
set expandtab
set tabstop=2
set shiftwidth=2
set softtabstop=2
set autoindent
set smartindent

""____________________________________________________________________
"" search
""____________________________________________________________________
set hlsearch
set incsearch
set ignorecase
set smartcase
set wrapscan
set autoread

""____________________________________________________________________
"" menu
""____________________________________________________________________
set wildmenu
set wildmode=longest:full,full
set cmdheight=2
set laststatus=2

""____________________________________________________________________
"" mappings
""____________________________________________________________________
nnoremap y y$
nnoremap u <c-r>
nnoremap <esc><esc> :nohlsearch<cr><esc>
nnoremap <c-a> ggvg
nnoremap j gj
nnoremap k gk
vnoremap j gj
vnoremap k gk
nnoremap n nzz  " ジャンプ時に画面を中央にする
nnoremap n nzzn

inoremap ( ()<left>
inoremap { {}<left>
inoremap [ []<left>
inoremap " ""<left>
inoremap ' ''<left>
inoremap jj <esc>
inoremap <c-h> <left>
inoremap <c-j> <down>
inoremap <c-k> <up>
inoremap <c-l> <right>

これをやっておけば万事解決です.

まずはこれをやっておいて, 分からない設定については調べてみるとかなり知見が広がります.

以下は簡単にカスタマイズした後のVimの操作画面で, 基本的な操作を行っています.

簡単な設定でもそれなりに画面表示を良くすることができ, 操作も楽にできます.

見た目も機能ももっと良くしたい!

え? 見た目も機能ももっとつよつよにしたいですって?

なんと欲張りな...

そんなあなたには, こちらがたいへんお似合いです.

https://qiita.com/hwatahik/items/2a9f6f3cddeb8e19abc2

そう, 更に現代的になったVimであるNeovimです.

こちらでは, VScodeと同等, またはそれ以上に使いやすく軽量でかっこいいIDE(総合開発環境)を作れるようになっています.

MMAのアドベントカレンダーの方でもう少し詳しく触れていたりするので, 良ければ見ていってください.

こちらのアドベントカレンダー2日目の記事でも開発環境にこだわることをおすすめされていますので, 是非ともVS CodeだけでなくVimもこだわってみましょう.

https://zenn.dev/team411/articles/kanaru5757-vscode-theme

私も今ではNeovimを使っているのですが, 革命的に使い心地が変わりました.

WezTermと組み合わせてあげるともっと良くなるかもしれませんね.

終わりに

Zennはおろか, 技術記事事態を初めて書いたのですが, 何とか書ききれました.

最初にVimについて書こうと思ったときはここまで長くなるつもりはなかったのですが, バリバリに長くなってしまいましたね.

それでもなおこの記事を根気強く読んでくれた方々はありがとうございます.

あなたのエンジニアライフとVimライフに幸あらんことを.

むつみんでした.

Discussion