もう4年ぐらいの付き合いになる憎らしくもかわいいエディタvi(vim)について。
雑誌に特集があったのでこれを機にまとめてみました。シリーズものになるかも・・・
Vi(vim)とは?
Linuxに標準でインストールされているエディタ。操作法が独特であることから初心者殺し。
通常はviの派生形であるvimが使われることが多い。WindowsやMacで使うときはgVimが使える。
MacにはMacVimがあるらしいのですが詳細を知りません・・(汗)。
基本的な使い方
vi(vim)が初心者殺しな点といえば複数のモードがあり、基本操作を全てコマンドで行わなければいけないところでしょう。
私は先輩が使っていたので、強制的に使わざるを得ない環境だったのですが、なかなかこれになれるのは大変・・・。
基本的な説明を書こうとおもったのですが、私よりはるかにうまくまとめてあるページがあったのでこちらを。
脱初心者を目指すなら知っておきたい便利なVimコマンド25選 (Vimmerレベル診断付き) Vim
vimおすすめコマンド
特に頻度が高く、私が個人的におすすめしているものを書きます。
単語や関数の入力補完
Ctrl+N
Eclipseはこれが不完全なのがちとつらいです。
選択した文字と同一のものをハイライト&移動
Shift+*
変数名が間違ってないかの確認などに使います。
このあとNで移動できます。
テキストの置換
%s /変更される文字/変更したい文字/gc 置換
行数を指定できたりと、いろいろとバリエーションは豊富です。
フォーマット
選択範囲を絞ってShift =
インデントが崩れているときなどに有効です。ただし、配列の並びなどはちょっと気に入らないかも・・・
矩形選択
Ctrl+V →縦移動→入力モード→Shift+i->esc 矩形選択
画面分割
sp(上下に分割)、vs(左右に分割) 画面分割
コントローラ―的な処理を書く場合、メソッドを呼び出しているところと、定義しているところを同時に見たいときなど。
マクロ(動作の記憶)
q+任意の文字+任意の動作+q(記憶)→@任意の文字 動作の復元
ウルトラ使えます。
ファイル全体の置換&検索
対象ファイルの読み込み(再帰的なものもすべて読み込む)
args **/*
対象拡張子を選ぶこともできます。
argdo %s/hoge/fuga/gc | w
argsでファイルを開いた後,hogeという文字をfugaに確認しながら置換し、保存します。
vimgrep /hoge/ **/*.* | cw
再帰的にファイルを検索し、別窓に表示。
設定ファイル
次にめんどいのが設定ファイルです。通常はメニューでオプションとかでこれらの設定をできることが多いんですけどね。
gVimでは一部そういう機能もありますが、vimの場合は全て書いていかないといけないです。これがメンドイ。
最初のうちはディフォルトで使い、自分なりにここはこうしたい、となったときに見てみるのがいいでしょう。
初めてやろうとすると頭が爆発するでしょう。
HOMEディレクトリ/.vimrc やHOMEディレクトリ/.vim/vimrc。Gvim版では同様の改装にあるgvimrcでGUIの設定をすることができます。
下記、設定ファイルで行うことのできる基本的なオプションの設定について
オプション追加( set ~)
基本的にオプションの設定は上記の設定ファイルにset {オプション名}をつける。はずすときはset no{オプション名}
例:set number 行番号の設定(はずすときはset nonumber)
よくある設定
個人的によく使うものなど
文字コードの自動判定
set fileencodings=utf-8,sjis,cp932,euc-jp,iso-2022-jp
左から順番に読んでいきます。たまに間違えて文字化けすることがあります(汗)
内部文字コードをutf8に設定
set encoding=utf-8
ユーザーは意識しませんが、vim内部で使う文字コードの指定です。
ファイル書き込み時の文字コードを設定する
set fileencoding=utf-8
通常のファイルの文字コード指定です。コマンドラインではsetl fenc=utf-8と省略形でもいけます。
文字コードを指定して再読み込み
e ++enc=cp932
誤った文字コードでvimが読んでしまい、文字化けしたときに再読み込みなど。
改行コードの読み込み
set fileformats=unix,dos,mac
保存するときの改行コード指定
set fileformat=unix
文字コード関連リンク
autoindentを有効にする
set autoindent
タブ→空白の置換
set expandtab 自動的にタブを空白に置換します。
ファイル内のタブの文字幅
1 2 3 4 5 |
set tabstop=4 ファイル内のタブ幅の指定です。 set softtabstop=4 tabが押されたときに実際に挿入される空白の文字数 set shiftwidth=4 オートインデント時に挿入される空白文字数 |