[Fixed] WindowsでVimFiler + neossh(unite-ssh)が動作しない


## 2016/07/20 追記

VimFilerの作者であるShougoさんがコメントに書かれているが、[今朝方のVimFilerへのコミット](https://github.com/Shougo/vimfiler.vim/commit/f5cf38467ebff98252861224eeb0052f0a18e7de)で当問題の修正を行っていただいた。
当方でも最新バージョンにアップデートして正常に動作することを確認した。

Issueを立てていた訳でもないのに、こちらの投稿を拾って対応いただきありがとうございました。

## はじめに

かれこれ半年近く悩んでいるのだが、未だ解決策が分からないのでいっそのことqiitaに現状をまとめてみることにした。
GitHubにIssueを立てるにしてもどのプラグインが問題なのか切り分けが出来ていないため、どこにIssueを立てていいのかすら判断できない。

## 環境

- OS: Windows 7 Pro
- バージョン: Vim 7.4.1952(kaoriyaパッチ適用済みの独自ビルド)
- ssh/scpコマンド: plink.exe / pscp.exe(PuTTY同梱のもの)

### vimrcの設定周り

```vim:.vimrc
let g:neossh#ssh_command = 'plink.exe -P PORT HOSTNAME'
let g:neossh#copy_directory_command = 'pscp.exe -P PORT -q -r $srcs $dest'
let g:neossh#copy_file_command = 'pscp.exe -P PORT -q $srcs $dest'
```

## 問題

vimfiler, neossh, uniteを全て最新版にしてから`:VimFiler ssh://`でリモートファイルの編集を行おうとすると、ディレクトリ一覧は正常に取得できるが、編集したいファイルにカーソルを移動して<kbd>e</kbd>を押すと空のディレクトリを開いた表示になる。

### `:let g:unite_source_ssh_enable_debug = 1`した後の`:messages`

```
# :VimFiler ssh://user@host//usr/www/htdocs/
path = //user@host//usr/www/htdocs/
parse_result = ['user@host', '', '/usr/www/htdocs/']
path = //user@host//usr/www/htdocs/
parse_result = ['user@host', '', '/usr/www/htdocs/']
files = ['.', '..', 'index.html']
path = //user@host//usr/www/htdocs/
parse_result = ['user@host', '', '/usr/www/htdocs/']
files = ['.', '..', 'index.html']
# e キーを押した時
path = //user@host://usr/www/htdocs/index.html/
parse_result = ['user@host', '', '/usr/www/htdocs/index.html/']
files = []
path = //user@host://usr/www/htdocs/index.html/
parse_result = ['user@host', '', '/usr/www/htdocs/index.html/']
files = []
```

`:messages`の内容を読む限り、"index.html"の末尾に"/"が追加されてしまっている。
どこで"/"が追加されているかが問題なのだが、問題を追えずにいる。

## 正常に動作していたバージョン

- [neossh:9b8d0cb](https://github.com/Shougo/neossh.vim/commit/9b8d0cbebdededd0c3a58580b917054efc3e5442)
- [vimfiler:f43f736](https://github.com/Shougo/vimfiler.vim/commit/f43f7364dfdd493ccba7aa63d6b9e1713088ee4f)
- uniteは最新版でOK

## 試行

### 試行1: 最新版のUnite + neosshでアクセスした場合

`:VimFiler ssh://`ではなく`:Unite ssh://`とするとディレクトリ、ファイル共に正常に開ける。
ただし、バッファ名がファイル名ではなく`vimfiler:default@1`のようになってしまう[^1]。

### 試行2: plink.exe/pscp.exeをcygwinのssh.exe/scp.exeに変更する

動作は変わらず、同様のエラーとなったためssh/scpコマンドの問題ではないようだ。

### 試行3: vimfilerのみ次のコミットを適用
 
 [vimfiler:f43f736](https://github.com/Shougo/vimfiler.vim/commit/f43f7364dfdd493ccba7aa63d6b9e1713088ee4f)の次のコミットは [Issues on_BufReadCmd and on_FileReadCmd #343](https://github.com/Shougo/vimfiler.vim/issues/343)というIssueの修正だが、これを適用して<kbd>e</kbd>を押すとバッファ名は編集したいファイル名となるが、中身は空となる。
 `:let g:unite_source_ssh_enable_debug = 1`としても`:messages`に何も出力されないので、今のところこれ以上追っていない。
 
### 試行4: unite-sshのみ次のコミットを適用
 
 [neossh:9b8d0cb](https://github.com/Shougo/neossh.vim/commit/9b8d0cbebdededd0c3a58580b917054efc3e5442)の次のコミットは[Cannot open files through vimfiler/Unite when using neossh.vim #14](https://github.com/Shougo/neossh.vim/issues/14)というIssueの修正だが、これを適用すると若干`:messages`の内容が変化するが、最新版と同じく"index.html"の末尾に`/`を追加してしまっている。
 
 ```
 # :VimFiler ssh://user@host//usr/www/htodcs/
path = //user@host//usr/www/htdocs/
parse_result = ['user@host', '', '/usr/www/htdocs/']
path = //user@host//usr/www/htdocs/
parse_result = ['user@host', '', '/usr/www/htdocs/']
command_line = plink.exe  user@host "sh -c 'LC_TIME=C ls -lFa /usr/www/htdocs/'" '/usr/www/htdocs/'
output = total 16^@drwxrwxr-x 2 user user 4096 Jun 23 15:22 ./^@drwxrwxr-x 9 user user 4096 Jun 24 13:40 ../^@-rw-rw-r-- 1 user user 4201 Jul  5 13:54 index.html
files = ['.', '..', 'index.html']
path = //user@host//usr/www/htdocs/
parse_result = ['user@host', '', '/usr/www/htdocs/']
files = ['.', '..', 'index.html']
# e キーを押した時
path = //user@host://usr/www/htdocs/index.html/
parse_result = ['user@host', '', '/usr/www/htdocs/index.html/']
command_line = plink.exe  user@host "sh -c 'LC_TIME=C ls -lFa /usr/www/htdocs/index.html/'" '/usr/www/htdocs/index.html/'
output = ls: /usr/www/htdocs/index.html/: Not a directory
files = []
path = //user@host://usr/www/htdocs/index.html/
parse_result = ['user@host', '', '/usr/www/htdocs/index.html/']
files = []
 ```
 
修正の中身を見ると`edit`コマンドではなく`VimFiler`コマンドを実行するようになっているのでVimFiler側の修正が必要なのだろうと思ったが、このコミットの直近のコミットをvimfilerに適用しても動作は変わらなかった。
 
## 代替案

1. `:Unite ssh://`でアクセスする
2. 「正常に動作していたバージョン」でfreeze
3. netrwを使う
4. リモートファイルの編集をやめる

`:Unite ssh://`でアクセスすればバッファ名が`vimfiler:default@1`となること以外は特に不満はない。
ないのだが、ローカルファイルの編集の際には変わらずvimfilerを使っているので、どうせなら同一UIでやりたいというのが本音である。

[^1]: 「正常に動作していたバージョン」では`ssh://user@host//usr/www/htdocs/index.html`となる。ただし、`:VimFiler ssh://user@host//usr/www/htdocs/index.html`とすると同様に`vimfiler:default@1`となる。