Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

WindowsのgVimでNERD Treeプラグインのファイルコピーをちゃんと動かしたい

$
0
0

概説

VimのNERD Treeプラグインって便利ですよね。
エクスプローラーライクに使えるので、非常に気に入っているのですが、Windowsの環境ではmキー押下時に表示されるメニューの「ファイルコピー」の操作が「一手間」かけないと正しく動作しません。
どうやらこれは以前からある既知の問題のようですね。
ここでは、Windows環境のgVim7.3(Kaoriya版)で、NERD Treeプラグインのファイルコピーを正しく動作させる方法を示します。

まず、何も対処をせずに「mキー」を押してみる

通常、Macの環境などでNERD Treeを実行し、「mキー」を押下すると「(c)opy the current node」というメニューが表示されますが、以下のようにメニューが表示されません。

mキー押下
NERDTreeMenu.Usej/k/enterandtheshortcutsindicated==========================================================>(a)ddachildnode(m)ovethecurrentnode(d)eletethecurrentnode

ファイルコピーのメニューを表示させるには?

「:e $MYVIMRC」などで「_vimrc」を編集し、以下の内容を追記します。
「-r」の後ろにスペース1文字分が入っているので、注意して下さい。

_vimrc
letg:NERDTreeCopyCmd='cp -r '

もう一度「mキー」を押してみる

今度は「(c)opy the current node」が表示されました。

mキー押下
NERDTreeMenu.Usej/k/enterandtheshortcutsindicated==========================================================>(a)ddachildnode(m)ovethecurrentnode(d)eletethecurrentnode(c)opythecurrentnode

喜ぶのはちょっと早い

ファイルコピーのメニューが表示されたのでコピーができるかと思いきや、いざ実行してみると、以下のように表示され、コピーが正常に行われません。

ファイルコピー実行
NERDTree:Couldnotcopynode

なぜファイルコピーができないのか?

Windowsのコピーコマンドは*nixのcpとは異なり、ファイルコピーの場合はcopy、ディレクトリコピーの場合はxcopyを使用します。
上記の設定では「'cp -r '」のように指定しているため、当然このままでは動きません。これについては、ブログで詳しく言及されている方がいるので、そちらをご覧ください。

cpコマンドを取得してくる

このissueでは、msysGit(Git for Windows)をインストールしているのであれば、msysGitのディレクトリ(例:C:\Program Files (x86)\Git\bin)から「cp.exe」と「msys-1.0.dll」をコピーしてきて、gVimのbinディレクトリ配下にコピーせよと記載がありますので、その通りに行います。
gVimのバージョンによってはbinディレクトリが存在しない場合もあるので、その場合はgVimのディレクトリの直下にコピーします。

もし、msysGitではなく、Gow(GNU on Windows)をインストールしている場合は、Gowのディレクトリ(例:C:\Program Files (x86)\Gow\bin)から「cp.exe」をコピーしてくることでもOKです。この場合、「msys-1.0.dll」のコピーは不要です。

NERD Treeプラグインの修正

NERD Treeプラグインのファイルコピーを行っている処理、具体的には「g:NERDTreeCopyCmd」との記載がある部分を修正します。

NERD Treeプラグインのバージョンによって、上記の処理が「nerdtree\plugin\NERD_tree.vim」もしくは「nerdtree\lib\nerdtree\path.vim」に記載されています。

NERD_tree.vimに記載がある場合

修正前
letdest=s:Path.WinToUnixPath(a:dest)letcmd=g:NERDTreeCopyCmd." ".escape(self.str(),s:escape_chars)." ".escape(dest,s:escape_chars)
修正後
letdest=a:destletcmd=0ifs:running_windowsletcmd=g:NERDTreeCopyCmd.'"'.self.str().'" "'.dest.'"'elseletcmd=g:NERDTreeCopyCmd." ".escape(self.str(),s:escape_chars)." ".escape(dest,s:escape_chars)endif

path.vimに記載がある場合

修正前
letdest=s:Path.WinToUnixPath(a:dest)letcmd=g:NERDTreeCopyCmd." ".escape(self.str(),nerdtree#escChars()) . " " . escape(dest, nerdtree#escChars())
修正後
letdest=a:destletcmd=0ifnerdtree#runningWindows()letcmd=g:NERDTreeCopyCmd.'"'.self.str().'" "'.dest.'"'elseletcmd=g:NERDTreeCopyCmd." ".escape(self.str(),nerdtree#escChars()) . " " . escape(dest, nerdtree#escChars())endif

コピーを実行してみよう

上記までの手順ですべての準備が整いましたので、再度、mキーを押下しファイルコピーを実行してみましょう。
これで、Windows環境でもNERD Treeプラグインのファイルコピーが正しく動作するはずです。

参考URL

Windows 7: copy option unavailable
Copy command on Windows


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>