VimはLinuxのテキストエディタのひとつで,Windowsのメモ帳みたいなもの.しかし,操作方法が特殊なので,勉強したことをまとめておく.
機能はたくさんあるが,Vimを使ってソースコードを書いていたときに,よく使った操作についてのみ書いておく.
起動
.sh
# Vimの起動
$ vim <ファイル名>
- **vim <ファイル名>**で,Vimが起動し,指定したファイルを編集できるようになる.
- 新規作成するファイルでも保存される.
保存と終了
.sh
# 作成中のファイルを保存して,Vimを終了
:wq
-
:wと:qを合わせたコマンドで,作成中のファイルを保存して,Vimを終了する. -
:wだけだと上書き保存.Windowsでの[Ctrl]+[s]と同じ. -
:q!で,現在の編集内容を破棄してVimを終了. -
:qだけだとVimを終了だが,「最後の変更が保存されていません(!を追加で変更を破棄)」と警告が出るので結局使うのはq!になる.
Vimのモード
- **
ノーマルモード,インサートモード,Exモード**が存在する. -
ノーマルモードはカーソルの移動や文字列の削除,コピー&ペーストができる.
vimコマンドで起動したときはノーマルモードになっている. - インサートモードはファイルに文字の入力を行う.
- exモードは文字列の置換や検索ができる.
-
ノーマルモードからインサートモードへは,
a,i,oコマンドで移行できる.戻るときは[Esc]を押す. -
ノーマルモードからexモードへは,
:コマンドで移行できる.戻るときは[Esc]を押す.
| コマンド | 実行内容 |
|---|---|
| i | カーソル位置の左から入力開始 |
| I | 行頭から入力開始 |
| a | カーソル位置の右から入力開始 |
| A | 行末から入力開始 |
| o | 下に1行挿入し行頭に文字を追加 |
| O | 上に1行挿入し行頭に文字を追加 |
カーソルの移動
1文字or1行での移動
- **文字単位での移動は,
h,j,k,l**コマンドを使用する. - 各コマンドでの移動方向は表の通り.ホームポジションから手を動かさずに操作できるようになっている.
| コマンド | 実行内容 |
|---|---|
| h | 左に移動 |
| j | 下に移動 |
| k | 上に移動 |
| l | 右に移動 |
1単語での移動
- **単語単位での移動は,
w,b**コマンドを使用する. - **行頭への移動は
0**コマンド,**行末への移動は$**コマンドを使用する. - 各コマンドの移動は表の通り.
W,Bコマンドを使うとb,wコマンドよりも大きく移動できる.
| コマンド | 実行内容 |
|---|---|
| w | 前方に単語1つぶん移動 |
| j | 後方に単語1つぶん移動 |
| W | スペース区切りで前方に単語1つぶん移動 |
| B | スペース区切りで後方に単語1つぶん移動 |
| 0 | 行頭に移動 |
| $ | 行末に移動 |
行番号での移動
- 行単位での移動は,
gコマンドを使用する. -
ggで先頭行に移動,Gで最後の行に移動する - 各コマンドの移動は表の通り.
<数字>Gで指定した行に移動できる.
| コマンド | 実行内容 |
|---|---|
| gg | 1行目に移動 |
| G | 最後の行に移動 |
| <数字>G | <数字>行目に移動 |
コピー&ペースト
切り取り
-
切り取りは
x,dコマンドで行う.Windowsの[Ctrl]+[x]と同じ. -
xコマンドは1文字ずつ切り取る. -
d+位置移動に使われるコマンド(0,$,gなど)で切り取り範囲を指定できる.
| コマンド | 実行内容 |
|---|---|
| x, dl | 現在位置から1文字を切り取り |
| dw | 現在位置から1単語を切り取り |
| dd | 現在カーソルのある行を切り取り |
| d0 | 現在位置から行頭までを切り取り |
| d$ | 現在位置から行末までを切り取り |
| dgg | 現在位置から最初の行までを切り取り |
| dG | 現在位置から最後の行までを切り取り |
コピー
-
コピーは
yコマンドで行う.Windowsの[Ctrl]+[c]と同じ. -
y+位置移動に使われるコマンド(0,$,gなど)でコピー範囲を指定できる.
| コマンド | 実行内容 |
|---|---|
| yl | 現在位置から1文字をコピー |
| yw | 現在位置から1単語をコピー |
| yy | 現在カーソルのある行をコピー |
| y0 | 現在位置から行頭までをコピー |
| y$ | 現在位置から行末までをコピー |
| ygg | 現在位置から最初の行までをコピー |
| yG | 現在位置から最後の行までをコピー |
貼り付け
-
pコマンドで,d,yコマンドで切り取りまたはコピーした文字列を貼り付けられる.Windowsの[Ctrl]+[v]と同じ.
範囲指定
ビジュアルモード
複数行を範囲指定で選択したいときは,ビジュアルモードが使える.
- **[Shift]+[v]**を実行.ノーマルモードからビジュアルモードに移行する.
- カーソルの移動で範囲を指定.
- **
d,y**で切り取りまたはコピー.
マーク機能
ある位置からある位置まで範囲指定して選択したいときは,マーク機能が使える.
- 選択したい範囲の最初の位置に移動.
- mmを入力.
- 選択したい範囲の最後の位置に移動.
-
d
m**,**ymで指定した範囲を切り取りまたはコピー.
※**`**はバッククォートなので,シングルクォートと間違わないように注意.
検索と置換
検索
.sh
/<検索したい文字列>
- ノーマルモードで**
/を入力し,その後に検索したい文字列を入力**. - 検索はlessコマンドと同じ操作で行う.
| コマンド | 実行内容 |
|---|---|
| /<検索したい文字列> | 下方向に向かって検索 |
| ?<検索したい文字列> | 上方向に向かって検索 |
| n | 次の検索結果に移動 |
| N | 前の検索結果に移動 |
- <検索したい文字列>の先頭にカーソルを合わせ,#を入力すると文字列の検索ができる.
置換
.sh
:%s /<置換元文字列>/<置換後文字列>/g
- ファイル上の全ての<置換元文字列>を<置換後文字列>に置換できる.
- **%**を入力しないと,カーソルがある行のみを対象に置換を行う.
その他の操作
結合
-
Jコマンドで現在の行とすぐ下の行を連結できる. -
xコマンドでは行末の改行を削除することができないため,Jコマンドを使う必要がある.
undo
-
uコマンドで直前の編集作業を取り消して前の状態に戻すことができる.
redo
- [Ctrl]+[r]でundoする前の状態に戻すことができる.