鶏口牛後な日々

魔法使い(なんでも作れるエンジニア)を目指してます。ブログは発散中

いろいろ便利なvim倉庫(初心者向け)[WIP]

自分が覚えるためのメモ。 色々なところで知った内容をシンプルに記録。

vimでカーソル移動

h(左)
j(下)
k(上)
l(右)

vimで行移動

gj(下)
gk(上)

行の中で移動

0 行の先頭へ(インデント無視して先頭へ)
^ 行の先頭へ(文字がある先頭へ)
$ 行の末尾へ
+ 下の行の先頭へ
- 上の行の先頭へ

ページ単位で移動

ctrl + u 半画面分 上へ
ctrl + d 半画面分 下へ
ctrl + b 一画面分 上へ
ctrl + f 一画面分 下へ
{ 段落毎に上へ
} 段落毎に下へ
gg そのファイルの先頭へ
G そのファイルの末尾へ
:100 100行目へ

単語単位で移動

b 前へ
w 後ろへ
e 後ろへ

元へ戻す

u

vimで行番号を表示したい

:set number

vimで行番号を非表示にしたい

:set nonumber

行番号を恒常的に表示させたい

vi ~/vimrc に、以下を記述

set number

スペースで表示されているインデントをタブに変換

: set expandtab
: retab!

タブで表示されているインデントを空白に変換

: set expandtab
: retab

vimのコメントの色を変えたい

echo “hi Comment ctermfg=gray” >> ~/.vimrc

上記例では、コメントの色を灰色に変更しています。

下に一行追加したあと、insertに切り替える

o

削除

x カーソル上の文字を消す
s カーソル上の文字を消してインサートモードに切り替える
cc 当該行を削除したあと、insertに切り替える
dd 当該行を削除
D カーソル位置から行末まで削除
C カーソル位置から行末まで削除して, インサートモードに入る
cit タグの中身を消して、インサートモードに入る
(cはインサートモードへの切り替え、iは範囲選択、tはタグらしい。tの代わりに<などを入れると、<>で囲まれた範囲を消す)

参考: vimでhtmlをスラスラ書くためのレシピ

コピー&ペースト

yy カーソル行をコピー
3yy カーソル行から3行をコピー
p ペースト
3p カーソル行から3行後にコピー
vで範囲指定 → y 範囲選択した後に、選択範囲をコピー

ヴィジュアルモード

v 範囲選択ができる

検索

/ + Enter 後方検索
n 上記で検索した後、次の検索結果に進む(カーソルを進める)
N 前の検索結果に戻る(カーソルを戻す)
? + Enter 前方検索

文字列置換

:s が置換に当たる。
:%s で、今開いているファイル内で置換する、という意味になる。
:%s/before/after で、 beforeafter に置き換える。
:%s/before/after/g で、1行内に、複数回 before が出てきた場合も、全て置換する。
:%s/before/after/gc で、検索で引っかかった before ごとに確認しながら置換する。(置換する時は、 y

小文字→大文字

Shift + ^ もう一度おすと、小文字に戻る。こいつ地味に便利。

直前の動作を繰り返し

``.(ドット)``` インデントや、行頭一文字削除などの操作をして、同じ動きを繰り返したい時などに便利。

やり直し

u 直前の動作をなかったことにする
Ctrl + u redo

インデント

>> 右へインデント
<< 左へインデント
v を押してヴィジュアルモードで複数行選択し、>> でインデント、そのあとさらにインデントしたい場合は . で直前の動作を繰り返すと、複数行の複数インデントが可能になる(便利)

複数行を一気にコメントアウト

Ctrl + v で visual blockモード(短形モードというらしい)に切り替え
j で範囲を選択
Shift + i で、 //# を入力
esc で全行に反映

複数行一気にコメントアウトしたものを、戻す

Ctrl + v でvisual blockモードに切り替え
j で範囲選択
d  で、先頭文字削除
もしコメントアウト// の場合は、 .(ドット) を押せば良い(=1つ前の動作を繰り返してくれるので)

文字コードを確認する・変更する

:set fenc?

fileencoding=latin1 といったように表示される。
shift-jis は、lating1 と表示されるので、違うものと勘違いしない。

文字コードでファイルを開き直す

:e ++enc=shift-jis
:e ++enc=utf-8

上が、ShiftJISに変更したい時、下が、utf-8に変更したい時。

文字コードを変更する

:set fenc=shift-jis

変更した時は、:wq で保存して閉じる。

もっと知りたくなったらググる