vi使ってますか?


こんにちわ。
開発部の堀野です。

弊社の特徴としてIoTのハードからソフトウェアまでを垂直統合という面があります。
センサーと通信装置とそのデータを受けるクラウド内のゲートウェイとUIとなるウェブシステムの開発まで全て行っており、開発部では主にクラウド側の開発を行っております。

閉域網で繋がっているセンサーのデータはクラウド上でしか機器からデータを受けられない。つまり、開発のある段階からローカル環境での開発が難しくなってくるため、サーバ上で直接コードをエディットしたほうが手っ取り早いと個人的には思ってます。
踏み台サーバを介しての作業時にもやはりサーバ上で直接エディット作業が早く、その際使用するエディターとしてviが使えるととても便利です。

サーバ上で直接エディットせずローカルでAtomやWinSCPで同期とるなどなど方法は沢山ありますが、そのような周辺のツール頼みということになるし踏み台が挟まると面倒です。viであればそのような制約はありません。

viは初版1976年ということで私が新人(20年以上前)の頃には既にUnix系のOSに標準で入っており、その後広まったLinux系のOSに標準でも必ずと言って良いほど入っており、何も準備しなくても使えます。
更に使い慣れれば一般的なテキストエディタと比べても十分引けを取らないほど便利です。

viなんて時代遅れということは無く、数十年前から既に完成されている今までもこれからも普遍的に使える最強エディタの一角を担っていると思ってます。
(統合開発環境が整っている言語は除く)

もっと詳しい説明、詳細なコマンド、vimの機能などは数多ある他サイトへお任せして、普段よく使っている使用例のご紹介となります。

ではviの使い方です。

起動

vi (ファイル名)
起動後は、コマンドモードと編集モード二つのモードを行き来します。起動直後はコマンドモードです。何かコマンドを入力すると編集モードとなります。編集モードからコマンドモードに戻るには[Esc]キーを押します。何かあったらとにかく[Esc]です。

viの終了

終了コマンドには数種類あります。基本的には上から3つまで覚えていれば大丈夫。

コマンド 説明
:q![Enter]             保存せず終了。変更があっても強制終了  
:ZZ           保存して終了                                                  
:w[Enter] 保存
:q[Enter]   保存せず終了。変更がある場合は警告が出て終了しません。
:w![Enter] 強制保存
:wq![Enter] 強制保存して終了

編集コマンドの紹介

私が普段使っているコマンドをご紹介します。これだけ使えれば大抵の作業で困りません。
特に統計はとってませんがよく使う順でソートしました。

カーソル移動

コマンド 説明
h
j
k
l
G 最終行へ移動
1G 先頭行へ移動
H 画面先頭へ移動
M 画面中央へ移動
L 画面最下行へ移動
CTRL+F 画面次頁へ移動
CTRL+B 画面前頁へ移動
0 行の先頭へ移動
$ 行の最後尾へ移動

hjkl 先頭から、←↓↑→
カーソル移動はカーソルキーを使いません。カーソルキーでも移動もできますが、慣れればこちらのほうがキーから手を離さないのと、今の時代はあまりありませんが、通信環境が遅いときにカーソルキーを連打すると制御文字が入ってしまうこともありません。

編集系

コマンド 説明
. 前の操作のリピート
a カーソルの右側から編集モード
i カーソルの左側から編集モード
x 一文字削除(削除した文字はバッファへコピーされる)
s 1文字削除して編集モード
C カーソル位置から最後尾まで削除して編集モード
cw カーソル位置から単語後端までを削除して編集モード
次行へ行追加して編集モード
O 現在行の前に行追加して編集モード
/(文字列)[Enter] 検索
n 検索の次の一致する文字へ
N 検索の前の一致する文字へ
dd 1行削除して削除内容をバッファへ
yy カーソルの行をバッファへコピー
p バッファの貼り付け
J 現在行の改行コード削除(後端に次行を連結)
R 一文字置換

数値+コマンド例

コマンド 説明
100j 100行下へ移動
100G 100行目へ移動
100G カーソルから下へ100行追加
10x 10文字削除
10yy 10行コピー

他のコマンドも数値と組み合わせられるパターンが沢山あります。

使用例その1

目的の行を探して1行コードを追加して終了

コマンド 説明
vi hoge.php[Enter] ファイルを開く
100G 100行目へ移動
[CTRL]+F 次のページへ
3j 3行下へ移動
o 1行追加して編集モードへ
if (ture) echo hoge;[Esc] 追加行にコードを追加しコマンドモードへ
ZZ 保存して終了

使用例その2

確認しながら単語の置換

コマンド 説明
vi hoge.php[Enter] ファイルを開く
/AAA[Enter] 文字列”AAA”を検索
cwBBB[Esc] “AAA”を”BBB”に書き換える
n 次の”AAA”を検索
“AAA”を”BBB”に書き換える
次の”AAA”を検索
“AAA”を”BBB”に書き換える

いかがでしたでしょうか?
使えるようになるためには月並みではありますが、今回のようなエントリで何ができるか大体把握して、あとは毎日使い続けるしか無いと思います。viとその他のエディタを行き来きすると最初は戸惑いますがそれも慣れます。皆様の楽しいviライフを願っております。