[トップページ] [星雲紀行] [MLXS] [WPGen] [自作音楽] [モデル] [vi/vim] [tips] [自己紹介]

vi / vim

目次

  1. vi とは
  2. モード
  3. コマンド
    1. 基本操作
    2. バッファ操作
    3. 折りたたみ
    4. 分割ウィンドウ
    5. 外部プログラム・環境
  4. 検索・置換
    1. 検索の基本
    2. 正規表現
    3. ハイライト
    4. 複数キーワード検索
    5. 大文字小文字の区別
    6. 行末の改行文字を消す
  5. マクロ
    1. マクロ生成方法
    2. マクロ保存方法
    3. 編集マクロtips
  6. 設定
    1. vim 設定概要
    2. 埋め込み設定
    3. 文字のエンコード指定
    4. 改行方法指定
    5. colors 設定
    6. インデント設定
    7. 起動設定
  7. プラグイン
    1. ctags
  8. appendix
    1. ファイヤーフォックス
    2. コンソール
  9. 参考文献・参考ウェブページ
  10. 履歴

vi とは

vi とは、テキストエディタソフトウェア。

unix (互換)環境には標準で添付している。
操作が複雑だが、慣れればとても使いやすいエディタ。
emacs と違い、メタキーを使用しないので手に負担がかからず、かつ、検索が一つのキー入力で始められたり、とても効率がよい。
マルチプラットフォームで、vim, gvim やvivi など、優れた派生ソフトウェアも多数存在する。
ここではvim の操作を中心に記載している。用語としてはvi で統一している。
以下は愛用しているgvim 6.3。
これさえあればプログラムから文書作成まで何でもできる。


このページはvim のみしか使えないTips もあります。
また、このページはドラフト版です。お気づきの点があれば以下まで
KGussan 'at' Gmail.com
( 'at' を@(アットマーク)に変更してメールをお送りください。)

Vim7 情報:(vim7 がすでにリリースされました。)
http://www.live-emotion.com/diary/?date=20060125 http://groups.yahoo.com/group/vimannounce/message/153

[content]

モード

vi にはモードの概念がある。

  • コマンドモード
  • 編集(挿入)モード

'ESC'キーを押すとコマンドモードに入る。これは置換・検索・保存・読込などを行う。
'a''i''o'などをコマンドモード時に押すと編集(挿入)モードに入る。
仕様書には挿入モード、とある。

このモードがあることがvi にとっつきにくいといわれる原因の一つだが、モードがあることで操作が簡略化できているのでなれると使いやすい。
WINDOWS キーボードの場合、'ESC'キーが遠い場所にあるので'ESC'キーと'半角/全角 漢字'キーを入れ替えて設定すると操作しやすい。

[content]

コマンド

基本操作

カーソル操作

基本的な上下左右のカーソル操作。コマンドモードにて以下の操作を行う。

       k
       ↑
    h←  →l
       ↓
       j
[content]
開始・終了

コマンドモードにて
:e でファイルを開く。
:w で書き込みを行う。
:q で終了する。

[content]
その他の基本的な操作

COMMAND 意味
A行末にカーソルをジャンプ。文字列挿入。
b単語の最後に移動
c文字列の置き換え。
cw単語の切り取り
dd行の削除
Dカレントの位置から行の削除。d$ の短縮形。
e単語の最初に移動
f行内の文字検索。文字の上にカーソルを移動する
H画面最上部にカーソルをジャンプ
iカレントの位置に文字列挿入。
I行頭にカーソルをジャンプ。文字列挿入。
L画面最下部にカーソルをジャンプ
M画面中央部にカーソルをジャンプ
P現在の行に貼り付け
p次の行に貼り付け
t 行内の文字検索。文字の1char 左にカーソルを移動する
u英字文字列を小文字に変換する。 v コマンドなどで選択後にコマンドを入力
U英字文字列を大文字に変換する。 v コマンドなどで選択後にコマンドを入力
x現在の場所にある文字の削除
X現在の直前の場所にある文字の削除
/降順検索
?昇順検索
%対応する括弧へカーソルをジャンプ。 括弧は() もしくは{}
+次行先頭にカーソルをジャンプ
-前行先頭にカーソルをジャンプ
{次の段落にカーソルをジャンプ
}前の段落にカーソルをジャンプ
~英語文字大文字と小文字の置き換え。
*カーソルの単語を降順検索。
#カーソルの単語を昇順検索。 検索後はn/N でジャンプ可能。
"バッファの呼び出し。 削除した文字の履歴を呼び出すためには[0,9] を使用する。
このとき、最新の削除バッファは0 で番号が増えるほど古い履歴になってゆく。
また、マークした位置の呼び出しには[a,z] を使用する。
C-a数字のインクリメント。 windows はシステムコールに設定されているために使えない。
C-x数字のデクリメント
C-pキーワード補間(昇順)
C-nキーワード補間(降順)
C-f1 ページアップ
C-b1 ページダウン

