Tech Lunch 2024-08-29 @fohte
- normal mode, insert mode, ... というモードを切り替えて操作することが特徴のテキストエディター
- VSCode などは Vim でいうと常に insert mode ともいえる
- Vim は怖くない
- 知っているショートカットをひとつでも増やして QoL を上げよう
-
Vim を使ってない人
- 安心してください、使いたくなります
-
Vim を使ってる人
- 安心してください、もっと早く操作できます
-
この資料をすでに全部わかっていた人
- 僕に Vim を教えてください
- 今回のスライドでは Vim そのものは紹介しません
- Vim をシミュレートした環境 (VSCode の Vim プラグインなど) でも使えるように話をします
- 急に全部覚える必要はない
- まずは矢印キーやマウスを使ってカーソル操作するだけでもよい
- 徐々に便利なものだけ覚えて使っていこう
- macOS で使える ctrl+a, ctrl+e みたいなカジュアルなショートカットとして利用しよう
- Vim にはよく利用するモードが 4 つあります
- normal mode
- insert mode
- visual mode
- command-line mode
- 入力はしない。移動や削除などの操作をするモード。
- この操作のショートカットが非常に多い
- Vim 開いたときは normal mode から始まる
- 文字を入力したいときは
iで insert mode にする
- 文字を入力するモード。通常のテキストエディタと同じ。
- normal mode に戻りたくなったら
Escapeを押す
- このモードは最初は覚えなくてよい
- テキストの特定の範囲を選択して、その選択範囲に編集や操作するモード
- 他のエディタで、ダブルクリックしたときに選択するのと同じ
- normal mode で
:を打つとコマンド入力できる- VSCode の
Command+pに似ているかも
- VSCode の
- たとえば
:w=> ファイルを保存する:q=> Vim を終了する:wq=> ファイルを保存して Vim を終了する
- 文字入力したい!
i押す
- insert mode から抜けたい!
Escape押す
- ファイル保存したい!
Escape->:w
- Vim 終了したい!
Escape->:q
- Vim はもっと便利になる
- がまずは基本操作を知ろう
- normal mode の基本的な操作
- h, j, k, l
- ← ↓ ↑ → に相当
i- normal mode -> insert mode に移行
:- command-line mode に移行
- h, j, k, l
dd: カーソル行を削除するp: ペーストするyy: コピーする>>,<<: インデント
gg,G: ファイル先頭に移動 / ファイル最終行に移動w,W/b,B: word ごと移動w: 後ろに移動b: 前に移動W,B: 記号も word とみなして移動
$: カーソル行の一番右側に移動^: 一番左側に移動 (インデントよりは左にいかない)zz: カーソル行を画面の中心にする (スクロールさせる)
/で検索開始/defと入力するとdefで内検索
n: 検索したキーワードの次の場所に飛ぶN:nの逆版 (前の場所に飛ぶ)
a: 現在のカーソルの後ろで insert mode 開始- 📝 便利な場面:
$->iしても末尾から入力できないので$->a
- 📝 便利な場面:
A: 現在のカーソル行の末尾から insert mode 開始I: カーソル行の最初から insert mode 開始
o: 改行して insert mode 開始- 📝
i-> 改行 とほぼ同じ Oだとカーソル行の前に改行
- 📝
S: いまの行を全部削除して insert mode 開始
},{: 次/前の空行に移動%: 対応する括弧に移動*: カーソル下の word で検索/で検索するのと同じ
f-> なにか 1 文字: カーソル行の後方にある 1 文字に移動t:fの手前バージョン
ciw: カーソル下の word を削除して insert mode 開始- change inner word と覚えるとよい
.: 前の操作を繰り返す- 例:
*->ciw-> 入力 -> Escape ->n->.->n->.-> ...
- 例:
ciwみたいなものがたくさんある- これが Vim 大好きな理由のひとつ
ciwだとcが operator- change (消して insert mode) という「操作」
iwが textobj- inner word という「選択範囲」
d: delete- 例:
diw
- 例:
y: コピー- 例:
yiw
- 例:
i(,i', ...: その文字で囲まれた中a(,a', ...: その文字で囲まれた部分 (囲み文字も含む)
- operator, textobj を増やすプラグインが特に便利
- operator
sa: 括弧などを追加gc: コメントアウト・コメントアウト解除
- textobj
i,: inner comma- thinca/vim-textobj-between
- 例:
func(a, b)のaやbだけ選択する
if+ 任意の 1 文字: 任意の文字で囲まれた部分- sgur/vim-textobj-parameter
- 例:
|a, b|のa, bを選択
- 紹介しきれなかったが便利なものがたくさんあります
- visual mode とか
- macro とか