如何通过ssh远程编辑文件?


82

我必须编辑通过ssh可以到达的某些服务器上的文件。

我希望在vim工作站上以自定义的方式编辑这些文件(我无权更改vim远程服务器上的设置)。有时我想使用sublime text或其他GUI编辑器来编辑文件。

当然,我可以下载这些文件,在本地对其进行编辑,然后将其上传回服务器。有更优雅的解决方案吗?

Answers:


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用户,无论是否可用。(这并不是说这是一个不好的解决方案,但这有很大的先决条件。)
Ulrich Schwarz 2015年

4
好的。弄清楚了。所有这些都是在本地计算机上完成的。对于OS X,必须安装osxfuse和安装sshfs。可以使用自制软件(brew install sshfsbrew cask install osxfuse,或从osxfuse.github.io
启发

95

您可以这样操作scp

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

请注意//服务器和路径之间的两个斜杠,这是正确解析绝对路径所必需的。(第一个斜杠是句法,而第二个斜杠照常指定远程用户的根目录。要从主目录开始,您可以这样做[:port]/~/path/to/file.txt。)[:port]是可选的。

这是由vim的netrw.vim标准插件处理的。支持其他几种协议。


6
是的,该文件被检索到一个临时文件,该文件在保存时上传到服务器。
FloHimself 2015年

1
谢谢。但是,尝试保存文件时出现错误:E382: Cannot write, 'buftype' option is set
织机

2
您可以:set buftype=""​在vim中尝试。
FloHimself

2
此外,vim将使用读取~/.ssh/config并解析远程主机vim scp://[host]/path
Jangari '18

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

根据您希望编辑的文件数量和类型,这可能不完全是您想要在此处执行的操作,但是我认为值得一提。如果您必须在远程服务器上编辑文件,但想使用自己工作站上的所有内容,则可能要开始考虑在计算机上使用某种版本控制系统。这样,您可以使用所选软件在自己的计算机上修改本地副本,提交更改,然后仅在目标计算机上更新本地副本。除了使用您喜欢的任何软件编辑文件之外,您还拥有与每个文件相关的更改历史的附加值,这总是很好的。

这是修订控制软件的列表,以防万一。


您是否在建议使用诸如将更改提交到git,将其推送到并将其从中github拉出github到本地计算机以在此处进行更改的用法?
alpha_989 '18

对于复杂的代码更改,这是可行的..但对于简单的代码更改,则可能是.. @ FloHimself或提到的shivams易于实现
。.– alpha_989

1

要扩大对Potts先生的回答:您还可以执行上述操作,然后在.bash_profile(或您的shell使用的任何内容)中放入类似的内容:

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

其中Loom是您登录时使用的原始用户ID。

如果您以共享帐户(而不是个人帐户)身份登录,则请使用sudo su,那么冯·诺伊曼可能会对您的灵魂充满怜悯,因为您迷路了。

我本来会在注释中写这个,但是我根本无法格式化代码。


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.txtEx用于编辑remnote文件的模式命令。

BitVise SSHD在Windows 10上运行并在Ubuntu 16.04上运行VIM进行了测试


请注意,这会抑制Press Enter to Continue初始加载,但不会抑制后续加载:w
Sparhawk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.