この記事では、Vim / neovim でプラグインなしで使えるファイラ Netrw で「サーバ上のファイルを直接変更する方法」について、ご紹介します。
[解答] Netrw + FTP / SCP / SFTP などのプロトコル
Netrw は次のプロトコル(あるいはメソッド)でサーバに接続して、ファイルを直接変更することが可能です。
- HTTP / HTTPS / Web_DAV
- RCP / RSYNC
- SSH / SCP / SFTP
サーバの Vim / neovim のインストールや設定が完了していなくても、ローカルの Vim / neovim の設定で扱えます。そのため、新規導入あるいは使い捨て、大量のサーバ導入時などのファイル編集で、環境構築の手間が省ける点で活躍してくれます。
ただ、リモートのサーバの root で作業はできない (sudo不可)という点は課題です。もちろん root ユーザーで接続する手はありますが、昨今のセキュリティ事情を考えると常用は難しいでしょう。そのため、利用機会は限定的とならざるをえませんね。
Netrwリモート編集1. ファイル一覧を表示する
リモートのサーバ上でディレクトリを開きます。これは指定したディレクトリ直下のファイル一覧を表示する操作を意味します。
Vim 起動時に接続する場合、下記のコマンドを実行します。
vim {プロトコル}://{ユーザー名@}{サーバのFQDN または IPアドレス}/{ディレクトリパス}/
ユーザー名を省略すると、接続元アカウントのユーザー名を使用します。
例. SCP接続
例えば、scp(実態はSSHプロトコル)でサーバ server1.com に接続して、ホームディレクトリに接続する場合はこちら。
vim scp://server1.com/
ユーザー ssh-test で接続する場合は次の通りです。
vim scp://ssh-test@server1.com/
~/.ssh/config の設定も活用できます。
vim scp://server1/
例. SFTP接続
先のSCP接続と同じ条件で、SFTP接続する場合は次の通りです。
vim sftp://ssh-test@server1.com/
SCP接続する場合と、ほとんど差を感じませんね。
Netrwリモート編集2. ファイルを直接編集する
リモートのサーバ上でファイルを直接開きます。これで閲覧および編集できます。ファイルパスが予め分かっている場合は便利です。
Vim 起動時に接続する場合、下記のコマンドを実行します。
vim {プロトコル}://{ユーザー名@}{サーバのFQDN または IPアドレス}/{ファイルパス}/
ユーザー名を省略すると、接続元アカウントのユーザー名を使用します。
例. SCP接続
例えば、scp(実態はSSHプロトコル)でサーバ server1.com に接続して、ホームディレクトリの.vimrcを編集する場合はこちら。
vim scp://server1.com/.vimrc
ユーザー ssh-test で接続する場合は次の通りです。
vim scp://ssh-test@server1.com/.vimr
~/.ssh/config の設定も活用できます。
vim scp://server1/.vimrc
例. SFTP接続
先のSCP接続と同じ条件で、SFTP接続する場合は次の通りです。
vim sftp://ssh-test@server1.com/.vimrc
こちらもSCP接続する場合と、ほとんど差を感じませんね。
Netrwリモート編集3. 起動した状態から接続する
これまでは起動と同時に接続していましたが、Vimを起動した状態からリモート接続する方法もあります。(サーバー名=FQDNまたはIPアドレス、パスはディレクトリパスまたはファイルパスを指す)
(ノーマルモード もしくは Netrw起動した状態で) :e[dit] {プロトコル}://{ユーザー名@}{サーバー名}/{パス} :Nread {プロトコル}://{ユーザー名@}{サーバー名}/{パス} :Nwrite {プロトコル}://{ユーザー名@}{サーバー名}/{パス}
同じくユーザー名を省略すると接続元アカウントのユーザー名を使用しますし、~/.ssh/configの内容も利用可能です。いずれも起動時に直接開く方法と違いがありません。
また、サーバー上のVim設定ファイルを直接読み込む方法(リモートのファイルに:sourceで読む方法)も用意されています。
(ノーマルモード もしくは Netrw起動した状態で) :Nsource {プロトコル}://{ユーザー名@}{サーバー名}/{ファイルパス}
利用機会が不明ではありますが、直接読み込んでテストしたりはできるかもしれません。
補足:Vimの関連する設定値
標準でVim/Netrwが使用するコマンドは次のように設定されています。これらは各設定値を変更すれば、使うコマンドを変更できます。
オプション タイプ 設定 説明
pi_netrw – Vim日本語ドキュメント
———- ——– ————– —————————
netrw_ftp 変数 =変数なし useridを”user userid”で設定
=0 useridを”user userid”で設定
=1 useridを”userid”で設定
NetReadFixup 関数 =変数なし 変更しない
=変数あり ftp で取得したファイルを NetReadFixup() で自動的にフィルタする。
g:netrw_dav_cmd 変数 =”cadaver” if cadaver があるなら
g:netrw_dav_cmd 変数 =”curl -o” elseif curl があるなら
g:netrw_fetch_cmd 変数 =”fetch -o” if fetch があるなら
g:netrw_ftp_cmd 変数 =”ftp”
g:netrw_http_cmd 変数 =”fetch -o” if fetch があるなら
g:netrw_http_cmd 変数 =”wget -O” else if wget があるなら
g:netrw_http_put_cmd 変数 =”curl -T”
g:netrw_list_cmd 変数 =”ssh USEPORT HOSTNAME ls -Fa”
g:netrw_rcp_cmd 変数 =”rcp”
g:netrw_rsync_cmd 変数 =”rsync”
g:netrw_rsync_sep 変数 =”/” ファイルスペックからホスト名を分けるのに使われる
g:netrw_scp_cmd 変数 =”scp -q”
g:netrw_sftp_cmd 変数 =”sftp”
Vimの変数について値を設定して、これらの機能を利用することが可能です。
g:netrw_scpport = “-P” : scp のポート番号を設定するためのオプション
pi_netrw – Vim日本語ドキュメント
g:netrw_sshport = “-p” : ssh のポート番号を設定するためのオプション
(略)
g:netrw_silent =0 : 普通に転送処理をする
=1 : 静か (silent) に転送処理をする
(略)
g:netrw_cygwin =1 windows で cygwin 付属の scp を想定する。また、ネッ
トワークブラウジングで ls を使った時間とサイズによ
るソートを可能にする (windowsでの初期設定)。
=0 Windows の scp が Windows 形式のパスを扱えると想定
する。ネットワークブラウジングでは ls ではなく dir
を使用する。このオプションは unix では無視されます
このVimコマンドの補足情報
- 利用頻度
- 便利さ
- 覚え易さ
関連するVimヘルプ
こちらは、Vim上では下記のコマンドでヘルプを確認できます。
:help netrw-xfer :help pi_netrw
ヘルプで検索するときは、通常は大文字小文字は識別されませんので、どちらでも構いません。
なお、Netrwでネットワーク機能は中核的な機能みたいで、ヘルプは広範囲に渡ります。時間のあるときにじっくり読むと新たな使い方が分かるかも知れません。
Vim操作の参考書籍
こちらの書籍が、Vimレベルアップの参考になります。
Vim/neovim関連の書籍で、もっとも評判が良くてバイブルと呼んでる人もいる一冊です。Vim/neovimのバージョンに依存しない沢山のTips形式で、その表題通りに「思考のスピードで編集」できるようになるノウハウが詰まっています。その高い評価は Amazon のレビューからも分かる通りです。Vimmer なら必ず一度は読んでおいて間違いありません。
こちらもVim関連の書籍で評価が高い書籍の一冊です。vim-jpで見かける上級Vimmer(Vimサポーターズ)の皆様による、Vimを実践で使ったノウハウからプラグイン関連の情報が詰まっています。日本の Vim界隈を知る上でも是非一読しておきたい一冊です。
Vim/neovim の設定ファイルやプラグインなど、Vim script に関するノウハウがいくつも詰まった一冊です。日本で Vim Script をここまで深く解説している唯一の書籍と言えます。Vim力を伸ばしたいと考えるなら、絶対に避けては通れない書籍でしょう。