モーダルエディタの概念から実践的なテクニックまで
ゼロからVimを学ぶ
キーボードだけで高速編集 - 生産性を向上させるモーダルエディタ
Vimは「モーダルエディタ」と呼ばれ、普通のエディタと違い、モードを切り替えて使います。これには重要な理由があります:
移動・入力・選択をモードで切り替え。hjklのようなキーを複数の目的で使い回し、ショートカットを減らします。
「何をするか(オペレータ)」と「どこまで(モーション)」を組み合わせることで、無限の編集パターンを作れます。
d(削除)+ w(単語)= dw(単語を削除)
SSH接続先のサーバー、Dockerコンテナ、ターミナルなど、GUIが使えない環境でも必ず利用できます。
Vimを理解する上で欠かせない4つのモード
最も重要なモード
コードを書くより読んだり移動したりする時間の方が長いため、このモードがデフォルトです。
文字入力モード
通常のテキストエディタのように文字を入力できます。Ctrl+nで補完も使えます。
テキスト選択
選択してからコピー・削除・置換などを行います。
特殊操作
保存・終了・検索・置換などの特殊なコマンドを実行します。
:w - 保存:q - 終了:wq - 保存して終了Vimの強力さは「何をするか(オペレータ)」と「どこまで(モーション)」を組み合わせることにあります。
d 削除(delete)c 変更(change)y コピー(yank)v 選択(visual)> インデントw 次の単語e 単語の末尾b 前の単語$ 行末までiw 単語全体(inner word)dw
→
カーソルから次の単語まで削除
diw
→
カーソル下の単語を丸ごと削除
y$
→
カーソルから行末までコピー
ci"
→
""内を削除して挿入モード
i = inner(内側)/ a = around(周り含む)
iw = 単語i" = ""内i( = ()内i{ = {}内it = HTMLタグ内基本のhjklから効率的な移動まで実際に試そう
キーボードのキーを押して、テキストエリア内のカーソルを動かしてみてください
💡 ggで文書先頭、Gで文書末尾にジャンプできます
よく使うコマンドをカテゴリ別に表示。コピーしてすぐ使えます。
Vimではコマンドの前に数字を付けると、その回数分繰り返します。
5j
→ 5行下へ
3dd
→ 3行削除
10G
→ 10行目へ
:w:q:wq:q!:e filename:sav filename実際のコードを例に、Vimでの操作を紹介
// ファイルの上部
function helper() {
return "help";
}
function main() {
console.log("start");
}
// この下に移動したい
// ファイルの上部
function main() {
console.log("start");
}
// この下に移動したい
function helper() {
return "help";
}
let userName = "John";
let userAge = 30;
let userEmail = "john@example.com";
let customerName = "John";
let customerAge = 30;
let customerEmail = "john@example.com";
:%s/user/customer/g
%=全行、s=置換、g=行内全て
:%s/user/customer/gc
c=確認しながら(y/n/a/q/l)
% = ファイル全体s = substitute(置換)/old/new/ = 古い文字列→新しい文字列g = global(行内の全て)console.log("line 1");
console.log("line 2");
console.log("line 3");
console.log("line 4");
// console.log("line 1");
// console.log("line 2");
// console.log("line 3");
// console.log("line 4");
Vimをマスターするための重要な概念
Vimは削除やコピーした内容をレジスタに保存します。
"ayy → レジスタaに行をコピー"ap → レジスタaからペースト:reg → レジスタ一覧表示通常のddやyyは無名レジスタ(")に保存されます。
最後に行った操作を繰り返します。これはVimの強力な機能の一つです。
ciw → 単語を変更
一連の操作を記録して再生できます。
qa → マクロaの記録開始q → 記録終了@a → マクロaを実行@@ → 最後のマクロを再実行5@a → 5回実行Vimには充実した組み込みヘルプがあります。
:help → ヘルプ全体:help dd → ddコマンドのヘルプ:help i_<Esc> → 挿入モードでのEscのヘルプ使いやすくするための基本設定
~/.vimrc(Linux/Mac)または ~/_vimrc(Windows)に設定を書きます。
" 行番号表示
set number
" シンタックスハイライト(色付け)
syntax on
" タブをスペースに変換
set expandtab
set tabstop=2
set shiftwidth=2
" 検索時にハイライト
set hlsearch
" 検索時の大文字小文字
set ignorecase " 小文字だけなら大文字小文字無視
set smartcase " 大文字を含めたら区別する
ignorecase + smartcase: 小文字だけで検索すると「test」が「Test」「TEST」にもマッチ。大文字を含めると「Test」は「test」にマッチしません。
" カラースキーム(環境によって異なる場合あり)
set background=dark
try
colorscheme desert
catch
" デフォルトを使用
endtry
" カーソル行をハイライト
set cursorline
" 対応する括弧を表示
set showmatch
" ステータスラインを常に表示
set laststatus=2
注意: Neovimや特定の環境ではdesertがない場合があります。try-catchで囲むと安全です。
" バックスペースで削除可能に
set backspace=indent,eol,start
" マウス操作(賛否両論あり)
" 有効にすると端末でのコピペ方法が変わります
" set mouse=a
" 自動インデント
set autoindent
set smartindent
" 自動コメントアウトを無効化
" 新しい行を作った時に自動でコメント記号を入れない
autocmd FileType * setlocal formatoptions-=r
autocmd FileType * setlocal formatoptions-=o
マウス設定: 有効にするとVim内でマウスが使えますが、端末本来のコピペ(選択してCtrl+C)が使えなくなります。Vim方式のコピペ(yank/paste)を使う必要があります。
~/.vimrc を作成