ssh経由でファイルをリモートで編集するにはどうすればよいですか?


82

ssh経由でアクセスできるサーバーにあるファイルを編集する必要があります。

vimワークステーションでこれらのファイルをカスタマイズして編集したいです(vimリモートサーバーの設定を変更する権限がありません)。sublime textまたは、他のGUIエディターでファイルを編集したい場合があります。

もちろん、これらのファイルをダウンロードしてローカルで編集し、サーバーにアップロードすることができます。よりエレガントなソリューションはありますか?

回答:


65

これを行うには、sshfsを使用してリモートフォルダーをファイルシステムとしてマウントします。これを行うには、まずいくつかの前提条件があります。

# issue all these cmds on local machine
sudo apt-get install sshfs 
sudo adduser <username> fuse

次に、マウントプロセスを実行します。

mkdir ~/remoteserv    
sshfs -o idmap=user <username>@<ipaddress>:/remotepath ~/remoteserv

この後、マウントされたフォルダーに移動し、独自のローカルカスタマイズvimを使用します。


4
当然のことながら、debベースになっていないためにインストールされていないディストリビューションでは、インストール手順が失敗しますapt-get。(その場合、yumまたはzypper存在する可能性があります。)また、ローカルマシンでrootを必要としますが、利用可能である場合と利用できない場合があります。(これが悪い解決策だと言っているわけではありませんが、大きな前提条件があります。)
ウルリッヒ・シュワルツ

4
はい。理解した。これらはすべてローカルマシンで実行されます。OS Xの場合、1をインストールする必要がosxfuseありsshfsます。これらは、(自作でインストールすることができbrew install sshfs、およびbrew cask install osxfuse、またはから得られたパッケージからosxfuse.github.io
inspirednz

95

次のscpようにしてそれを行うことができます:

vim scp://user@myserver[:port]//path/to/file.txt

//サーバーとパスの間の2つのスラッシュに注意してください。これは、絶対パスを正しく解決するために必要です。(最初のスラッシュは構文ですが、2番目のスラッシュは通常どおりリモートユーザーのルートディレクトリを指定します。ホームディレクトリから開始するには、。を実行し[:port]/~/path/to/file.txtます)[:port]

これは、vimのnetrw.vim標準プラグインによって処理されます。他のいくつかのプロトコルがサポートされています。


6
はい、ファイルは一時ファイルに取得され、保存時にサーバーにアップロードされます。
FloHimself

1
ありがとうございました。ただし、ファイルを保存しようとしたときにエラーが発生E382: Cannot write, 'buftype' option is set
Loom

2
:set buftype=""​vimで試すことができます。
FloHimself

2
さらに、vimは~/.ssh/configリモートホストを読み取り、解決しvim scp://[host]/pathます。
ジャンガリ

2
@stillanoob::e scp://...
FloHimself

6

Vimの設定を編集する権限がないと言った場合の意味によっては、とにかくサーバーでVimを使用する方法があります。ユーザーを変更できない場合.vimrc(たとえば、共有ユーザーとしてログインしているため)、それでもファイルを作成できる場合は、たとえば、という名前のファイルとして作成Loom.vimrcし、-uスイッチを使用してVimを呼び出します。

vim -u ~/Loom.vimrc file_to_edit

エイリアスを使用することもできます。alias vim='vim -u ~/Loom.vimrc'通常の方法でVimを使用できますが、カスタム.vimrcファイルは引き続き読み込まれます。このエイリアスはログアウト後も保持されないため、カスタマイズしたVimを誤って使用する人を心配する必要はありません。


2

編集するファイルの数とファイルの種類によっては、これは正確にここでやりたいことではないかもしれませんが、言及する価値があると思います。リモートサーバーでファイルを編集する必要があるが、自分の作業ステーションで持っているものをすべて使用したい場合は、マシンで何らかのRevision Controlシステムを使用することを考え始めることができます。そのようにして、選択したソフトウェアを使用して自分のマシンのローカルコピーを変更し、変更をコミットしてから、宛先マシンのローカルコピーを更新することができます。使い慣れたソフトウェアでファイルを編集するだけでなく、各ファイルに関連する変更の履歴があるという付加価値があります。これは常に良いことです。

念のため、Revision Control Softwareのリストを以下に示します。


に変更をコミットするなどの使用を提案し、のようなものgitにプッシュし、そこからgithub変更をgithubローカルマシンにプルして、そこで変更を行いますか?
alpha_989

これは複雑なコードの変更には適していますが、おそらく簡単なコードの変更には.. @FloHimselfまたはshivamsが述べたものは実装が簡単です
。.– alpha_989

1

ミスター・ポッツの答えを拡張するには、上記を実行してから、次のようなものを.bash_profile(またはシェルが使用するもの)に入れることもできます。

if [[ "$(who mom loves | awk ' { print $1 }' )" == "Loom" ]]; then 
         alias vim="vim -u ~/.Loom_vimrc"  
         fi  

Loomは、ログインする元のユーザーIDです。

共有アカウントとしてログインしている場合(個々のアカウントではなくsudoを使用している場合)、Von Neumanがあなたの魂に慈悲を抱いてくれるかもしれません。

これをコメントに入れていたはずですが、コードをまったくフォーマットできませんでした。


0

vimセッションをすでに実行している場合は、

:silent e scp://user@myserver[:port]//path/to/file.txt

:silent正面には抑制されますPress Enter to Continueメッセージを

そして

e scp://user@myserver[:port]//path/to/file.txtExremnoteファイルを編集するモードコマンドです。

BitVise SSHDWindows 10 で実行し、Ubuntu 16.04 で実行するVIMを使用してテスト済み


これPress Enter to Continueは最初の読み込みを抑制しますが、その後の読み込みは抑制しないことに注意してください:w
Sparhawk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.