*os_win32.txt*  For Vim バージョン 7.4.  Last change: 2012 May 18


		  VIMリファレンスマニュアル    by George Reilly


						*win32* *Win32* *MS-Windows*
このファイルはVim Win32バージョンに特有の事柄についての文書である。

Win32 版の Vim は Windows NT, 95, 98, ME, XP, Vista, Windows 7 で実行可能で
ある。コンソール 版と GUI 版がある。

32 ビット版 Vim は 64 ビット版 MS-Windows システム上でも実行可能である。

Windows 3.1[1] では Win32s サブシステムで動く GUI バージョンもある。
32 ビット DOS バージョン の Vim も使える。|os_msdos.txt| を参照。

1. 知られている問題点		|win32-problems|
2. Vimの起動			|win32-startup|
3. スクリーン内容の復帰		|win32-restore|
4. マウスの使用			|win32-mouse|
5. Windows 3.1での使用		|win32-win3.1|
6. Win32 ミニ FAQ		|win32-faq|

付け加えて、Win32とDOS共通の項目がいくつかある:
ファイルの位置			|dos-locations|
バックスラッシュの使用		|dos-backslash|
標準のマッピング		|dos-standard-mappings|
画面出力とカラー		|dos-colors|
ファイルフォーマット		|dos-file-formats|
:cd コマンド			|dos-:cd|
割り込み(インタラプト)		|dos-CTRL-Break|
一時ファイル			|dos-temp-files|
Shellオプションのデフォルト	|dos-shell|

Win32 GUI			|gui-w32|

クレジット:
Win32バージョンはGeorge V. Reilly <george@reilly.org>による。
オリジナルのWindows NTへの移植はRoger Knobbe <RogerK@wonderware.com>による。
GUIバージョンはGeorge V. ReillyとRobert Webbによって作成された。

コンパイルする場合は "src/INSTALLpc.txt" を参照。	*win32-compiling*

==============================================================================
1. 知られている問題点				*windows95* *win32-problems*

Windows 95のコンソール内で実行する場合、いくつかの問題点が知られている。これは
我々の知る限りでは、Windows 98とWindows MEでも同じである。

Microsoftに勤務している誰かからのコメント: "Win95のコンソールサポートは今まで
ずっと怪しいものだったし、これからもそうだろう"。
1.  デッドキーサポートが機能しない。
2.  ":set columns=nn lines=nn" によるウィンドウのリサイズは機能するが、外部コ
    マンドを実行するとシステムはハングアップ、またはクラッシュする。
3.  'columns' または 'lines' の値を非DOS値に変えない限り、スクリーンの更新は遅
    いだろう。しかし、このときは2番目の問題に該当する！


もしこれらの問題に悩んでいるなら、32ビットMS-DOSかWin32 GUIバージョンを使うと
よい。

ファイル名補完を行っているとき、Vimは短いファイル名への一致も見つける。しかし、
それでもVimは長いファイル名への一致を見つけ、採用する。例えば、もしあなたが短
いファイル名 "this_i~1" を持つ、長いファイル名のファイル "this_is_a_test" を
持っているなら、コマンド ":e *1" は "this_is_a_test" の編集を始める。

==============================================================================
2. Vimの起動						*win32-startup*

カレントディレクトリ					*win32-curdir*

Vimにフルパスのファイル名("x:\" の形で始まる)を指定したとき、Vimはエクスプロー
ラから起動されたと仮定してそのファイルのあるディレクトリをカレントディレクトリ
にする。そうならないようにするにはファイルのパスにバックスラッシュ(\)の代わり
にスラッシュ(/)を使うこと。 >

	vim c:\text\files\foo.txt

これはカレントディレクトリを "C:\text\files" に変更する。 >

	vim c:/text\files\foo.txt

こうすればカレントディレクトリを変更しない。


端末オプション						*win32-term*

Win32バージョンのVimが認識できる唯一の端末の種類は "win32" であり、これは組み
込みである。'term' に他の何かを設定すると、Vimはたぶんとても奇妙な振る舞いを見
せることだろう。それゆえ、Vimは 'term' のデフォルト値を環境変数 "TERM" から取
得しない。

$PATH							*win32-PATH*

Vim 実行ファイルのディレクトリが $PATH に追加される。これは主に「ツール」メ
ニューにある "!xxd" が動作するようにするためである。また、これにより
executable() が 1 を返すときは実際にその実行ファイルが実行可能であるように
なる。

==============================================================================
3. スクリーン内容の復帰					*win32-restore*

'restorescreen' がセットされているとき(これはデフォルト)、終了時、または外部コ
マンド実行時、Vimはコンソールの元の内容を復帰する。これを行いたくない場合は、
":set nors" を使うとよい。|'restorescreen'|

==============================================================================
4. マウスの使用						*win32-mouse*

Win32バージョンのVimはマウスの使用をサポートする。2ボタンマウスを使用している
場合、中ボタンは左と右の両方のボタンを同時に押すことによってエミュレートでき
る - しかし、Win32 GUIで右ボタンクリックによるポップアップメニューを有効にし
ていると('mouse' を参照)、左ボタンを先にクリックした際、エラーが発生する。
							|mouse-using|

マウスが機能しない場合には、コンソールの "Quick Edit Mode" 特性を無効にしてみ
よ。

==============================================================================
5. Windows 3.1での使用					*win32-win3.1*

						*win32s* *windows-3.1*
Windows 3.1と3.11上で走るGvimの特殊なバージョンがある。Visual C++ 4.1でコンパ
イルしたgvim.exeが必要となる。

Windows 3.1上でWin32バージョンを動かすには、Win32sをインストールする必要があ
る。あなたは、他のWin32アプリケーションのインストールにより、すでにWin32sを
持っているかもしれない。もしVimが正しく動いていないようであれば、最新バージョ
ン: 1.30c を入手するとよいだろう。最新バージョンはここで得られる:

	http://support.microsoft.com/download/support/mslfiles/pw1118.exe

(マイクロソフトはまたこれを移動した。もうどこにあるのか分からない)
ヽ(`Д´)ノ　ウワァァン

gvim.exeに2つのバージョンがあるのは、Win32sバージョンがVC++ 4.1でコンパイルさ
れているからである。これはWin32sプログラムをサポートするVC++の最新バージョンで
ある。VC++ 5.0はより良くなっているため、Win32バージョンにはこちらを使用してい
る。以上の点を除けば、2つのプログラムに違いはない。もし混在した環境にいるなら、
Win32s用のgvim.exeを両方で使うことができる。

Win32sバージョンは、95/NT上ではWin32バージョンと同じように動く。Win32s上では、
次の相違点がある:
- 長いファイル名が使用できない、Windows 3.1がサポートしていないためである！
- 外部コマンドを実行したとき、終了コードがリターンされない。":make" の後で、自
  分で ":cn" を行う必要がある。

==============================================================================
6. Win32 ミニ FAQ					*win32-faq*

Q. Windows 95上で、Win32バージョンのVimの画面更新が遅いのはなぜ？
A. Win32コンソールモードのアプリケーションのサポートは、Win95においては大変不
   安定である。何らかの未知の理由で、Vimが標準解像度(80x25、80x43、80x50)のひ
   とつで走っているとき画面更新が遅くなり、16ビットDOSバージョンの方がWin32
   バージョンよりもはるかに速く画面更新を行うことになる。しかし、画面をその他
   の解像度、例えば、":set columns=100" や ":set lines=40" など、に設定すると
   16ビットバージョンと同じくらいの速度で更新するようになる。

   警告: 'columns' の変更はウィンドウの更新中にWindows 95をクラッシュさせる可
   能性がある(不満があれば --> Microsoft)。これはたいていの場合は機能するので、
   無効にされていないが、'columns' を変更するときは注意すること。

   画面解像度の変更は更新を速くするが、また別の問題を生じる。画面が非標準の解
   像度に設定されているとき、特に 'columns' が80以外の値のとき、外部コマンド
   (例、":!dir") がVimをフリーズさせるというものである。Vimが外部コマンド実行
   前に、画面解像度を起動時の値に戻すというのは不可能であるため、'lines' や
   'columns' の値を変更するときは、細心の注意を払うように。実際のところ、
   'columns' の値が80以外である場合には、Vimは外部コマンドの実行を許可しない、
   その後でフリーズしやすいためである。

   以上のことは、Windows NT上では全く当てはまらない。画面更新は速く、'lines'
   や 'columns' がどのような値であろうと、外部コマンドの実行がVimをフリーズさ
   せることはない。

Q. Win32バージョンのWindows 95上での画面更新が遅くて、16ビットDOSバージョンの
   画面更新が速いのならば、どうしてWin32バージョンを使う理由があるだろうか？
A. 第一に、画面が 'lines' や 'columns' の非標準の値に設定されているときは、
   Win32 バージョンは遅くはない。第二に、16ビットDOSバージョンはいくつかの厳し
   い制限を受けることになる: 大きな変更ができないことと、長いファイル名に対応
   していないことである。Win32バージョンはこれらの制限を持たない上、総合的に速
   い (32ビットDJGPP DOSバージョンのVimにも同じことが言える)。Win32バージョン
   は32ビットDJGPP DOSバージョンよりも画面、マウス、キーボードの扱いが簡潔であ
   る。

Q. 16ビットDOSバージョンとNT上のWin32バージョンについては？
A. NT上で16ビットDOSバージョンを使うべき理由は存在しない。Win32バージョンは、
   NT上の16ビットバージョンと同じくらいの速さで画面を更新する。DOSバージョンに
   は上記の不利益がある。その上、DOSアプリケーションは起動に時間がかかり、また
   実行速度も遅い。非インテルのNTプラットホーム上では、DOSバージョンは到底使え
   ない程に遅い、これは80x86エミュレータ上で実行されているからである。

Q. フォントを変える方法は？
A. GUIバージョンでは、'guifont' オプションを使用すればよい。例: >
	:set guifont=Lucida_Console:h15:cDEFAULT
<  コンソールバージョンでは、コンソール自体のフォントを設定する必要がある。
   これはVimから行うことはできない。

Q. コンソールウィンドウのサイズを ':set lines=xx' などで変更したとき、フォント
   が変わってしまった！(Win95)
A. Vimの(もしくはMS-DOSプロンプトの)プロパティで、コンソールフォントを 'Auto'
   に設定している。これは(悪いことに！)Win95に最適なフォントを選ばせる。代わり
   にはっきりとフォントを指定すればよい。

Q. Windows 95上でVimへのペーストができないのだが？
A. MS-DOSウィンドウのプロパティダイアログボックスで、"MS-DOS プロンプト/その他
   /ファーストペースティング" がチェックされていないことを確認する。また、予期
   していない効果を避けるために、Vim内で ":set paste" を行うべきである。|'paste'|

Q. Windows 95上のコンソールバージョンでデッドキーを打つ方法は？
   (デッドキーとは、鋭アクセント、低アクセント、ウムラウトのようなアクセント
   キーのことで、キャラクタそのものとしては提供されないが、他のキーの後に続い
   て打たれて、a-acute、e-grave、u-umlaut、n-tildeなどのアクセントキャラクタを
   提供するものである。多くのヨーロッパ言語で非常に有用である。われわれの知る
   限り、英語キーボードのレイアウトではデッドキーは使われない。)
A. できない。Windows 95ではコンソールモードの入力ルーチンは正しく機能せず、そ
   れらを機能させることができたこともない。マイクロソフトの熟練した開発者の言
   葉によれば:
	Win95のコンソールサポートは、今まで常に、そしてこれからも怪しいものだ。

	我々はKEYB(これはデータを加工したがる; 国際化に重要である)のような
	MS-DOSキーボードのTSRsの世界と、Win32の世界の間に置かれているため、こ
	ういった怪しさは避けがたいものである。

	ゆえに、MS-DOSの世界に "存在" していない(デッドキーのような)キーは、
	Win32コンソールの世界では非常に希薄な存在となる。MS-DOSの世界とWin32コ
	ンソールの世界で、違った振舞いをする(capslockキーのような)キーは、怪し
	げな振舞いを見せるだろう。

	多言語キーボードのレイアウトに関する問題については、考えたくもない...

   ダイグラフメカニズムによって、このような種類の働きを作り出すことができるか
   もしれない。|digraphs|

   最もよい解決法は、Win32 GUIバージョンのgvim.exeを使うことである。その他に、
   デッドキーがうまく機能しているといわれている、DOSバージョンのVimのひとつを
   試してみるという方法もある。

Q. Windows NT上でデッドキーを打つ方法は？
A. デッドキーはNT 3.51上で機能する。単に、他のアプリケーションでやっているのと
   同じようにすればよい。
   NT 4.0では、標準のロケール(コントロールパネルのキーボードで設定する)が、現
   在アクティブなロケールと同じであることを確認する必要がある。そうしないと、
   NTのコードは混乱しクラッシュしてしまう！ これはNT 4.0の問題であり、本質的に
   Vimの問題ではない。

Q. VimでUnix NFSファイルサーバー上のシンボリックリンクファイルを編集している。
   ファイルを書込むとき、Vimはシンボリックリンクを "介して書込む" ことをしな
   い。代わりに、シンボリックリンクを削除し、その場所に新しいファイルを作成す
   る。これは何故か？
A. Unixでは、Vimはリンク(シンボリック、ハード)に対応している。オリジナルファイ
   ルのバックアップが作られ、そしてオリジナルファイルが上書きされる。これは
   ファイルの全てのプロパティが保たれることを保証する。非Unixシステムでは、オ
   リジナルファイルは改名され、新しいファイルが書込まれる。保護ビットのみがオ
   リジナルファイルと同じように設定される。しかし、これはリンクなどの機構の存
   在する、NFSマウントされたファイルシステムにおいて適切に動作しない。現在の
   バージョンにおいてこの問題を避ける唯一の方法は、
   ":set nobackup nowritebackup" によって、バックアップファイルを作らないこと
   である。|'writebackup'|

Q. Samba を通して Unix ファイルサーバー上のファイルを Vim で編集している。この
   ファイルを書き込むと、ファイルの所有者が変わってしまう。なぜか？
A. ファイルを書き込むとき、Vim は元のファイルをリネームし、それをバックアップ
   とする (ファイルの書き込みが途中で失敗した場合に備えるため)。そしてバッファ
   が新規ファイルとして書き込まれる。すると Samba はそのファイルに対してファイ
   ルシステムのデフォルト所有者を設定する。その結果、元の所有者と変わってしま
   う。これを避けるには、オプション 'backupcopy' を "yes" にすること。すると
   バックアップ用に元のファイルのコピーを作ってから、元のファイルを上書き保存
   するようになる。こうすればファイルの所有者は変わらない。

Q. ":make" の出力を実行中に見たい場合は？
A. 基本的には、入力(この場合はmakeの出力)を標準出力とエラーファイルの両方にコ
   ピーする、teeプログラムを使えばよい。tee(とその他多くのGNUツール)は、
   http://gnuwin32.sourceforge.net か http://unxutils.sourceforge.net
   から得られる。もしくは、最新のGNUツールのCygnusバージョン
   http://www.cygwin.com を使ってみてもよい。その他のWin32用のUnixコマンドはこ
   のサイトに列挙されている。
   http://directory.google.com/Top/Computers/Software/Operating_Systems/Unix/Win32/
   teeを手に入れたら、_vimrcに、以下のように設定する >
	set shellpipe=\|\ tee
<

Q. VisionFSが動いているリモートマシンにファイルを保存しておいたところ、それら
   が消えてしまった！
A. VisionFSは、ある種のドット(.)と3文字の拡張子のファイル名を扱えない。SCOによ
   れば、この振舞いは16ビットDOS/Windows環境との互換性のために必要とされるそう
   である。以下の2つのコマンドで、この振舞いを実演できる:
>
	echo Hello > file.bat~ 
	dir > file.bat
<
   この結果、"dir" コマンドは新しい "file.bat" というファイルを作成しないで、
   "file.bat~" を更新する。Vimにおいても、"foo.bat" という名前の既存のファイル
   を編集するときにこれと同じことが起こる、Vimの標準の機能では、'~' をファイル
   名の後に付け加えてテンポラリファイルを作成するからである。ファイルが書込ま
   れたとき、これは上書きされる羽目になる。

    解決法: _vimrcファイルに次のコマンドを加える: >
	set backupext=.temporary

Q. カーソルの点滅頻度を変更する方法は？
A. できない！ これはNTコンソールの制限である。NT 5.0では全てのコンソールウィン
   ドウに対して、同時に点滅頻度を設定できるようになるといわれている。

							*:!start*
Q. 非同期的に外部コマンドやプログラムを実行するにはどうしたらよいか？
A. :!を使って外部コマンドを実行している場合、"start" と共に実行できる: >
	:!start winfile.exe<CR>
<  "start" を使うと、Vimは他のスクリーンに切り替えたり、新しいコンソールを開い
   たり、プログラムが終了するまで待ったりしなくなる; つまり、走らせるプログラ
   ムは編集中のファイルに何の影響も与えない。:!startで始まったプログラムは、
   Vimの開いたファイルハンドルを受け渡されないため、Vimより早く終了する必要は
   ない。
   このような特別な動作を避けるには ":! start" を使う。
   利用可能な引数が二つある (次の Q 参照):
       /min  ウィンドウが最小化される。
       /b    コンソールウィンドウが表示されない。
   指定できるのはどちらか一方だけである。二番目の引数が start コマンドで実行さ
   れる。

Q. プログラムを非同期で実行したときにそのウィンドウを非表示にするには？
A. あなたの実際の目的に応じて二つの解決方法がある:
   1) /min フラグを使ってプログラムを最小化ウィンドウで実行する (他はそのま
      ま)。この方法はコンソールアプリケーションでも GUI アプリケーションでも使
      える。
   2) /b フラグを使って、コンソールウィンドウを作成せずにコンソールアプリケー
      ションを実行する (GUI アプリケーションに対しては効果なし)。このフラグ
      は、実行するアプリケーションが入力を必要としないことがわかっている場合の
      み使うこと。その入力ストリーム (stdin) は \\.\NUL にリダイレクトされるの
      で (stdout と stderr も同じ)、入力が使われる場合は EOF エラーが発生する
      だろう。

   コンソールアプリケーションの例。Exuberant ctags を実行する: >
        :!start /min ctags -R .
<  実行が完了すると "tags" ファイルがカレントディレクトリに作成される。タスク
   バーでウィンドウタイトルが点滅するのに気づくだろう。時間が掛かるコマンドな
   らはっきりと見える。
   では、"tags" ファイルを削除して次のコマンドを実行する: >
        :!start /b ctags -R .
<  先程と同じ "tags" ファイルが作成されるが、今回はタスクバーは点滅しない。
   GUI アプリケーションの例: >
        :!start /min notepad
        :!start /b notepad
<  最初のコマンドは notepad を最小化状態で実行する。二番目のものは notepad を
   普通に実行する。

Q. Win32sを使っていて、"make" のような外部コマンドを実行すると、Vimはそれが終
   わるまでまってくれない！ どうしたよいだろう！
A. この問題は、32ビットアプリケーション(Vim)が、16ビットアプリケーション(DOSの
   セッション)が終わったという知らせを、Windowsから受け取ることができないとい
   うことである。Vimはこのための働きも含んでいるが、それにはDOSコマンドをフル
   スクリーンではなく、ウィンドウ内で実行するように設定しなければならない。不
   運にも、Windowsをインストールしたデフォルトではフルスクリーンである。これを
   変更するには:
   1) PIFエディタを実行。(メインプログラムグループから)
   2) Windowsディレクトリの "_DEFAULT.PIF" ファイルを開く。
   3) ディスプレイオプションを "Full Screen" から "Windowed" に変更。
   4) 保存して終了。

   確かめるには、Vimを実行して次のように打つ >
	":!dir C:\<CR>"
<  ディレクトリの一覧と共に、DOSボックスが短い間表示されるのが見えるはずだ。

Q. Win32sとNTでVimを使っている。NTでは、コンソールをデフォルトから50行に変える
   ことができ、':sh' で80x50のシェルを実行することができる。W3.1xでも同じこと
   ができるか、あるいは80x25のままでいるしかないか？
A. SYSTEM.INIを編集し、 [NonWindowsApp]のセクションに 'ScreenLines=50' を付け
   加える。DOSプロンプトと外部DOSコマンドは50行のウィンドウで実行される。

 vim:tw=78:fo=tcq2:ts=8:ft=help:norl:
