netrwでファイルをコピー・移動する マーク機能の使い方
netrwでファイルをコピーしたいだけなのに、いきなりmcを押しても何も起きません。netrwのファイル操作は「マークを付けてから実行する」という、CUIファイラらしい2段階の手順を踏む必要があります。
マークによるコピー・移動はnetrwの機能です。Neovim 0.13でnvim .から開く一覧には入っていません。新しい一覧は読み取り専用で、削除・改名・マークの操作を持ちません。Vim側は変わりません。Neovimで0.13以降を使っていて、この記事の操作が見当たらない場合は:Exploreを打つと従来どおりnetrwが開きます。詳しくはNeovim 0.13でnetrwが標準の一覧から外れる件にまとめています。
目次(10項目)
| キー | これだけ覚える |
|---|---|
| mf | カーソル位置のファイルにマークを付ける/外す |
| mt | コピー・移動先のディレクトリを指定(target) |
mc / mm | マークしたファイルをtargetへコピー/移動 |
| mu | すべてのマークを外す |
マークの付け外し
| キー | 動作 |
|---|---|
| mf | カーソル位置のファイルにマークを付ける/外す |
| mu | すべてのマークを外す |
| mr | 正規表現(*などのワイルドカード)でまとめてマークする |
| mt | コピー・移動先のディレクトリを指定する(target設定) |
コピー・移動の手順
ファイルをコピーする場合、次の3ステップを踏みます。
1. コピー先のディレクトリでmtを実行(target指定)
2. コピー元のファイルでmfを実行(マーク)
3. mcを実行(コピー実行)
移動したい場合は最後をmmに変えます。目的地を先に指定してから対象を選ぶ、という順序は最初は戸惑いますが、慣れれば一般的なCUIファイラの操作感と大きくは変わりません。
mtで指定する移動先が深い階層にあると、そこへ辿り着くだけで手数がかかります。よく使う移動先はブックマークに登録しておくとgbだけで飛べるので、target指定と元ファイルの選択を行き来するのが楽になります。
| キー | 動作 |
|---|---|
| mc | マークしたファイルをtargetへコピー |
mm | マークしたファイルをtargetへ移動 |
| md | マークしたファイル同士の差分を表示 |
| mz | マークしたファイルを圧縮/展開 |
表の下2つは方向を自分で選びません。mdは2つ以上マークしたときだけ意味があり、mzはマークしたものが圧縮済みなら解凍、未圧縮なら圧縮、という向きの自動判定で動きます(:help netrw-mz)。同じキーで往復するので、いま何がマークされているかを見てから押すのが安全です。
マークを使わない単純な操作
新規作成や削除、リネームのようにマーク不要の操作もあります。
| キー | 動作 |
|---|---|
| % | 新規ファイルを作成 |
| d | 新規ディレクトリを作成 |
| D | カーソル位置(またはマークした)ファイル・ディレクトリを削除 |
| R | ファイル・ディレクトリをリネーム |
正規表現で複数ファイルをまとめてマークする
1つずつmfを押すのが面倒な場合は、mrでパターンを指定して一括マークできます。
mr *.log
ワイルドカードや正規表現で対象を絞り込めるので、拡張子ごとの一括削除や一括圧縮をしたいときにmfを連打するより早く済みます。
Windowsでの既知の制約
Windows環境では、マークを使ったコピー・移動が正常に動作しないことがあります。これはnetrwが内部的にUnix系のコマンドを前提にした処理を行っているためで、確実な回避策は見つかっていません。Windowsを主に使っていてファイル操作の頻度が高いなら、コピー・移動についてはOS標準のエクスプローラーや、NERDTreeのようなクロスプラットフォーム対応のファイラープラグインに任せたほうが安定します。
最初はtargetを指定せずにmcを押して「何も起きない」と戸惑いました。手順の順序さえ覚えてしまえば迷うことはなくなりましたが、複数ファイルを別々の場所に振り分けたいときは、targetを都度切り替える必要があって少し手間がかかります。単純な1対1のコピーなら十分実用的です。
マークの状態を確認する・全部外す
マークしたファイルは一覧の中で強調表示されますが、画面を切り替えたり別のディレクトリを見に行ったりすると、どれにマークが付いているか分からなくなります。mu を押せばすべてのマークが外れるので、迷ったらいったん解除してから付け直すほうが確実です。
マークはディレクトリをまたいで保持されます。これは複数の場所から集めてコピーするための仕様ですが、意図せず前の作業のマークが残っていると、思っていないファイルまで操作の対象になります。操作を実行する前に mu で一度きれいにしておく癖を付けると事故りません。
マークしたファイルにまとめて処理を流す
コピーや移動のほかにも、マークしたファイルを対象にできる操作があります。よく使うのは次の3つです。
me " マークしたファイルをまとめて開く
mg " マークしたファイルを vimgrep で検索する
mx " マークしたファイルに外部コマンドを実行する
mx は実行したいコマンドを聞いてくるので、そこで chmod +x のように打つと、マークした全ファイルに適用されます。ファイル名の入る位置は自動で補われます。mg で検索した結果はquickfixリストに入るので、quickfixウィンドウから順にたどれます。
コピーや移動に使われるコマンド
netrwのファイル操作は、内部でOSのコマンドを呼び出しています。何が使われるかはオプションで確認でき、必要なら差し替えられます。
:echo g:netrw_localcopycmd " コピーに使うコマンド
:echo g:netrw_localmovecmd " 移動に使うコマンド
:echo g:netrw_localrmdir " ディレクトリ削除に使うコマンド
操作が黙って失敗するときは、ここに入っているコマンドが環境に無いか、引数の形が合っていないことがほとんどです。同じコマンドを端末で手打ちしてみると、netrwが出さないエラーメッセージが読めます。
まとめ
netrwのファイル操作はマークして実行する2段階方式です。手順さえ覚えれば移動・コピー・削除・圧縮まで標準機能だけで完結します。Windowsでのコピー・移動の不安定さだけは念頭に置いておくと安心です。圧縮のmzも同じマークをそのまま使うので、圧縮・解凍のために手順を覚え直す必要はありません。