Unix/Linux系で、テキストファイルの内容を編集する場合、やはりviがお手軽で使いやすいと思います。
と言っても、使った事が無い人がいわゆる一般的なテキストエディターでしょ?という感覚で触るとなにこれ?というレベルだと思います。
取っつきにくいですが、慣れてしまうとキーボードだけで操作できるviが便利なんです。
サーバールームでコンソールから直接サーバの設定ファイル編集する場合とかvi必須です。
一時期、ずっとUnixサーバのシェルスクリプトで開発するお仕事をしていた頃は、IDEって何?状態でviでゴリゴリ書いてましたので、その頃培ったviの使い方を忘れないうちにメモしておきます。
この辺の操作を覚えておけばある程度書けると思います。
vi 操作メモ
viでファイルを開く
◆viを起動して、hoge.txtを開く
$ vi hoge.txt
◆viを起動して、hoge.txtを読み取り専用モードで開く
$ view hoge.txt
◆hoge1.txt, hoge2.txt の順番で開く
$ vi hoge1.txt hoge2.txt
viの主な操作方法
viの基本操作でよく使うコマンドを抜粋しました。
緑の白抜き文字は、同じような動作をするWindowsのエディタでのショートカットキーです(参考で記載しているだけですので、もちろんvi上では使えません)。
テキスト入力モードへ切り替え
編集モードへの切り替えはカーソルの位置を起点として動作します。
編集モードから戻る場合は、ESCキーです。
- i … カーソルの前にテキストを挿入
- a … カーソルの後にテキストを挿入
- I … 行の先頭にテキストを挿入
- A … 行の末尾にテキストを挿入
- o … カーソルの下に行を追加
- O … カーソルの上に行を追加
テキスト編集
- r … 1文字置き換え。次に入力した文字に置き換えて編集モード終了
- R … 文字書き換え。次に入力した文字で連続置き換え
- x … カーソル位置の文字を1文字削除 DEL
- X … カーソル位置の1文字前を1文字削除 BS
行編集・行コピー
- J … カーソルある行とその下の行を連結
- yy … カーソルの行をコピー
- dd … カーソルの行を削除
- p … コピー/削除した行をカーソルの下に行を追加してペースト Ctrl+v
- P … コピー/削除した行をカーソルの上に行を追加してペースト Ctrl+v
複数行のコピー&ペーストは、次のようにやります。
- コピーしたい先頭行にカーソルを合わせる
- mキー⇒aキーの順番に押す
- コピーしたい最終行までカーソルを移動する
- yキー⇒’キー⇒aの順番に押す
- ペーストしたい位置にカーソルを移動してpキーを押す
これで複数行のコピーができます。
解説すると、mキーで行をマークします。それからメモリaとしてコピーしたい複数行を決めて、yキーを指定した範囲内をメモリaにセットします。
最後にpキーでメモリaの内容を貼り付けます。
ちなみに、4のyをdに変えるとコピーではなく、切り取りになります。
この複数行操作ができるようになると、viでの編集がかなり楽になります。
横で見ている人も、知らない人だと、今何が起きた!?という感じになります。
テキスト削除・コピー・移動(コピペ)
- x … カーソル位置の文字を1文字削除 DEL
- X … カーソル位置の1文字前を1文字削除 BS
- D … カーソルの位置から行末まで削除
- p … 削除(x, X, dd, D)した文字列をカーソルの位置にペースト Ctrl+v
- P … 削除(x, X, dd, D)した文字列をカーソルの位置の前にペースト Ctrl+v
やり直し
- u … アンドゥ、直前の編集を取り消し Ctrl+z
変換
変換系は編集モードには入らず、現在のカーソルが当たっている文字に対して処理を行います。
- ~ … 大文字小文字変換
検索
- / … 続けて検索したい文字列を入力してEnter
- n … 次に該当するもの(上から下へ)へジャンプ
- N … 次に該当するもの(下から上)へジャンプ
検索にはもちろん正規表現が使えます。例えば数字だけ探すなら[0-9]。
置換
sedが使えます。
- :s/hoge/piyo/ … カーソル行のhogeをpiyoに置換
- :%s/hoge/piyo/ … 編集のファイル内のhogeをpiyoに置換(最初の一つだけ)
- :%s/hoge/piyo/g … 最後にgをつけるとすべて置換
- :%s/hoge/piyo/gc … 最後にgcをつけると一つ一つ確認しながら置換
通常、置換対象文字列と置換後の文字列を区切る文字は半角スラッシュ(/)ですが、置換したい文字列自体に半角スラッシュ(/)が含まれている場合は、他の区切り文字を使います。
例えば、2019/09/10を2019-09-10に置換したい場合は区切り文字を%にして次のようにやります。
:%s%/%-%g
カーソル移動
矢印キーでもカーソルを動かせますが、これを知っていると目的の場所に一気にカーソルを移動することができます。
- :行番号 … コロンを入力してから行番号を入力してEnterキーを押すと、指定した行へジャンプ
- G … 最終行へジャンプ
- % … 対応するカッコへジャンプ
ファイル操作
- :w … 編集中のファイルを保存
- :wq … 編集中のファイルを保存してviを終了
- :w! … 編集中のファイルを強制保存
- :10w hoge.txt … 10行目をhoge.txtに保存
- :10,20w hoge.txt … 10行目から20行目をhoge.txtに保存
- :30,32w >> hoge.txt … 30行目から32行目を現在のhoge.txtに追記して保存
- :q … viを終了
- :q! … 編集中の内容を破棄してvi終了
- :n … 次のファイルを編集(複数開いている場合)
- :e! … 編集を最初からやり直す
コマンド実行
- :sh … viで編集中のファイルはそのままで、シェルを起動
- :! command … viで編集のファイルはそのままで、commandを起動(lsを起動する場合は、:! ls)
- :r hoge.txt … カーソル位置にhoge.txtの内容を読み込む
- :r ! command … カーソル位置にcommandの実行結果を書き込む
viエディタのオプション設定
- :set ts=4 … タブ幅を半角スペース4文字分にセット
- :set nu … 行番号を表示する
サーバーの操作をよくする方
大抵のUnix/Linux環境にviは入っていますので、いざという時に備えて使い方を覚えておくとよいと思います。
やはり集中して学習するなら本が最も効率がよいと思いますので、紹介します。
ばったんのオススメ書籍紹介コーナー!
viとvimは似て非なるものです。viを拡張したものがvimです。最近のLinuxではvimが主流ですが、原始的なUnix環境ではviのところもありますので、vimの拡張機能に頼りすぎているとvi使う時にちょっと不便かもしれません。
サーバーエンジニアは主にサーバー上でスクリプト書いたり、設定ファイルを変更したりすることが多いと思います。
昔、私がサーバーエンジニアをちょっとやっていた頃によく使ったviの操作はこの記事にまとめましたが、もっと知りたい、という方はオライリー本をオススメします。なんでも深く掘り下げて書いてあります。
コメント