[content]

バッファ操作

COMMAND 意味
bn次のバッファを開く。
bp前のバッファを開く。
b #9指定した番号のバッファを開く。
bw現在のバッファを閉じる。
bd現在のバッファを消す。
lsバッファ一覧を表示する。

[content]

折りたたみ

COMMAND 意味
zf折りたたみをおこなう。
http://pinna.cside4.jp/tips/vim/index.html
zo折りたたみを展開する

[content]

分割ウィンドウ

COMMAND 意味
:new FILENAME新規ファイルを分割ウィンドウでひらく
C-w r分割ウィンドウの上下入れ替え
C-w [hjkl]分割ウィンドウの移動
C-w s横分割ウィンドウの作成
C-w v縦分割ウィンドウの作成
C-w C-w分割ウィンドウの移動
C-w C-q分割ウィンドウを閉じる
C-w C-n新しい分割ウィンドウを作成する。 ファイルなしのブランクバッファで開く。

[content]

外部プログラム・環境

COMMAND 意味
(単語の上で)Kその単語のHelp 検索。
:Explorevim ファイルビューワの表示。便利。 簡単には :e .(カレントディレクトリ指定) でもよい。
:set showmode入力モードの表示
:set noshowmode入力モードの非表示
:set showmatch() や {} の対応の報告
:set noshowmatch() や {} の対応の報告をしない
:%!xxd 16進表示
:%!xxd -r16進表示からアスキーへ変換表示
:r! COMMAND実行したコマンドの結果を次の行に 挿入する。
:!!前回のコマンドを実行する。
:#!sort 編集中のファイルをソート

[content]

検索・置換

検索の基本

基本的に検索は以下のようにコマンドを指定する。

/SEARCH_WORD
また、基本的な置換は以下のコマンドを指定する。
:{scope}s/BEFORE/AFTER/[gc]

便利なコマンドとしては単語の上で
#
をおすとその単語を昇順検索
*
で降順検索。

[content]

正規表現

:1,$s/BEFORE/AFTER/gc
などで検索できるが、このときの範囲指定の1,$ は 文章全体を意味する。
1,$ は% と略することも出来る。 以下は同じ意味の変換。
:%s/BEFORE/AFTER/gc

  1. 選択開始行にカーソルを移動し、マークする。 マークはaからzまでのいずれかの文字を使用し、 マークaなら“ma”と入力する。
  2. 選択終了行にカーソルを移動し、マークする。 マークはaからzまでのいずれかの文字を使用し、 マークbなら“mb”と入力する。
  3. コピーの場合は、挿入する位置にカーソルを移動した後、 マークaからマークbまでを挿入する場合は、
    :’a,’b co .
    と入力する。
  4. 移動の場合は、挿入する位置にカーソルを移動した後、 マークaからマークbまでを挿入する場合は、
    :’a,’b m .
    と入力する。
  5. 削除の場合は、“:’a,’b d”と入力する。

検索文字意味
/WORD_A\|WORD_B WORD_A とWORD_B の2 単語の検索
C-r "ヤンクした文字の検索 このときにヤンクしたレジスタを" の代わりに 指定することも可能。
.任意の一文字
[abc][]内部の一文字
[~abc][]内部の文字以外
/降順検索
?昇順検索
vパターンマッチングに一致しない行の検索
\<単語の先頭
\>単語の末尾
\( WORD \)WORD をバッファに格納する。 具体的な使用方法として
たとえば、姓名の順のデータに対して
MYOUJI NAMAE
FAMIRY_NAME GIVEN_NAME
YAMADA TAROU
これらを名姓の順に並べるためには
:%s/\(.*\) \(.*\)/\2 \1/
とする。結果は以下となる。
NAMAE MYOUJI
GIVEN_NAME FAMIRY_NAME
TAROU YAMADA
[:g/WORD/d] WORD という文字列を含む行を削除する。
[:g!/WORD/d] WORD という文字列を含まない行を削除する。
[:v/WORD/d] WORD という文字列を含まない行を削除する。
:g/KEYWORD/s/BEFORE/AFTER/[g] KEYWORD という文字列を含む行のBEFORE をAFTER に 変換する。
:10,30w>> FILENAME 10 行目から30 行目をFILENAME というファイルに出力。

[content]

検索一致ハイライトを消す

:noh
nohlsearch

