最低限知っておくと便利なvimコマンドまとめ

はじめに

WindowsGUIに慣れた入門者にとって,vimemacs などのエディタの操作は非常に難解に見えると思う. gedit や nano など比較的操作の簡単なエディタもあるが, 一見難解なキーバインドに慣れてくれば全てをキーボードのみ操作出来る万能感から他のエディタを触れなくなる(かもしれない).

ここではvimを使う上で最低限知っておくべき操作と,知っていると便利な事柄を独断と偏見でまとめておく. より詳細な内容を知りたい場合はドキュメントを参照するといい.

vim-jp.org

表記方法について

$で始まる行は bash などのターミナル上の操作.

vim には 挿入モード と コマンドラインモード の2つの状態があり, コマンドラインモードでは,:で始まるコマンドでの操作とキー入力による操作がある.
なお,vimコマンドライン[]で囲まれている部分はオプション(省略可).

基本操作

vimを使う上で最低限知っておかないと操作に支障があるもの.

ファイルを開く

$ vim ./new_file_name               # 新しいファイルを編集する
$ vim ./file_name                   # 既存ファイルを編集する
$ vim ./file_name1 ./file_name2     # 複数ファイルを編集する

新しいファイル名を指定することも出来るし,既存ファイルを指定することも出来る.
複数ファイルを開いた場合に編集するファイルを切り替える方法は後述.

:e[dit] file_name                   # 指定したファイルを編集する
:e[dit] .                           # カレントディレクトリのファイル一覧画面を表示する(Netrw)
:pwd                                # カレントディレクトリを表示する
:cd [path]                          # カレントディレクトリを path に変更する

vim を起動した状態からでもファイルを開くことが出来る.

文字挿入

i                                   # 今のカーソル位置から入力を始める

ヤンク(コピー)

yy                                  # 今カーソルのある行をヤンクする
Nyy                                 # 今カーソルのある行からN行をヤンクする

Nは数字

プット(ペースト)

p                                   # 今カーソルのある次の行にヤンクした内容をプットする

削除

dd                                  # 今カーソルのある行を削除する
Ndd                                 # 今カーソルのある行からN行削除する

Nは数字

保存

:w[rite]                            # 今編集しているファイルを保存する

終了

:q[uit]                             # 変更がなければそのまま終了する
:q[uit]!                            # 変更内容を破棄して終了する
:wq                                 # 変更内容を保存して終了する

編集ファイル切替(複数開いた場合)

:n[ext]                             # 次のファイルに移動する
:N[ext]                             # 前のファイルに移動する
:f[ile]                             # 現在のファイル名とカーソルの位置などを表示する

知っていると便利なコマンド

カーソルの移動

N                                   # カーソルをN行先に移動する
Ngg                                 # カーソルをN行目に移動する
gg                                  # カーソルをファイル先頭に移動する
G                                   # カーソルをフィアル末尾に移動する

Nは数字

検索

/{pattern}                          # 文字列{pattern}を下方向に検索する
n                                   # 直前の検索を再実行
N                                   # 直前の検索を逆方向に再実行
:noh[lsearch]                       # 検索結果のハイライトを消す

{pattern}は検索する文字列

置換

:[%]s[ubstitute]/{pattern}/{string}/[g][c]        # 文字列{pattern}を{string}に置換する
  • %: ファイル内の全ての行を対象に置換する
  • g: 行内で見つかった全ての{pattern}を{string}に置換する
  • c: 置換する前に確認する

gを指定しないと行内で最初に見つかった文字列しか置換されない

構文ハイライト

:syntax off                         # 構文ハイライト機能を無効化する
:syntax on                          # 構文ハイライト機能を有効化する
:colo[rscheme] {color_name}           # カラースキームを変更する

構文ハイライト機能はテキストの一部を別のフォントや色で表記することが出来る.

また,colorschemeを使うとエディタ全体の配色も変更することが出来る. {color_name}部分で適当なスキーム名を指定する.

ビジュアルモード(範囲選択)

v                                   # 今のカーソルの位置から文字単位でビジュアルモー(範囲選択)を開始する
V                                   # 今カーソルのある行から行単位でビジュアルモード(範囲選択)を開始する
Ctrl+v                              # 今のカーソルの位置から矩形ビジュアルモード(範囲選択)を開始する
Ctrl+v Shift+i                      # 矩形選択した後,挿入モードを開始する

Undo/Redo

:undo                               # undo
u                                   # undo
:redo                               # redo
Ctrl+r                              # redo

ウィンドウ分割

:split [file_name]                  # ウィンドウを横方向に分割する
:vsplit [file_name]                 # ウィンドウを縦方向に分割する
:split new                          # ウィンドウを横方向に分割して空のウィンドウを作成する
:vsplit new                         # ウィンドウを縦方向に分割して空のウィンドウを作成する
Ctrl+w Ctrl+w                       # カーソルを次のウィンドウに移動する
Ctrl+w q                            # ウィンドウを閉じる(quit と同じ)

ウィンドウの操作はCtrl+wで始まるものが多い.

タブページ

:tabnew                             # カレントタブページの後ろに空のウィンドウを持ったタブを作成する
:tabe[dit] [file_name]              # カレントタブページの後ろにタブを作成する
:tabn[ext]                          # 次のタブに移動する
:tabN[ext]                          # 前のタブに移動する
:q[uit]                             # タブを閉じる

複数のウィンドウをタブとして扱うことが出来る.

端末ウィンドウ

:terminal                           # 端末ウィンドウを開く

ウィンドウ分割と併用すると便利.

コマンドラインモードでecho has('terminal')の結果が1なら対応している1

知っていると便利なオプションコマンド

オプションのの切替え方

:set no{option}                     # 論理値タイプのオプションをOFFにする
:set inv{option}                    # 論理値タイプのオプションを反転する

論理値オプションは先頭の文字で状態を切り替えることができる.

字下げ

:se[t] [no]expandtab                # 字下げ文字をスペース(expandtab)とタブ(noexpandtab)で切替える
:se[t] tabstop=N                    # スペースN個分字下げする
:se[t] ts=N                         # tabstop と同じ

Nは数字

行番号

:se[t] [no]nu[mber]                 # 行番号を表示する

ペーストモード

:se[t] [no]paste                    # ペーストモードを有効にする

ペーストモードを有効にすると,自動字下げ等いくつかのオプションが無効化される.
Teratermから文字列を貼り付ける際に意図せず字下げされて悲惨な状態になってしまうような場合にこの設定を有効化するといい.

起動時にオプション指定

$ vim "+se nu" "+se et" "+se ts=2" file_name

vim 起動時に最大10個までのオプションを指定することができる.

商用環境の設定変更はしたくないけど,設定は自分好みに変更したいときに有効.
alias を設定しておけばいちいちオプションを入力しなくてもいいし,exit してしまえば alias の設定は消えるので設定変更しなくて済む.

おわりに

実際はここでは紹介しきれないほどたくさんのコマンドやオプションがあるのだけれど, ここに記載したコマンドが一通り使えるようになれば立派なvim使いになれるでしょう.