*os_win32.txt* For Vim バージョン 8.1. Last change: 2017 Mar 21 VIMリファレンスマニュアル by George Reilly
このファイルは Vim Win32 バージョンに特有の事柄についての文書である。
Win32 版の Vim は Windows XP, Vista, 7, 8, 10 で實行可能である。コンソール版と 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 ミニ 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" を參照。
ファイル名補完を行つてゐるとき、Vim は短いファイル名への一致も見つける。しかし、それでも Vim は長いファイル名への一致を見つけ、採用する。例へば、もしあなたが短いファイル名 "this_i~1" を持つ、長いファイル名のファイル "this_is_a_test" を持つてゐるなら、コマンド ":e *1" は "this_is_a_test" の編輯を始める。
Vim にフルパスのファイル名 ("x:\" の形で始まる) を指定したとき、Vim はエクスプローラーから起動されたと假定してそのファイルのあるディレクトリをカレントディレクトリにする。さうならないやうにするにはファイルのパスにバックスラッシュ (\) の代はりにスラッシュ (/) を使ふこと。 例:
vim c:\text\files\foo.txt
これはカレントディレクトリを "C:\text\files" に變更する。
vim c:/text\files\foo.txt
かうすればカレントディレクトリを變更しない。
Win32 バージョンの Vim が認識できる唯一の端末の種類は "win32" であり、これは組み込みである。’term’ に他の何かを設定すると、Vim はたぶんとても奇妙な振る舞ひを見せることだらう。それゆゑ、Vim は ’term’ のデフォルト値を環境變數 "TERM" から取得しない。
Vim 實行ファイルのディレクトリが $PATH に追加される。これは主に「ツール」メニューにある "!xxd" が動作するやうにするためである。また、これにより executable() が 1 を返すときは實際にその實行ファイルが實行可能であるやうになる。
コマンドラインからパラメーターへの解析は MS Windows で標準化されてゐない。Vim と gvim はかつては (7.4.432 以前)、それをパースするために異なるロジックを用ゐてをり、さらにどのコンパイラでコンパイルしたかにも依存してゐた。現在では Vim も gvim も CommandLineToArgvW() Win32 API を使用してをり、どちらも同じやうに動作する。
a) | パラメーターは表示可能文字である |
b) | パラメーターはスペースで區切られてゐる |
c) | ダブルクォートで圍めばパラメーターにスペースを含むことができる |
d) | バックスラッシュ (\) が 1 つ以上の後に續くダブルクォート (") は特別な文字である。バックスラッシュの數を半分に割つて小數を切捨てた數に意味がある。奇數ならバックスラッシュはスペースやタブの效果を變へる。偶數ならバックスラッシュはリテラルのダブルクォートを作る。 |
つまり:
" | は特別なダブルクォート |
\" | はリテラルのダブルクォート |
\\" | はリテラルのバックスラッシュと特別なダブルクォート |
\\\" | はリテラルのバックスラッシュとリテラルのダブルクォート |
\\\\" | はリテラルのバックスラッシュ二つと特別なダブルクォート |
\\\\\" | はリテラルのバックスラッシュ二つとリテラルのダブルクォート |
など。
例:
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
クォートには追加のルールがある (これらはちやんとドキュメント化されてゐない)。前述の通り、ファイル名 (もしくは他のコマンドライン引數) の中のクォートはバックスラッシュでエスケープできる。例。
vim -c "echo 'foo\"bar'"
その代はりにクォートを3つ使ふ事もできる:
vim -c "echo 'foo"""bar'"
例へば、引數を1つずつ [] で圍つた場合:
"foo" -> [foo] "foo"" -> [foo"] "foo"bar -> [foobar] "foo" bar -> [foo], [bar] "foo""bar -> [foo"bar] "foo"" bar -> [foo"], [bar] "foo"""bar" -> [foo"bar]
’restorescreen’ がセットされてゐるとき (これはデフォルト)、終了時、または外部コマンド實行時、Vim はコンソールの元の內容を復歸する。これを行ひたくない場合は、":set nors
" を使ふとよい。|'restorescreen'|
Win32 バージョンの Vim はマウスの使用をサポートする。2 ボタンマウスを使用してゐる場合、中ボタンは左と右の兩方のボタンを同時に押すことによつてエミュレートできる - しかし、Win32 GUI で右ボタンクリックによるポップアップメニューを有效にしてゐると (’mouse’ を參照)、左ボタンを先にクリックした際、エラーが發生する。|mouse-using|
マウスが機能しない場合には、コンソールの "簡易編輯モード" プロパティを無效にしてみよ。
Windows 95/98/ME のサポートはパッチ 8.0.0029 にて削除された。これを使ひたいときは、これよりも古いバージョンを入手する必要がある。
かつて Windows 3.1 や 3.11 上で動作する gvim の特別なバージョンがあつた。パッチ 7.4.1363 にてサポートは削除された。
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 では全てのコンソールウィンドウに對して、同時に點滅頻度を設定できるやうになるといはれてゐる。
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" を使ふ。
利用可能な引數が 2 つある (次の Q 參照):
/min | ウィンドウが最小化される。 |
/b | コンソールウィンドウが表示されない。 |
指定できるのはどちらか一方だけである。2 番目の引數が start コマンドで實行される。
Q. プログラムを非同期で實行したときにそのウィンドウを非表示にするには?
A. あなたの實際の目的に應じて 2 つの解決方法がある:
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 を最小化狀態で實行する。2 番目のものは notepad を普通に實行する。
Q. Vim のアイコンが好きではないのだが、變へられるだらうか?
A. はい、’runtimepath’ のディレクトリの中の bitmaps/vim.ico に好きなアイコンを置くとよい。例: ~/vimfiles/bitmaps/vim.ico