*tsuquyomi* はTypeScript向けのVim plugin です.

Version: 0.5.1
Author : Quramy <yosuke.kurami@gmail.com>
License: MIT license  {{{
    Permission is hereby granted, free of charge, to any person obtaining
    a copy of this software and associated documentation files (the
    "Software"), to deal in the Software without restriction, including
    without limitation the rights to use, copy, modify, merge, publish,
    distribute, sublicense, and/or sell copies of the Software, and to
    permit persons to whom the Software is furnished to do so, subject to
    the following conditions:
    The above copyright notice and this permission notice shall be included
    in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
}}}

目次 						*tsuquyomi-contents*

概要			|tsuquyomi-introduction|
インストール		|tsuquyomi-install|
インターフェイス	|tsuquyomi-interface|
  コマンド 		  |tsuquyomi-commands|
  オプション 		  |tsuquyomi-variables|
  キーマッピング	  |tsuquyomi-key-mappings|
  関数			  |tsuquyomi-functions|
設定例			|tsuquyomi-examples|

==============================================================================
概要 						*tsuquyomi-introduction*

tsuquyomi は TSServer のclient として動作します
(TSServerはTypeScriptにバンドルされているエディタ向けツールです).

tsuquyomi は以下の機能を提供します.

+ TSServer からソースコードが持つ情報を参照します.
  (補完, 定義/参照箇所, エラー, etc...)

+ TSServerの起動や停止を行う機能

==============================================================================
インストール 						*tsuquyomi-install*