[content]

複数キーワード検索

/SEARCH_WORD_A\|SEARCH_WORD_B

[content]

大文字小文字の区別

置換時に大文字小文字の区別をなくすためには

/%s/BEFORE/AFTER/i

大文字小文字の区別をする

/SEARCH_WORD\C

大文字小文字の区別をしない

/SEARCH_WORD\c
大文字小文字の区別を規定するためには

設定意味
:set ignorecase 大文字小文字の区別をしない
:set ic 大文字小文字の区別をしない
:set noignorecase 大文字小文字の区別をする
:set noic 大文字小文字の区別をする

[content]

行末の改行文字を消す

:%s/\r$//g

  1. vim正規表現
    秀逸なvim まとめサイト。
[content]

マクロ

マクロは指定した動作をキーに割り当てることが可能。
ファンクションキーに割り当てると便利。

マクロ生成方法

マクロは以下のようにして記録できる。

コマンドモードにて'q'を押し記録する対象のバッファとなるキーを押す、 その後記録したいコマンドを入力。挿入モードになっても良い。 マクロ化したい入力が終わったら最後に再度コマンドモードになり、'q' を入力する。

例:qpatestq

これで"test"という文字がp バッファに記録される。この後、以下のコマンドで記録したマクロを呼び出せる。

@p

これはp に記録したので@pと押している。記録したバッファ名がgなら'@g'として呼び出す。

レジストリの'a' キーに記録したマクロは、コマンドモードで

"ap

とすると、マクロを表示(ペースト)できる。
このレジストリはカットアンドペーストなどで使用するレジスタと一緒。
たとえば、F2 キーでabc と表示するマクロをvimrc に書くには、

map <F2> abc

とすればよい。

[content]

マクロ保存方法

マクロを保存するためには、設定ファイルのvimrc に以下のように記載する。

" map
" ----------------
" set HTML link tag
map <F2> xi<a href="pa">pa</a>
" set HTML br tag
map <F3> $a<br/>
" set HTML ul tag
map <F4> xi<ul> </ul> kPi<li>
" set HTML p tag (over several lines).
map <F5> xi<p> </p> kP
"map <F6> atest_map_key
キー配置を調べる

またマクロを割り当てるキーの名称を調べるためには、挿入モードにて以下のコマンドを使えばよい

CTRL-k (TARGET-KEY)

例:shiftとF6を一緒に押す。

<S-F6>
[content]

編集マクロtips

大量のテキストに対して同じ処理を繰り返す場合にマクロが非常に有効。
たとえば、このページではhtml のsuffix とprefix を共通にしてすべて同じページで使っている。
# AMAZON のバナーなどの一部の変更はある。
c やshell スクリプトで自動で結合する方がいいと思うがvim を使えばマクロで楽に作業が出来る。

[content]
マクロ例(即時適用・使用)
  1. マクロA の記録を始める(コマンドqa)
  2. 行頭の#### PREFIX #### タグを見てそれ以上の文章を削除する。
  3. 行頭のテンプレートをコマンド:r で読み込み、整形する。
  4. マクロA の記録を終える(コマンドq)
  5. 同様にマクロB でSUFFIX を作成する。
  6. 上記マクロを@A と@B で読み出し、次々と編集対象のファイルを読み込む。

# 注:textutils があれば一発の処理。

[content]

設定

vim 設定概要

これらのファイルは香り屋さんのものを準拠にしました。
windows では設定ファイルはSHIFT-JIS でないと有効でない場合があるので注意。

カスタムキーバインド
Key: F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12
機能 vim reserved (help) <br/> // /* */ { } <li> << >> <pre> </pre> html link (clip board) html image (clip board) html link (block select)
機能(SHIFT) 目次リンク <h3> <h4> <h5> <!-- --> <p> </p> <blockquote> </blockquote> <ul> <ol> html link (vim buffer) html link (line)
[content]
設定ファイル更新履歴
2006/10/27
map をHTML 編集用に追加した。
2006/09/22
map をHTML 編集用に規定した。
2006/03/27
一時バックアップファイル作成先を/tmp へ変更(set backupfir=/tmp) linux への対応のため\ から/ へ。
2006/03/25
一時バックアップファイル作成先を\tmp へ変更(set backupfir=\tmp)
冗長なコメントを削除
2005/06/99
その他変更T.B.D。
" ファイルのタブコード変換幅
set tabstop=4
" タブの自動設定の幅
set shiftwidth=4
" 入力のタブコード変換幅
set softtabstop=4
" refer : http://pcmania.jp/~moraz/howto/setting.html#tabstop
2005/06/99
インデントをcindent に変更した。
2005/06/99
タブストップをオリジナルのものに変更した。
2005/06/99
カラースキームの指定をオリジナルのものに変更した。
2005/08/06
vimrc のCTRL+A の数字インクリメントを8進から10進に。
2005/08/06
F2 F3 F4 F5マクロを追記
ちなみにF1 はWindows Help で予約されている。
それぞれ、リンク、BR、リスト、段落マクロを追記。
  • windows の"Ctrl キー + a" "Ctrl キー + x" "Ctrl キー + v" を 無効にする

    デフォルトのvimrc, gvimrc を消去し、上記設定を残せばOK
    デフォルトのファイル_vimrc 中の、 source $VIMRUNTIME/mswin.vim がこの設定を上書きしている。

  • Linux 安定版設定

    Linux 版ではフォントの設定が上記のファイルではうまくいかない。
    Linux 用のフォントを指定する必要がある。

