viはテキストエディタである。上位互換品としてvimがある。
vimは複数段階の操作取り消し(undo)、複数ウインドウ対応などが機能追加されている。
ターミナルで vi +エンターキー を入力。
ファイル名を指定して起動する場合は
vi ファイル名 ...
viには2つのモード(コマンドモードと入力モード)があるが、 起動直後はコマンドモードの状態となっている。
ファイル名を指定して開く場合は以下の通り。
vi ファイル名 ファイル名:n:Nvi +n ファイル名vi + ファイル名vi -wn ファイル名コマンドモードから入力モードに移行するには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できる |
| 動作内容 | キー操作 | |
|---|---|---|
| 前へ | 後へ | |
| 文字単位 | 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> |
i:カーソルの左側に文字を挿入(挿入モード)。a:カーソルの右側に文字を挿入(追記モード)。o:カーソルのある行の下に行を挿入。O:カーソルのある行の上に行を挿入。A、$a:カーソルのある行の行末に追記。I、0i:カーソルのある行の行頭に追記。a:カーソル位置の数値に1を足す?(条件によっては引く?)r:カーソル位置の1文字を、この直後に入力する文字と置換.(ピリオド):直前の編集を繰り返す(Redo)u、:undo:直前の編集/取り消しを取り消す(Undo)Ctrl + r、:redo:取り消した操作をもう一度実行する(Redo)※vimのみの機能らしい[11]Shift + v:ビジュアル選択ON/OFF[18]=:選択範囲をインデント[19]コマンドの前に数字を置くと、その数だけ削除される。例えば 7dWは7単語、つまりカーソルのある位置の単語 およびその後ろ6語を削除する。
viエディタにおいて、ヤンク(クリップボードにコピーすること)や削除のコマンドを実行すると指定した内容がクリップボードに一時保存される。
例1:yf, →現在カーソル位置から、後方に最初に現れる "," までをヤンクする。
例2:y$ →現在カーソル位置から、行末までをヤンクする。
参考サイト:
| キー操作 | 動作内容 |
|---|---|
| /(正規表現) | 前方検索 |
| ?(正規表現) | 後方検索 |
| n | 次の候補 |
| N | 前の候補 |
| n | 最後の検索を繰り返し(前方向) |
| N | 最後の検索を繰り返し(逆方向) |
| fc | 行内で文字cを前方向に検索。前に数値 n を付けると n 回目に登場する文字列を |
| Fc | 行内で文字cを後方向に検索 |
| tc | 行内で文字cを前方向に検索し、直前文字に移動 |
| Tc | 行内で文字cを後方向に検索し、直前文字に移動 |
| ;(セミコロン) | f,F,t,T検索を同じ方向に繰り返す |
| ,(コンマ) | f,F,t,T検索を逆方向に繰り返す |
| r | カーソル位置の1文字を置き換える (rの後に入力した1文字で置換、ESCで入力モードを抜ける必要はない) |
| R | 上書きモードになる。 |
| s | カーソル位置の文字を任意の文字で置換する。 |
| :%s/検索パターン/置換パターン/修飾子 |
開いているファイル全体に対して置換を行う。修飾子にgを指定すると全件(しないと最初1件だけ)cを指定すると都度確認を求められる。パターン区切りはスラッシュ以外にセミコロンでも可(パス名修正などの際はこちらの方が使いやすい)[5]。 改行文字を検索・置換文字として指定するには \n (newline)ではなく \r (carriage return)を使う[12]。 大文字に置換するには、後方参照指定の直前に \u を記す。小文字に置換するには同様に \L を記す[13]。 例:PDBID(1〜9の数字1文字+数字か英大文字が3文字)を全て小文字に置換(例:1MBN → 1mbn) :%s/\([1-9][0-9A-Z]\{3\}\)/\L\1/g 例:PDBID(1〜9の数字1文字+数字か英小文字が3文字)を全て大文字に置換(例:1MBN → 1mbn) :%s/\([1-9][0-9a-z]\{3\}\)/\u\1/g |
| :n,ms/検索パターン/置換パターン/修飾子 |
開いているファイルのn行目からm行目までを対象にして置換を行う。修飾子は前項と同じ。
【例】15〜20行目を対象に"//eprots"を"//www"に置換する。 :15,20s/\(\/\/\)eprots/\1www/g 【例】現在カーソルがある行の "home" を全て "DATA_HOME" に置換 :.s/home/DATA_HOME/g |
| c | カーソル位置から指定位置までの変更。 |
| c0 | カーソル位置から行頭までを変更。 |
| C、c$ | カーソル位置から行末までを変更。 |
| cc、S | カーソル位置の行全体を変更する。 |
| ~ | カーソル位置の文字を大文字/小文字変換 |
| # | カーソル位置の単語を検索 |
なお、以下の特殊文字自体を検索したい場合は、その文字の前に\(バックスラッシュ)を入れて特殊な機能を持たせないようエスケープ処理を行う。
^ $ . * [ \
検索、置換パターンに用いる特殊文字は以下の通り。正規表現も参照のこと。
Windowsで作成したテキストファイル(改行コードはCR+LF)をLinux(改行コードはLF)で開くと行末に「^M」が表示されることがある。これはCRがあることを示している。ファイル内の^Mを一括削除するには「:%s/^M//g」。^Mは「Ctrl + V」+「Ctrl + M」で入力する20。
:.,$w log.bak01 <RET>
:1,.-1w log.bak01 <RET>
Ctrl + G、Ctrl + g:現在の行番号の表示:set number または :set nu:行番号表示:set nonumber または :set nonu:行番号非表示!command:viから出ずにUNIXコマンドを1つ実行する。sh:viから出ずにUNIXコマンドを1つ以上実行する(戻る時は Ctrl + d)<:行を左にシフト>:行を右にシフト=:LISPプログラムとして適切な形に整頓するCtrl + l:画面の乱れを直す。:nohlsearch:候補のハイライトを消す(":nohls"でもOK):set hlsearch:候補のハイライトを表示(":set hls"でもOK):set list:制御文字を表示15 16:set nolist:制御文字を非表示16q::実行コマンド履歴を表示17文字化けする時はエンコード設定を行うとよいらしい[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