※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

 Vim(Vi IMproved)はviエディタを改良したもので、UNIX系OSではメジャーなテキストエディタです。Linuxなどでは、viを起動すると、vimが起動したりします。非常に高機能ですが、インターフェースが他のテキストエディタとは異なるため、覚えるのが大変です。せっかく覚えても使わないとすぐ忘れてしまうので、以下に書き留めておきます。
下記の記述は、CentOS5.4のVim version7で確認しています。
なお、その他のTipsは以下にたくさんあります。
http://vim.wikia.com/wiki/Vim_Tips_Wiki


Vimの起動

以下により、指定したファイルをvimで開けます。オプションはmanを見てください。ほとんどのOSではvimコマンドはviコマンドにaliasされていると思います。
$ vim [オプション] <ファイル名>

Vimのモード

 Vimには以下の4つのモードがあり、モード毎に行える操作が異なります。
ノーマルモード
基本のモードで、主にカーソルの移動、テキストの削除を行う。Vim起動後はこのモードになっており、各モードはノーマルモードから遷移する。起動直後はこのモードになっている。
挿入モード
テキストを挿入(書き込む)するためのモード。ノーマルモードで以下のいずれかのキーを押すと挿入モードになり、「Esc」でノーマルモードに戻る。
 i  カーソル位置から挿入可能
 a カーソルの次から挿入可能
 s カーソルの文字を消してそこから挿入可能
 o カーソルの下に1行挿入して、挿入した行からから挿入
 O カーソルの上に1行挿入して、挿入した行からから挿入
 A 行末から挿入可能
 I 半角で始めると引用文になります。
ビジュアルモード
テキストを選択するためのモード。ノーマルモードで以下のいずれかのキーを押すとビジュアルモードになり、「Esc」でノーマルモードに戻る。
 v    文字単位選択
 V    行単位選択
 Ctrl+v 矩形選択
コマンドラインモード
各種コマンドを実行するモード。ノーマルモードから「:」で最下行に1行コマンドが入力できる。

変更内容の更新と破棄、Vimの終了

「:」でコマンドモードになり、以下のキー後にリターンすると、変更内容の更新、破棄、Vimの終了ができます。
 :w  変更内容のファイルへの書き込み
 :e!  ファイルの再読み込み(変更内容の破棄)
 :q  終了
 :q!  強制終了(変更内容を破棄して終了)
 :wq  変更内容をファイルに書き込んで終了
 :wq! 強制変更終了変更内容をファイルに書き込んで終了(read onlyのファイルを変更した場合)

 wやeの付くコマンドに、スペース空けてファイル名を指定すると、別のファイルに対して書き込みや再読み込みができます。
 例 :wq test.c   <ーーtest.cに保存して終了。元のファイルは変更されない。

カーソルの移動

 カーソルはノーマルモードで以下のキーを押して移動します。数字+下記キーを打つと、その文字数分移動します。(例「10l」で10文字右に移動)
 h  左に1文字        k上
 j  下に1文字      h左   l右
 k  上に1文字        j下
 l  右に1文字
 カーソルキーでも移動は可能です。挿入モードでは hjkl キーは文字として挿入されるため使えませんが、カーソルキーだと挿入モードのまま移動できます。
 ノーマルモードで以下のキーにより、特殊な移動ができます。
 Ctrl+d   半画面分下へ移動
 Ctrl+u   半画面分上へ移動
 $     行末に移動
 [END]     行末に移動
 ^     行頭に移動
 [HOME]    行頭に移動
 w     次の単語に移動
 b     前の単語に移動
 f文字   今カーソルがある行のその(文字)に移動
 F文字   今カーソルがある行のその(文字)に移動(逆向き)
 %     対応する括弧に移動
 gg        ファイル先頭に移動
 G         ファイル末尾に移動

アンドゥ、リドゥ

 「:q!」や「e!」だと全ての変更が破棄されるが、直前の変更だけを変更したい場合は、ノーマルモードで以下のキーを使います。
 u     直前の変更を取り消す(undo)
 Ctrl+r   直前のundoの取消

削除

 文字を削除するには、ノーマルモードで以下で行います。各キーの前に数字をうつと、その数分削除できます。(例えば、「10dd」だと10行削除)
 x          カーソルの1文字を削除
 D          カーソルから行末までを削除
 dw         カーソルの単語を削除(カーソルから後ろを削除なので、単語全体の削除は単語の先頭にカーソルを置く)
 dd         カーソルの行を削除
 また、ビジュアルモードで選択した部分も「x」でまとめて削除できます。
 なお、削除したものはデフォルトレジスタに退避され(ヤンク)、ヤンクしたものは「p」でカーソルの次(ddは次の行)にペーストされます。