[content]
旧設定

これらは文字コードの置換もできないし、 不安定。 (以下は古い内容)
c:\Program Files\vim\_vimrc などの設定ファイルに以下を追記する。

set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin
"#### Original Settings ####
"refer:http://pcmania.jp/~moraz/howto/setting.html
:set nu "行番号表示
:set shellslash "パス表示を\ から/ に変更
:set ts=4 sw=4 sts=0 "タブ表示設定
:set listchars=tab: "タブ表示設定
:highlight Specialkey guifg=#0000BB "タブ表示設定
:set list "タブ表示設定
:set ff=unix "改行コードの指定
:set ffs=unix "新しいバッファ改行コード
:set visualbell "beep 音を消す
:set vb t_vb= "画面をフラッシュさせない
:set lines=72 "ウィンドウサイズの設定
colorscheme koehler "カラースキームの設定
:set guifont=MS_明朝:h10::cDEFAULT "フォントの設定
set diffexpr=MyDiff()
function MyDiff()
let opt = '-a --binary '
if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
let arg1 = v:fname_in
if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
let arg2 = v:fname_new
if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
let arg3 = v:fname_out
if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
if &sh =~ '\ silent execute '!""C:\Program Files\Vim\vim63\diff" ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . '"'
else
silent execute '!C:\Program" Files\Vim\vim63\diff" ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3
endif
endfunction
cygwin ではhome の下の.vimrc ファイルを見に行くので上記設定は 以下のファイルに対して記載する必要がある。
  1. DRIVE_LETTER:/Program Files/Vim/_vimrc
  2. DRIVE_LETTER:/Program Files/Vim/vim63/_gvimrc
  3. DRIVE_LETTER:/cygwin/home/USER_NAME/.vimrc
参考ウェブページ: http://pcmania.jp/~moraz/howto/setting.html

[content]

改行方法指定

fileformat はff でもよい。
コマンド内容
:set fileformat=dosCR+LF 指定
:set fileformat=unixLF 指定
:set fileformat=macCR 指定
:e ++ff=unix FILENAME ファイル読み込み時に指定

[content]

埋め込み設定

ファイルに以下のタグを埋め込み、ファイルごとの設定ができる。 ts:tabstop, タブ幅
sw:shiftwidth, cindent autoindent幅
sts:softtabstop, タブキーを押したときに挿入される空白の量。0 ならts と一緒。
tw:textwidth, 折り返しの設定。

vim: set ts=4 sw=4 sts=0 tw=0

参考
http://pcmanla.jp/~moraz/howto/setting.html

[content]

文字のエンコード指定

fileencoding はfenc でもよい。
コマンド内容
:set fileencoding=cp932SJIS 指定
:set fileencoding=euc-jpEUC 指定
:set fileencoding=iso-2022-jpJIS 指定
:set fileencoding=utf-8UTF8 指定
:e ++fenc=iso-2022-jp filename ファイル読み込み時に指定

[content]

colors 設定

koehler はとても見やすいvim のカラー設定。
しかし、window を分割したときにStatus Line の区別がつきにくい。 その点torte などはカレントのwindow にブルーでStatus Line に着色されて 見やすい。

二つが一緒になれば見やすいのに、と思っていいところを組み合わせた カラー設定を作成した。
koehler_kg
個人的には、とても見やすいと思う。

以下のgvim 設定はこのカラー設定を参照している。
このカラー設定を入れるには、以下のパスにコピーすること。

$VIM_PATH/colors/
Windows とLinux のVim6.3 にて動作確認している。

[content]

インデント設定

インデントのモード指定方法。
ちなみに、インデントのモード指定は

:set smartindent

のように行う。