tsuquyomiのインストールには下記が必要です.
* Vim (v.7.4.0 or later)
* Shougo/vimproc.vim (https://github.com/Shougo/vimproc.vim)
  (vim8 もしくはそれ以降をお使いならば必要ありません)
* Node.js and TypeScript (v.1.5.0 or later)

最初に, |vimproc|が未インストールであれば, インストールしてください.
(インストール方法は https://github.com/Shougo/vimproc.vim を参考にしてください)

次に,  最新の TypeScript をインストールします.

Prompt:
>
    	$ npm -g install typescript
<
最後に, tsuquyomiをVim plugin用のディレクトリに配置します.
もし |NeoBundle| でプラグイン管理をしているのであれば,
`.vimrc` に以下を追記します
>
	NeoBundle 'Shougo/vimproc.vim', {
	\ 'build' : {
	\     'windows' : 'tools\\update-dll-mingw',
	\     'cygwin' : 'make -f make_cygwin.mak',
	\     'mac' : 'make -f make_mac.mak',
	\     'linux' : 'make',
	\     'unix' : 'gmake',
	\    },
	\ }

	NeoBundle 'Quramy/tsuquyomi'
>
|:NeoBundleInstall| を実行し,  プラグインをインストールしてください.

また, tsuquyomi は|unite-outline|の拡張機能を提供します.
|unite| と |unite-outline| がインストールされていれば, |:Unite outline| を実行
することでカレントバッファをOutline 表示できます.

==============================================================================
インターフェイス 				*tsuquyomi-interface*

------------------------------------------------------------------------------
コマンド 					*tsuquyomi-commands*

						*:TsuquyomiStartServer*
						*:TsuStartServer*
:TsuquyomiStartServer
		TSServerのプロセスを起動します.
		すでにプロセスが起動している場合は何もしません.

						*:TsuquyomiStopServer*
						*:TsuStopServer*
:TsuquyomiStopServer
		TSServerのプロセスが存在する場合, 停止させます.

						*:TsuquyomiStatusServer*
						*:TsuStatusServer*
:TsuquyomiStatusServer
		TSServerの起動状態を表示します.
		TSServerが起動している場合, "reading" のメッセージが
		表示されます.

						*:TsuquyomiOpen*
						*:TsuOpen*
:TsuquyomiOpen [{file} ...]
		TSServerで{file}を開きます.
		TSServerでファイルを開くと, ファイルに対する様々な処理が
		行えるようになります.
		引数{file}を省略すると, TSServerはカレントバッファのファイルを
		開きます.
		デフォルトでは, |g:tsuquyomi_auto_open| が有効化されています.
		このため, 通常は明示的にこのコマンドを実行する必要は
		ありません.

						*:TsuquyomiClose*
						*:TsuClose*
:TsuquyomiClose [{file} ...]
		既に開いている{file}をTSServer上でクローズします.
		引数{file}を省略すると, TSServerはカレントバッファに紐づいた
		ファイルをクローズします.

						*:TsuquyomiReload*
						*:TsuReload*
:TsuquyomiReload [{file} ...]
		TSServerに{file}をリロードさせます.
		引数{file}を省略すると, TSServerにカレントバッファを
		リロードさせます.

						*:TsuquyomiDump*
						*:TsuDump*
:TsuquyomiDump [{file} ...]
		TSServerのバッファをファイルに保存します.
		デバッグのために利用します.
		引数{file}を省略すると, カレントバッファに紐づくファイルを
		ダンプします.
		Note: ダンプされるファイル名は下記となります:
		      `オリジナルファイル名` + `'.dump'`.

						*:TsuquyomiDefinition*
						*:TsuDefinition*
:TsuquyomiDefinition
		シンボルが定義された場所へ遷移させます.

						*:TsuquyomiSplitDefinition*
						*:TsuSplitDefinition*
:TsuquyomiSplitDefinition
                現在のウィンドウを2つに分割し、片方にシンボルが定義された
		場所を表示します.

						*:TsuquyomiTypeDefinition*
						*:TsuTypeDefinition*
:TsuquyomiTypeDefinition
		シンボルの型が定義されている場所へ遷移させます.

						*:TsuquyomiGoBack*
						*:TsuGoBack*
:TsuquyomiGoBack
		最後に|:TsuquyomiDefinition|, |:TsuTypeDefinition|
		を実行した箇所へカーソルを移動させます.

						*:TsuquyomiImplementation*
						*:TsuImplementation*
:TsuquyomiImplementation
		interfaceの実装箇所へナビゲートします.
		参照箇所の結果は|location-list|に表示されます.

						*:TsuquyomiReferences*
						*:TsuReferences*
:TsuquyomiReferences
		シンボルを参照している箇所へナビゲートします.
		参照箇所の結果は|location-list|に表示されます.

						*:TsuquyomiRenameSymbol*
						*:TsuRenameSymbol*
:TsuquyomiRenameSymbol
		カーソル直下の識別子を別名に変更します.
		対象の識別子が別の.tsファイルから参照されている場合,
		このコマンドを実行するより前に対象ファイルをバッファに
		開いておく必要があります.

						*:TsuquyomiRenameSymbolC*
						*:TsuRenameSymbolC*
:TsuquyomiRenameSymbolC
		カーソル直下の識別子を別名に変更します.
		コメントに含まれている識別子も含めて変更されます.

						*:TsuquyomiReloadProject*
						*:TsuReloadProject*
:TsuquyomiReloadProject
		TSServerで開かれている全てのファイルを一度閉じ,
		再度開きます.
		`*.ts`をバッファに開いた後に, `tsconfig.json` を編集した場合,
		このコマンドを実行する必要があります.
		このコマンドを実行すると, `tsconfig.json` の変更が
		TSServerに反映されます.

						*:TsuquyomiGeterr*
						*:TsuGeterr*
:TsuquyomiGeterr
		カレントバッファのコンパイルエラー情報をQuickFixウィンドウへ
		表示します.

						*:TsuquyomiGeterrProject*
						*:TsuGeterrProject*
:TsuquyomiGeterrProject
		プロジェクトのコンパイルエラー情報全てをQuickFixウィンドウへ
		表示します.
		このコマンドにはTypeScript@v1.6.0以上が必要です.

						*:TsuquyomiAsyncGeterr*
						*:TsuAsyncGeterr*
:TsuquyomiAsyncGeterr
		カレントバッファのコンパイルエラー情報を非同期で
		QuickFixウィンドウへ表示します.

						*:TsuquyomiSeaarch*
						*:TsuSearch*
:TsuquyomiSearch {keyword}
		プロジェクトで {keyword} を含んでいる箇所を検索します.

						*:TsuquyomiQuickFix*
						*:TsuQuickFix*
:TsuquyomiQuickFix
		カーソル配下にエラーが存在し、且つ適用可能なQuickFixが
		存在する場合に、このQuickFixを適用します.
		このコマンドにはTypeScript@v2.1.0以上が必要です.

						*:TsuquyomiSignatureHelp*
						*:TsuSignatureHelp*
:TsuquyomiSignatureHelp
		カーソル上のメソッドのシグネチャを、プレビューウィンドウへ表示
		します。もし複数のオーバーロードされた候補が存在する場合は、
		それらをドキュメントと共に表示します。
		Note
		カーソルはメソッド呼び出しのカッコの間にあるか、少なくとも書き
		かけのメソッド呼び出しの開きカッコの後になければいけません。

------------------------------------------------------------------------------
オプション						*tsuquyomi-variables*

						*g:tsuquyomi_auto_open*
g:tsuquyomi_auto_open		(デフォルト値 1)
		Vimでバッファを開く際にTSServerでそのファイルを開くかどうか.
		この値を0とした場合, バッファを開いた後に|:TsuquyomiOpen|
		コマンドを実行すると必要があります.

					*g:tsuquyomi_use_local_typescript*
g:tsuquyomi_use_local_typescript (default 1)
		プロジェクト用にローカルインストールした`tsserver.js` を
		利用するかどうか.
		* 0: tsuquyomiは `tsserver.js`の探索を行いません.
		* 1: tsuquyomiはカレントディレクトリを起点にプロジェクトの
		     ルートディレクトリ(`package.json`を含むディレクトリ)を
		     探索します. 次にプロジェクトルートから
		     `node_modules/typescript/bin/tsserver.js`
                     を探索します. 見つからない場合は,
		     |g:tsuquyomi_use_dev_node_module| に従って`tsserver.js`の
		     パスを決定します.

					*g:tsuquyomi_use_dev_node_module*
g:tsuquyomi_use_dev_node_module	(デフォルト値 0)
		手動でインストールした`tsserver.js` を利用するかどうか.
		* 0: tsuquyomi はグローバルインストールされた
		     `tsserver` コマンドを利用します(デフォルト).
		* 1: tsuquyomiは
		     `tsuquyomi/node_modules/typescript/bin/tsserver.js` .
		     を利用します.
		     このモードを利用する場合,  下記を実行してください:
>
		     :cd ~/.vim/bundle/tsuquyomi
		     :!npm install
<
		* 2: tsuquyomiは|g:tsuquyomi_tsserver_path| で指定された
		     `tsserver.js` を利用します.

						*g:tsuquyomi_tsserver_path*
g:tsuquyomi_tsserver_path	(デフォルト値 `''`)
		|g:tsuquyomi_use_dev_node_module|を`2`とした場合,
		このオプションで`tsserver.js`のパスを設定する必要があります.
		設定例:
>
		let g:tsuquyomi_use_dev_node_module = 2
		let g:tsuquyomi_tsserver_path =
		\ '~/typescript/built/local/tsserver.js'
<

						*g:tsuquyomi_nodejs_path*
g:tsuquyomi_nodejs_path		(デフォルト値 "node")
		Node.js の実行パス.

						*g:tsuquyomi_definition_split*
g:tsuquyomi_definition_split	(デフォルト値 0)
		|:TsuquyomiDefinition| にて別ファイル定義への遷移時,
		ウィンドウをどのように開くか.
		* 0: |:edit|
		* 1: |:split|
		* 2: |:vsplit|
		* 3: |:tabedit|

					*g:tsuquyomi_completion_detail*
g:tsuquyomi_completion_detail		(デフォルト値 0)
		|tsuquyomi#complete|実行時に詳細な補完メニューを作成するかどうか.
		このオプションは 'completeopt' に "menu" が含まれるときにのみ
		意味を持つ.
		NOTE: このオプションを1に設定した場合, 補完速度は遅くなる

					*g:tsuquyomi_completion_case_sensitive*
g:tsuquyomi_completion_case_sensitive	(デフォルト値 0)
		|tsuquyomi#complete|実行時に補完候補をcase-sensitiveに
		探索するかどうか.

					*g:tsuquyomi_case_sensitive_imports*
g:tsuquyomi_case_sensitive_imports	(default 0)
		|tsuquyomi#es6import#complete|実行時に補完候補をcase-sensitive
		に探索するかどうか.

					*g:tsuquyomi_completion_preview*
g:tsuquyomi_completion_preview		(デフォルト値 0)
		|tsuquyomi#complete|実行時にシグネチャの情報をプレビューに表示
		するかどうか.
		このオプションは 'completeopt' に "menu" と "preview" が含まれ
		るときにのみ意味を持つ.
		NOTE: このオプションを1に設定した場合, 補完速度は少し遅くなる

						*g:tsuquyomi_disable_default_mappings*
g:tsuquyomi_disable_default_mappings	(デフォルト値 0)
		デフォルトキーマッピングを適用するかどうか.

						*g:tsuquyomi_disable_quickfix*
g:tsuquyomi_disable_quickfix	(デフォルト値 0)
		値をセットするとバッファ保存時に |:TsuquyomiGeterr| が
		実行されなくなる.

						*g:tsuquyomi_save_onrename*
g:tsuquyomi_save_onrename	(デフォルト値 0)
		値をセットすると |:TsuquyomiRenameSymbol| の実行時に書き換え
		られたファイルが自動で保存される.
		値がセットされていない場合は, 書き換えられたファイルを|:split|
		で表示すため, ユーザは変更箇所を確認してから, ファイルを
		|:wa| 等で保存すればよい.

						*g:tsuquyomi_single_quote_import*
g:tsuquyomi_single_quote_import		(デフォルト値 0)
		値をセットすると、|:TsuquyomiImport| 利用時にダブルクォートで
		はなくシングルクォートを使って import blockが生成される.

g:tsuquyomi_semicolon_import		(default 1)
		値をセットすると、|:TsuquyomiImport| 利用時に行末にセミコロン
		を追加して import blockが生成される.

						*g:tsuquyomi_baseurl_import_path*
g:tsuquyomi_baseurl_import_path		(default 0)
		値をセットすると、|:TsuquyomiImport|が tsconfig.jsonで指定され
		た`baseUrl`からの相対パスをモジュールのパスとして使用するよう
		になる.

						*g:tsuquyomi_javascript_support*
g:tsuquyomi_javascript_support	(デフォルト値 0)
		値をセットすると、JavaScriptファイルに対しても動作するようになる
		tsconfig.jsonやjsconfig.jsonによる詳細設定が可能。

						*g:tsuquyomi_ignore_missing_modules*
g:tsuquyomi_ignore_missing_modules (デフォルト値 0)
		値をセットすると、"Cannot find module"で始まる
		エラーメッセージを無視するようになる。
		import対象の型定義ファイルが存在していないケースで有用。

						*g:tsuquyomi_use_vimproc*
g:tsuquyomi_use_vimproc (default 0)
		値をセットすると、Vim8のjob機能の代わりに |vimproc| を使用する.

						*g:tsuquyomi_locale*
g:tsuquyomi_locale (デフォルト値 "en")
		エラーメッセージのLCID。

------------------------------------------------------------------------------
キーマッピング					*tsuquyomi-key-mappings*

ノーマルモードのキーマッピング:

						*<Plug>(TsuquyomiDefinition)*
<Plug>(TsuquyomiDefinition)
		カーソル直下のシンボルが定義された箇所へ遷移.
		|:TsuquyomiDefinition|を参照のこと.

						*<Plug>(TsuquyomiSplitDefinition)*
<Plug>(TsuquyomiSplitDefinition)
		カーソル直下のシンボルが定義された箇所へ遷移.
		|:TsuquyomiSplitDefinition|を参照のこと.

					*<Plug>(TsuquyomiTypeDefinition)*
<Plug>(TsuquyomiTypeDefinition)
		カーソル直下のシンボルの型定義箇所へ遷移.
		|:TsuquyomiTypeDefinition|を参照のこと.

						*<Plug>(TsuquyomiGoBack)*
<Plug>(TsuquyomiGoBack)
		|:TsuquyomiGoBack|を参照のこと.

						*<Plug>(TsuquyomiImplementation)*
<Plug>(TsuquyomiImplementation)
		カーソル直下のinerfaceが実装されている場所の一覧を表示.
		|:TsuquyomiImplementation|を参照のこと.


						*<Plug>(TsuquyomiReferences)*
<Plug>(TsuquyomiReferences)
		カーソル直下のシンボルが参照されている場所の一覧を表示.
		|:TsuquyomiReferences| を参照のこと.

					*<Plug>(TsuquyomiRenameSymbol)*
<Plug>(TsuquyomiRenameSymbol)
		カーソル直下のシンボルを別名に変更する.
		|:TsuquyomiRenameSymbol|を参照のこと.

					*<Plug>(TsuquyomiRenameSymbolC)*
<Plug>(TsuquyomiRenameSymbolC)
		カーソル直下のシンボルをコメントも含めて別名に変更する.
		|:TsuquyomiRenameSymbolC|を参照のこと.

						*<Plug>(TsuquyomiQuickFix)*
<Plug>(TsuquyomiQuickFix)
		カーソル直下でQuickFixが適用可能な場合に、これを適用する.
		|:TsuquyomiQuickFix|を参照のこと.

						*<Plug>(TsuquyomiImport)*
<Plug>(TsuquyomiImport)
		カーソル直下のシンボルに対応するES6 import文を生成する.
		|:TsuquyomiImport|を参照のこと.

						*<Plug>(TsuquyomiSignatureHelp)*
<Plug>(TsuquyomiSignatureHelp)
		カーソル下のメソッド引数のシグネチャを表示.
		|:TsuquyomiSignatureHelp|を参照のこと.

デフォルトキーマップは下記の通り:

ノーマルモード:
{lhs}			{rhs}
--------		-----------------------------
<C-]>			<Plug>(TsuquyomiDefinition)
<C-W>]			<Plug>(TsuquyomiSplitDefinition)
<C-t>			<Plug>(TsuquyomiGoBack)
<C-^>			<Plug>(TsuquyomiReferences)

