Up: 目次   [Index]


Vim についての前書き、ヘルプの表記について

*intro.txt*     For Vim バージョン 8.1.  Last change: 2019 Nov 11


		  VIMリファレンスマニュアル    by Bram Moolenaar

序文

1. はじめに|intro|
2. インターネット上の Vim 情報|internet|
3. クレジット|credits|
4. ヘルプの表記法|notation|
5. モードの紹介|vim-modes-intro|
6. モードの切り替へ|mode-switching|
7. ウィンドウに表示される內容|window-contents|
8. 用語の定義|definitions|

1. はじめに

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| を參照。

Vim は vi-ai-em ではなく、Jim のやうに一語として撥音します。Vim はまた Jim のやうに名稱なので、(最初の文字を)大文字で書きます。

このマニュアルは全ての Vim コマンドとオプションのリファレンスです。Vi や Vim の入門書ではありません (それを入れるとあちこちで說明が込み入つてしまふので)。初心者には、實習 |tutor| があります。Vim の使ひ方を身につけるにはユーザーマニュアル |usr_toc.txt| を讀んでください。

Vi と Vim に關するほとんどの本には初心者向けのセクションがあります。その他、特定の機能についてより多くの言葉を費やしてゐます。Vim の本の槪要はここにあります:

http://iccf-holland.org/vim_books.html

2. インターネット上の Vim 情報

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 系のテキストエディタに關する Q&A サイトです。"

Vim について討論してゐる Usenet News グループ

comp.editors

このグループでは他のエディタについても話し合われてゐます。Vim について書く場合は、そのことを必ず明記してください。

ここからアクセスすることができます: https://groups.google.com/forum/#!topic/comp.editors

Vim のメーリングリストがいくつかあります:

<vim@vim.org>

現行バージョンの Vim の使ひ方に關する議論: 使ひやすいマップ、質問、囘答、特定のバージョンはどこで手に入るかなど。このメーリングリストにはたくさんの人が參加してゐて、(初心者の) 質問にも答へてくれます。遠慮せずどんどん質問してください。

<vim-dev@vim.org>

Vim の開發に關する議論: 新しい機能、移植、パッチ、ベータ版など。

<vim-announce@vim.org>

Vim の新バージョンに關するアナウンス: ベータ版や他システムへの移植についてもアナウンスがあります。このメーリングリストは購讀專用です。

<vim-mac@vim.org>

Vim のマッキントッシュバージョンの使用、改良に關する議論。

最新の情報は http://www.vim.org/maillist.php を參照。

Note:

メーリングリストに參加したい場合は、次の場所へメールを送つて下さい。

<vim-subscribe@vim.org>

"From:" のアドレスが正しいことを確認してください。メーリングリストのサーバーから登錄方法についてのヘルプが送られてきます。

より詳しい情報とアーカイブについては、Vim メーリングリストページを見てください。 http://www.vim.org/maillist.php

バグレポート:

バグを報告するには 2 つの方法があり、どちらも使へます:

  1. バグレポートは Vim 開發陣 <vim-dev@vim.org> に送つてください。これはメーリングリストです。最初にメンバーになる必要があります。たくさんの人がそのメッセージを見ます。それが不都合な場合は (例へばセキュリティ關係)、<bugs@vim.org> に送つてください。そのメッセージは Vim のメンテナー (Bram) だけに送信されます。
  2. GitHub に issue を立ててください: https://github.com/vim/vim/issues 文章は vim-dev メーリングリストにも轉送されます。

メッセージは簡潔にお願ひします。メールに囘答する時閒は、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|

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. クレジット

Vim の大部分は Bram Moolenaar<Bram@vim.org> によつて作成されました。

ドキュメントの一部は以下の方々によつて書かれた Vi のマニュアルによります:

W.N. Joy
Alan P.W. Hewett
Mark Horton

Vim エディタは Stevie をベースにしてをり、下記の方々のソフトウェア (のアイデア) も參考にしてゐます。他の人々は私に意見やパッチを送つてくれたり、Vim の良い點、惡い點に關するフィードバックをしてくれました。

これらの人々の協力なくして、Vim は現在の姿にはならなかつたことでせう!

Ron AaronWin32 GUI に關する變更
Mohsin Ahmed暗號化
Zoltan ArpadffyVMS 移植の作業
Tony AndrewsStevie
Gert van AntwerpenMS-DOS 上の DJGPP に關する變更
Berkeley DB(3)スワップファイルの實裝に關するアイデア
Keith BosticNvi
Walter BriscoeMakefile の更新、樣々なパッチ
Ralf BrownMS-DOS 用の SPAWNO ライブラリ
Robert Colon多くの役立つアドバイス
Marcin DaleckiGTK+ GUI への移植、ツールバーのアイコン gettext()
Kayhan Demirelウガンダのニュースを送つてくれた
Chris & John Downeyxvi (マルチウィンドウバージョンのアイデア)
Henk Elbers最初の VMS への移植
Daniel ElstnerGTK+ 2 への移植
Eric FischerMac への移植、’cindent’、その他の改良
Benji Fisherたくさんのユーザーの質問に答へてくれた
Bill FosterAthena GUI への移植
Google週に一日 Vim の仕事をさせてくれる
Loic Greniexvim (マルチウィンドウバージョンのアイデア)
Sven GuckesVim のプロモーター、以前の WWW ページ管理者
Darren HiebertExuberant ctags
Jason HildebrandGTK+ 2 への移植
Bruce HunsakerVMS への移植版の改良
Andy KahnCscopeサポート、GTK+ GUI への移植
Oezguer KesimVim メーリングリストの管理者
Axel KielhornMacintosh 移植の仕事
Steve KirkendallElvis
Roger Knobbeオリジナルの Windows NT への移植
Sergey Laskavyモスクワからの Vim のヘルプ
Felix von LeitnerVim メーリングリストの以前の管理者
David LeonardUnix への Python 擴張の移植
Avner Lottemウィンドウでの右から左への編輯
Flemming MadsenX11 client-server、樣々な機能とパッチ
Tony Mechelynckユーザーから寄せられたたくさんの質問に囘答
Paul MoorePythonインターフェイス擴張、たくさんのパッチ
Katsuhito Naganoマルチバイトバージョンに關する作業
Sung-Hyun Namマルチバイトバージョンに關する作業
Vince NegriWin32 GUI と一般的なコンソールの擴張
Steve Oualline最初の Vim の本の著者 |frombook|
Dominique Pellevalgrind のレポートと多くの修正
A.Politzたくさんのバグ報告と修正
George V. ReillyWin32 移植、Win32 GUI への移植を始める
Stephen Riehmバグ蒐集家
Stefan Roemerさまざまなパッチとユーザーへのヘルプ
Ralf SchandlIBM OS/390 への移植
Olaf SeibertDICE と BeBox バージョン、regexp の改良
Mortaza ShiranFarsi のパッチ
Peter da Silvatermlib
Paul SlootmanOS/2 への移植
Henry Spencer正規表現に關して
Dany St-AmantMacintosh への移植
Tim ThompsonStevie
G. R. (Fred) WalterStevie
Sven VerdoolaegePerl インターフェイス
Robert Webbコマンドライン補完、GUI バージョン、そして多くのパッチ
Ingo WilkenTcl インターフェイス
Mike WilliamsPostScrip tの印刷
Juergen WeigertLatticeバージョン、AUX の改良、UNIX と MS-DOS への移植、autoconf
Stefan ’Sec’ Zehlvim.org の管理
Yasuhiro Matsumoto多くの MS-Windows の改良
Ken Takata修正と機能
Kazunobu KuriyamaGTK 3
Christian Brabandt多くの修正、機能、ユーザーサポート等
Yegappan Lakshmanan多くのquickfix機能

バグレポートや提案を送つてくれた人々に感謝します。あまりにたくさんいるので、ここで彼らの名前について觸れることはできませんが。これらの人々のアイデアがなければ、Vim は今の Vim にはならなかつたことでせう: 彼らが Vim を生かしつづけたのです!

この文書には他のバージョンの Vi に對するいくつかの參照があります:

Vi

"オリジナル"。特に指定がなければ Sun OS 4.x のバージョンのViを指します。":version" は "Version 3.7, 6/7/85" を返します。別のバージョンに言及することもあります。Unix 上でのみ動きます。ソースコードは現在 BSD スタイルのライセンス下で利用可能です。Vi についての更なる情報は、以下の場所から得られます:

http://ex-vi.sourceforge.net/

Posix

IEEE standard 1003.2, Part 2: Shell and utilities より。一般に "Posix" として知られる。Vi の動作仕樣の原典です。|posix-compliance| を參照。

Nvi

"New" Vi。BSD 4.4、FreeBSD に附屬の Vi。オリジナルの Vi と高い互換性を持ち、少々の擴張がされてゐる。使はれてゐるのはバージョン1.79。":version" は "Version 1.79 (10/23/96)" を返す。バージョン 1.81 が開發中だが、ここ數年リリースされてゐない。ソースコードは自由に利用できる。

Elvis

別の Vi クローン、Steve Kirkendall が作成しました。とてもコンパクトですが、Vim ほど高機能ではありません。開發は失速し、エルヴィスは建物を去つてしまひました! ソースコードは自由に利用できます。

Neovim

Vim のクローン。2014 年に Vim のソースをフォークして、異なる方向を進みました。非常に GitHub に縳られてゐて、より多くの依存關係があり、開發をより複雜にし、移植性を制限してゐます。コードがリファクタリングされ、パッチが Vim と交換できなくなりました。リモート GUI とスクリプト言語との統合をサポートしてゐます。

4. ヘルプの表記法

この文章を構文强調を使つて表示すると、見たままの意味ではないテキストは特別に强調表示されます。[], {}, <> で圍まれた項目や CTRL-X などです。

Note:
Vim は入力可能な文字はすべてコマンドで使ひます。實際に、[], {}, <> を入力する場合もあります。それは文脈によつて判斷できるでせう。

[] 角カッコで圍まれた文字は省略可能。

[count]

コマンドに前置して、そのコマンドを繰り返したり、反復したりするための省略可能な數字。省略した場合、特に注意が無ければ 1 を指定したのと同じになります。

Note:
このマニュアルでは、[count] はコマンドの說明では言及されません。解說する場合だけ說明します。これはコマンドを調べ易くするためです。’showcmd’ オプションが有效だと、(部分的に) 入力されたカウントがウィンドウの下の方に表示されます。<Del> を使つて末尾の數字を削除できます(|N<Del>|)。

["x]

テキストの保管場所として、任意のレジスタを指定できることを示す。|registers| を參照。x は ’a’ から ’z’、’A’ から ’Z’、’"’、のどれか一文字です。場合によつては (put コマンドで使ふときなど)、’0’ から ’9’、’%’、’#’、その他の文字も使へます。大文字でも小文字でも同じレジスタを指しますが、小文字を使つたときはレジスタの內容が上書きされ、大文字を使つたときはレジスタの內容に追加されます。"x を指定しなかつた場合や、"" を指定した場合は、無名レジスタが使はれます。

{}

中括弧の表記は、コマンドの一部として入力する必要があつて、そこには、いろいろな値を入力することができるときに使はれます。Vim と Vi の違ひを示す場合も中括弧で表記されます (これは文脈から區別できます)。

{char1-char2}

char1 から char2 の範圍のどれか一文字。例へば、{a-z} は小文字一文字。複數の範圍が指定される場合もあります。例へば、{a-zA-Z0-9} は英數字のどれか一文字です。

{motion}

カーソル移動コマンド。これらは、|motion.txt| で說明されてゐます。例:

w次の單語の最初に移動
b現在の單語の最初へ
4j4 行下に移動
/The<CR>つぎの "The" が、ある場所に移動

オペレータコマンド (|operator|) を入力した後で、對象のテキストを選擇するため使はれます。

{Visual}

選擇されたテキストの範圍。"v"、"V"、CTRL-V コマンドで選擇を開始し、カーソル移動コマンドで選擇範圍を變更できます。オペレータコマンド (|operator|) を實行する前に使つて、對象のテキストを選擇することができます。|Visual-mode| を參照。

<character>

下記の表に示した特殊文字。修飾キーが付くこともあります。修飾キーと ASCII 文字の組合せもこのやうに表記されます。

’c’

ASCII 文字 1 文字。

CTRL-{char}

制禦文字として入力された文字 {char}。CTRL キーを押しながら {char} を押す場合です。{char} は大文字でも小文字でも區別されません。CTRL-ACTRL-a は同じです。SHIFT キーを使ふと別のコードを生成する端末もあるため、シフトキーは使はないでください。

’option’

オプション (設定) はシングルクォートで圍んで表記されます。オプションは設定値を變更できます。|options| を參照。

"command"

說明の中にでてくる入力可能なコマンドは、ダブルクォートで圍んで表記されます。

‘command‘

コマンドの新しい表記法です。他のクォート表記のテキストや文字列と區別するために使はれます。

このドキュメントでは、キーの名前として以下のものが使はれます。これらは ":map" コマンドでも使ふことができます (キーの名前を插入するには、CTRL-K を押してから、名前を插入したいキーを押します)。

表記意味等價表現10進數値
<Nul>ゼロCTRL- 0 (10として保存)
<BS>バックスペースCTRL-H8
<Tab>タブCTRL-I9
<NL>ラインフィードCTRL-J10 (<Nul>に使用)
<FF>フォームフィードCTRL-L12
<CR>キャリッジリターンCTRL-M13
<Return><CR>と同じ
<Enter><CR>と同じ
<Esc>エスケープCTRL-[27
<Space>スペース32
<lt>小なり (less-than)<60
<Bslash>バックスラッシュ\92
<Bar>垂直バー|124
<Del>デリート127
<CSI>コマンドの開始バイトALT-Esc155
<xCSI>GUI における CSI
<EOL>行の終端 (<CR>, <LF>, <CR><LF> のどれか。システムや ’fileformat’ に依存)
<Up>上カーソル
<Down>下カーソル
<Left>左カーソル
<Right>右カーソル
<S-Up>シフト + 上カーソル
<S-Down>シフト + 下カーソル
<S-Left>シフト + 左カーソル
<S-Right>シフト + 右カーソル
<C-Left>コントロール + 上カーソル
<C-Right>コントロール + 上カーソル
<F1> - <F12>ファンクションキー 1 から 12
<S-F1> - <S-F12>シフト + ファンクションキー 1 から 12
<Help>ヘルプキー
<Undo>アンドゥキー
<Insert>插入キー
<Home>ホーム
<End>エンド
<PageUp>ページアップ
<PageDown>ページダウン
<kHome>テンキーのホーム (左上)
<kEnd>テンキーのエンド (左下)
<kPageUp>テンキーのページアップ (右上)
<kPageDown>テンキーのページダウン (右下)
<kPlus>テンキーの +
<kMinus>テンキーの -
<kMultiply>テンキーの *
<kDivide>テンキーの /
<kEnter>テンキーの Enter
<kPoint>テンキーのピリオド
<k0> - <k9>テンキーの0から9
<S-...>シフトキー
<C-...>コントロールキー
<M-...>alt または meta キー
<A-...><M-...> と同じ
<D-...>コマンドキー (Macintosh のみ)
<t_xx>termcap で "xx" エントリを持つキー

Note:
シフトされたカーソルキー、ヘルプキー、アンドゥキーを使へる端末はあまりありません。Amiga 上では、シフトされたファンクションキー 10 は、キーシーケンスに使はれるコード (CSI) を生成します。このコードを入力すると、他のキーを入力するまで待機狀態になります。

Note:
削除キーのコードは 2 つあります。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 番目の例は常に機能します。マップで "<lt>" を文字どほりに使ふには 次のやうにします:

:map <C-L> <lt>lt>

マップ、短縮入力、メニューコマンドについては、例をコピー&ペーストして、そのまま使ふことができます。あるいは、’<’ と ’>’ も含めて、そのまま入力してください。これは ":set" や ":autocmd" などの他のコマンドでは機能しません!

5. モードの紹介

Vim には 7 つの基本モードがあります。

ノーマルモード

ノーマルモードでは普通の編輯コマンドを全て入力できます。エディタをスタートするとこのモードに入ります (オプション ’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 つのモードがあります。これらは基本モードの變種です。

オペレータ待機モード

ノーマルモードに似てますが、オペレータコマンドが實行された後で、その適用範圍を決定するための移動コマンド ({motion}) を得るために、Vim が待機してゐる狀態です。

置換モード

置換モードは插入モードの特別版です。插入モードと同樣のことができますが、一文字入力するごとに、その場所にある文字が 1 つ削除されます。|Replace-mode| を參照。オプション ’showmode’ がオンなら、"‘-- REPLACE --’" がウィンドウの最下部に表示されます。

假想置換モード

假想置換モードは置換モードに似てゐますが、ファイルの文字の上ではなく、畫面上の任意の位置を置換できます。|Virtual-Replace-mode| を參照。

showmode’ がオンなら、"‘-- VREPLACE --’" がウィンドウの最下部に表示されます。

插入ノーマルモード

插入モードで CTRL-O を入力すると、このモードに入ります (|i_CTRL-O| を參照)。ノーマルモードに似てますが、コマンドが實行された後、插入モードに戾ります。

オプション ’showmode’ がオンなら、"‘-- (insert) --’" がウィンドウの最下部に表示されます。

Terminal-Normal モード

ターミナルウィンドウではノーマルモードを使ひます。變更はできないやうになつてゐます。ターミナルジョブモードに戾るには、"a" や "i" のやうな插入コマンドを使ひます。

插入ビジュアルモード

插入モードでビジュアル選擇を開始すると、このモードに入ります。例へば、CTRL-O を使ひ, その後 "v"、"V"、CTRL-V を使つたときです。ビジュアル選擇が終了すると、插入モードに戾ります。

オプション ’showmode’ がオンなら、"‘-- (insert) VISUAL --’" がウィンドウの最下部に表示されます。

插入選擇モード

插入モードで選擇モードを開始すると、このモードに入ります。例へば、マウスをドラッグしたり、<S-Right> を押したときです。選擇モードが終了すると、插入モードに戾ります。

オプション ’showmode’ がオンなら、"‘-- (insert) SELECT --’" がウィンドウの最下部に表示されます。

6. モードの切り替へ

何らかの理由で、現在のモードがわからなくなつたときは、<Esc> を 2 度押すことで常にノーマルモードに戾ることができます。Ex モードでは機能しないので、その場合は ":visual" を使つてください。

<Esc> を押したとき、スクリーンフラッシュや、ベルの音で、ノーマルモードに戾つたことを知ることができます。插入モードで CTRL-O の後に <Esc> を押した場合、ビープ音は鳴りますが、まだ插入モードの中なので、もう一度 <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

コマンドラインモードからノーマルモードへ移行するには次のやうにします:

最後の方法ですが、<Esc> が ’wildchar’ に設定されてゐる場合があります。その場合、コマンドライン補完が實行されますが、それを無視して、再び <Esc> を入力してください。

*4

ノーマルモードから選擇モードに移行するには次のやうにします:

*5

選擇モードからノーマルモードに移行するには、シフトキーを押さずに特殊キーでカーソルを動かします。(:set keymodel+=stopsel が必要)

*6

選擇モードから插入モードへ移行するには、印字可能文字 (普通の文字) を入力します。選擇範圍は削除され、入力した文字が插入されます。

insertmode’ がオンのときは、編輯作業は插入モードで始まります。

CTRL-\ CTRL-N と <C-\><C-N> を使つて、どのモードからでもノーマルモードに移行できます。このコマンドを使へば、確實にノーマルモードになることができます。<Esc> のときのやうにビープ音はなりません。ただし、Ex モードでは機能しません。|f| や |m| のやうに引數をとるコマンドの後で使はれたときは、’ttimeoutlen’ で設定されたタイムアウトが適用されます。

フォーカスがターミナルウィンドウにあるとき、CTRL-\ CTRL-N はたつた 1 つのコマンドでノーマルモードに移行します。|t_CTRL-\_CTRL-N| を參照。

insertmode’ がオンのときは、CTRL-\ CTRL-G や <C-\><C-G> で插入モードに移行できます。オフのときはノーマルモードに移行します。このコマンドを使へば、現在どのモードにゐるのかにかかはらず、’insertmode’ に設定されたモードに移行することができます。

Q

"Ex" モードに切り替へます。このモードは ":" コマンドを續けて入力するやうなものですが、次の點が違ひます:

gQ

"Ex" モードに切り替へます。"Q" と同じですが、實際に ":" コマンドでコマンドを入力するのと同じやうに動作します。コマンドライン編輯や補完などがすべて利用可能です。"Ex" モードを拔けるには、":vi" コマンド |:visual| を使ひます。

7. ウィンドウに表示される內容

ノーマルモードと插入/置換モードでは、スクリーンに現在のバッファの內容が表示されます。つまり、見てゐるものが得られるもの (WYSIWYG) です。しかし、例外が 2 つがあります:

ウィンドウの幅より長い行は、折り返して表示されます。’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’ がオフの場合、長い行は折り返されません。スクリーンに收まる分だけ表示されます。カーソルが表示されてゐない部分に移動すると、スクリーンは水平方向にスクロールします。この方法の利點は、縱の列がありのままに表示されること、スクリーンに收まらない行も編輯できることです。缺點としては、一行の全ての文字を一度に見ることができないことが擧げられます。’sidescroll’ にはスクロールする最小の列(カラム)數を設定します。

全ての普通の ASCII 文字はスクリーンに直接表示されます。<Tab> は、それが表現する數のスペースに置き換へられます。他の非表示文字は、"^{char}" に置き換へられます、このとき {char} には、その非表示文字に 64 を足した文字が入ります。つまり、文字 7 (ベル文字) は "^G" と表示されます。127 から 160 までの文字は "~{char}" で置き換へられます、このとき {char} には、その文字から 64 を引いた文字が入ります。これらの文字はスクリーン上では複數幅で表示されます。カーソルはその複數幅の先頭にのみ移動させることができます

number’ がオンの場合、全ての行の先頭に行番號が表示されます。Tip: 行を折り返したときに、行番號と行の表示を混ぜたくないときは、’showbreak’ に 8 つのスペースをセットします:

":set showbreak=\ \ \ \ \ \ \ \ "

list’ がオンの場合、<Tab> 文字はいくつかのスペースとしてではなく、"^I" として表示されます。’$’ が行末に表示されるので、行の最後についた空白を見つけることができます。

コマンドラインモードでは、コマンドラインのみが正しく表示されます。バッファの內容の表示は、コマンドラインモードから拔けたときに更新されます。

ウィンドウの最下行はステータスやその他のメッセージのために使はれます。ステータスメッセージが使はれるのは、オプションがオンのときのみです:

ステータスメッセージオプション初期設定Unix の初期設定
現在のモードshowmodeonon
コマンドの文字showcmdonoff
カーソルの位置ruleroffoff

現在のモードとは、"‘-- INSERT --’" や "‘-- REPLACE --’" のことです、|'showmode'| を參照。コマンドの文字とは、入力されて、まだ實行されてゐないコマンドのことです。

遲い端末を使つてゐる場合は、ステータスメッセージをオフにすることで編輯のスピードを上げることができます:

:set nosc noru nosm

エラーが起きたとき、エラーメッセージは少なくとも一秒閒は表示されます (反轉表示で)。

いくつかのコマンドでは、そのコマンドが作用する行數が表示されます。何行以上でその表示をするかは、’report’ で設定できます (初期設定は 2)。

Amiga 上では、Vim は CLI ウィンドウで實行されます。Vim の名前と現在のファイル名の絕對パスがタイトルバーに表示されます。ウィンドウがリサイズされると、Vim は自動的にウィンドウを再描畫します。ウィンドウは好きなだけ小さくできますが、小さすぎると 1 行のみで收まりきらなくなります。最下行に表示されるメッセージが讀めるやうに、最低でも 40 文字の幅を取つてください。

ほとんどの UNIX システム上で、Vim はウィンドウのリサイズを正しく認識、把握できます。

8. 用語の定義

バッファ

テキスト行が入つてゐる。一般にファイルから讀み込む。

スクリーン

Vim が使ふ領域全體。端末ウィンドウを指す場合もある。"Vim ウィンドウ" とも呼ばれる。

ウィンドウ

バッファが表示される場所。1 つのバッファが複數のウィンドウを持つことが可能。

1 つのスクリーンは 1 つ以上のウィンドウを內包し、それらはステータスラインで區切られ、最下行にはコマンドラインが表示されます。

        +-------------------------------+
screen  | window 1      | window 2      |
        |               |               |
        |               |               |
        |= status line =|= status line =|
        | window 3                      |
        |                               |
        |                               |
        |==== status line ==============|
        |command line                   |
        +-------------------------------+

コマンドラインはメッセージを表示するためにも使はれます。コマンドラインに十分な表示領域がない場合はスクリーンがスクロールします。

行には 4 種類あり、次の違ひがあります:

バッファ行

バッファ內の行。ファイルに讀み書きする行のこと。行の長さは制限なし。

論理行

折り疊みが適用されたバッファ行。複數のバッファ行が折り疊まれ論理行 1 行となり、次のやうに表示される: "‘+-- 99 lines folded’"。行の長さは制限なし。

ウィンドウ行

ウィンドウに表示される行: 折り返し、ラインブレークなどが適用された後の論理行の一部。長さはウィンドウの幅以下。それ以上長い行は折り返されるか切り詰められる。

スクリーン行

Vim が使ふスクリーンの行。全てのウィンドウのウィンドウ行とステータスライン、コマンドラインからなる。長さはスクリーンの幅以下。コマンドラインがそれ以上長くなつたときは折り返して表示され、表示領域を作るために行がスクロールされる。

バッファ行論理行ウィンドウ行スクリーン行
1. one1. one1. +-- folded1. +-- folded
2. two2. +-- folded2. five2. five
3. three3. five3. six3. six
4. four4. six4. seven4. seven
5. five5. seven5. === status line ===
6. six6. aaa
7. seven7. bbb
8. ccc ccc c
1. aaa1. aaa1. aaa9. cc
2. bbb2. bbb2. bbb10. ddd
3. ccc ccc ccc3. ccc ccc ccc3. ccc ccc c11. ~
4. ddd4. ddd4. cc12. === status line ===
5. ddd13. (command line)
6. ~

Up: 目次   [Index]