コピー

 ビジュアルモードで選択し、「y」を押すとデフォルトレジスタに退避され(ヤンク)、ヤンクしたものは「p」でカーソルの次にペーストできます。
 またノーマルモードで「yy」を押すと、カーソルの1行をヤンクします。「10yy」のように前に数字を打つと、その行数分ヤンクできます。

検索

 ノーマルモードで「/」か「?」を打ち、最下行で検索対象の文字列を入れ<Enter>すると、文字列の検索ができます。
 /検索文字列<Enter>  下方向に検索する。
 ?検索文字列<Enter>  上方向に検索する。
 またノーマルモードで、検索したい単語上で「*」を押すと、当該単語を検索文字列として下方向に検索できます。「#」だと上方向に検索できます。いずれの検索でも、「n」で次を検索できます。

置換

 「:」でコマンドモードになり、以下のコマンド後に<Enter>で置換ができます。
 :s/置換前文字列/置換後文字列/    カーソル行の最初に出てきた置換前文字列を置換後文字列に置換
 :s/置換前文字列/置換後文字列/g    カーソル行の全ての置換前文字列を置換後文字列に置換
 :%s/置換前文字列/置換後文字列/    ファイル全体を対象に各行の最初に出てきた置換前文字列を置換後文字列に置換
 :%s/置換前文字列/置換後文字列/g   ファイル全体を対象に全ての置換前文字列を置換後文字列に置換

 s の前の % はファイル全体を対象とすることを意味し、g は行全体を対象とすることを意味します。
 % の代わりに、 n,m(n:開始行数 m:終了行数) を指定すると、n行目からm行目までを置換できます。(例 :10,15s/abc/123/)
 最後の / の後に数字を指定すると、現在行から数字の行数分だけ置換します。(例 :s/abc/123/6 :s/abc/123/g 6)

 :s/置換前文字列/置換後文字列/i    大文字、小文字を無視して置換します。
 :s/\<置換前文字列/置換後文字列/   置換前文字列で始まる単語のみ、置換前文字列部分を置換後文字列に置換
 :s/置換前文字列\>/置換後文字列/   置換前文字列で終わる単語のみ、置換前文字列部分を置換後文字列に置換
 :s/\<置換前文字列\>/置換後文字列/  置換前文字列の完全一致する単語を置換後文字列に置換
 ※上記に対しても %、n,m、g を付けて実行できます。

[おまけ]
 置換後文字に改行を指定したい場合は、「CTRL+v」のあとにEnterキーを押します。
 すると、改行は「^M」と表示されます。
 たとえば、’;’のあとに改行を入れる置換をすると、以下のように表示されます。
 :s/;/;^M/g
 なお置換前文字に改行を指定したい場合は「\n」でOKです。(検索も「/\n」で改行検索です。)


複数ウィンドウ(タイルウィンドウ)

 「:」でコマンドモードになり、以下のコマンドでウィンドウを分割できます。
 :sp            現在開いているファイルを垂直方向に分割。
 :vsp           現在開いているファイルを水平方向に分割
 :new [file]    新規に垂直方向に分割(ファイル名指定でファイルを開く)
 :vnew [file]   新規に水平方向に分割(ファイル名指定でファイルを開く)
分割したウィンドウは、そのウィンドウで「:q」すると閉じ、「:hide」で隠せます。(バッファには残る)。
また、分割したウィンドウ間の移動は以下で行います。
 Ctrl+w h       左のウィンドウへ移動
 Ctrl+w j       下のウィンドウへ移動
 Ctrl+w k       上のウィンドウへ移動
 Ctrl+w l       右のウィンドウへ移動
 Ctrl+w Ctrl+W  順に移動
 ※h.j,k,lの代わりい矢印キーでもよい。
タイルサイズの変更は以下のようにします。
 Ctrl+w後+      上下に広げる
 Ctrl-w後-      上下に狭める
 Ctrl-w後>      左右に広げる
 Ctrl-w後<      左右に狭める
 Ctrl-w後=      すべてのウィンドウの幅を揃える

タブ

 「:」でコマンドモードになり、以下のコマンドでタブを開くことができます。
 :tabnew [file]  タブを開く(ファイル名指定でファイルを開く)
タブの移動は以下でできる。
 gt または gT             次のタブへ移動
 :tabnext または :tabNext 次のタブへ移動
 :b[タブ番号] 指定したタブへ移動
 :ls                       タブ番号の表示


特殊なコマンド

 ga     カーソルの下にある文字の文字コードを表示する。
 gf     カーソルの下にあるファイル名のファイルを開く。(includeのファイルを開くのに便利)
 zf     ビジュアルモードで選択した部分を折り畳む。折り畳んだ部分でスペースを押すと戻る。
 Ctrl+x Ctrl+l  既存行の行頭の一部を入力して押すと、同じ行頭を持つ行を補間
 Ctrl+p 	  一部を入力して押すと、前方検索で残りを補間(補間候補は何が対象か不明?)
 Ctrl+n 	  一部を入力して押すと、後方検索で残りを補間(補間候補は何が対象か不明?)
 Ctrl+r =数式   カーソルのところに数式の結果を挿入する。挿入モードでCtrl+rを押し、=を押すと最下行に数式が入力できる。
  Ctrl+a Ctrl+x   カーソルの下の数字をインクリメント、デクリメントする。

外部コマンドの実行

「:」でコマンドモードになり、以下で外部コマンドが実行できます。
 :!外部コマンド 	外部コマンドを実行
 :r!外部コマンド	外部コマンドを実行し、その出力をカーソル位置に挿入

HTML出力

 vim6以上だと、以下のコマンドで表示されたテキストをHTML化できる。
 :TOhtml
 そのまま「:w」で保存した場合は、カレントディレクトリに.htmlの拡張子で保存される。
 :12,20TOhtml
 のようにすると、12行目から20行目までをHTML化する。
 さらに、以下の指定も可能。
 :let html_number_lines = 1   <-- 行番号を付ける。0は行番号なし
 :let use_xhtml = 1      <-- xhtmlで出力する

vimの文字コード判別

 Ubuntu Server13.04でvimで日本語を入力したら文字化けした。
 LANGがCだからかと思い、コンソール以外ではUTF-8を使うようにしたが、文字化けがなおらない。
 そのため、~/.vimrcに以下を設定して、文字コードを判別するようにしたらうまくいった。
 :set encoding=utf-8
 :set fileencodings=ucs-bom,iso-2022-jp-3,iso-2022-jp,eucjp-ms,euc-jisx0213,euc-jp,sjis,cp932,utf-8
 設定の意味は、以下に詳しくのっていた。
  玉虫色に染まれ!  http://d.hatena.ne.jp/over80/20080907/1220794834
設定項目 説明
encoding(enc) vimの内部使用エンコーディング。編集するファイル内の全ての文字を表せるものを指定すべき。
fileencoding(fenc) 現状のバッファのファイルのエンコーディング。バッファにローカルなオプション。encoding と異なる値設定時はファイルの読み書き時に文字コードの変換が行なわれる。fencが空の場合はencodingと同じ値を使う。
fileencodings(fencs) ファイルを編集する際に想定すべき文字コードのリスト。ファイルを読み込む際に「指定された文字コード」→「encodingの文字コード」に変換し最初にエラー無く変換できたものが fenc に設定される。
 しかし、これを設定してもなぜなおったかよくわからない。fencがUTF-8以外に設定されたからだと思うが・・・

Tips

行コメントの挿入

 ビジュアルモードでコメントしたい行を選択し、「:」を押すと表示される「:'<,'>」に続けて「s/^/\/\//」(行頭に//挿入)を入力する。

インデント

 ビジュアルモードでインデントしたい行を選択し、「>」で右にインデント、「<」で左にインデントする。

文字数を数える

 ビジュアルモードで数えたい部分を選択し、g+Ctrl+g

コマンドモードでの入力補完

以下を入力し、コマンドの一部を入力して「TAB」で補完できる。
:set wildmenu wildmode=list:full

インクリメンタルサーチ

以下を入力すると、検索時に文字を入力していくとインクリメンタルサーチができる。
:set incsearch

ステータスラインの表示

:set laststatus=2
設定値 説明
0 表示なし
1 2つ以上Windowがある時に表示
2 常に表示
:set statusline=%F%r%h%=
設定値 説明
%F 編集しているファイルの絶対パス
%f 編集しているファイルの相対パス
%t ファイル名
%r ファイルが読み込み専用であるときに“[RO]”と表示する
%= 左右を分けるセパレータを表示する
%l 行数
%c 列数
%p テキスト全体に対するカーソル位置までの割合(パーセント表示)

manの表示

表示したい単語の上で「shift+k」を入力。セクション番号入力後「shift+k」で該当セクションのmanを表示する。 
manから戻るには「q」を入力する。

ヘッダファイルの内容表示

表示したいヘッダファイル名の上で「gf」を入力。ヘッダファイルから戻るには「Ctrl+o」を入力する。
別のタブで開きたいなら「Ctrl+w gf」を入力する。


名前:
コメント: