_images/vim.jpg

基本的な操作

VIMはモードを頻繁に変更して編集をします。 |

aキー で編集モード, ESPキー でノーマルモードに戻ります。

モード 機能
ノーマル カーソルの移動、テキストのコピー、カット、ペースト
入力 テキストの入力、編集。
コマンドライン vimエディタコマンドの実行. save, load など
ビジュアル テキストの選択
検索 モードというより状態?

モード変更コマンド

コマンド モード
esc ノーマルモードに戻る
Ctrl-[ ノーマルモードに戻る
i カーソル位置からインサートモードに入る
a カーソルの直後からインサートモードに入る
I 行頭からインサートモードに入る
A 行末からインサートモードに入る
Ctrl-o(インサートモード中) インサートノーマルモードに入る(インサートモード中に1コマンドのみノーマルモードのコマンドを使用できる)
v ビジュアルモードに入る
V 行単位の選択をするビジュアルモードに入る
Ctrl-v 矩形選択をするビジュアルモードに入る
gv 前回選択した範囲が再選択された状態でビジュアルモードに入る
: コマンドラインモードに入る(続けてコマンドを打ち, Enterで実行)
r ノーマルモードからカーソル位置の1文字を変更

Vim でよく使うコマンド

よく使う便利機能

コマンド 機能
u Undo
ctrl+r Redo
= カーソルがある行をインデント. ビジュアルモードで範囲を選択していれば, その範囲をインデント
>> インデントを追加
<< インデントを削除
Ctrl-a カーソル行上で, カーソル以降の最初に出現した数字をインクリメント
Ctrl-x カーソル行上で, カーソル以降の最初に出現した数字をデクリメント
q: 実行したコマンドのヒストリの表示
q/, q? 実行した検索のヒストリ表示

Note

ctrl-a に似たもので true/false 切り替えコマンドのプラグインが複数公開されています。 switch.vim

~/.vimrc
NeoBundle 'AndrewRadev/switch.vim'
~/.vimrc
" switch.vim
" http://www.vimninjas.com/2012/09/12/switch/
let g:variable_style_switch_definitions = [
\   {
\     'f': {
\       'foo': 'bar'
\     },
\
\     'b': {
\       'bar': 'foo'
\     },
\   }
\ ]
nnoremap + :call switch#Switch(g:variable_style_switch_definitions)<cr>
nnoremap - :Switch<cr>

切り替え文字列は固定でなく、上記のような設定テーブルを任意に設置する方式。例は foo<=>bar 切り替え。

1. ロード・セーブ&終了

1.1 セーブ&終了

キー 動作
:w 上書き保存
:w! 読み取り専用でも強制保存
:w name ファイルネーム’name’で保存
:q 終了
:q! ファイルをセーブしてなくても強制終了
:wq 保存&終了
:wq! 読み取り専用でも強制保存&終了
x: ファイル保存してから終了
:x! 読み取り専用でも強制保存&終了

ノーマルモードで保存

キー 動作
ZZ ファイルを保存してから終了します。:wq と同じ動作です。
ZQ ファイルを保存しないで終了します。:q! と同じ動作です。

1.2 ロード

キー 動作
:e ファイルを開く
:e. エクスプローラーを開く
e!: ファイルのリロード

1.3 バッファ(ファイル)

キー 動作
:Unite tab タブ一覧
:Unite buffer_tab 現在のタブで開いたバッファ一覧
:Unite buffer バッファ一覧

2. 検索

2.1 文字列検索

キー 動作
/[検索文字列] 下方向に、[検索文字列]の検索を行う。
?[検索文字列] 上方向に、[検索文字列]の検索を行う。
n /や?で検索を行った後に、順方向に次の検索結果にジャンプする。
N /や?で検索を行った後に、逆方向に次の検索結果にジャンプする。
* カーソル位置の単語を下方向に検索する。/[カーソル位置の単語]と同じ動作。
# カーソル位置の単語を上方向に検索する。?[カーソル位置の単語]と同じ動作。
g* カーソル下の単語を含む文字列を, 後方検索する。
g# カーソル下の単語を含む文字列を, 前方検索する

2.2 ワード検索

コマンド 内容
カーソルがある単語の前方検索
カーソルがある単語の後方検索
g# カーソルの下にある単語が含まれる文字列を前方検索
g* カーソルの下にある単語が含まれる文字列を後方検索

3. ジャンプ

コマンド 内容
1G or gg 1行目に移動
G 最終行へ移動
[数字]G:[数字] [数字]行目へ移動
コマンド 内容
:marks mark一覧を表示する
m[a-zA-Z] カーソル位置をmarkする
`` 直前のマークへ移動
C-o 古いマークへ移動
C-i 新しいマークへ移動
`[a-zA-Z] 指定のマークに移動
‘[a-zA-Z] 指定のマークの行頭に移動
:delmarks [a-zA-Z] マークの削除
:delmarks! マークの一括削除

4. コピー&ペーストe

コマンド 内容
yy 行コピー
dd 行カット
p 行コピー >カーソル直前
P 行コピー >カーソル直後
x カーソル上の1文字切り取り
dl カーソル上の1文字切り取り(xと同じ)
cc カーソルがある行を消して, インサートモードに入る
cw カーソル位置から1単語分削除して, インサートモードに入る
ciw カーソル位置にある単語を1つ削除して, インサートモードに入る
Ctrl-r 0(ゼロ)(インサートモード中に) レジスタ0に保存されている文字列を貼り付ける. 通常, yを使用してコピーした文字列は, レジスタ0に保存される.
コマンド 内容
yw 1単語コピー
dw カーソル位置から1単語分削除する
diw カーソル位置にある単語を1つ削除する
dt( カーソル位置から, 次に最初に出現する(までを削除する
ct( カーソル位置から, 次に最初に出現する(までを削除して, インサートモードに入る

ペーストは行と同じ

ノーマルモードかヴィジュアルモードで ctrl+v で矩形ビジュアルモードになります。

4.3.1 コピー・ペースト・削除

ctrl+v

矩形選択をしたら下記のコマンドでコピー&ペーストなどを行います。 ※中止はESCです。

コマンド 内容
ctrl+v 矩形モードへ
y 選択中の矩形をコピー
d 選択中の矩形を削除
p 選択コピー(削除)した矩形をペースト

4.3.1 矩形挿入 (左端に挿入)

選択BOXの全部の行に一度に文字列の挿入するには

  1. 矩形でテキスト選択をする
  2. Iキー で挿入モードへ
  3. 挿入したい文字を入力
  4. ESC で終了

複数の行の頭に # などを入れてコメントアウトする時などに便利です。

4.3.2 矩形追加 (右端に挿入)

上述の I のかわりに A で操作すると右端に挿入できます

選択BOXの全部の行に一度に文字列の挿入するには

  1. 矩形でテキスト選択をする
  2. Aキー で挿入モードへ
  3. 挿入したい文字を入力
  4. ESC で終了

4.3.3 行末まで指定

矩形選択中に $ で行末まで選択されます。


4.3.4 矩形置換

矩形選択中に r でリプレースモードとなり置換できます。


4.3.5 tabシフト

矩形選択中に < > でタブシフトできます。

また、. (ピリオド)で連続シフトが可能です。

Note

vimにはタブの挿入が出来る便利なコマンドがあります。


コマンド 内容
> 行頭にTABを1つ挿入
< TABを1つへらす


5. 置換

置換は :s または :%s コマンドを使用します。
:s で行の置換、:%s でファイル全体の置換を行います。
また、矩形選択中では :s コマンドで選択範囲内のみの置換が可能です。
コマンド書式は :s/old/new/g もしくは :s;old;new;g/; で置換文字列を区切ります。
これはpath など/を含む文字列を扱うための配慮ですので適宜使い分けてください。

(カーソル行、もしくは矩形選択範囲

コマンド 機能
:s/old/new/g 開いているファイル全てのテキスト置換
:s/old/new/gc 最後が /gc のときは置換するか確認しながら行えます。
:10,20s/old/new/g 10~20行に対して置換を行います。

(ファイル全体)

コマンド 機能
:%s/old/new/g 開いているファイル全てのテキスト置換
old =置換前の文字列
new=置換後の文字列

便利な置換方法として検索している文字列の置換があります。方法は、

* コマンドで検索したあと、%s//new/g で検索中の文字列を一括置換できます。

※ :s コマンドだとカーソル行のみ置換されますのでご注意!


6. カーソル移動

コマンド 機能
w 前方に一単語分、カーソルを移動します
b 後方に一単語分、カーソルを移動します
e 単語の最後の文字に移動します。
E 単語の再度の文字に移動します。 .などの文字も単語とみなすっぽい
ctrl+y 上へスクロール
ctrl+n 下へスクロール
ctrl+u ページアップ
ctrl+d ページダウン
_images/cur.jpg


7. 画面分割

コマンド 機能
:split (sv) 水平に画面分割
:vsplit (vs) 縦に画面分割
<C-w>h 左に移動
<C-w>j 下に移動
<C-w>k 上に移動
<C-w>l 右に移動
<C-w>w 次に移動

分割Windowの操作

コマンド 機能
<C-w>H 左に移動
<C-w>J 下に移動
<C-w>K 上に移動
<C-w>L 右に移動
<C-w>r 回転
<C-w>_ 縦に最大化
<C-w>| 横に最大化

8. 背景色などのカスタマイズ

色の変更はスキームの読込みとカラー設定コマンドで 背景や文字色をいっぺんに変更できます。

方法は、 例えば hybrid スキーム(※)を使う場合、.gvimrcに

colorscheme hybrid
set background=dark

を追加します。 色を細かく設定するより好みのスキームを探して設定すると簡単にかっこいい色に変更できます。

※プラグインファイルをDLして所定の場所に設置する必要があります。(後半に関連の解説があります。)

オススメのスキーム

_images/vim_hybrid.png

https://github.com/w0ng/vim-hybrid


9. grep

複数のファイルから文字列検索をするgrep機能は複数の方法が提供されています。

  • :vimgrep コマンドを使う方法
  • 外部のgrepを使う方法

9.1 vimgrep

vimgrep コマンドの書式は

:vimgrep keyword filename

:vimgrep の代わりに :vim と省略形で呼び出すことも可能です。

また、カレントのバッファ内部のみ検索する場合は % を指定します。

:vimgrep /keyword/%

検索すると n/max のように検索できた件数が画面が部に表示されます。

検索中のコマンドは以下のとおりです。

コマンド 機能
:cn[ext] [ext個]次の検索結果へ移動
:cN[ext] [ext個]前の検索結果へ移動

grep結果をたどるのではなく一覧で見たい、という時は

:vimgrep keyword file | cw

とすると Quickfix-windowで一覧することができます。 また、.vimrc に以下の設定をすることで自動でwindowを開くようになります。

autocmd QuickFixCmdPost *grep* cwindow

quickfixの操作コマンドの概要

コマンド 機能
:copen windowを開く
:cclose windowを閉じる
:cnext [cn] リストの次の要素へ移動
:cprev [cp] リストの前の要素へ移動
:cnfile 次のファイルの最初の要素へ
:cpfile 前のファイルの最後の要素へ
:cfirst 最初の要素へ
:clast 最後の要素へ

ちなみに、windowの操作は

コマンド 機能
CTRL+W w カーソルを次のwindowへ
CTRL+W h カーソルを左のwindowへ
CTRL+W j カーソルを下のwindowへ
CTRL+W k カーソルを上のwindowへ
CTRL+W l カーソルを右のwindowへ
:q[!], ZZ ウィンドーを閉じる
:wqa すべてのウインドーを閉じてvim終了
(参照)quickfix のマニュアル
http://vim-jp.org/vimdoc-ja/quickfix.html#quickfix











end