*os_win32.txt*  For Vim バージョン 9.0.  Last change: 2022 May 24


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


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

Win32 版の Vim は Windows XP, Vista, 7, 8, 10, 11 で実行可能である。コンソール
版と GUI 版がある。

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

1. 知られている問題点		|win32-problems|
2. Vimの起動			|win32-startup|
3. スクリーン内容の復帰		|win32-restore|
4. マウスの使用			|win32-mouse|
5. Windows 95での使用		|win32-win95|
6. Windows 3.1での使用		|win32-win3.1|
7. インストールパッケージ	|win32-installer|
8. 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|
PowerShell のデフォルト		|dos-powershell|

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*

							*WSL*
WSL(Windows Subsystem for Linux) 上で Vim を使用する場合、ここでの説明は適用さ
れず、`has('win32')` は偽を返す。WSL 上で Vim が 実行されているかどうかを知る
必要がある場合は、`exists('$WSLENV')` を使用する。

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

ファイル名補完を行っているとき、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 を返すときは実際にその実行ファイルが実行可能であるように
なる。

コマンドライン引数					*win32-cmdargs*

コマンドラインからパラメーターへの解析は MS-Windows で標準化されていない。
Vim と gvim はかつては(7.4.432以前)、それをパースするために異なるロジックを用
いており、さらにどのコンパイラでコンパイルしたかにも依存していた。現在では Vim
も gvim も CommandLineToArgvW() Win32 API を使用しており、どちらも同じように動
作する。

基本的なルール:						*win32-backslashes*
      a) パラメーターは表示可能文字である
      b) パラメーターはスペースで区切られている
      c) ダブルクォートで囲めばパラメーターにスペースを含むことができる
      d) バックスラッシュ(\)が一つ以上の後に続くダブルクォート(")は特別な文
	字である。バックスラッシュの数を半分に割って小数を切捨てた数に意味が
	ある。奇数ならバックスラッシュはスペースやタブの効果を変える。偶数な
	らバックスラッシュはリテラルのダブルクォートを作る。

つまり:
	"	は特別なダブルクォート
	\"	はリテラルのダブルクォート
	\\"	はリテラルのバックスラッシュと特別なダブルクォート
	\\\"	はリテラルのバックスラッシュとリテラルのダブルクォート
	\\\\"	はリテラルのバックスラッシュ二つと特別なダブルクォート
	\\\\\"	はリテラルのバックスラッシュ二つとリテラルのダブルクォート
	etc.

例: >
	gvim "C:\My Music\freude" +"set ignorecase" +/"\"foo\\" +\"bar\\\"

は "C:\My Music\freude" を開き、次のコマンドを実行する: >
	set ignorecase; /"foo\ and /bar\"

これらのルールは CommandLineToArgvW API のリファレンスにも記載されている:
    https://msdn.microsoft.com/en-us/library/windows/desktop/bb776391.aspx

							*win32-quotes*
クォートには追加のルールがある(これらはちゃんとドキュメント化されていない)。
前述の通り、ファイル名(もしくは他のコマンドライン引数)の中のクォートはバックス
ラッシュでエスケープできる。例。 >
	vim -c "echo 'foo\"bar'"

その代わりにクォートを3つ使う事もできる: >
	vim -c "echo 'foo"""bar'"

クォートのルールは:

1. 一つの `"` はクォートの始まり。
2. 他の `"` や `""` はクォートの終わり。もしクォートが `""` で終わっているなら
   クォートされた文字列の終わりに `"` が生成される。

例えば、引数を1つずつ [] で囲った場合:
        "foo"           -> [foo]
        "foo""          -> [foo"]
        "foo"bar        -> [foobar]
        "foo" bar       -> [foo], [bar]
        "foo""bar       -> [foo"bar]
        "foo"" bar      -> [foo"], [bar]
        "foo"""bar"     -> [foo"bar]


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

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

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

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

マウスが機能しない場合には、コンソールの "簡易編集モード" プロパティを無効にし
てみよ。

==============================================================================
5. Windows 95での使用					*win32-win95*
					*windows95* *windows98* *windowsme*
Windows 95/98/ME のサポートはパッチ 8.0.0029 にて削除された。これを使いたいと
きは、これよりも古いバージョンを入手する必要がある。

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

				*win32s* *windows-3.1* *gui-w32s* *win16*
かつて Windows 3.1 や 3.11 上で動作する gvim の特別なバージョンがあった。
パッチ 7.4.1364 にてサポートは削除された。

==============================================================================
7. インストールパッケージ				*win32-installer*

Windows版のシンプルなインストーラは http://www.vim.org/download.php (安定バー
ジョン)にあり、ナイトリービルドも
https://github.com/vim/vim-win32-installer/releases/ にある。

ナイトリービルドには32bitと64bitのビルドが含まれ、ほとんどの機能が有効になって
おり通常は追加の暗号化署名されたインストーラなので、Windowsから問題報告される
ことはない。

インストーラを利用するには、単純にexeファイルを実行する。以下のスイッチもサポー
トされる: >

    gvim_<version>.exe /S           -> ダイアログなしのサイレントインストール
    gvim_<version>.exe /D=C:\vim    -> c:\vim ディレクトリへのインストール
                                    -> /D は最後の引数でなくてはいけない
    gvim_<version>.exe /S /D=c:\vim -> c:\vim へのサイレントインストール
<
$VIM 環境変数を設定することでもデフォルトのインストールディレクトリを指定する
ことができる。

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

Q. フォントを変える方法は？
A. GUIバージョンでは、'guifont' オプションを使用すればよい。例: >
	:set guifont=Lucida_Console:h15:cDEFAULT
<  コンソールバージョンでは、コンソール自体のフォントを設定する必要がある。
   これは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. 非同期的に外部コマンドやプログラムを実行したり、ドキュメントや URL を既定の
   プログラムで開くにはどうしたらよいか？
A. :!を使って外部コマンドを実行している場合、"start" と共に実行できる。例えば
   notepad を起動するには: >
	:!start notepad
<   既定のイメージビューワーで "image.jpg" を開くには: >
        :!start image.jpg
<   現在のファイルのフォルダーを Windows エクスプローラーで開くには: >
        :!start %:h
<   既定のブラウザーで Vim のホームページを開くには: >
        :!start http://www.vim.org/
<
   "start" を使うと、Vimは他のスクリーンに切り替えたり、新しいコンソールを開い
   たり、プログラムが終了するまで待ったりしなくなる; つまり、走らせるプログラ
   ムは編集中のファイルに何の影響も与えない。:!startで始まったプログラムは、
   Vimの開いたファイルハンドルを受け渡されないため、Vimより早く終了する必要は
   ない。
   このような特別な動作を避けるには ":! start" を使う。
   利用可能な引数が二つある (次の Q 参照):
       /min  ウィンドウが最小化される。
       /b    コンソールウィンドウが表示されない。
   指定できるのはどちらか一方だけである。二番目の引数が start コマンドで実行さ
   れる。
						*windows-asynchronously*
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 を
   普通に実行する。

						*windows-icon*
Q. Vimのアイコンが好きではないのだが、変えられるだろうか？
A. はい、'runtimepath' のディレクトリの中の bitmaps/vim.ico に好きなアイコンを
   置くとよい。例: ~/vimfiles/bitmaps/vim.ico


 vim:tw=78:ts=8:noet:ft=help:norl:
