使えるツール(IT)

Vim

Vimのってなれると使いやすいってきくけど、実際どうなの?? 慣れるまでってそんなに難しいの??

vimの特徴

とにかく軽くて速い

基本的にキーボードだけで操作が可能

インサートモードなど色々なモードがある

モード切り替え

モードの切り替えを覚えないとVimは全く役に立ちません。これはマストです!!モードはノーマルモードか基本となり、他の各モードにはノーマルモードから移行します。今どのモードにいるかわからなくなった場合は、ESCキーを押すとノーマルモードに戻れます。

Vimには6つの基本的なモードとそれから派生した5つの派生モードがあるよ!! だけど、実際に使われるモードは4つのモードだよ!!
モードの遍移 モードを変更するためのキー
ノーマル → インサート(入力) i
ノーマル → コマンドライン
ノーマル → ビジュアル v
ノーマル → 検索 /
全てのモード → ノーマル ESC または Ctrl-[

Vimは複数のモードを持ち、これらを切り替えることで全ての編集機能を扱えるようになっている。以後はノーマルモードを基本として紹介します。ちなみに「C-a」で「Ctrl+a」みたいな感じです。これは、技術書などの表記もこのようになっているので、覚えておくのが良いでしょう。

ノーマルモード

このモードは、様々なモードの起点となるモードで,カーソルの移動やテキストの削除・コピー・ペーストなどの簡単な指示ができる。

カーソル移動

h
l
k
j
gj
gk

左へ移動

h

右へ移動

l

上へ移動

k

下へ移動

j

表示行単位で移動(下)

gj

表示行単位で移動(上)

gk

行頭へ移動

行末へ移動

対応するかっこへ移動

この画像は後でもっと詳しくわかりやすい画像を作ります。

インサート(挿入)モード

このモードは、実際にテキストを編集するモードです。

コマンドラインモード

ファイルを開いたり、検索・置換などの様々な指示ができます。

ビジュアルモード

このモードは、入力された文字列を選択するモードです。

 

検索モード

ヘルプ

ヘルプ :h :helpと同じ。ヘルプ画面(索引)を展開
:h [word] [word]にマッチした項目を表示(タイプ後、<C-d>で項目の一覧を表示)
:h [command] ノーマルモードのコマンドを表示(:h CTRL-oなど)
:h i_[command] 挿入モードのコマンドを表示(:h i_tなど)
:h v_[command] ビジュアルモードのコマンドを表示(:h v_oなど)
保存&終了 :e ファイルを開く。新規作成もコレ(:editと同じ)
:w 保存(:w!で強制的に保存)
:q 終了(:q!で編集結果を破棄して終了)
:f ファイル名を変更して編集を続ける(:fileと同じ)
ZZ 保存して終了(:wqと微妙に同じ)
ZQ 保存せずに終了
C-z 中断(fgで復帰。:suspendと同じ)
コピー&ペースト [数値]dd 行をカット
[数値]yy 行をコピー
P ペースト(カレント行)
p ペースト(カーソルの下)
取り消し&やり直し u 取り消し(Undo)
U 行に対して行った変更の全てを取り消す
C-r やり直し(:redoと同じ)
マクロ(キーのレコード) qa[操作]q aレジスタにコマンドを記録
qA[操作]q aレジスタにコマンドを追記
[数値]@a aレジスタのコマンドを再生
@@ 直前に実行したレジスタを再生
選択 v 選択開始
V 行選択
C-v 矩形選択
gv 直前の選択範囲を再選択
検索 /[文字列] 前方検索
?[文字列] 後方検索
# カーソル位置の単語を前方検索
* カーソル位置の単語を後方検索
n 次の候補
N 前の候補
gd カーソル位置のローカル宣言を検索
gD カーソル位置のグローバル宣言を検索
置換 :% s/from/to/g %でページ全体
:32,40 s/from/to/g 32行目から40行目までの間で実行
:/search/s//replace/g 検索候補から置換する

注意1:置換の構文 → :[範囲]s/[検索語句]/[置換語句]/[オプション]

注意2:gオプション → 繰り返し。cオプション → 1回ごとに確認(yで置換。Enterで次へ)

注意3:選択中に「:」でコマンドモードに入ると、選択領域の範囲指定が自動で挿入される(:‘<,’>)。これを置換に利用すれば直感的に作業できる。

テキスト操作

テキスト操作 x 1文字を削除(Deleteキーと同じ方向)
X 1文字を削除(BSキーと同じ方向)
D カーソル位置から行末まで削除
s 1文字を削除して挿入モードへ
S 現在の行を削除して挿入モードへ
r カーソル位置の1文字だけ置換
R 置換モードへ
J 行を連結(スペースあり)
gJ 行を連結(スペースなし)
~ 大文字/小文字に変換
C-a カーソル位置の数字をインクリメント
C-x カーソル位置の数字をデクリメント
C-p (挿入モード時)単語を後方向に検索し、補完する
C-n (挿入モード時)単語を前方向に検索し、補完する
インデント == カレント行のインデント
=[範囲] 指定範囲のインデント
=’m カレント行からマークの位置(この場合はm)までインデントする。
=G カレント行から最終行までインデントする
> カレント行をインデント
< カレント行を逆インデント
画面分割 :sp 画面を上下に分割(:splitと同じ)
:vsp 画面を左右に分割(:vsplitと同じ)
:q ウィンドウを閉じる
:qall 全てのウィンドウを閉じる
:only カレントウィンドウ以外を閉じる
C-wo カレントウィンドウ以外を閉じる
C-ww ウィンドウを順番に移動
C-w[hjkl] ウインドウを{上,下,左,右}に移動
C-w[HJKL] カレントウィンドウを一番{上,下,左,右}に移動
[数値]C-w+ ウィンドウサイズを数字分増やす
[数値]C-w- ウィンドウサイズを数字分減らす
バッファ管理 :e ファイルを開く。新規作成もコレ(:editと同じ)
:ls バッファのリストを表示
:bp 前のバッファ
:bn 次のバッファ
:b[バッファ番号] 指定したバッファを表示
:b# 直前に開いていたバッファを表示
:bd バッファ削除
高度な移動 gg 最初の行へ
G 最後の行へ
[行番号]G 指定した行へ
0 行の最初へ(インデントを無視)
^ 行の最初へ(テキストの最初へ)
$ 行の末尾へ
前の行の最初へ
+ 次の行の最初へ
% 対応する括弧へ
H スクリーンの上端の行へ移動(2Hで2行目)
M スクリーンの中央行へ移動
L スクリーンの下端の行へ移動(2Lで下から2行目)
gm スクリーン幅の中央へ移動(行中の横移動)
C-o 前回のジャンプ位置に戻る
C-i 次回のジャンプ位置に進む
z<Enter> カレント行が画面のトップになる
zz カレント行が画面の中央になる
m[マーク] マークを付加。a-zのレジスタを指定可能。
`[マーク] マークへ移動
単語移動(横移動) w 次の単語に移動
b 前の単語に移動
e 単語の末尾に移動
W 次の単語に移動(記号などは無視)
B 前の単語に移動(記号などは無視)
E 単語の末尾に移動(記号などは無視)
f{char} カーソルを{char}の位置まで移動(3f/で3つめの”/”まで移動)
t{char} カーソルを{char}の左側の位置まで移動(3t/で3つめの”/”の前まで移動)
スクロール(↑) C-b 1画面ずつ
C-u 半画面ずつ
C-y 1行ずつ
スクロール(↓) C-f 1画面ずつ下へ
C-d 半画面ずつ下へ
C-e 1行ずつ下へ
スクロール(→) zl n文字ずつ右へ
zL 半画面ずつ右へへ
スクロール(←) zh n文字ずつ左へ
zH 半画面ずつ左へ

文字コード/改行コード

:set fenc=[文字コード] 文字コードを変更(:set fenc=shift_jis など。:set fileencoding と同じ)
:set ff=[ファイルフォーマット] 改行コードを変更(:set ff=unix など。:set fileformat と同じ)
:e ++enc=[文字コード] 編集中のバッファを、文字コードを指定して再読込
ga カーソル位置の文字コードの値を調べる
:asci カーソル位置の文字コードの値を調べる

 

 

おまけ

ディレクトリ移動 :cd [パス] カレントディレクトリをpathに変更
:cd $HOME カレントディレクトリをホームディレクトリに変更
:cd %:h カレントディレクトリをカレントファイルのパスへ変更
システムコマンド :![コマンド] コマンドを実行し、結果を表示する
ex1. :!mkdir -m 775 ./test/
ex2. :!perl -cw test.cgi
:[範囲]![コマンド] 選択範囲を標準入力でコマンドに渡し、出力結果で置換する
:r![コマンド] コマンドを実行し、標準出力を挿入する(カーソル位置)
レジスタ :display 格納されているレジスタを表示
“ap aレジスタを貼付け
“*p クリップボードの中身を貼付け
C-ra aレジスタを貼付け(ノーマルモード、コマンド入力時、検索時)
レジスタの詳細
0 最後にカット/ヤンクした文字列
[1–9] カット/削除した文字列が1から順に格納されている
[a–z] ユーザ定義。マクロ、マークなど
% 編集中のバッファのファイル名
# 直前に開いたバッファのファイル名
* システムのクリップボード
/ 直前の検索語句
? 直前の検索語句
: 直前に入力したコマンド
削除した文字列(1行以下)
. 挿入モードにて入力した文字列
= 計算式(数式、文字列、Vim変数、Vim関数)を入力 → pなどで貼付け