intro.txt For Vim バージョン 9.1. Last change: 2024 Oct 05
VIMリファレンスマニュアル by Bram Moolenaar
序文 ref reference
1. はじめに intro
2. インターネットの Vim 情報 internet
3. クレジット credits
4. ヘルプの表記法 notation
5. モードの紹介 vim-modes-intro
6. モードの切り替え mode-switching
7. ウィンドウに表示される内容 window-contents
8. 用語の定義 definitions
==============================================================================
1. はじめに intro
Vim は Vi IMproved (Viの改良版) です。かつては Vi IMitation (Viの模造品) でし
たが、多くの改良が加えられたので適切な名前に変更されました。Vim はテキストエ
ディタです。Unix のプログラム "Vi" のほとんどのコマンドと、さらに多くの新しい
コマンドを備えています。プログラムを書いたりテキストを編集するのにとても便利で
す。
すべてのコマンドはキーボードから入力します。そのため、キーボードから手を離す必
要も、スクリーンから目を離す必要もありません。お望みなら、マウスを使うこともで
きますし、GUIではスクロールバーやメニューを使うこともできます(gui.txt参照)。
このマニュアルの概要は help.txt にあります。Vim から <Help> や <F1> キー、
:help コマンドで開くことができます (単に :help と入力してください。引用符も
バーも必要ありません)。
ヘルプファイルが標準の位置にインストールされていない場合は、ヘルプファイルの名
前をオプション 'helpfile' に設定してください。タグでジャンプするのと同じように
ヘルプの項目へジャンプできます。ジャンプしたい項目にカーソルを合わせて CTRL-]
でジャンプできます。CTRL-T で元の場所に戻れます。
Vi と Vim の違いは vi_diff.txt に記載されています。
このマニュアルの内容は Vim が実行されるほとんどの環境で通用しますが、コンピュー
タや端末によって、少し違う動作をする場合があります。このドキュメントから外れる
内容については、システムごとに個別の説明があります。sys-file-list を参照。
pronounce
Vim は vi-ai-em ではなく、Jim のように一語として発音します。Vim はまた Jim の
ように名称なので、(最初の文字を)大文字で書きます。GUI 版の Vim は "gVim" (文頭
の場合は "GVim")と表記されます。
このマニュアルは全ての Vim コマンドとオプションのリファレンスです。Vi や Vim
の入門書ではありません (それを入れるとあちこちで説明が込み入ってしまうので)。
初心者には、実習 tutor があります。Vim の使い方を身につけるにはユーザーマニュ
アル usr_toc.txt を読んでください。
book books
ViとVimに関するほとんどの本には初心者向けのセクションがあります。その他、特定
の機能についてより多くの言葉を費やしています。Vimの本の概要はここにあります:
http://iccf-holland.org/vim_books.html
==============================================================================
2. インターネットの Vim 情報 internet
www WWW faq FAQ distribution download
Vim のページには Vim についての最新情報が載っています。最新バージョンの Vim へ
のリンクもあります。FAQ はよく尋ねられる質問に対する回答集です。問題があったら
まずこれを読むとよいでしょう。
Vimホームページ: https://www.vim.org/
Vim FAQ: https://vimhelp.org/vim_faq.txt.html
ダウンロード: https://www.vim.org/download.php
質問がある場合、答えを探す場合は: https://vi.stackexchange.com/
"Vi and Vim Stack Exchange はテキストエディタのviとVim類を使っている人のための
質疑応答サイトです"
Vim について討論している Usenet News グループ news usenet
comp.editors
このグループでは他のエディタについても話し合われています。Vim について書く場合
は、そのことを必ず明記してください。
あなたはここでアクセスできます:
https://groups.google.com/forum/#!topic/comp.editors
mail-list maillist
Vim のメーリングリストがいくつかあります:
<vim@vim.org> vim-use vim_use
現行バージョンの Vim の使い方に関する議論: 使いやすいマップ、質問、回
答、特定のバージョンはどこで手に入るかなど。このメーリングリストにはた
くさんの人が参加していて、(初心者の) 質問にも答えてくれます。遠慮せず
どんどん質問してください。
<vim-dev@vim.org> vim-dev vim_dev vimdev
Vim の開発に関する議論: 新しい機能、移植、パッチ、ベータ版など。
<vim-announce@vim.org> vim-announce vim_announce
Vim の新バージョンに関するアナウンス: ベータ版や他システムへの移植につ
いてもアナウンスがあります。このメーリングリストは購読専用です。
<vim-mac@vim.org> vim-mac vim_mac
Vim のマッキントッシュバージョンの使用、改良に関する議論。
<vim-security@googlegroups.com> vim-security
このリストは、Vim のセキュリティ関連の問題を (非公開で) 議論するための
ものです。
最新の情報は http://www.vim.org/maillist.php を参照。
NOTE:
- アーカイブは誰でも見ることができます。例えば、Googleグループ。vim-security
リスト以外の質問がある場合は、これを検索してください。
- メーリングリストに投稿するにはそのリストに登録する必要があります!
- 最初のメッセージはモデレートされているため、表示されるまでに数時間かかること
があります。
- 登録したアドレスと同じアドレスで投稿する必要があります(スパムメールを避ける
ため)。
subscribe-maillist
メーリングリストに参加したい場合は、次の場所へメールを送って下さい。
<vim-subscribe@vim.org>
"From:" のアドレスが正しいことを確認してください。メーリングリストのサーバーか
ら登録方法についてのヘルプが送られてきます。
maillist-archive
より詳しい情報とアーカイブについては、Vim メーリングリストページを見てください。
http://www.vim.org/maillist.php
バグレポート: bugs bug-reports bugreport.vim
バグを報告するには3つの方法があります:
1. ランタイムのファイルについてのissueは、ヘッダにある email アドレス宛てか他
の方法でメンテナーにレポートを送ってください。
2. GitHub に issue を立ててください: https://github.com/vim/vim/issues
文章は vim-dev メーリングリストにも転送されます。
3. バグレポートは Vim 開発陣 <vim-dev@vim.org> に送ってください。
これはメーリングリストです。最初にメンバーになる必要があります。たくさんの
人がそのメッセージを見ます。もしセキュリティ上の問題などの理由でそれを望ま
ないのであれば、電子メールアドレス <vim-security@googlegroups.com> で現在の
Vim メンテナーに連絡するか、Github でセキュリティアドバイザリを作成してくだ
さい: https://github.com/vim/vim/security/advisories
メッセージは簡潔にお願いします。メールに回答する時間は、Vim を改良する時間から
消費されています! 常に再現可能な例をつけてください。そして、バグを引き起こす設
定やその他のものを探してください。
なるべくなら Vim を次のように起動してください: >
したら MS-Windows 固有のバグかも?)、違うマシンでも試してみて下さい。
可能ならばパッチを送って下さい! https://github.com/vim/vim でプルリクエストを
作成すると、自動チェックが実行され、明らかな問題があれば報告されます。ただし、
パッチを電子メールで送信することもできます(空白文字の変更を避けるために添付ファ
イルを使用してください)。
{訳注: 本家へのレポートは英語でお願いします}
Vim のバージョンや設定情報を含めてくれると助かります。次のコマンドで情報を得る
ことができます: >
"bugreport.txt" というファイルを作ります。このファイルを送る前に、そこにいかな
る秘密の情報も含まれていないことを確認してください!
Vim がクラッシュした場合は、クラッシュした場所を探してみてください。詳しくは
debug.txt を参照してください。
よく分からなかったり、その問題がすでに解決済みかどうか知りたい場合には、
vim-dev メーリングリストで質問してください。maillist
year-2000 Y2K
Vim の内部では、テキストの編集に日付を使っていないので、2000 年問題はありませ
ん。Vim は 1970 年 1 月 1 日 (正午) からの秒形式で時間を使います。これは、開い
ているファイルとスワップファイルのタイムスタンプをチェックするために使われます
が、致命的な問題は起きません。ただ警告メッセージが表示されるだけでしょう。
しかし、32bit 整数で秒があふれてしまう 2038 年問題はあるかもしれません。この問
題は、コンパイラ、ライブラリ、オペレーティングシステムに依存しています。
time_t、ctime() 関数が使われているときは特にそうです。time_t はスワップファイ
ル内に 4 バイトで格納されますが、これはファイルの回復時にファイルの日付、時間
を求めるために使われるだけなので、通常の編集作業には決して影響しません。
Vim の strftime() 関数は strftime() システムコールを直接使います。localtime()
は time() システムコールを、getftime() は stat() システムコールで返される時間
をそれぞれ使用します。システムライブラリが 2000 年対応なら、Vim もそうです。
ユーザーは外部コマンドを使用する Vim script を作るかもしれません。このことが
Y2K 問題を招くかもしれませんが、Vim 自身の問題ではありません。
==============================================================================
3. クレジット credits author
Vim の大部分は Bram Moolenaar <Bram@vim.org> Bram-Moolenaar によって作成され
ました。
ドキュメントの一部は以下の方々によって書かれた Vi のマニュアルによります:
W.N. Joy
Alan P.W. Hewett
Mark Horton
Vim エディタは Stevie をベースにしており、下記の方々のソフトウェア (のアイデア)
も参考にしています。他の人々は私に意見やパッチを送ってくれたり、Vim の良い点、
悪い点に関するフィードバックをしてくれました。
これらの人々の協力なくして、Vim は現在の姿にはならなかったことでしょう!
Ron Aaron Win32 GUIに関する変更
Mohsin Ahmed 暗号化
Zoltan Arpadffy VMS移植の作業
Tony Andrews Stevie
Gert van Antwerpen MS-DOS上のDJGPPに関する変更
Berkeley DB(3) スワップファイルの実装に関するアイデア
Keith Bostic Nvi
Walter Briscoe Makefileの更新、様々なパッチ
Ralf Brown MS-DOS用のSPAWNOライブラリ
Robert Colon 多くの役立つアドバイス
Marcin Dalecki GTK+ GUIへの移植、ツールバーのアイコン
gettext()
Kayhan Demirel ウガンダのニュースを送ってくれた
Chris & John Downey xvi (マルチウィンドウバージョンのアイデア)
Henk Elbers 最初のVMSへの移植
Daniel Elstner GTK+ 2 への移植
Eric Fischer Macへの移植、'cindent'、その他の改良
Benji Fisher たくさんのユーザーの質問に答えてくれた
Bill Foster Athena GUIへの移植 (後で削除)
Google Bram に週に一日 Vim の仕事をさせてくれる
Loic Grenie xvim (マルチウィンドウバージョンのアイデア)
Sven Guckes Vimのプロモーター、以前のWWWページ管理者
Sven-Guckes
Darren Hiebert Exuberant ctags
Jason Hildebrand GTK+ 2 への移植
Bruce Hunsaker VMSへの移植版の改良
Andy Kahn Cscopeサポート、GTK+ GUIへの移植
Oezguer Kesim Vimメーリングリストの管理者
Axel Kielhorn Macintosh移植の仕事
Steve Kirkendall Elvis
Roger Knobbe オリジナルのWindows NTへの移植
Sergey Laskavy モスクワからのVimのヘルプ
Felix von Leitner Vimメーリングリストの以前の管理者
David Leonard UnixへのPython拡張の移植
Avner Lottem ウィンドウでの右から左への編集
Flemming Madsen X11 client-server, 様々な機能とパッチ
Tony Mechelynck ユーザーから寄せられたたくさんの質問に回答
Paul Moore Pythonインターフェイス拡張、たくさんのパッチ
Katsuhito Nagano マルチバイトバージョンに関する作業
Sung-Hyun Nam マルチバイトバージョンに関する作業
Vince Negri Win32 GUIと一般的なコンソールの拡張
Steve Oualline 最初のVimの本の著者frombook
Dominique Pelle Valgrind のレポートと多くの修正
A.Politz たくさんのバグ報告と修正
George V. Reilly Win32移植、Win32 GUIへの移植を始める
Stephen Riehm バグ収集家
Stefan Roemer さまざまなパッチとユーザーへのヘルプ
Ralf Schandl IBM OS/390への移植
Olaf Seibert DICEとBeBoxバージョン、regexpの改良
Mortaza Shiran Farsiのパッチ
Peter da Silva termlib
Paul Slootman OS/2への移植
Henry Spencer 正規表現に関して
Dany St-Amant Macintoshへの移植
Tim Thompson Stevie
G. R. (Fred) Walter Stevie
Sven Verdoolaege Perlインターフェイス
Robert Webb コマンドライン補完、GUIバージョン、そして
多くのパッチ
Ingo Wilken Tclインターフェイス
Mike Williams PostScriptの印刷
Juergen Weigert Latticeバージョン、AUXの改良、UNIXとMS-DOSへ
の移植、autoconf
Stefan 'Sec' Zehl vim.orgの管理
Yasuhiro Matsumoto 多くの MS-Windows の改良
Ken Takata 修正と機能
Kazunobu Kuriyama GTK 3
Christian Brabandt 多くの修正、機能、ユーザーサポート等
Yegappan Lakshmanan 多くのquickfix機能
バグレポートや提案を送ってくれた人々に感謝します。あまりにたくさんいるので、こ
こで彼らの名前について触れることはできませんが。これらの人々のアイデアがなけれ
ば、Vim は今の Vim にはならなかったことでしょう: 彼らが Vim を生かしつづけたの
です!
love peace friendship gross-national-happiness
この文書には他のバージョンの Vi に対するいくつかの参照があります:
Vi vi
Vi "オリジナル"。特に指定がなければSun OS 4.xのバージョンのViを指しま
す。":version" は "Version 3.7, 6/7/85" を返します。別のバージョンに言
及することもあります。Unix 上でのみ動きます。ソースコードは現在BSDスタ
イルのライセンス下で利用可能です。Vi についての更なる情報は、以下の場
所から得られます:
http://ex-vi.sourceforge.net/
Posix
Posix IEEE standard 1003.2, Part 2: Shell and utilitiesより。
一般に "Posix" として知られる。Vi の動作仕様の原典です。
posix-compliance を参照してください。
Nvi
Nvi "New" Vi。BSD 4.4、FreeBSD に付属の Vi。オリジナルの Vi と高い互換性を
持ち、少々の拡張がされています。使われているのはバージョン 1.79。
":version" は "Version 1.79 (10/23/96)" を返します。バージョン 1.81 が
開発中ですが、ここ数年リリースされていません。
ソースコードは自由に利用できます。
Elvis
Elvis 別の Vi クローン、Steve Kirkendallが作成しました。とてもコンパクトです
が、Vim ほど高機能ではありません。開発は失速し、エルヴィスは建物を去っ
てしまいました! ソースコードは自由に利用できます。
Neovim
Neovim Vimのクローン。2014年にVimのソースをフォークして、異なる方向を進みまし
た。非常にgithubに縛られていて、より多くの依存関係があり、開発をより複
雑にし、移植性を制限しています。コードがリファクタリングされ、パッチが
Vimと交換できなくなりました。リモートGUIとスクリプト言語との統合をサ
ポートしています。
==============================================================================
4. ヘルプの表記法 notation
この文章を構文強調を使って表示すると、見たままの意味ではないテキストは特別に強
調表示されます。[]、{}、<>、で囲まれた項目や CTRL-X などです。
Note: Vim は入力可能な文字はすべてコマンドで使います。実際に、[]、{}、<> を入
力する場合もあります。それは文脈によって判断できるでしょう。
[] 角カッコで囲まれた文字は省略可能。
count [count]
[count] コマンドに前置して、そのコマンドを繰り返したり、反復したりする
ための省略可能な数字。省略した場合、特に注意が無ければ 1 を指
定したのと同じになります。Note: このマニュアルでは、[count] は
コマンドの説明では言及されません。解説する場合だけ説明します。
これはコマンドを調べ易くするためです。'showcmd' オプションが有
効だと、(部分的に) 入力されたカウントがウィンドウの下の方に表
示されます。<Del> を使って末尾の数字を削除できます(N<Del>)。
[quotex]
["x] テキストの保管場所として、任意のレジスタを指定できることを示す。
registers を参照。x は 'a' から 'z'、'A' から 'Z'、'"'、のど
れか一文字です。場合によっては (put コマンドで使うときなど)、
'0' から '9'、'%'、'#'、その他の文字も使えます。大文字でも小文
字でも同じレジスタを指しますが、小文字を使ったときはレジスタの
内容が上書きされ、大文字を使ったときはレジスタの内容に追加され
ます。"x を指定しなかった場合や、"" を指定した場合は、無名レジ
スタが使われます。
{}
{} 中括弧の表記は、コマンドの一部として入力する必要があって、そこ
には、いろいろな値を入力することができるときに使われます。Vim
と Vi の違いを示す場合も中括弧で表記されます (これは文脈から区
別できます)。
{char1-char2}
{char1-char2} char1 から char2 の範囲のどれか一文字。例えば、{a-z} は小文字
一文字。複数の範囲が指定される場合もあります。例えば、
{a-zA-Z0-9} は英数字のどれか一文字です。
{motion} movement
{motion} カーソル移動コマンド。これらは、motion.txt で説明されていま
す。例:
w 次の単語の最初に移動
b 現在の単語の最初へ
4j 4行下に移動
/The<CR> つぎの "The" が、ある場所に移動
オペレータコマンド (operator) を入力した後で、対象のテキスト
を選択するため使われます。
- 移動コマンドがカウントを含み、オペレータコマンドもカウントを
含むときは、二つのカウントが掛け合わされる。例えば、"2d3w"
は 6 単語を削除する。
- 移動はバックもできる。例えば、"db" は単語の最初までを削除す
る。
- 移動はマウスのクリックでもできる。ただし、マウスをサポートし
ていない端末もあります。
- ":omap" コマンドを使って、オペレータコマンドに対して移動コマ
ンドを入力しているときに働くマップを定義できます。
- Ex コマンドを使ってカーソルを移動できます。関数を使って複雑
な移動をすることもできます。どの ":" コマンドが使われても、
移動は常に文字単位で排他的です。そのため、改行を含めずに行末
の文字を選択することはできません ('virtualedit' を設定すれば
可能)。
Ex コマンドで、オペレータコマンドを使った場所より前にあるテ
キストを変更したり、他のバッファに移動した場合、結果は予測で
きません。オペレータコマンドを使った場所以降のテキストなら変
更できます。カレントバッファがアンロードされないなら、他の
バッファにジャンプすることも可能です。
{Visual}
{Visual} 選択されたテキストの範囲。"v"、"V"、CTRL-V コマンドで選択を開
始し、カーソル移動コマンドで選択範囲を変更できます。
オペレータコマンド (operator) を実行する前に使って、対象のテ
キストを選択することができます。Visual-mode を参照。
<character>
<character> 下記の表に示した特殊文字。修飾キーが付くこともあります。修飾
キーと ASCII 文字の組合せもこのように表記されます。
'character'
'c' ASCII 文字 1 文字。
CTRL-{char}
CTRL-{char} 制御文字として入力された文字 {char}。CTRL キーを押しながら
{char} を押す場合です。{char} は大文字でも小文字でも区別されま
せん。CTRL-A と CTRL-a は同じです。SHIFT キーを使うと別のコー
ドを生成する端末もあるため、シフトキーは使わないでください。
'option'
'option' オプション (設定) はシングルクォートで囲んで表記されます。オプ
ションは設定値を変更できます。options を参照。
quotecommandquote
"command" 説明の中にでてくる入力可能なコマンドは、ダブルクォートで囲んで
表記されます。
`command` コマンドの新しい表記法です。他のクォート表記のテキストや文字列
と区別するために使われます。
key-notation key-codes keycodes
このドキュメントでは、キーの名前として以下のものが使われます。これらは ":map"
コマンドでも使うことができます (キーの名前を挿入するには、CTRL-K を押してか
ら、名前を挿入したいキーを押します)。
表記 意味 等価表現 10進数値 ~
-----------------------------------------------------------------------
<Nul> ゼロ CTRL-@ 0 (10として保存) <Nul>
<BS> バックスペース CTRL-H 8 backspace
<Tab> タブ CTRL-I 9 tab Tab
linefeed
<NL> ラインフィード CTRL-J 10 (<Nul>に使用)
<CR> キャリッジリターン CTRL-M 13 carriage-return
<Return> <CR>と同じ <Return>
<Enter> <CR>と同じ <Enter>
<Esc> エスケープ CTRL-[ 27 escape <Esc>
<Space> スペース 32 space
<lt> 小なり(less-than) < 60 <lt>
<Bslash> バックスラッシュ \ 92 backslash <Bslash>
<Bar> 垂直バー | 124 <Bar>
<Del> デリート 127
<CSI> コマンドの開始バイト ALT-Esc 155 <CSI>
<xCSI> GUIにおけるCSI <xCSI>
<EOL> 行の終端 (<CR>、<NL>、<CR><NL> のどれかで、
システムと 'fileformat' に依存) <EOL>
<Up> 上カーソル cursor-up cursor_up
<Down> 下カーソル cursor-down cursor_down
<Left> 左カーソル cursor-left cursor_left
<Right> 右カーソル cursor-right cursor_right
<S-Up> シフト + 上カーソル
<S-Down> シフト + 下カーソル
<S-Left> シフト + 左カーソル
<S-Right> シフト + 右カーソル
<C-Left> コントロール + 上カーソル
<C-Right> コントロール + 上カーソル
<F1> - <F12> ファンクションキー1から12 function_key function-key
<S-F1> - <S-F12> シフト + ファンクションキー1から12
<S-F1>
<Help> ヘルプキー
<Undo> アンドゥキー
<Insert> 挿入キー
<Home> ホーム home
<End> エンド end
<PageUp> ページアップ page_up page-up
<PageDown> ページダウン page_down page-down
<kHome> テンキーのホーム(左上) keypad-home
<kEnd> テンキーのエンド(左下) keypad-end
<kPageUp> テンキーのページアップ(右上) keypad-page-up
<kPageDown> テンキーのページダウン(右下) keypad-page-down
<kPlus> テンキーの+ keypad-plus
<kMinus> テンキーの- keypad-minus
<kMultiply> テンキーの * keypad-multiply
<kDivide> テンキーの / keypad-divide
<kEnter> テンキーのEnter keypad-enter
<kPoint> テンキーのピリオド keypad-point
<k0> - <k9> テンキーの0から9 keypad-0 keypad-9
<S-...> シフトキー shift <S-
<C-...> コントロールキー control ctrl <C-
<M-...> altまたはmetaキー meta alt <M-
<A-...> <M-...>と同じ <A-
<D-...> コマンドキー (Mac) / super (GTK) <D-
<t_xx> termcapで "xx" エントリを持つキー
-----------------------------------------------------------------------
Note: シフトされたカーソルキー、ヘルプキー、アンドゥキーを使える端末はあまりあ
りません。Amiga上では、シフトされたファンクションキー 10 は、キーシーケンスに
使われるコード (CSI) を生成します。このコードを入力すると、他のキーを入力する
まで待機状態になります。
Note: 削除キーのコードは二つあります。127 は削除キーの 10 進 ASCII 値で、これ
は常に認識されます。削除キーが別の値を生成することもあり、その場合は、termcap
エントリの "kD" からその値を得ます。どちらも同じ効果をもちます。:fixdelも参
照してください。
Note: テンキーのキーは、"普通" のキーと同じ用途に使われます。例えば、<kHome>は
<Home>と同じ効果を持ちます。テンキーのキーから、普通のキーと同じキーコードが送
信される場合、それは普通のキーとして認識されます。例えば、<kHome> から<Home>
と同じコードが送信される場合、<kHome> が押されたとしても、<Home> が押されたと
認識されます。その場合、<kHome> へのマッピングは機能しません。
<>
例ではよく <> 表記が使われます。これは、何を入力すべきかを明確に表記するために
使われますが、文字どおりに入力する必要がある場合もあります。例えば、":map" コ
マンドで使う場合など。規則は以下のとおりです:
1. バックスラッシュと '<' 以外の印字可能文字はそのまま表記される。
2. バックスラッシュは "\\" (ダブルバックスラッシュ)、または "<Bslash>" と表
記される。
3. 実際の '<' は "\<"、または "<lt>" と表記される。混乱を招く恐れがなけれ
ば、'<' はそのまま使われる。
4. "<key>" は特殊キーを打つことを示す。これは上記の表で説明している表記で
す。いくつか例を挙げます:
<Esc> エスケープキー
<C-G> CTRL-G
<Up> 上カーソルキー
<C-LeftMouse> コントロール + 左マウスクリック
<S-F11> シフト + ファンクションキー11
<M-a> Meta + a ('a' with bit 8 set)
<M-A> Meta + A ('A' with bit 8 set)
<t_kd> "kd" termcapエントリ(下カーソルキー)
マルチバイト文字である{char}を使用して <M-{char}> を指定できますが、Vimは
どのバイトシーケンスであるかを認識できないため、動作しません。
<> 表記を使うには、'cpoptions' から '<' フラグを除く必要があります
('compatible' がオフのときは、初期設定でそうなっています)。 >
機能しますが、それは 'cpoptions' が 'B' フラグを含んでいないときだけです。
CTRL-H を "<Home>" の 6 文字にマップする例: >
の例は常に機能します。
マップで "<lt>" を文字どおりに使うには 次のようにします: >
マップ、短縮入力、メニューコマンドについては、例をコピー&ペーストして、そのま
ま使うことができます。あるいは、'<' と '>' も含めて、そのまま入力してください。
これは ":set" や ":autocmd" などの他のコマンドでは機能しません!
この表記は、ダブルクォートで囲んだ文字列の先頭に "\<" を付けて使用することがで
きます。例えば "\<C-Space>"。この結果、特殊なキーコードが生成されます。これを
読みやすいテキストに戻す変換には、`keytrans()` を使用します。
==============================================================================
5. モードの紹介 vim-modes-intro vim-modes
Vim には 7 つの基本モードがあります。
Normal Normal-mode command-mode
ノーマルモード ノーマルモードでは普通の編集コマンドを全て入力できま
す。エディタをスタートするとこのモードに入ります (オプ
ション 'insertmode' を設定しているときは違います。以下
を参照)。これはコマンドモードとも呼ばれます。
ビジュアルモード ノーマルモードに似ていますが、移動コマンドで選択領域が
拡大されます。移動コマンド以外のコマンドを使うと、選択
領域に対してそのコマンドが実行されます。Visual-mode
を参照。
オプション 'showmode' がオンなら、"-- VISUAL --" が
ウィンドウの最下部に表示されます。
選択モード これは、MS-Windows でテキストを選択するときの動作に似
ています。印字可能文字が入力されると、選択範囲を削除
し、挿入モードに入ります。Select-modeを参照。
オプション 'showmode' がオンなら、"-- SELECT --" が
ウィンドウの最下部に表示されます。
挿入モード 挿入モードでは、タイプされたテキストはバッファに挿入
されます。Insert-modeを参照。
オプション 'showmode' がオンなら、"-- INSERT --" が
ウィンドウの最下部に表示されます。
コマンドラインモード コマンドラインモードでは、ウィンドウの下部に 1 行のテ
キストを入力できます。これは Ex コマンド、":"、パター
ン検索コマンド、"?"、"/"、そしてフィルタコマンド、"!"
で使用します。Cmdline-modeを参照。
Ex モード コマンドラインモードに似てますが、コマンド入力後も Ex
モードに留まります。コマンドライン編集は、かなり制限さ
れます。Ex-modeを参照。
Terminal-Job モード ターミナルウィンドウの中でジョブと相互作用します。入力
されたキーはジョブに渡され、ジョブの出力はターミナル
ウィンドウに表示されます。他のモードへの移行の仕方は
terminal を参照。
加えて、7 つのモードがあります。これらは基本モードの変種です。
Operator-pending Operator-pending-mode
オペレータ待機モード ノーマルモードに似てますが、オペレータコマンドが実行さ
れた後で、その適用範囲を決定するための移動コマンド
({motion}) を得るために、Vim が待機している状態です。
置換モード 置換モードは挿入モードの特別版です。挿入モードと同様の
ことができますが、一文字入力するごとに、その場所にある
文字が一つ削除されます。Replace-modeを参照。
オプション 'showmode' がオンなら、"-- REPLACE --" が
ウィンドウの最下部に表示されます。
仮想置換モード 仮想置換モードは置換モードに似ていますが、ファイルの文
字の上ではなく、画面上の任意の位置を置換できます。
Virtual-Replace-mode を参照。'showmode' がオンなら、
"-- VREPLACE --" がウィンドウの最下部に表示されます。
挿入ノーマルモード 挿入モードで CTRL-O を入力したときにこのモードに入りま
す (i_CTRL-O を参照)。ノーマルモードに似ていますが、
1つのコマンドを実行した後、Vimは挿入モードに戻ります。
オプション 'showmode' がオンなら、"-- (insert) --" が
ウィンドウの最下部に表示されます。
Terminal-Normal モード ターミナルウィンドウでノーマルモードを使います。変更は
できないようになっています。ターミナルジョブモードに戻
るには、"a" や "i" のような挿入コマンドを使います。
挿入ビジュアルモード 挿入モードでビジュアル選択を開始すると、このモードに入
ります。例えば、CTRL-O を使い, その後 "v"、"V"、CTRL-V
を使ったときです。
ビジュアル選択が終了すると、挿入モードに戻ります。
オプション 'showmode' がオンなら、
"-- (insert) VISUAL --" がウィンドウの最下部に表示され
ます。
挿入選択モード 挿入モードで選択モードを開始すると、このモードに入りま
す。例えば、マウスをドラッグしたり、<S-Right> を押した
ときです。
選択モードが終了すると、挿入モードに戻ります。オプショ
ン 'showmode' がオンなら、"-- (insert) SELECT --" が
ウィンドウの最下部に表示されます。
==============================================================================
6. モードの切り替え mode-switching
何らかの理由で、現在のモードがわからなくなったときは、<Esc> を 2 度押すことで
常にノーマルモードに戻ることができます。Ex モードでは機能しないので、その場合
は ":visual" を使ってください。
<Esc> を押したとき、スクリーンフラッシュや、ベルの音で、ノーマルモードに戻った
ことを知ることができます。挿入モードで CTRL-O の後に <Esc> を押した場合、ビー
プ音は鳴りますが、まだ挿入モードの中なので、もう一度 <Esc> を押してください。
i_esc
移動先のモード ~
Normal Visual Select Insert Replace Cmd-line Ex ~
現在のモード ~
ノーマル v V ^V *4 *1 R gR : / ? ! Q
ビジュアル *2 ^G c C -- : --
選択 *5 ^O ^G *6 -- -- --
挿入 <Esc> -- -- <Insert> -- --
置換 <Esc> -- -- <Insert> -- --
コマンドライン *3 -- -- :start -- --
Ex :vi -- -- -- -- --
-- 不可
*1 ノーマルモードから挿入モードへは、コマンド "i"、"I"、"a"、"A"、"o"、"O"、
"c"、"C"、"s"、"S" で入ります。
*2 ビジュアルモードからノーマルモードへは非移動コマンドで入れますが、そのコマ
ンドは実行されてしまいます。<Esc>、"v"、"V"、"CTRL-V" (v_vを参照) を入力
すれば、副作用なしにビジュアルモードから出られます。
*3 コマンドラインモードからノーマルモードへ移行するには次のようにします:
- <CR> か <NL> を入力する。入力途中のコマンドは実行されます。
- 行の全てを削除し (例、CTRL-Uを使う)、そして、<BS> を入力する。
- CTRL-C または <Esc> を入力する、入力途中のコマンドを実行せずに終了できま
す。
最後の方法ですが、<Esc> が 'wildchar' に設定されている場合があります。その
場合、コマンドライン補完が実行されますが、それを無視して、再び <Esc> を入力
してください。
*4 ノーマルモードから選択モードに移行するには次のようにします:
- 'selectmode' が "mouse" を含んでいるときは、マウスでテキストを選択する。
- 'selectmode' が "key" を含んでいるときは、シフトキーを押しながら、特殊
キーでカーソルを動かします。(:set keymodel+=startsel が必要)
- 'selectmode' が "cmd" を含んでいるときは、"v"、"V"、"CTRL-V" を使う。
- "gh"、"gH"、"g CTRL-H" を使う。g_CTRL-H
*5 選択モードからノーマルモードに移行するには、シフトキーを押さずに特殊キーで
カーソルを動かします。(:set keymodel+=stopsel が必要)
*6 選択モードから挿入モードへ移行するには、印字可能文字 (普通の文字) を入力し
ます。選択範囲は削除され、入力した文字が挿入されます。
'insertmode' がオンのときは、編集作業は挿入モードで始まります。
CTRL-\_CTRL-N i_CTRL-\_CTRL-N c_CTRL-\_CTRL-N v_CTRL-\_CTRL-N
CTRL-\ CTRL-N と <C-\><C-N> を使って、どのモードからでもノーマルモードに移行で
きます。このコマンドを使えば、確実にノーマルモードになることができます。<Esc>
のときのようにビープ音はなりません。ただし、Ex モードでは機能しません。fや
mのように引数をとるコマンドの後で使われたときは、'ttimeoutlen' で設定された
タイムアウトが適用されます。
フォーカスがターミナルウィンドウにあるとき、CTRL-\ CTRL-N は編集コマンドが入力
されるまでの間ノーマルモードに移行します。t_CTRL-\_CTRL-N を参照。
CTRL-\_CTRL-G i_CTRL-\_CTRL-G c_CTRL-\_CTRL-G v_CTRL-\_CTRL-G
'insertmode' がオンのときは、CTRL-\ CTRL-G や <C-\><C-G> で挿入モードに移行で
きます。オフのときはノーマルモードに移行します。このコマンドを使えば、現在どの
モードにいるのかにかかわらず、'insertmode' に設定されたモードに移行することが
できます。
Q mode-Ex Ex-mode Ex EX E501
Q "Ex" モードに切り替えます。このモードは ":" コマンドを
続けて入力するようなものですが、次の点が違います:
- 毎回 ":" を押す必要がない。
- コマンドを実行するごとに画面が更新されない。
- 通常のコマンドライン編集機能は使えない。
- マップと短縮入力は使えない。
つまり、"標準の" 行編集コマンドだけを使って入力します
(削除に<Del>または<BS>、行削除に CTRL-U を使用する)。
Vim が "ex" という名前かコマンドライン引数 -e を使用
して実行された場合には、このモードで起動します。
"Ex" モードを抜けるには、":vi" コマンド :visual を使
います。
Note: Vim の昔のバージョンでは "Q" がテキストを整形す
るコマンドでしたが、いまは gq になっています。ただし
vimrc_example.vim あるいは defaults.vim を使ってい
る場合は、"Q" と "gq" は同じ動作をします。ただし選択
モードを除きます。
gQ
gQ "Ex" モードに切り替えます。"Q" と同じですが、実際に
":" コマンドでコマンドを入力するのと同じように動作しま
す。コマンドライン編集や補完などがすべて利用可能です。
"Ex" モードを抜けるには、`:vi` コマンド(`:visual`)を使
います。
==============================================================================
7. ウィンドウに表示される内容 window-contents
ノーマルモードと挿入/置換モードでは、スクリーンに現在のバッファの内容が表示さ
れます。つまり、見ているものが得られるもの (WYSIWYG) です。しかし、例外が二つ
があります:
- オプション 'cpoptions' が '$' を含んでいて、一行に収まる範囲を変更 (c) す
るときは、テキストはすぐに削除されず、削除される文字の最後の位置に '$' が表
示されます。
- あるウィンドウでテキストを挿入していて、別のウィンドウでも同じテキストを表示
しているとき、挿入を完了するまでそのウィンドウの表示は更新されません。
{訳注: 確認できず}
ウィンドウの幅より長い行は、折り返して表示されます。'wrap' がオフのときは折り
返されません (下記参照)。'linebreak' を設定すると空白文字で折り返すことができ
ます。
ウィンドウ内でバッファの最終行より下に表示領域がある場合、以下のように、それら
の行の始めに '~' が表示されます:
+-----------------------+
|some line |
|last line |
|~ |
|~ |
+-----------------------+
このように、'~' はバッファの最後に到達したことを示します。
ウィンドウに表示されている最後の行が表示しきれない場合、以下のように、最終行の
場所に '@' が表示されます:
+-----------------------+
|first line |
|second line |
|@ |
|@ |
+-----------------------+
このように、'@' はウィンドウに収まりきらない行があることを示します。
'display' に "lastline" フラグが含まれている場合、'@' はウィンドウの左側に表示
されません。最終行がウィンドウに完全に収まらない場合は、収まる部分のみが表示さ
れ、最後の 3 文字が次のように "@@@" で置き換えられます:
+-----------------------+
|first line |
|second line |
|a very long line that d|
|oesn't fit in the wi@@@|
+-----------------------+
長すぎてウィンドウに収まりきらない単一の行があるときは、特別な場合として扱われ
ます。Vim はカーソルのある場所付近のみを表示します。特殊記号は表示されません。
その行のどの部分でも編集できます。
'@' と '~' の強調表示を設定するには、オプション 'highlight' の '@' を設定しま
す。それらの文字と、バッファの中の本物の文字を区別することができます。
折り返された行の先頭には 'showbreak' に設定した文字が表示されます。
wrap-off
'wrap' がオフの場合、長い行は折り返されません。スクリーンに収まる分だけ表示さ
れます。カーソルが表示されていない部分に移動すると、スクリーンは水平方向にスク
ロールします。この方法の利点は、縦の列がありのままに表示されること、スクリーン
に収まらない行も編集できることです。欠点としては、一行の全ての文字を一度に見る
ことができないことが挙げられます。'sidescroll' にはスクロールする最小の列(カラ
ム)数を設定します。
全ての普通のASCII文字はスクリーンに直接表示されます。<Tab> は、それが表現する
数のスペースに置き換えられます。他の非表示文字は、"^{char}" に置き換えられま
す、このとき {char} には、その非表示文字に 64 を足した文字が入ります。つまり、
文字 7 (ベル文字) は "^G" と表示されます。127 から 160 までの文字は "~{char}"
で置き換えられます、このとき {char} には、その文字から 64 を引いた文字が入りま
す。これらの文字はスクリーン上では複数幅で表示されます。カーソルはその複数幅の
先頭にのみ移動させることができます
'number' がオンの場合、全ての行の先頭に行番号が表示されます。
Tip: 行を折り返したときに、行番号と行の表示を混ぜたくないときは、'showbreak'
に 8 つのスペースをセットします: >
'list' がオンの場合、<Tab> 文字はいくつかのスペースとしてではなく、"^I" として
表示されます。'$' が行末に表示されるので、行の最後についた空白を見つけることが
できます。
コマンドラインモードでは、コマンドラインのみが正しく表示されます。バッファの
内容の表示は、コマンドラインモードから抜けたときに更新されます。
ウィンドウの最下行はステータスやその他のメッセージのために使われます。ステータ
スメッセージが使われるのは、オプションがオンのときのみです:
ステータスメッセージ オプション 初期設定 Unixの初期設定 ~
現在のモード 'showmode' on on
コマンドの文字 'showcmd' on off
カーソルの位置 'ruler' off off
現在のモードとは、"-- INSERT --" や "-- REPLACE --" のことです、'showmode'
を参照。コマンドの文字とは、入力されて、まだ実行されていないコマンドのことで
す。
遅い端末を使っている場合は、ステータスメッセージをオフにすることで編集のスピー
ドを上げることができます: >
エラーが起きたとき、エラーメッセージは少なくとも一秒間は表示されます(反転表示
で)。
いくつかのコマンドでは、そのコマンドが作用する行数が表示されます。何行以上でそ
の表示をするかは、'report' で設定できます (初期設定は 2)。
Amiga 上では、Vim は CLI ウィンドウで実行されます。Vim の名前と現在のファイル
名の絶対パスがタイトルバーに表示されます。ウィンドウがリサイズされると、Vim は
自動的にウィンドウを再描画します。ウィンドウは好きなだけ小さくできますが、小さ
すぎると1行のみで収まりきらなくなります。最下行に表示されるメッセージが読める
ように、最低でも40文字の幅を取ってください。
ほとんどの UNIX システム上で、Vim はウィンドウのリサイズを正しく認識、把握でき
ます。
==============================================================================
8. 用語の定義 definitions
バッファ テキスト行が入っている。一般にファイルから読み込む。
スクリーン Vim が使う領域全体。端末ウィンドウを指す場合もある。
"Vimウィンドウ" とも呼ばれる。
ウィンドウ バッファが表示される場所。1 つのバッファが複数のウィ
ンドウを持つことが可能。
一つのスクリーンは一つ以上のウィンドウを内包し、それらはステータスラインで区切
られ、最下行にはコマンドラインが表示されます。
+-------------------------------+
screen | window 1 | window 2 |
| | |
| | |
|= status line =|= status line =|
| window 3 |
| |
| |
|==== status line ==============|
|command line |
+-------------------------------+
コマンドラインはメッセージを表示するためにも使われます。コマンドラインに十分な
表示領域がない場合はスクリーンがスクロールします。
行には 4 種類あり、次の違いがあります:
バッファ行 バッファ内の行。ファイルに読み書きする行のこと。
行の長さは制限なし。
論理行 折り畳みが適用されたバッファ行。複数のバッファ行が折り
畳まれ論理行 1 行となり、次のように表示される:
"+-- 99 lines folded"。
行の長さは制限なし。
ウィンドウ行 ウィンドウに表示される行: 折り返し、ラインブレークなど
が適用された後の論理行の一部。長さはウィンドウの幅以
下。それ以上長い行は折り返されるか切り詰められる。
スクリーン行 Vim が使うスクリーンの行。全てのウィンドウのウィンドウ
行とステータスライン、コマンドラインからなる。長さはス
クリーンの幅以下。コマンドラインがそれ以上長くなったと
きは折り返して表示され、表示領域を作るために行がスク
ロールされる。
バッファ行 論理行 ウィンドウ行 スクリーン行 ~
1. one 1. one 1. +-- folded 1. +-- folded
2. two 2. +-- folded 2. five 2. five
3. three 3. five 3. six 3. six
4. four 4. six 4. seven 4. seven
5. five 5. seven 5. === status line ===
6. six 6. aaa
7. seven 7. bbb
8. ccc ccc c
1. aaa 1. aaa 1. aaa 9. cc
2. bbb 2. bbb 2. bbb 10. ddd
3. ccc ccc ccc 3. ccc ccc ccc 3. ccc ccc c 11. ~
4. ddd 4. ddd 4. cc 12. === status line ===
5. ddd 13. (command line)
6. ~
==============================================================================
vim:tw=78:ts=8:noet:ft=help:norl:
VIMリファレンスマニュアル by Bram Moolenaar
序文 ref reference
1. はじめに intro
2. インターネットの Vim 情報 internet
3. クレジット credits
4. ヘルプの表記法 notation
5. モードの紹介 vim-modes-intro
6. モードの切り替え mode-switching
7. ウィンドウに表示される内容 window-contents
8. 用語の定義 definitions
==============================================================================
1. はじめに intro
Vim は Vi IMproved (Viの改良版) です。かつては Vi IMitation (Viの模造品) でし
たが、多くの改良が加えられたので適切な名前に変更されました。Vim はテキストエ
ディタです。Unix のプログラム "Vi" のほとんどのコマンドと、さらに多くの新しい
コマンドを備えています。プログラムを書いたりテキストを編集するのにとても便利で
す。
すべてのコマンドはキーボードから入力します。そのため、キーボードから手を離す必
要も、スクリーンから目を離す必要もありません。お望みなら、マウスを使うこともで
きますし、GUIではスクロールバーやメニューを使うこともできます(gui.txt参照)。
このマニュアルの概要は help.txt にあります。Vim から <Help> や <F1> キー、
:help コマンドで開くことができます (単に :help と入力してください。引用符も
バーも必要ありません)。
ヘルプファイルが標準の位置にインストールされていない場合は、ヘルプファイルの名
前をオプション 'helpfile' に設定してください。タグでジャンプするのと同じように
ヘルプの項目へジャンプできます。ジャンプしたい項目にカーソルを合わせて CTRL-]
でジャンプできます。CTRL-T で元の場所に戻れます。
Vi と Vim の違いは vi_diff.txt に記載されています。
このマニュアルの内容は Vim が実行されるほとんどの環境で通用しますが、コンピュー
タや端末によって、少し違う動作をする場合があります。このドキュメントから外れる
内容については、システムごとに個別の説明があります。sys-file-list を参照。
pronounce
Vim は vi-ai-em ではなく、Jim のように一語として発音します。Vim はまた Jim の
ように名称なので、(最初の文字を)大文字で書きます。GUI 版の Vim は "gVim" (文頭
の場合は "GVim")と表記されます。
このマニュアルは全ての Vim コマンドとオプションのリファレンスです。Vi や Vim
の入門書ではありません (それを入れるとあちこちで説明が込み入ってしまうので)。
初心者には、実習 tutor があります。Vim の使い方を身につけるにはユーザーマニュ
アル usr_toc.txt を読んでください。
book books
ViとVimに関するほとんどの本には初心者向けのセクションがあります。その他、特定
の機能についてより多くの言葉を費やしています。Vimの本の概要はここにあります:
http://iccf-holland.org/vim_books.html
==============================================================================
2. インターネットの Vim 情報 internet
www WWW faq FAQ distribution download
Vim のページには Vim についての最新情報が載っています。最新バージョンの Vim へ
のリンクもあります。FAQ はよく尋ねられる質問に対する回答集です。問題があったら
まずこれを読むとよいでしょう。
Vimホームページ: https://www.vim.org/
Vim FAQ: https://vimhelp.org/vim_faq.txt.html
ダウンロード: https://www.vim.org/download.php
質問がある場合、答えを探す場合は: https://vi.stackexchange.com/
"Vi and Vim Stack Exchange はテキストエディタのviとVim類を使っている人のための
質疑応答サイトです"
Vim について討論している Usenet News グループ news usenet
comp.editors
このグループでは他のエディタについても話し合われています。Vim について書く場合
は、そのことを必ず明記してください。
あなたはここでアクセスできます:
https://groups.google.com/forum/#!topic/comp.editors
mail-list maillist
Vim のメーリングリストがいくつかあります:
<vim@vim.org> vim-use vim_use
現行バージョンの Vim の使い方に関する議論: 使いやすいマップ、質問、回
答、特定のバージョンはどこで手に入るかなど。このメーリングリストにはた
くさんの人が参加していて、(初心者の) 質問にも答えてくれます。遠慮せず
どんどん質問してください。
<vim-dev@vim.org> vim-dev vim_dev vimdev
Vim の開発に関する議論: 新しい機能、移植、パッチ、ベータ版など。
<vim-announce@vim.org> vim-announce vim_announce
Vim の新バージョンに関するアナウンス: ベータ版や他システムへの移植につ
いてもアナウンスがあります。このメーリングリストは購読専用です。
<vim-mac@vim.org> vim-mac vim_mac
Vim のマッキントッシュバージョンの使用、改良に関する議論。
<vim-security@googlegroups.com> vim-security
このリストは、Vim のセキュリティ関連の問題を (非公開で) 議論するための
ものです。
最新の情報は http://www.vim.org/maillist.php を参照。
NOTE:
- アーカイブは誰でも見ることができます。例えば、Googleグループ。vim-security
リスト以外の質問がある場合は、これを検索してください。
- メーリングリストに投稿するにはそのリストに登録する必要があります!
- 最初のメッセージはモデレートされているため、表示されるまでに数時間かかること
があります。
- 登録したアドレスと同じアドレスで投稿する必要があります(スパムメールを避ける
ため)。
subscribe-maillist
メーリングリストに参加したい場合は、次の場所へメールを送って下さい。
<vim-subscribe@vim.org>
"From:" のアドレスが正しいことを確認してください。メーリングリストのサーバーか
ら登録方法についてのヘルプが送られてきます。
maillist-archive
より詳しい情報とアーカイブについては、Vim メーリングリストページを見てください。
http://www.vim.org/maillist.php
バグレポート: bugs bug-reports bugreport.vim
バグを報告するには3つの方法があります:
1. ランタイムのファイルについてのissueは、ヘッダにある email アドレス宛てか他
の方法でメンテナーにレポートを送ってください。
2. GitHub に issue を立ててください: https://github.com/vim/vim/issues
文章は vim-dev メーリングリストにも転送されます。
3. バグレポートは Vim 開発陣 <vim-dev@vim.org> に送ってください。
これはメーリングリストです。最初にメンバーになる必要があります。たくさんの
人がそのメッセージを見ます。もしセキュリティ上の問題などの理由でそれを望ま
ないのであれば、電子メールアドレス <vim-security@googlegroups.com> で現在の
Vim メンテナーに連絡するか、Github でセキュリティアドバイザリを作成してくだ
さい: https://github.com/vim/vim/security/advisories
メッセージは簡潔にお願いします。メールに回答する時間は、Vim を改良する時間から
消費されています! 常に再現可能な例をつけてください。そして、バグを引き起こす設
定やその他のものを探してください。
なるべくなら Vim を次のように起動してください: >
vim --clean -u reproduce.vim
ここで、reproduce.vim は問題を再現するスクリプトです。関連があるならば(もしかしたら MS-Windows 固有のバグかも?)、違うマシンでも試してみて下さい。
可能ならばパッチを送って下さい! https://github.com/vim/vim でプルリクエストを
作成すると、自動チェックが実行され、明らかな問題があれば報告されます。ただし、
パッチを電子メールで送信することもできます(空白文字の変更を避けるために添付ファ
イルを使用してください)。
{訳注: 本家へのレポートは英語でお願いします}
Vim のバージョンや設定情報を含めてくれると助かります。次のコマンドで情報を得る
ことができます: >
:so $VIMRUNTIME/bugreport.vim
このコマンドはカレントディレクトリにあなたの環境に関する多くの情報を持った"bugreport.txt" というファイルを作ります。このファイルを送る前に、そこにいかな
る秘密の情報も含まれていないことを確認してください!
Vim がクラッシュした場合は、クラッシュした場所を探してみてください。詳しくは
debug.txt を参照してください。
よく分からなかったり、その問題がすでに解決済みかどうか知りたい場合には、
vim-dev メーリングリストで質問してください。maillist
year-2000 Y2K
Vim の内部では、テキストの編集に日付を使っていないので、2000 年問題はありませ
ん。Vim は 1970 年 1 月 1 日 (正午) からの秒形式で時間を使います。これは、開い
ているファイルとスワップファイルのタイムスタンプをチェックするために使われます
が、致命的な問題は起きません。ただ警告メッセージが表示されるだけでしょう。
しかし、32bit 整数で秒があふれてしまう 2038 年問題はあるかもしれません。この問
題は、コンパイラ、ライブラリ、オペレーティングシステムに依存しています。
time_t、ctime() 関数が使われているときは特にそうです。time_t はスワップファイ
ル内に 4 バイトで格納されますが、これはファイルの回復時にファイルの日付、時間
を求めるために使われるだけなので、通常の編集作業には決して影響しません。
Vim の strftime() 関数は strftime() システムコールを直接使います。localtime()
は time() システムコールを、getftime() は stat() システムコールで返される時間
をそれぞれ使用します。システムライブラリが 2000 年対応なら、Vim もそうです。
ユーザーは外部コマンドを使用する Vim script を作るかもしれません。このことが
Y2K 問題を招くかもしれませんが、Vim 自身の問題ではありません。
==============================================================================
3. クレジット credits author
Vim の大部分は Bram Moolenaar <Bram@vim.org> Bram-Moolenaar によって作成され
ました。
ドキュメントの一部は以下の方々によって書かれた Vi のマニュアルによります:
W.N. Joy
Alan P.W. Hewett
Mark Horton
Vim エディタは Stevie をベースにしており、下記の方々のソフトウェア (のアイデア)
も参考にしています。他の人々は私に意見やパッチを送ってくれたり、Vim の良い点、
悪い点に関するフィードバックをしてくれました。
これらの人々の協力なくして、Vim は現在の姿にはならなかったことでしょう!
Ron Aaron Win32 GUIに関する変更
Mohsin Ahmed 暗号化
Zoltan Arpadffy VMS移植の作業
Tony Andrews Stevie
Gert van Antwerpen MS-DOS上のDJGPPに関する変更
Berkeley DB(3) スワップファイルの実装に関するアイデア
Keith Bostic Nvi
Walter Briscoe Makefileの更新、様々なパッチ
Ralf Brown MS-DOS用のSPAWNOライブラリ
Robert Colon 多くの役立つアドバイス
Marcin Dalecki GTK+ GUIへの移植、ツールバーのアイコン
gettext()
Kayhan Demirel ウガンダのニュースを送ってくれた
Chris & John Downey xvi (マルチウィンドウバージョンのアイデア)
Henk Elbers 最初のVMSへの移植
Daniel Elstner GTK+ 2 への移植
Eric Fischer Macへの移植、'cindent'、その他の改良
Benji Fisher たくさんのユーザーの質問に答えてくれた
Bill Foster Athena GUIへの移植 (後で削除)
Google Bram に週に一日 Vim の仕事をさせてくれる
Loic Grenie xvim (マルチウィンドウバージョンのアイデア)
Sven Guckes Vimのプロモーター、以前のWWWページ管理者
Sven-Guckes
Darren Hiebert Exuberant ctags
Jason Hildebrand GTK+ 2 への移植
Bruce Hunsaker VMSへの移植版の改良
Andy Kahn Cscopeサポート、GTK+ GUIへの移植
Oezguer Kesim Vimメーリングリストの管理者
Axel Kielhorn Macintosh移植の仕事
Steve Kirkendall Elvis
Roger Knobbe オリジナルのWindows NTへの移植
Sergey Laskavy モスクワからのVimのヘルプ
Felix von Leitner Vimメーリングリストの以前の管理者
David Leonard UnixへのPython拡張の移植
Avner Lottem ウィンドウでの右から左への編集
Flemming Madsen X11 client-server, 様々な機能とパッチ
Tony Mechelynck ユーザーから寄せられたたくさんの質問に回答
Paul Moore Pythonインターフェイス拡張、たくさんのパッチ
Katsuhito Nagano マルチバイトバージョンに関する作業
Sung-Hyun Nam マルチバイトバージョンに関する作業
Vince Negri Win32 GUIと一般的なコンソールの拡張
Steve Oualline 最初のVimの本の著者frombook
Dominique Pelle Valgrind のレポートと多くの修正
A.Politz たくさんのバグ報告と修正
George V. Reilly Win32移植、Win32 GUIへの移植を始める
Stephen Riehm バグ収集家
Stefan Roemer さまざまなパッチとユーザーへのヘルプ
Ralf Schandl IBM OS/390への移植
Olaf Seibert DICEとBeBoxバージョン、regexpの改良
Mortaza Shiran Farsiのパッチ
Peter da Silva termlib
Paul Slootman OS/2への移植
Henry Spencer 正規表現に関して
Dany St-Amant Macintoshへの移植
Tim Thompson Stevie
G. R. (Fred) Walter Stevie
Sven Verdoolaege Perlインターフェイス
Robert Webb コマンドライン補完、GUIバージョン、そして
多くのパッチ
Ingo Wilken Tclインターフェイス
Mike Williams PostScriptの印刷
Juergen Weigert Latticeバージョン、AUXの改良、UNIXとMS-DOSへ
の移植、autoconf
Stefan 'Sec' Zehl vim.orgの管理
Yasuhiro Matsumoto 多くの MS-Windows の改良
Ken Takata 修正と機能
Kazunobu Kuriyama GTK 3
Christian Brabandt 多くの修正、機能、ユーザーサポート等
Yegappan Lakshmanan 多くのquickfix機能
バグレポートや提案を送ってくれた人々に感謝します。あまりにたくさんいるので、こ
こで彼らの名前について触れることはできませんが。これらの人々のアイデアがなけれ
ば、Vim は今の Vim にはならなかったことでしょう: 彼らが Vim を生かしつづけたの
です!
love peace friendship gross-national-happiness
この文書には他のバージョンの Vi に対するいくつかの参照があります:
Vi vi
Vi "オリジナル"。特に指定がなければSun OS 4.xのバージョンのViを指しま
す。":version" は "Version 3.7, 6/7/85" を返します。別のバージョンに言
及することもあります。Unix 上でのみ動きます。ソースコードは現在BSDスタ
イルのライセンス下で利用可能です。Vi についての更なる情報は、以下の場
所から得られます:
http://ex-vi.sourceforge.net/
Posix
Posix IEEE standard 1003.2, Part 2: Shell and utilitiesより。
一般に "Posix" として知られる。Vi の動作仕様の原典です。
posix-compliance を参照してください。
Nvi
Nvi "New" Vi。BSD 4.4、FreeBSD に付属の Vi。オリジナルの Vi と高い互換性を
持ち、少々の拡張がされています。使われているのはバージョン 1.79。
":version" は "Version 1.79 (10/23/96)" を返します。バージョン 1.81 が
開発中ですが、ここ数年リリースされていません。
ソースコードは自由に利用できます。
Elvis
Elvis 別の Vi クローン、Steve Kirkendallが作成しました。とてもコンパクトです
が、Vim ほど高機能ではありません。開発は失速し、エルヴィスは建物を去っ
てしまいました! ソースコードは自由に利用できます。
Neovim
Neovim Vimのクローン。2014年にVimのソースをフォークして、異なる方向を進みまし
た。非常にgithubに縛られていて、より多くの依存関係があり、開発をより複
雑にし、移植性を制限しています。コードがリファクタリングされ、パッチが
Vimと交換できなくなりました。リモートGUIとスクリプト言語との統合をサ
ポートしています。
==============================================================================
4. ヘルプの表記法 notation
この文章を構文強調を使って表示すると、見たままの意味ではないテキストは特別に強
調表示されます。[]、{}、<>、で囲まれた項目や CTRL-X などです。
Note: Vim は入力可能な文字はすべてコマンドで使います。実際に、[]、{}、<> を入
力する場合もあります。それは文脈によって判断できるでしょう。
[] 角カッコで囲まれた文字は省略可能。
count [count]
[count] コマンドに前置して、そのコマンドを繰り返したり、反復したりする
ための省略可能な数字。省略した場合、特に注意が無ければ 1 を指
定したのと同じになります。Note: このマニュアルでは、[count] は
コマンドの説明では言及されません。解説する場合だけ説明します。
これはコマンドを調べ易くするためです。'showcmd' オプションが有
効だと、(部分的に) 入力されたカウントがウィンドウの下の方に表
示されます。<Del> を使って末尾の数字を削除できます(N<Del>)。
[quotex]
["x] テキストの保管場所として、任意のレジスタを指定できることを示す。
registers を参照。x は 'a' から 'z'、'A' から 'Z'、'"'、のど
れか一文字です。場合によっては (put コマンドで使うときなど)、
'0' から '9'、'%'、'#'、その他の文字も使えます。大文字でも小文
字でも同じレジスタを指しますが、小文字を使ったときはレジスタの
内容が上書きされ、大文字を使ったときはレジスタの内容に追加され
ます。"x を指定しなかった場合や、"" を指定した場合は、無名レジ
スタが使われます。
{}
{} 中括弧の表記は、コマンドの一部として入力する必要があって、そこ
には、いろいろな値を入力することができるときに使われます。Vim
と Vi の違いを示す場合も中括弧で表記されます (これは文脈から区
別できます)。
{char1-char2}
{char1-char2} char1 から char2 の範囲のどれか一文字。例えば、{a-z} は小文字
一文字。複数の範囲が指定される場合もあります。例えば、
{a-zA-Z0-9} は英数字のどれか一文字です。
{motion} movement
{motion} カーソル移動コマンド。これらは、motion.txt で説明されていま
す。例:
w 次の単語の最初に移動
b 現在の単語の最初へ
4j 4行下に移動
/The<CR> つぎの "The" が、ある場所に移動
オペレータコマンド (operator) を入力した後で、対象のテキスト
を選択するため使われます。
- 移動コマンドがカウントを含み、オペレータコマンドもカウントを
含むときは、二つのカウントが掛け合わされる。例えば、"2d3w"
は 6 単語を削除する。
- 移動はバックもできる。例えば、"db" は単語の最初までを削除す
る。
- 移動はマウスのクリックでもできる。ただし、マウスをサポートし
ていない端末もあります。
- ":omap" コマンドを使って、オペレータコマンドに対して移動コマ
ンドを入力しているときに働くマップを定義できます。
- Ex コマンドを使ってカーソルを移動できます。関数を使って複雑
な移動をすることもできます。どの ":" コマンドが使われても、
移動は常に文字単位で排他的です。そのため、改行を含めずに行末
の文字を選択することはできません ('virtualedit' を設定すれば
可能)。
Ex コマンドで、オペレータコマンドを使った場所より前にあるテ
キストを変更したり、他のバッファに移動した場合、結果は予測で
きません。オペレータコマンドを使った場所以降のテキストなら変
更できます。カレントバッファがアンロードされないなら、他の
バッファにジャンプすることも可能です。
{Visual}
{Visual} 選択されたテキストの範囲。"v"、"V"、CTRL-V コマンドで選択を開
始し、カーソル移動コマンドで選択範囲を変更できます。
オペレータコマンド (operator) を実行する前に使って、対象のテ
キストを選択することができます。Visual-mode を参照。
<character>
<character> 下記の表に示した特殊文字。修飾キーが付くこともあります。修飾
キーと ASCII 文字の組合せもこのように表記されます。
'character'
'c' ASCII 文字 1 文字。
CTRL-{char}
CTRL-{char} 制御文字として入力された文字 {char}。CTRL キーを押しながら
{char} を押す場合です。{char} は大文字でも小文字でも区別されま
せん。CTRL-A と CTRL-a は同じです。SHIFT キーを使うと別のコー
ドを生成する端末もあるため、シフトキーは使わないでください。
'option'
'option' オプション (設定) はシングルクォートで囲んで表記されます。オプ
ションは設定値を変更できます。options を参照。
quotecommandquote
"command" 説明の中にでてくる入力可能なコマンドは、ダブルクォートで囲んで
表記されます。
`command` コマンドの新しい表記法です。他のクォート表記のテキストや文字列
と区別するために使われます。
key-notation key-codes keycodes
このドキュメントでは、キーの名前として以下のものが使われます。これらは ":map"
コマンドでも使うことができます (キーの名前を挿入するには、CTRL-K を押してか
ら、名前を挿入したいキーを押します)。
表記 意味 等価表現 10進数値 ~
-----------------------------------------------------------------------
<Nul> ゼロ CTRL-@ 0 (10として保存) <Nul>
<BS> バックスペース CTRL-H 8 backspace
<Tab> タブ CTRL-I 9 tab Tab
linefeed
<NL> ラインフィード CTRL-J 10 (<Nul>に使用)
<CR> キャリッジリターン CTRL-M 13 carriage-return
<Return> <CR>と同じ <Return>
<Enter> <CR>と同じ <Enter>
<Esc> エスケープ CTRL-[ 27 escape <Esc>
<Space> スペース 32 space
<lt> 小なり(less-than) < 60 <lt>
<Bslash> バックスラッシュ \ 92 backslash <Bslash>
<Bar> 垂直バー | 124 <Bar>
<Del> デリート 127
<CSI> コマンドの開始バイト ALT-Esc 155 <CSI>
<xCSI> GUIにおけるCSI <xCSI>
<EOL> 行の終端 (<CR>、<NL>、<CR><NL> のどれかで、
システムと 'fileformat' に依存) <EOL>
<Up> 上カーソル cursor-up cursor_up
<Down> 下カーソル cursor-down cursor_down
<Left> 左カーソル cursor-left cursor_left
<Right> 右カーソル cursor-right cursor_right
<S-Up> シフト + 上カーソル
<S-Down> シフト + 下カーソル
<S-Left> シフト + 左カーソル
<S-Right> シフト + 右カーソル
<C-Left> コントロール + 上カーソル
<C-Right> コントロール + 上カーソル
<F1> - <F12> ファンクションキー1から12 function_key function-key
<S-F1> - <S-F12> シフト + ファンクションキー1から12
<S-F1>
<Help> ヘルプキー
<Undo> アンドゥキー
<Insert> 挿入キー
<Home> ホーム home
<End> エンド end
<PageUp> ページアップ page_up page-up
<PageDown> ページダウン page_down page-down
<kHome> テンキーのホーム(左上) keypad-home
<kEnd> テンキーのエンド(左下) keypad-end
<kPageUp> テンキーのページアップ(右上) keypad-page-up
<kPageDown> テンキーのページダウン(右下) keypad-page-down
<kPlus> テンキーの+ keypad-plus
<kMinus> テンキーの- keypad-minus
<kMultiply> テンキーの * keypad-multiply
<kDivide> テンキーの / keypad-divide
<kEnter> テンキーのEnter keypad-enter
<kPoint> テンキーのピリオド keypad-point
<k0> - <k9> テンキーの0から9 keypad-0 keypad-9
<S-...> シフトキー shift <S-
<C-...> コントロールキー control ctrl <C-
<M-...> altまたはmetaキー meta alt <M-
<A-...> <M-...>と同じ <A-
<D-...> コマンドキー (Mac) / super (GTK) <D-
<t_xx> termcapで "xx" エントリを持つキー
-----------------------------------------------------------------------
Note: シフトされたカーソルキー、ヘルプキー、アンドゥキーを使える端末はあまりあ
りません。Amiga上では、シフトされたファンクションキー 10 は、キーシーケンスに
使われるコード (CSI) を生成します。このコードを入力すると、他のキーを入力する
まで待機状態になります。
Note: 削除キーのコードは二つあります。127 は削除キーの 10 進 ASCII 値で、これ
は常に認識されます。削除キーが別の値を生成することもあり、その場合は、termcap
エントリの "kD" からその値を得ます。どちらも同じ効果をもちます。:fixdelも参
照してください。
Note: テンキーのキーは、"普通" のキーと同じ用途に使われます。例えば、<kHome>は
<Home>と同じ効果を持ちます。テンキーのキーから、普通のキーと同じキーコードが送
信される場合、それは普通のキーとして認識されます。例えば、<kHome> から<Home>
と同じコードが送信される場合、<kHome> が押されたとしても、<Home> が押されたと
認識されます。その場合、<kHome> へのマッピングは機能しません。
<>
例ではよく <> 表記が使われます。これは、何を入力すべきかを明確に表記するために
使われますが、文字どおりに入力する必要がある場合もあります。例えば、":map" コ
マンドで使う場合など。規則は以下のとおりです:
1. バックスラッシュと '<' 以外の印字可能文字はそのまま表記される。
2. バックスラッシュは "\\" (ダブルバックスラッシュ)、または "<Bslash>" と表
記される。
3. 実際の '<' は "\<"、または "<lt>" と表記される。混乱を招く恐れがなけれ
ば、'<' はそのまま使われる。
4. "<key>" は特殊キーを打つことを示す。これは上記の表で説明している表記で
す。いくつか例を挙げます:
<Esc> エスケープキー
<C-G> CTRL-G
<Up> 上カーソルキー
<C-LeftMouse> コントロール + 左マウスクリック
<S-F11> シフト + ファンクションキー11
<M-a> Meta + a ('a' with bit 8 set)
<M-A> Meta + A ('A' with bit 8 set)
<t_kd> "kd" termcapエントリ(下カーソルキー)
マルチバイト文字である{char}を使用して <M-{char}> を指定できますが、Vimは
どのバイトシーケンスであるかを認識できないため、動作しません。
<> 表記を使うには、'cpoptions' から '<' フラグを除く必要があります
('compatible' がオフのときは、初期設定でそうなっています)。 >
:set cpo-=<
<> 表記の特別な意味をなくすには <lt> を使います。バックスラッシュを使う方法も機能しますが、それは 'cpoptions' が 'B' フラグを含んでいないときだけです。
CTRL-H を "<Home>" の 6 文字にマップする例: >
:imap <C-H> \<Home>
:imap <C-H> <lt>Home>
最初の例は 'cpoptions' に 'B' フラグが含まれていない場合のみ機能します。2 番目:imap <C-H> <lt>Home>
の例は常に機能します。
マップで "<lt>" を文字どおりに使うには 次のようにします: >
:map <C-L> <lt>lt>
マップ、短縮入力、メニューコマンドについては、例をコピー&ペーストして、そのま
ま使うことができます。あるいは、'<' と '>' も含めて、そのまま入力してください。
これは ":set" や ":autocmd" などの他のコマンドでは機能しません!
この表記は、ダブルクォートで囲んだ文字列の先頭に "\<" を付けて使用することがで
きます。例えば "\<C-Space>"。この結果、特殊なキーコードが生成されます。これを
読みやすいテキストに戻す変換には、`keytrans()` を使用します。
==============================================================================
5. モードの紹介 vim-modes-intro vim-modes
Vim には 7 つの基本モードがあります。
Normal Normal-mode command-mode
ノーマルモード ノーマルモードでは普通の編集コマンドを全て入力できま
す。エディタをスタートするとこのモードに入ります (オプ
ション 'insertmode' を設定しているときは違います。以下
を参照)。これはコマンドモードとも呼ばれます。
ビジュアルモード ノーマルモードに似ていますが、移動コマンドで選択領域が
拡大されます。移動コマンド以外のコマンドを使うと、選択
領域に対してそのコマンドが実行されます。Visual-mode
を参照。
オプション 'showmode' がオンなら、"-- VISUAL --" が
ウィンドウの最下部に表示されます。
選択モード これは、MS-Windows でテキストを選択するときの動作に似
ています。印字可能文字が入力されると、選択範囲を削除
し、挿入モードに入ります。Select-modeを参照。
オプション 'showmode' がオンなら、"-- SELECT --" が
ウィンドウの最下部に表示されます。
挿入モード 挿入モードでは、タイプされたテキストはバッファに挿入
されます。Insert-modeを参照。
オプション 'showmode' がオンなら、"-- INSERT --" が
ウィンドウの最下部に表示されます。
コマンドラインモード コマンドラインモードでは、ウィンドウの下部に 1 行のテ
キストを入力できます。これは Ex コマンド、":"、パター
ン検索コマンド、"?"、"/"、そしてフィルタコマンド、"!"
で使用します。Cmdline-modeを参照。
Ex モード コマンドラインモードに似てますが、コマンド入力後も Ex
モードに留まります。コマンドライン編集は、かなり制限さ
れます。Ex-modeを参照。
Terminal-Job モード ターミナルウィンドウの中でジョブと相互作用します。入力
されたキーはジョブに渡され、ジョブの出力はターミナル
ウィンドウに表示されます。他のモードへの移行の仕方は
terminal を参照。
加えて、7 つのモードがあります。これらは基本モードの変種です。
Operator-pending Operator-pending-mode
オペレータ待機モード ノーマルモードに似てますが、オペレータコマンドが実行さ
れた後で、その適用範囲を決定するための移動コマンド
({motion}) を得るために、Vim が待機している状態です。
置換モード 置換モードは挿入モードの特別版です。挿入モードと同様の
ことができますが、一文字入力するごとに、その場所にある
文字が一つ削除されます。Replace-modeを参照。
オプション 'showmode' がオンなら、"-- REPLACE --" が
ウィンドウの最下部に表示されます。
仮想置換モード 仮想置換モードは置換モードに似ていますが、ファイルの文
字の上ではなく、画面上の任意の位置を置換できます。
Virtual-Replace-mode を参照。'showmode' がオンなら、
"-- VREPLACE --" がウィンドウの最下部に表示されます。
挿入ノーマルモード 挿入モードで CTRL-O を入力したときにこのモードに入りま
す (i_CTRL-O を参照)。ノーマルモードに似ていますが、
1つのコマンドを実行した後、Vimは挿入モードに戻ります。
オプション 'showmode' がオンなら、"-- (insert) --" が
ウィンドウの最下部に表示されます。
Terminal-Normal モード ターミナルウィンドウでノーマルモードを使います。変更は
できないようになっています。ターミナルジョブモードに戻
るには、"a" や "i" のような挿入コマンドを使います。
挿入ビジュアルモード 挿入モードでビジュアル選択を開始すると、このモードに入
ります。例えば、CTRL-O を使い, その後 "v"、"V"、CTRL-V
を使ったときです。
ビジュアル選択が終了すると、挿入モードに戻ります。
オプション 'showmode' がオンなら、
"-- (insert) VISUAL --" がウィンドウの最下部に表示され
ます。
挿入選択モード 挿入モードで選択モードを開始すると、このモードに入りま
す。例えば、マウスをドラッグしたり、<S-Right> を押した
ときです。
選択モードが終了すると、挿入モードに戻ります。オプショ
ン 'showmode' がオンなら、"-- (insert) SELECT --" が
ウィンドウの最下部に表示されます。
==============================================================================
6. モードの切り替え mode-switching
何らかの理由で、現在のモードがわからなくなったときは、<Esc> を 2 度押すことで
常にノーマルモードに戻ることができます。Ex モードでは機能しないので、その場合
は ":visual" を使ってください。
<Esc> を押したとき、スクリーンフラッシュや、ベルの音で、ノーマルモードに戻った
ことを知ることができます。挿入モードで CTRL-O の後に <Esc> を押した場合、ビー
プ音は鳴りますが、まだ挿入モードの中なので、もう一度 <Esc> を押してください。
i_esc
移動先のモード ~
Normal Visual Select Insert Replace Cmd-line Ex ~
現在のモード ~
ノーマル v V ^V *4 *1 R gR : / ? ! Q
ビジュアル *2 ^G c C -- : --
選択 *5 ^O ^G *6 -- -- --
挿入 <Esc> -- -- <Insert> -- --
置換 <Esc> -- -- <Insert> -- --
コマンドライン *3 -- -- :start -- --
Ex :vi -- -- -- -- --
-- 不可
*1 ノーマルモードから挿入モードへは、コマンド "i"、"I"、"a"、"A"、"o"、"O"、
"c"、"C"、"s"、"S" で入ります。
*2 ビジュアルモードからノーマルモードへは非移動コマンドで入れますが、そのコマ
ンドは実行されてしまいます。<Esc>、"v"、"V"、"CTRL-V" (v_vを参照) を入力
すれば、副作用なしにビジュアルモードから出られます。
*3 コマンドラインモードからノーマルモードへ移行するには次のようにします:
- <CR> か <NL> を入力する。入力途中のコマンドは実行されます。
- 行の全てを削除し (例、CTRL-Uを使う)、そして、<BS> を入力する。
- CTRL-C または <Esc> を入力する、入力途中のコマンドを実行せずに終了できま
す。
最後の方法ですが、<Esc> が 'wildchar' に設定されている場合があります。その
場合、コマンドライン補完が実行されますが、それを無視して、再び <Esc> を入力
してください。
*4 ノーマルモードから選択モードに移行するには次のようにします:
- 'selectmode' が "mouse" を含んでいるときは、マウスでテキストを選択する。
- 'selectmode' が "key" を含んでいるときは、シフトキーを押しながら、特殊
キーでカーソルを動かします。(:set keymodel+=startsel が必要)
- 'selectmode' が "cmd" を含んでいるときは、"v"、"V"、"CTRL-V" を使う。
- "gh"、"gH"、"g CTRL-H" を使う。g_CTRL-H
*5 選択モードからノーマルモードに移行するには、シフトキーを押さずに特殊キーで
カーソルを動かします。(:set keymodel+=stopsel が必要)
*6 選択モードから挿入モードへ移行するには、印字可能文字 (普通の文字) を入力し
ます。選択範囲は削除され、入力した文字が挿入されます。
'insertmode' がオンのときは、編集作業は挿入モードで始まります。
CTRL-\_CTRL-N i_CTRL-\_CTRL-N c_CTRL-\_CTRL-N v_CTRL-\_CTRL-N
CTRL-\ CTRL-N と <C-\><C-N> を使って、どのモードからでもノーマルモードに移行で
きます。このコマンドを使えば、確実にノーマルモードになることができます。<Esc>
のときのようにビープ音はなりません。ただし、Ex モードでは機能しません。fや
mのように引数をとるコマンドの後で使われたときは、'ttimeoutlen' で設定された
タイムアウトが適用されます。
フォーカスがターミナルウィンドウにあるとき、CTRL-\ CTRL-N は編集コマンドが入力
されるまでの間ノーマルモードに移行します。t_CTRL-\_CTRL-N を参照。
CTRL-\_CTRL-G i_CTRL-\_CTRL-G c_CTRL-\_CTRL-G v_CTRL-\_CTRL-G
'insertmode' がオンのときは、CTRL-\ CTRL-G や <C-\><C-G> で挿入モードに移行で
きます。オフのときはノーマルモードに移行します。このコマンドを使えば、現在どの
モードにいるのかにかかわらず、'insertmode' に設定されたモードに移行することが
できます。
Q mode-Ex Ex-mode Ex EX E501
Q "Ex" モードに切り替えます。このモードは ":" コマンドを
続けて入力するようなものですが、次の点が違います:
- 毎回 ":" を押す必要がない。
- コマンドを実行するごとに画面が更新されない。
- 通常のコマンドライン編集機能は使えない。
- マップと短縮入力は使えない。
つまり、"標準の" 行編集コマンドだけを使って入力します
(削除に<Del>または<BS>、行削除に CTRL-U を使用する)。
Vim が "ex" という名前かコマンドライン引数 -e を使用
して実行された場合には、このモードで起動します。
"Ex" モードを抜けるには、":vi" コマンド :visual を使
います。
Note: Vim の昔のバージョンでは "Q" がテキストを整形す
るコマンドでしたが、いまは gq になっています。ただし
vimrc_example.vim あるいは defaults.vim を使ってい
る場合は、"Q" と "gq" は同じ動作をします。ただし選択
モードを除きます。
gQ
gQ "Ex" モードに切り替えます。"Q" と同じですが、実際に
":" コマンドでコマンドを入力するのと同じように動作しま
す。コマンドライン編集や補完などがすべて利用可能です。
"Ex" モードを抜けるには、`:vi` コマンド(`:visual`)を使
います。
==============================================================================
7. ウィンドウに表示される内容 window-contents
ノーマルモードと挿入/置換モードでは、スクリーンに現在のバッファの内容が表示さ
れます。つまり、見ているものが得られるもの (WYSIWYG) です。しかし、例外が二つ
があります:
- オプション 'cpoptions' が '$' を含んでいて、一行に収まる範囲を変更 (c) す
るときは、テキストはすぐに削除されず、削除される文字の最後の位置に '$' が表
示されます。
- あるウィンドウでテキストを挿入していて、別のウィンドウでも同じテキストを表示
しているとき、挿入を完了するまでそのウィンドウの表示は更新されません。
{訳注: 確認できず}
ウィンドウの幅より長い行は、折り返して表示されます。'wrap' がオフのときは折り
返されません (下記参照)。'linebreak' を設定すると空白文字で折り返すことができ
ます。
ウィンドウ内でバッファの最終行より下に表示領域がある場合、以下のように、それら
の行の始めに '~' が表示されます:
+-----------------------+
|some line |
|last line |
|~ |
|~ |
+-----------------------+
このように、'~' はバッファの最後に到達したことを示します。
ウィンドウに表示されている最後の行が表示しきれない場合、以下のように、最終行の
場所に '@' が表示されます:
+-----------------------+
|first line |
|second line |
|@ |
|@ |
+-----------------------+
このように、'@' はウィンドウに収まりきらない行があることを示します。
'display' に "lastline" フラグが含まれている場合、'@' はウィンドウの左側に表示
されません。最終行がウィンドウに完全に収まらない場合は、収まる部分のみが表示さ
れ、最後の 3 文字が次のように "@@@" で置き換えられます:
+-----------------------+
|first line |
|second line |
|a very long line that d|
|oesn't fit in the wi@@@|
+-----------------------+
長すぎてウィンドウに収まりきらない単一の行があるときは、特別な場合として扱われ
ます。Vim はカーソルのある場所付近のみを表示します。特殊記号は表示されません。
その行のどの部分でも編集できます。
'@' と '~' の強調表示を設定するには、オプション 'highlight' の '@' を設定しま
す。それらの文字と、バッファの中の本物の文字を区別することができます。
折り返された行の先頭には 'showbreak' に設定した文字が表示されます。
wrap-off
'wrap' がオフの場合、長い行は折り返されません。スクリーンに収まる分だけ表示さ
れます。カーソルが表示されていない部分に移動すると、スクリーンは水平方向にスク
ロールします。この方法の利点は、縦の列がありのままに表示されること、スクリーン
に収まらない行も編集できることです。欠点としては、一行の全ての文字を一度に見る
ことができないことが挙げられます。'sidescroll' にはスクロールする最小の列(カラ
ム)数を設定します。
全ての普通のASCII文字はスクリーンに直接表示されます。<Tab> は、それが表現する
数のスペースに置き換えられます。他の非表示文字は、"^{char}" に置き換えられま
す、このとき {char} には、その非表示文字に 64 を足した文字が入ります。つまり、
文字 7 (ベル文字) は "^G" と表示されます。127 から 160 までの文字は "~{char}"
で置き換えられます、このとき {char} には、その文字から 64 を引いた文字が入りま
す。これらの文字はスクリーン上では複数幅で表示されます。カーソルはその複数幅の
先頭にのみ移動させることができます
'number' がオンの場合、全ての行の先頭に行番号が表示されます。
Tip: 行を折り返したときに、行番号と行の表示を混ぜたくないときは、'showbreak'
に 8 つのスペースをセットします: >
":set showbreak=\ \ \ \ \ \ \ \ "
'list' がオンの場合、<Tab> 文字はいくつかのスペースとしてではなく、"^I" として
表示されます。'$' が行末に表示されるので、行の最後についた空白を見つけることが
できます。
コマンドラインモードでは、コマンドラインのみが正しく表示されます。バッファの
内容の表示は、コマンドラインモードから抜けたときに更新されます。
ウィンドウの最下行はステータスやその他のメッセージのために使われます。ステータ
スメッセージが使われるのは、オプションがオンのときのみです:
ステータスメッセージ オプション 初期設定 Unixの初期設定 ~
現在のモード 'showmode' on on
コマンドの文字 'showcmd' on off
カーソルの位置 'ruler' off off
現在のモードとは、"-- INSERT --" や "-- REPLACE --" のことです、'showmode'
を参照。コマンドの文字とは、入力されて、まだ実行されていないコマンドのことで
す。
遅い端末を使っている場合は、ステータスメッセージをオフにすることで編集のスピー
ドを上げることができます: >
:set nosc noru nosm
エラーが起きたとき、エラーメッセージは少なくとも一秒間は表示されます(反転表示
で)。
いくつかのコマンドでは、そのコマンドが作用する行数が表示されます。何行以上でそ
の表示をするかは、'report' で設定できます (初期設定は 2)。
Amiga 上では、Vim は CLI ウィンドウで実行されます。Vim の名前と現在のファイル
名の絶対パスがタイトルバーに表示されます。ウィンドウがリサイズされると、Vim は
自動的にウィンドウを再描画します。ウィンドウは好きなだけ小さくできますが、小さ
すぎると1行のみで収まりきらなくなります。最下行に表示されるメッセージが読める
ように、最低でも40文字の幅を取ってください。
ほとんどの UNIX システム上で、Vim はウィンドウのリサイズを正しく認識、把握でき
ます。
==============================================================================
8. 用語の定義 definitions
バッファ テキスト行が入っている。一般にファイルから読み込む。
スクリーン Vim が使う領域全体。端末ウィンドウを指す場合もある。
"Vimウィンドウ" とも呼ばれる。
ウィンドウ バッファが表示される場所。1 つのバッファが複数のウィ
ンドウを持つことが可能。
一つのスクリーンは一つ以上のウィンドウを内包し、それらはステータスラインで区切
られ、最下行にはコマンドラインが表示されます。
+-------------------------------+
screen | window 1 | window 2 |
| | |
| | |
|= status line =|= status line =|
| window 3 |
| |
| |
|==== status line ==============|
|command line |
+-------------------------------+
コマンドラインはメッセージを表示するためにも使われます。コマンドラインに十分な
表示領域がない場合はスクリーンがスクロールします。
行には 4 種類あり、次の違いがあります:
バッファ行 バッファ内の行。ファイルに読み書きする行のこと。
行の長さは制限なし。
論理行 折り畳みが適用されたバッファ行。複数のバッファ行が折り
畳まれ論理行 1 行となり、次のように表示される:
"+-- 99 lines folded"。
行の長さは制限なし。
ウィンドウ行 ウィンドウに表示される行: 折り返し、ラインブレークなど
が適用された後の論理行の一部。長さはウィンドウの幅以
下。それ以上長い行は折り返されるか切り詰められる。
スクリーン行 Vim が使うスクリーンの行。全てのウィンドウのウィンドウ
行とステータスライン、コマンドラインからなる。長さはス
クリーンの幅以下。コマンドラインがそれ以上長くなったと
きは折り返して表示され、表示領域を作るために行がスク
ロールされる。
バッファ行 論理行 ウィンドウ行 スクリーン行 ~
1. one 1. one 1. +-- folded 1. +-- folded
2. two 2. +-- folded 2. five 2. five
3. three 3. five 3. six 3. six
4. four 4. six 4. seven 4. seven
5. five 5. seven 5. === status line ===
6. six 6. aaa
7. seven 7. bbb
8. ccc ccc c
1. aaa 1. aaa 1. aaa 9. cc
2. bbb 2. bbb 2. bbb 10. ddd
3. ccc ccc ccc 3. ccc ccc ccc 3. ccc ccc c 11. ~
4. ddd 4. ddd 4. cc 12. === status line ===
5. ddd 13. (command line)
6. ~
==============================================================================
vim:tw=78:ts=8:noet:ft=help:norl: