ssh経由でアクセスできるサーバーにあるファイルを編集する必要があります。
vim
ワークステーションでこれらのファイルをカスタマイズして編集したいです(vim
リモートサーバーの設定を変更する権限がありません)。sublime text
または、他のGUIエディターでファイルを編集したい場合があります。
もちろん、これらのファイルをダウンロードしてローカルで編集し、サーバーにアップロードすることができます。よりエレガントなソリューションはありますか?
ssh経由でアクセスできるサーバーにあるファイルを編集する必要があります。
vim
ワークステーションでこれらのファイルをカスタマイズして編集したいです(vim
リモートサーバーの設定を変更する権限がありません)。sublime text
または、他のGUIエディターでファイルを編集したい場合があります。
もちろん、これらのファイルをダウンロードしてローカルで編集し、サーバーにアップロードすることができます。よりエレガントなソリューションはありますか?
回答:
これを行うには、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を使用します。
osxfuse
ありsshfs
ます。これらは、(自作でインストールすることができbrew install sshfs
、およびbrew cask install osxfuse
、またはから得られたパッケージからosxfuse.github.io
次のscp
ようにしてそれを行うことができます:
vim scp://user@myserver[:port]//path/to/file.txt
//
サーバーとパスの間の2つのスラッシュに注意してください。これは、絶対パスを正しく解決するために必要です。(最初のスラッシュは構文ですが、2番目のスラッシュは通常どおりリモートユーザーのルートディレクトリを指定します。ホームディレクトリから開始するには、。を実行し[:port]/~/path/to/file.txt
ます)[:port]
。
これは、vimのnetrw.vim標準プラグインによって処理されます。他のいくつかのプロトコルがサポートされています。
E382: Cannot write, 'buftype' option is set
:set buftype=""
vimで試すことができます。
~/.ssh/config
リモートホストを読み取り、解決しvim scp://[host]/path
ます。
:e scp://...
Vimの設定を編集する権限がないと言った場合の意味によっては、とにかくサーバーでVimを使用する方法があります。ユーザーを変更できない場合.vimrc
(たとえば、共有ユーザーとしてログインしているため)、それでもファイルを作成できる場合は、たとえば、という名前のファイルとして作成Loom.vimrc
し、-u
スイッチを使用してVimを呼び出します。
vim -u ~/Loom.vimrc file_to_edit
エイリアスを使用することもできます。alias vim='vim -u ~/Loom.vimrc'
通常の方法でVimを使用できますが、カスタム.vimrc
ファイルは引き続き読み込まれます。このエイリアスはログアウト後も保持されないため、カスタマイズしたVimを誤って使用する人を心配する必要はありません。
編集するファイルの数とファイルの種類によっては、これは正確にここでやりたいことではないかもしれませんが、言及する価値があると思います。リモートサーバーでファイルを編集する必要があるが、自分の作業ステーションで持っているものをすべて使用したい場合は、マシンで何らかのRevision Controlシステムを使用することを考え始めることができます。そのようにして、選択したソフトウェアを使用して自分のマシンのローカルコピーを変更し、変更をコミットしてから、宛先マシンのローカルコピーを更新することができます。使い慣れたソフトウェアでファイルを編集するだけでなく、各ファイルに関連する変更の履歴があるという付加価値があります。これは常に良いことです。
念のため、Revision Control Softwareのリストを以下に示します。
git
にプッシュし、そこからgithub
変更をgithub
ローカルマシンにプルして、そこで変更を行いますか?
ミスター・ポッツの答えを拡張するには、上記を実行してから、次のようなものを.bash_profile(またはシェルが使用するもの)に入れることもできます。
if [[ "$(who mom loves | awk ' { print $1 }' )" == "Loom" ]]; then
alias vim="vim -u ~/.Loom_vimrc"
fi
Loomは、ログインする元のユーザーIDです。
共有アカウントとしてログインしている場合(個々のアカウントではなくsudoを使用している場合)、Von Neumanがあなたの魂に慈悲を抱いてくれるかもしれません。
これをコメントに入れていたはずですが、コードをまったくフォーマットできませんでした。
vimセッションをすでに実行している場合は、
:silent e scp://user@myserver[:port]//path/to/file.txt
:silent
正面には抑制されますPress Enter to Continue
メッセージを
そして
e scp://user@myserver[:port]//path/to/file.txt
Ex
remnoteファイルを編集するモードコマンドです。
BitVise SSHD
Windows 10 で実行し、Ubuntu 16.04 で実行するVIMを使用してテスト済み
Press Enter to Continue
は最初の読み込みを抑制しますが、その後の読み込みは抑制しないことに注意してください:w
deb
ベースになっていないためにインストールされていないディストリビューションでは、インストール手順が失敗しますapt-get
。(その場合、yum
またはzypper
存在する可能性があります。)また、ローカルマシンでrootを必要としますが、利用可能である場合と利用できない場合があります。(これが悪い解決策だと言っているわけではありませんが、大きな前提条件があります。)