メモ〜vi関係

viはテキストエディタである。上位互換品としてvimがある。 vimは複数段階の操作取り消し(undo)、複数ウインドウ対応などが機能追加されている。

0. 目次

  1. viの起動(1)
  2. モードの切り替え(2)
  3. カーソルの移動(3)
  4. 挿入、追記、編集(4)
  5. 削除(5)
  6. コピー(6)
  7. 検索と置換(7)
  8. 保存とviの終了(8)
  9. 情報その他(9)

1. viの起動

ターミナルで vi +エンターキー を入力。

ファイル名を指定して起動する場合は

vi ファイル名 ...

viには2つのモード(コマンドモードと入力モード)があるが、 起動直後はコマンドモードの状態となっている。

ファイル名を指定して開く場合は以下の通り。

vi ファイル名 ファイル名
ファイル名で指定した名前のファイルを開く。複数のファイルを開くこともできる。
:n
次のファイルに表示を切り替える。
:N
前のファイルに表示を切り替える。
vi +n ファイル名
ファイル名で指定したファイルを読み込み、n行目から入る。
vi + ファイル名
ファイル名で指定したファイルを読み込み、ファイルの最後から入る。
vi -wn ファイル名
ウインドウサイズ(n行)を指定して開く

2. モードの切り替え

コマンドモードから入力モードに移行するには2つの方法がある。そして入力モードからコマンドモードに戻るには<ESC>

また入力モードも基本(Fundamental)以外に、プログラム言語などに特化したモードなどがある。開くファイルの拡張子により、モードは自動的に選択される(例:.php→PHPモード、.pl→Perlモード、.html→html/xhtmlモード、.css→cssモード)。またviエディタをエミュレートしたviperモードがある。モードへの入り方など概要は以下の通り[10]

操作内容 コマンド 備考
viperモード起動 M-x viper-mode 初回起動時は使用レベル(どれだけ実際のviに近い動作モードで使うか)を問われる(1-5)。数値が小さい程viに近くなり、Emacsとしてのコマンドやスクリプトが動作しなくなる。
viperモード終了 M-x viper-go-away viperモードを終了し、通常のEmacsモードに戻る
viperモード起動/終了切り替え M-x toggle-viper-mode viperモード起動中は C-z でカレントバッファのviperモードをON/FFできる

3. カーソルの移動

カーソル移動
動作内容 キー操作
前へ 後へ
文字単位 h、← l、→、<Space>
単語単位(区切り文字で止まる) w b
単語単位(区切り文字で止まらない) W B
単語単位で前方検索し、単語の末尾に移動(区切り文字で止まる) e
単語単位で前方検索し、単語の末尾に移動(区切り文字で止まらない) E
行の先頭/末尾 0、| $
行の最初の単語の先頭(行頭の空白などは無視) ^、_
行単位(同じ列) k、↑ j、↓
行単位(最初の非空白文字へ) - +、<RET>
文単位 ( )
段落単位 { }
章単位 [[ ]]
対応する括弧 %
1行分(スクロール移動) Ctrl + y Ctrl + e
半画面分(スクロール移動) Ctrl + u Ctrl + d
1画面分(ページ移動) Ctrl + b Ctrl + f
第n行が画面の1行目/最下行になるよう表示 nz<RET> nz-.
第n行が画面の中央にくるよう表示 nz.
画面の1行目/最下行にカーソル移動 H L
画面のn行目/最下行からn行目にカーソル移動 nH nL
画面の中央 M
ファイルの先頭/末尾 1G または gg G(Shift+g)
n 行目に移動 n G、:n
検索(pattern が最初に現れる位置) ? pattern <RET> / pattern <RET>
備考:

4. 挿入、追記、編集

5. 削除

コマンドの前に数字を置くと、その数だけ削除される。例えば 7dWは7単語、つまりカーソルのある位置の単語 およびその後ろ6語を削除する。

6. コピーと貼り付け

viエディタにおいて、ヤンク(クリップボードにコピーすること)や削除のコマンドを実行すると指定した内容がクリップボードに一時保存される。

例1:yf, →現在カーソル位置から、後方に最初に現れる "," までをヤンクする。

例2:y$ →現在カーソル位置から、行末までをヤンクする。

参考サイト:

8. 保存とviの終了

9. 情報その他

文字化けする時はエンコード設定を行うとよいらしい[27]

$ vi ~/.vimrc
下記記述を追記(utf-8に設定する場合)
set encoding=utf8

文字コードは以下の通り指定する[18]

Shift-JISで開き直す
:edit ++encoding=sjis
または
:edit ++encoding=cp932
UTF-8で開き直す
:edit ++encoding=utf-8

Shift-JISでファイルを保存
:set fileencoding=sjis
または
:set fileencoding=cp932

Vimの既定エンコーディングを確認
:set enc?

現在開いているファイルのエンコーディングを確認
:set fenc?


下記記述を追記(utf-8に設定する場合)
set encoding=utf8

99. 参考文献・サイト

  1. viエディタの使い方
  2. D.ゾンネンシャイン『UNIXスクリーン・エディタviガイド』啓学出版、武田 英明 訳、1988年、ISBN 4-7665-0370-8
  3. taglog: vi : 改行を削除5. 削除の行末改行削除の話。
  4. load to vi master
  5. 文字列置換 - vim…Linuxで自宅サーバ構築・管理: KSKNET
  6. viの使い方 - スキルアップ輪講
  7. viを使い倒そう: viによる日本語入力(6th Step)
  8. vi入門
  9. viエディタでの編集・操作コマンド初心者目線のLPIC講座より
  10. viper-modeの使い方 - fudist
  11. TEMPEST社長ブログ: vi(vim)でredo
  12. How to replace a character for a newline in Vim? - Stack Overflow
  13. Switching case of characters - Vim Tips Wiki
  14. Vimのメモ - メモのメモ
  15. Vimでのタブや空白などの表示、CursorLineでの表示など
  16. vi - Make Vim show ALL white spaces as a character - Stack Overflow
  17. コマンド履歴、検索履歴を活用して、作業効率を上げよう。 — 名無しのvim使い
  18. Vimで文字コードを指定する - Qiita
  19. 覚えておきたい Vim コマンド 備忘録 - Qiita
  20. テキストファイルの行末に^Mが表示される - @IT