vi
はテキストエディタである。上位互換品としてvim
がある。
vim
は複数段階の操作取り消し(undo)、複数ウインドウ対応などが機能追加されている。
ターミナルで vi
+エンターキー を入力。
ファイル名を指定して起動する場合は
vi
ファイル名 ...
viには2つのモード(コマンドモードと入力モード)があるが、 起動直後はコマンドモードの状態となっている。
ファイル名を指定して開く場合は以下の通り。
vi ファイル名 ファイル名
:n
:N
vi +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