vi / vim
- vi とは
- モード
- コマンド
- 基本操作
- バッファ操作
- 折りたたみ
- 分割ウィンドウ
- 外部プログラム・環境
- 検索・置換
- 検索の基本
- 正規表現
- ハイライト
- 複数キーワード検索
- 大文字小文字の区別
- 行末の改行文字を消す
- マクロ
- マクロ生成方法
- マクロ保存方法
- 編集マクロtips
- 設定
- vim 設定概要
- 埋め込み設定
- 文字のエンコード指定
- 改行方法指定
- colors 設定
- インデント設定
- 起動設定
- プラグイン
- ctags
- appendix
- ファイヤーフォックス
- コンソール
- 参考文献・参考ウェブページ
- 履歴
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
vi にはモードの概念がある。
'ESC'キーを押すとコマンドモードに入る。これは置換・検索・保存・読込などを行う。
'a''i''o'などをコマンドモード時に押すと編集(挿入)モードに入る。 仕様書には挿入モード、とある。
このモードがあることがvi にとっつきにくいといわれる原因の一つだが、モードがあることで操作が簡略化できているのでなれると使いやすい。
WINDOWS キーボードの場合、'ESC'キーが遠い場所にあるので'ESC'キーと'半角/全角 漢字'キーを入れ替えて設定すると操作しやすい。
カーソル操作
基本的な上下左右のカーソル操作。コマンドモードにて以下の操作を行う。
k
↑
h← →l
↓
j
開始・終了
コマンドモードにて
:e でファイルを開く。
:w で書き込みを行う。
:q で終了する。
その他の基本的な操作
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-f | 1 ページアップ |
C-b | 1 ページダウン |
COMMAND
|
意味
|
bn | 次のバッファを開く。 |
bp | 前のバッファを開く。 |
b #9 | 指定した番号のバッファを開く。 |
bw | 現在のバッファを閉じる。 |
bd | 現在のバッファを消す。 |
ls | バッファ一覧を表示する。 |
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 | 新しい分割ウィンドウを作成する。
ファイルなしのブランクバッファで開く。 |
COMMAND
|
意味
|
(単語の上で)K | その単語のHelp 検索。 |
:Explore | vim ファイルビューワの表示。便利。
簡単には :e .(カレントディレクトリ指定) でもよい。 |
:set showmode | 入力モードの表示 |
:set noshowmode | 入力モードの非表示 |
:set showmatch | () や {} の対応の報告 |
:set noshowmatch | () や {} の対応の報告をしない |
:%!xxd | 16進表示 |
:%!xxd -r | 16進表示からアスキーへ変換表示 |
:r! COMMAND | 実行したコマンドの結果を次の行に
挿入する。 |
:!! | 前回のコマンドを実行する。 |
:#!sort | 編集中のファイルをソート |
基本的に検索は以下のようにコマンドを指定する。
/SEARCH_WORD
また、基本的な置換は以下のコマンドを指定する。
:{scope}s/BEFORE/AFTER/[gc]
便利なコマンドとしては単語の上で
#
をおすとその単語を昇順検索
*
で降順検索。
:1,$s/BEFORE/AFTER/gc
などで検索できるが、このときの範囲指定の1,$ は
文章全体を意味する。
1,$ は% と略することも出来る。
以下は同じ意味の変換。
:%s/BEFORE/AFTER/gc
- 選択開始行にカーソルを移動し、マークする。
マークはaからzまでのいずれかの文字を使用し、
マークaなら“ma”と入力する。
- 選択終了行にカーソルを移動し、マークする。
マークはaからzまでのいずれかの文字を使用し、
マークbなら“mb”と入力する。
- コピーの場合は、挿入する位置にカーソルを移動した後、
マークaからマークbまでを挿入する場合は、
:’a,’b co . と入力する。
- 移動の場合は、挿入する位置にカーソルを移動した後、
マークaからマークbまでを挿入する場合は、
:’a,’b m . と入力する。
- 削除の場合は、“:’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 というファイルに出力。 |
:noh
nohlsearch
/SEARCH_WORD_A\|SEARCH_WORD_B
置換時に大文字小文字の区別をなくすためには
/%s/BEFORE/AFTER/i
大文字小文字の区別をする
/SEARCH_WORD\C
大文字小文字の区別をしない
/SEARCH_WORD\c
大文字小文字の区別を規定するためには
設定 | 意味 |
:set ignorecase |
大文字小文字の区別をしない |
:set ic |
大文字小文字の区別をしない |
:set noignorecase |
大文字小文字の区別をする |
:set noic |
大文字小文字の区別をする |
:%s/\r$//g
-
vim正規表現
秀逸なvim まとめサイト。
マクロは指定した動作をキーに割り当てることが可能。
ファンクションキーに割り当てると便利。
マクロは以下のようにして記録できる。
コマンドモードにて'q'を押し記録する対象のバッファとなるキーを押す、
その後記録したいコマンドを入力。挿入モードになっても良い。
マクロ化したい入力が終わったら最後に再度コマンドモードになり、'q' を入力する。
例:qpatestq
これで"test"という文字がp バッファに記録される。この後、以下のコマンドで記録したマクロを呼び出せる。
@p
これはp に記録したので@pと押している。記録したバッファ名がgなら'@g'として呼び出す。
レジストリの'a' キーに記録したマクロは、コマンドモードで
"ap
とすると、マクロを表示(ペースト)できる。
このレジストリはカットアンドペーストなどで使用するレジスタと一緒。
たとえば、F2 キーでabc と表示するマクロをvimrc に書くには、
map <F2> abc
とすればよい。
マクロを保存するためには、設定ファイルの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>
大量のテキストに対して同じ処理を繰り返す場合にマクロが非常に有効。
たとえば、このページではhtml のsuffix とprefix を共通にしてすべて同じページで使っている。
# AMAZON のバナーなどの一部の変更はある。
c やshell スクリプトで自動で結合する方がいいと思うがvim を使えばマクロで楽に作業が出来る。
マクロ例(即時適用・使用)
- マクロA の記録を始める(コマンドqa)
- 行頭の#### PREFIX #### タグを見てそれ以上の文章を削除する。
- 行頭のテンプレートをコマンド:r で読み込み、整形する。
- マクロA の記録を終える(コマンドq)
- 同様にマクロB でSUFFIX を作成する。
- 上記マクロを@A と@B で読み出し、次々と編集対象のファイルを読み込む。
# 注:textutils があれば一発の処理。
これらのファイルは香り屋さんのものを準拠にしました。
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) |
|
設定ファイル更新履歴
- 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 用のフォントを指定する必要がある。
旧設定
これらは文字コードの置換もできないし、
不安定。
(以下は古い内容)
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 ファイルを見に行くので上記設定は
以下のファイルに対して記載する必要がある。
- DRIVE_LETTER:/Program Files/Vim/_vimrc
- DRIVE_LETTER:/Program Files/Vim/vim63/_gvimrc
- DRIVE_LETTER:/cygwin/home/USER_NAME/.vimrc
参考ウェブページ:
http://pcmania.jp/~moraz/howto/setting.html
fileformat はff でもよい。
コマンド | 内容 |
:set fileformat=dos | CR+LF 指定 |
:set fileformat=unix | LF 指定 |
:set fileformat=mac | CR 指定 |
:e ++ff=unix FILENAME |
ファイル読み込み時に指定 |
ファイルに以下のタグを埋め込み、ファイルごとの設定ができる。
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
fileencoding はfenc でもよい。
コマンド | 内容 |
:set fileencoding=cp932 | SJIS 指定 |
:set fileencoding=euc-jp | EUC 指定 |
:set fileencoding=iso-2022-jp | JIS 指定 |
:set fileencoding=utf-8 | UTF8 指定 |
:e ++fenc=iso-2022-jp filename |
ファイル読み込み時に指定 |
koehler はとても見やすいvim のカラー設定。
しかし、window を分割したときにStatus Line の区別がつきにくい。
その点torte などはカレントのwindow にブルーでStatus Line に着色されて
見やすい。
二つが一緒になれば見やすいのに、と思っていいところを組み合わせた
カラー設定を作成した。
koehler_kg
個人的には、とても見やすいと思う。
以下のgvim 設定はこのカラー設定を参照している。
このカラー設定を入れるには、以下のパスにコピーすること。
$VIM_PATH/colors/
Windows とLinux のVim6.3 にて動作確認している。
インデントのモード指定方法。
ちなみに、インデントのモード指定は
:set smartindent
のように行う。
option | 意味 |
autoindent | 単純。前の行のインデントを使用する。 |
smartindent | autoindent に似ているがC の構文と関連はない。 |
cindent | c プログラムの自動インデント。C のフォーマッティングは以下のオプションに影響を受ける。
option | 意味 |
cinkeys | インデントオプションを切り替えるキーの
入力 |
cinoptions | インデントをカスタマイズする |
cinwords | 次の行で特別なインデントを開始する
キーワード |
formatoptions | 動作を定義する1文字のフラグ。
入力時にコメントをフォーマットするなどの制御。 |
comments | コメントに対応するフォーマッティングオプション
の指定。 |
|
起動時に指定行にジャンプする。
$ vi +16 test.text
インストールは
Windows ならば/Program Files/Vim/Vim63/plugin へ
Unix ならば~/.vim/plugin へvim スクリプトをコピーすることで行う。
-
howm_vim
ローカルにWiki のような環境を作成できるとのこと。
興味深い。Chalice でインターネットへのリンクも可能とのこと。
-
keisen.vim
罫線を作成する。
qwerty キーボードでhjlk で罫線を作成できる。便利。
-
ctags
下記プラグインを使用するために必要なプログラム。
インストール方法は解凍後にできるctags.exe をgvim.exe と一緒におく。
cygwin から使用する場合には、cygwin のパスが通っているディレクトリに
ctags.exe を置く。( Ex: /usr/local/bin )
Linux ははじめからあると思うが、なければ上記ウェブページより
rpm などを入れる。
-
タグリストプラグイン
IDE のようにClass ツリーなどが表示できる。
コマンドは
:Tlist
めちゃくちゃ便利。
-
cppcomplete
cpp やJAVA などのクラスのメンバ変数・関数を補完してくれる
プラグイン。
要Ctags
コマンドは
Ctrl-n || Ctrl-p
-
VisVim
VisualStdio でvi をエディタにする。
画期的だが、エディタとvim を行き来するのが面倒。
-
Chalice
2ch viewer。Windows 環境でなぜか文字化け、失敗。EUC 指定のせいか。
ctags はソースコードをパースしてタグを生成するプログラム。
タグファイルにより、クラスや関数が定義されている場所へ
タグジャンプできる。
Makefile に記述する場合もある。
コマンドラインで ctags -r . とするとカレントディレクトリ以下のファイルを再帰的に検索し
tags という名前のタグファイルを作成してくれる。
これがある時、関数の上で
C-[
[ + C-d
すると、その関数の定義位置にジャンプしてくれる。
戻るときは
C-o
C-t
#define などの
定義値を参照する場合は
[ + d
この場合はジャンプするのでなく最下段に定義情報を
表示する。
-
ctags windows binary
-
ctags(hp)
-
vim users guide -ctags
わかりやすい解説
ファイヤーフォックスのキーバインドを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
試していない。
コンソールでvi 風のキーバインドにするためには
set -i vi
これで標準のEmacs のキーバインドではなくvi キーバインドが使用できる。
-
ViIMproved‐Vim完全バイブル
- vim 日本語ドキュメント
http://www.kaoriya.net/vimdoc_j/index.html
-
O'REILLY 入門vi
リンダ ラム
-
O'REILLY vi デスクトップリファレンス
アーノルド ロビンス
-
vim-jp
vim 日本語メーリングリスト
-
gvim
マルチプラットフォーム対応のgvim の本家
-
vi を使うなら一度はチェック必須。
-
wikipedia vi
-
janus home page
個人ページ・とてもよくまとまっている。
-
stack astarisk vi
- 2006/09/19 更新
- 2006/03/27 設定ファイル更新
- 2006/03/11 履歴作成開始
- 2004/00/00 作成
|