------------------------------------------------------------------------------
関数 							*tsuquyomi-functions*

tsuquyomi#complete					*tsuquyomi#complete*
		'completefunc' や 'omnifunc' オプションに適用可能な関数.
		デフォルトでは, 'omnifunc' オプションにこの関数をセットしてい
		る補完の挙動をカスタマイズする場合,
		|tsuquyomi-examples-complete| を参照の事.

tsuquyomi#balloonexpr	 			*tsuquyomi#balloonexpr*
		マウスカーソル直下のシンボルについて, ツールチップにシンボルの
		情報を表示させる.  'balloonexpr' にセットして利用する.
		設定例:
>
		set ballooneval
		autocmd BufNewFile,BufRead *.ts
		\ setlocal balloonexpr=tsuquyomi#balloonexpr()
<
		Note: この関数はVimが|+balloon_eval| オプション付きでコンパイル
		      されている場合のみ利用可能である.

tsuquyomi#hint					*tsuquyomi#hint*
		カーソル上のシンボルの情報を返却する. |tsuquyomi#balloonexpr|
		と似ているが, この関数はGVim, 端末上のVimのどちらでも動作する.

		設定例:
>
		autocmd FileType typescript nmap <buffer> <Leader>t :
		\ <C-u>echo tsuquyomi#hint()<CR>
<
		Note: This function works in not only GVim but also
		      terminal Vim.

tsuquyomi#getSupportedCodeFixes		 *tsuquyomi#getSupportedCodeFixes*
		QuickFixが利用可能なコード値のリストを返却する.
		このリストに属するコードのエラーは|:TsuquyomiQuickFix|により
		修正可能である.

Todo

==============================================================================
EXAMPLES					*tsuquyomi-examples*

						*tsuquyomi-examples-complete*
補完の挙動は 'completeopt' オプションで設定する.

	メソッド呼び出しの補完時, メソッド定義をプレビューウィンドウに表示.
>
	autocmd FileType typescript setlocal completeopt+=preview
<
	補完時, ポップアップメニューを表示しない.
>
	autocmd FileType typescript setlocal completeopt-=menu
<

						*tsuquyomi-examples-async*
Vim8 の Job / Channel を利用し非同期でカレントバッファのコンパイルエラー情報を
QuickFixウィンドウへ表示します.

>
	autocmd InsertLeave,BufWritePost *.ts,*.tsx call tsuquyomi#asyncGeterr()
<
==============================================================================
vim:tw=78:ts=8:ft=help:norl:noet:fen:
