Vim操作方法

[Vim問題] サーバーにリモート接続してファイルを直接変更する方法は?

この記事では、Vim / neovim でプラグインなしで使えるファイラ Netrw で「サーバ上のファイルを直接変更する方法」について、ご紹介します。

こちらは vim3 Advent Calendar 2019 9日目の記事です。(後追い)

本記事では、使いたいエディタによって次のように読み替えてください。

Vim系エディタ読み替え
neovimvim → nvim
neovim-qtvim → nvim-qt
gvimvim → gvim

[解答] Netrw + FTP / SCP / SFTP などのプロトコル

Netrw は次のプロトコル(あるいはメソッド)でサーバに接続して、ファイルを直接変更することが可能です。

  • HTTP / HTTPS / Web_DAV
  • RCP / RSYNC
  • SSH / SCP / SFTP

サーバの Vim / neovim のインストールや設定が完了していなくても、ローカルの Vim / neovim の設定で扱えます。そのため、新規導入あるいは使い捨て、大量のサーバ導入時などのファイル編集で、環境構築の手間が省ける点で活躍してくれます。

ただ、リモートのサーバの root で作業はできない (sudo不可)という点は課題です。もちろん root ユーザーで接続する手はありますが、昨今のセキュリティ事情を考えると常用は難しいでしょう。そのため、利用機会は限定的とならざるをえませんね。

昨今のセキュリティ事情を考慮すると、利用機会があるのは SSH / SCP /SFTP でしょう。逆に、それ以外の方法を代用できてしまうので、本記事では紹介しません。

Netrwリモート編集1. ファイル一覧を表示する

リモートのサーバ上でディレクトリを開きます。これは指定したディレクトリ直下のファイル一覧を表示する操作を意味します。

Vim 起動時に接続する場合、下記のコマンドを実行します。

vim {プロトコル}://{ユーザー名@}{サーバのFQDN または IPアドレス}/{ディレクトリパス}/

ユーザー名を省略すると、接続元アカウントのユーザー名を使用します。

例. SCP接続

Netrw でSCPを使ってファイル一覧を表示した例
Netrw でSCPを使ってファイル一覧を表示した例

例えば、scp(実態はSSHプロトコル)でサーバ server1.com に接続して、ホームディレクトリに接続する場合はこちら。

vim scp://server1.com/

ユーザー ssh-test で接続する場合は次の通りです。

vim scp://[email protected]/

~/.ssh/config の設定も活用できます。

vim scp://server1/

これらは予め設定したSSHや鍵などを使用します。そのため、予めSSHやSCPでリモートサーバへ接続できる状態を作っておく必要があります。

例. SFTP接続

NetrwでSFTPを使ってファイル一覧を表示した例
NetrwでSFTPを使ってファイル一覧を表示した例

先のSCP接続と同じ条件で、SFTP接続する場合は次の通りです。

vim sftp://[email protected]/

SCP接続する場合と、ほとんど差を感じませんね。

Netrwリモート編集2. ファイルを直接編集する

リモートのサーバ上でファイルを直接開きます。これで閲覧および編集できます。ファイルパスが予め分かっている場合は便利です。

Vim 起動時に接続する場合、下記のコマンドを実行します。

vim {プロトコル}://{ユーザー名@}{サーバのFQDN または IPアドレス}/{ファイルパス}/

ユーザー名を省略すると、接続元アカウントのユーザー名を使用します。

例. SCP接続

例えば、scp(実態はSSHプロトコル)でサーバ server1.com に接続して、ホームディレクトリの.vimrcを編集する場合はこちら。

vim scp://server1.com/.vimrc

ユーザー ssh-test で接続する場合は次の通りです。

vim scp://[email protected]/.vimr

~/.ssh/config の設定も活用できます。

vim scp://server1/.vimrc

例. SFTP接続

先のSCP接続と同じ条件で、SFTP接続する場合は次の通りです。

vim sftp://[email protected]/.vimrc

こちらもSCP接続する場合と、ほとんど差を感じませんね。

Netrwリモート編集3. 起動した状態から接続する

これまでは起動と同時に接続していましたが、Vimを起動した状態からリモート接続する方法もあります。(サーバー名=FQDNまたはIPアドレス、パスはディレクトリパスまたはファイルパスを指す)

(ノーマルモード もしくは Netrw起動した状態で)
:e[dit] {プロトコル}://{ユーザー名@}{サーバー名}/{パス}
:Nread {プロトコル}://{ユーザー名@}{サーバー名}/{パス}
:Nwrite {プロトコル}://{ユーザー名@}{サーバー名}/{パス}

同じくユーザー名を省略すると接続元アカウントのユーザー名を使用しますし、~/.ssh/configの内容も利用可能です。いずれも起動時に直接開く方法と違いがありません。

また、サーバー上のVim設定ファイルを直接読み込む方法(リモートのファイルに:sourceで読む方法)も用意されています。

(ノーマルモード もしくは Netrw起動した状態で)
:Nsource {プロトコル}://{ユーザー名@}{サーバー名}/{ファイルパス}

利用機会が不明ではありますが、直接読み込んでテストしたりはできるかもしれません。

補足:Vimの関連する設定値

標準でVim/Netrwが使用するコマンドは次のように設定されています。これらは各設定値を変更すれば、使うコマンドを変更できます。

オプション    タイプ   設定      説明
———-    ——–  ————– —————————
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”

pi_netrw – Vim日本語ドキュメント

Vimの変数について値を設定して、これらの機能を利用することが可能です。

 g:netrw_scpport      = “-P” : scp のポート番号を設定するためのオプション
 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 では無視されます

pi_netrw – Vim日本語ドキュメント

このVimコマンドの補足情報

  • 利用頻度2.0
  • 便利さ4.0
  • 覚え易さ1.0

関連する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力を伸ばしたいと考えるなら、絶対に避けては通れない書籍でしょう。

プロフィール
管理人
Vim太郎

Vim力アップして、そろそろ上級 Vimmer の仲間入りしたいIT系エンジニアの端くれです。読んでくる訪問者の皆様と一緒に、Vim力を上げていくことができる記事が書ければと考えています。

\フォローする/
\ シェアする /
\フォローする/
関連記事
Vim入門
タイトルとURLをコピーしました