option意味
autoindent単純。前の行のインデントを使用する。
smartindentautoindent に似ているがC の構文と関連はない。
cindentc プログラムの自動インデント。C のフォーマッティングは以下のオプションに影響を受ける。
option意味
cinkeysインデントオプションを切り替えるキーの 入力
cinoptionsインデントをカスタマイズする
cinwords次の行で特別なインデントを開始する キーワード
formatoptions動作を定義する1文字のフラグ。 入力時にコメントをフォーマットするなどの制御。
commentsコメントに対応するフォーマッティングオプション の指定。

[content]

起動

起動時に指定行にジャンプする。

$ vi +16 test.text
[content]

plugin

インストールは
Windows ならば/Program Files/Vim/Vim63/plugin へ
Unix ならば~/.vim/plugin へvim スクリプトをコピーすることで行う。

  1. howm_vim ローカルにWiki のような環境を作成できるとのこと。
    興味深い。Chalice でインターネットへのリンクも可能とのこと。
  2. keisen.vim 罫線を作成する。
    qwerty キーボードでhjlk で罫線を作成できる。便利。
  3. ctags 下記プラグインを使用するために必要なプログラム。
    インストール方法は解凍後にできるctags.exe をgvim.exe と一緒におく。
    cygwin から使用する場合には、cygwin のパスが通っているディレクトリに ctags.exe を置く。( Ex: /usr/local/bin ) Linux ははじめからあると思うが、なければ上記ウェブページより rpm などを入れる。
  4. タグリストプラグイン IDE のようにClass ツリーなどが表示できる。
    コマンドは
    :Tlist
    めちゃくちゃ便利。
  5. cppcomplete cpp やJAVA などのクラスのメンバ変数・関数を補完してくれる プラグイン。
    要Ctags
    コマンドは
    Ctrl-n || Ctrl-p
  6. VisVim VisualStdio でvi をエディタにする。
    画期的だが、エディタとvim を行き来するのが面倒。
  7. Chalice 2ch viewer。Windows 環境でなぜか文字化け、失敗。EUC 指定のせいか。
[content]

ctags

ctags はソースコードをパースしてタグを生成するプログラム。
タグファイルにより、クラスや関数が定義されている場所へ タグジャンプできる。

[content]
タグジャンプ

Makefile に記述する場合もある。
コマンドラインで ctags -r . とするとカレントディレクトリ以下のファイルを再帰的に検索し tags という名前のタグファイルを作成してくれる。
これがある時、関数の上で

C-[
[ + C-d

すると、その関数の定義位置にジャンプしてくれる。
戻るときは

C-o
C-t

#define などの 定義値を参照する場合は

[ + d

この場合はジャンプするのでなく最下段に定義情報を 表示する。

  1. ctags windows binary
  2. ctags(hp)
  3. vim users guide -ctags
    わかりやすい解説
[content]

APPENDIX

ファイヤーフォックス

ファイヤーフォックスのキーバインドをvi 風にできるスクリプト
以下はプラグイン。便利。 http://humming.dip.jp/mozless/

以下はFirefox の設定ファイルを直接操作するHack 方法。
Firefox speed increase + vi keybindings = happy user. O'reilly developper weblogs。失敗。
http://legonet.org/~griffin/firefox_vi-bindings.html 失敗。
http://www.calmar.ws/firefox/index.php#keyconfig 試していない。

[content]

コンソール

コンソールでvi 風のキーバインドにするためには

set -i vi

これで標準のEmacs のキーバインドではなくvi キーバインドが使用できる。

[content]

参考文献・参考ウェブページ

  1. ViIMproved‐Vim完全バイブル
  2. vim 日本語ドキュメント http://www.kaoriya.net/vimdoc_j/index.html
  3. O'REILLY 入門vi リンダ ラム
  4. O'REILLY vi デスクトップリファレンス アーノルド ロビンス
  5. vim-jp vim 日本語メーリングリスト
  6. gvim マルチプラットフォーム対応のgvim の本家
  7. vi を使うなら一度はチェック必須。
  8. wikipedia vi
  9. janus home page 個人ページ・とてもよくまとまっている。
  10. stack astarisk vi
[content]

履歴

  • 2006/09/19 更新
  • 2006/03/27 設定ファイル更新
  • 2006/03/11 履歴作成開始
  • 2004/00/00 作成
ご意見、ご感想、誤字、間違い等、お気づきの点がありましたら KGussan@Gmail.com まで連絡ください。
このウェブページの注意・免責事項 Copyright (C) 2004-2012 KGussan. [トップページ]
[PR:元国税局勤務の起業家向け、遺産相続の相談なら植村洋税理士事務所:一時間無料税理士相談。お気軽に。]