*os_win32.txt* For
Vim バージョン 7.3. Last change: 2011 Aug 14
VIM REFERENCE MANUAL 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はエクスプロー
ラから起動されたと仮定してそのファイルのあるディレクトリをカレントディレクトリ
にします。そうならないようにするにはファイルのパスにバックスラッシュ(\)の代わ
りにスラッシュ(/)をを使ってください。
これはカレントディレクトリを"C:\text\files"に変更します。
こうすればカレントディレクトリを変更しません。
端末オプション
*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'オプションを使用すればよい。例:
コンソールバージョンでは、コンソール自体のフォントを設定する必要がある。
これは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メカニズムによって、このような種類の働きを作り出すことができるかも
しれない。
|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に、以下のように設定する
Q. VisionFSが動いているリモートマシンにファイルを保存しておいたところ、それら
が消えてしまった!
A. VisionFSは、ある種のドット(.)と3文字の拡張子のファイル名を扱えない。SCOによ
れば、この振舞いは16ビットDOS/Windows環境との互換性のために必要とされるそう
である。以下の2つのコマンドで、この振舞いを実演できる:
この結果、"dir"コマンドは新しい"file.bat"というファイルを作成しないで、
"file.bat~"を更新する。Vimにおいても、"foo.bat"という名前の既存のファイルを
編集するときにこれと同じことが起こる、Vimの標準の機能では、'~'をファイル名
の後に付け加えてテンポラリファイルを作成するからである。ファイルが書込まれ
たとき、これは上書きされる羽目になる。
解決法: _vimrcファイルに次のコマンドを加える:
Q. カーソルの点滅頻度を変更する方法は?
A. できない! これはNTコンソールの制限である。NT 5.0では全てのコンソールウィン
ドウに対して、同時に点滅頻度を設定できるようになるといわれている。
*:!start*
Q. 非同期的に外部コマンドやプログラムを実行するにはどうしたらよいか?
A. :!を使って外部コマンドを実行している場合、"start"と共に実行できる:
"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 を実行する:
実行が完了すると "tags" ファイルがカレントディレクトリに作成されます。タス
クバーでウィンドウタイトルが点滅するのに気づくでしょう。時間が掛かるコマン
ドならはっきりと見えます。
では、"tags" ファイルを削除して次のコマンドを実行します:
先程と同じ "tags" ファイルが作成されますが、今回はタスクバーは点滅しませ
ん。
GUI アプリケーションの例:
最初のコマンドは 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を実行して次のように打つ
ディレクトリの一覧と共に、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: