1. まとめトップ

Vim 脱初心者コマンドまとめ

説明はプログラムを書く視点。画像はウガンダの国旗。

更新日: 2014年07月23日

helloworldさん

  • このまとめをはてなブックマークに追加
65 お気に入り 105296 view
お気に入り追加

移動

W ... 次の単語の先頭へ ( 記号含まない )
w ... 次の単語の先頭へ ( 記号含む )

fa ... その行の a へ ( / を打つより便利 )
t, ... その行にある , の前へ

* ... カーソル位置のある単語の次の単語へ ( var にカーソルがあったら、次の var に飛ぶ )
# ... カーソル位置のある単語の前の単語へ

% ... 括弧の移動 ( ループや配列の括弧に )

C-d ... 半画面下へ
C-u ... 半画面上へ

C-f ... 一画面下へ
C-b ... 一画面上へ

gg ... ファイルの先頭へ ( 1G より便利 )
G ... ファイルの末尾へ ( 0G より便利 )

編集

C-c ... ESC や C-[ と同じ。打ちやすい

u ... undo
C-r ... redo
g; ... 前回編集した箇所に飛ぶ

i ... インサート
s ... 一文字消してインサート ( xi と同じ )
o ... 下の行にインサート
O ... 上の行にインサート

ggVG ... 全選択

ciw ... カーソル位置にある単語を消して編集モードに ( foo を bar にしたい時に便利 )

C-n / C-p ... 補完

C-v で範囲選択 → I → # → ESC ... 複数行の先頭に一気に # を追加

:set readonly ... 書込禁止
:set noreadonly ... 書込禁止解除

:set fencs=euc-jp ... EUC-JP のファイルを開く

検索

/ ... n で次、N で前

* ... カーソル位置にある単語を検索
# ... カーソル位置にある単語を逆方向に検索

:vimgrep /function/ *|cw ... 現在開いているファイルの関数一覧
:vimgrep /def/ app/**/*.rb ... app/ 内の *.rb を検索
:vimgrep /検索文字/ **|cw ... 全ファイル検索

置換

g は一行にある単語を全て置換。g つけずはまること多い。
c は置換するか確認してくれる。

:%s/foo/bar/gc ... ファイル全体の置換&確認
:%s;/usr/local;/usr;gc ... / の代わりに ; を使う。パスの置換に便利

:s/foo/bar/gc ... カーソル行のみ置換

:50,$ s/foo/bar/c ... 50行目から最終行まで置換

## 選択範囲の置換

v や V で範囲選択して % を除いた :s/foo/bar/ すれば範囲選択の置換

## ファイル全体の置換

開いているファイルだけじゃなく、全体を置換したければ下記。

:argadd **/*.html.erb
:argdo %s/foo/bar/ge | update ... 再帰的に全ファイル内の foo を bar に変更

まったく覚えられないので sed 使ってます。
$ find . -name "*.html.erb" -type f -print0 | xargs -0 sed -i 's/foo/bar/g'

## カーソル位置にある単語の置換

foo を bar に置換したい場合、foo に検索でも使う # をする。
その後、bar を入力せずに :s//bar/g すれば foo gが bar に置換

コピー & ペースト

v ... ビジュアルモード
V ... 行単位

yy ... 現在の行をコピー

p ... ペースト
P ... 上の行にペースト

:a! ... ペースト時にインデントが崩れるのなら、:a! した後にペーストして C-c

ggVG ... すべて選択

矩形

C-v ... 矩形モードに入る。カーソルを移動し、範囲選択。y や d でコピーし、S-p でペースト

I#[ESC] ... コメントアウト。I// や I-- など。
A# ... 行末に追加

インデント

V で範囲を選んでも、一行でも可能。

= ... オートインデント
> ... インデント
< ... インデント

>> ... カーソルがどこにあっても、その行をインデント
<<

ファイル

:e ... ファイルを開く。TAB 補完や *.html とか、入力補助が便利
:bdelete ... ファイルを閉じる
C-^ ... 一つ前に開いていたファイルに移動

:e **/Root.pm ... ディレクトリを指定しなくても Root.pm を探し出して開いてくれる
:e **/*Ro ... Root.pm にマッチすれば開いてくれる。これ覚えて世界が変わった
:e ../**/.bashrc ... 上の階層も

gf ... カーソル位置にある単語をファイル名と見なして、そのファイルを開いてくれる

:echo expand("%:p") ... 現在開いているファイルのフルパスを表示

:ls ... 開いているファイルの一覧
:bn ... 次のファイルへ
:bp ... 前のファイルへ
:b# ... 直前のファイル ( C-o でも可 )
:b ファイル名 ... すでに開いているファイルを開く

:set fenc=utf-8 ... ファイルの文字コードを UTF-8 に
:set fenc=euc-jp
:set fenc=shift_jis

:edit ++enc=utf-8 ... ファイルを UTF-8 として開きなおす

:set fileencodings=cp932 ... SJIS を開けるようにする

:set filetype=markdown ... 現在開いているファイルを Markdown モードにする

ウィンドウ

:sp ... 横分割
:vs ... 縦分割

:q ... ウィンドウを閉じる
:wqa ... 全てのウィンドウを閉じて終了する

.vimrc に下記のように書けば :q ではなく q だけで閉じるようになります。
nnoremap q :<C-u>q<CR>

C-w の後に hjkl ... その方向にウィンドウ移動
C-w w ... 次のウィンドウへ
C-w p ... 前のウィンドウへ

C-w o ... 現在のウィンドウ以外すべて閉じる
C-w q ... 現在のウィンドウを閉じる

C-w - ... ウィンドウの高さを一行減らす
C-w + ... ウィンドウの高さを一行増やす
C-w < ... ウィンドウの幅を一文字減らす
C-w > ... ウィンドウの幅を一文字減らす

設定

:set number ... 行番号表示。nu[TAB]
:set nonumber ... 行番号非表示。non[TAB]

:set incs [TAB] ... インクリメンタルサーチ

終了

ZZ ... 保存して終了
:q! ... 保存せず終了

:wqa ... 全てのウィンドウを閉じて終了

vimdiff

]c ... 次の差分へ
[c ... 前の差分へ

do ... 現在のバッファに、他のバッファからコピー
dp ... 現在のバッファから、他のバッファにコピー

VimFiler

リンク

1 2





helloworldさん

やあ、こんにちは、世界。