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

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

评论

vim scp:// $ USER @ $ HOSTNAME // etc / passwd

#1 楼

您可以通过使用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。

评论


毫不奇怪,安装步骤将在不基于deb的发行版上失败,因此没有apt-get。 (在这种情况下,可能会出现yum或zypper。)它们还需要在本地计算机上具有root用户,无论是否可用。 (这并不是说这是一个不好的解决方案,但它具有很大的先决条件。)

–乌尔里希·施瓦茨(Ulrich Schwarz)
15年5月12日在11:26



好的。弄清楚了。所有这些都在本地计算机上完成。对于OS X,必须安装osxfuse和sshfs。这些可以通过homebrew(brew install sshfs和brew cask install osxfuse或从osxfuse.github.io获得的软件包安装)

– inspirednz
17年6月26日在3:22

#2 楼

您可以通过scp来做到这一点,例如:

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


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

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

评论


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

– FloHimself
15年5月12日在9:17

您可以在vim中尝试:set buftype =“”

– FloHimself
15年5月12日在9:20



此外,vim将读取〜/ .ssh / config并使用vim scp:// [host] / path解析远程主机。

–扬加里
18年4月3日在4:05

在ssh配置中包含一个条目,其中包含主机的别名,主机名,用户名和身份文件的路径,然后可以使用vim scp:// [alias] / path直接从vim打开文件。如果该路径是相对于您的远程登录主页的路径,则您将使用一个斜线。如果在文件系统中为绝对,则为两个:vim scp:// host // etc / ssh / ssshd_config。

–扬加里
18年5月30日在21:31

@stillanoob::e scp:// ...

– FloHimself
19年4月2日在11:06

#3 楼

根据您所说的无权编辑Vim设置时的意思,可能会以某种方式在服务器上使用Vim。如果您不能更改用户.vimrc(例如,因为您以共享用户身份登录),但是仍然可以创建文件,请将其创建为名为Loom.vimrc的文件,然后使用-u开关调用Vim:

vim -u ~/Loom.vimrc file_to_edit

您甚至可以使用别名:alias vim='vim -u ~/Loom.vimrc'将允许您以常规方式使用Vim,并且仍将加载自定义的.vimrc文件。注销后该别名将不会保留,因此您无需担心其他人意外地使用了自定义的Vim。

#4 楼

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

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

评论


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

–alpha_989
18年5月30日在18:19

对于复杂的代码更改而言,这是可行的。但是对于简单的代码更改而言,.FloHimself或shivams提到的内容更易于实现。

–alpha_989
18年5月30日在18:20

#5 楼

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

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


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

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

本来可以在注释中输入,但是我根本无法格式化代码。

#6 楼

如果已经运行了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是用于编辑remnote文件的Ex模式命令。

已在Windows 10上运行的BitVise SSHD和在Ubuntu 16.04上运行的VIM上进行了测试。

评论


只需注意,这会禁止按Enter键继续进行初始加载,但不会抑制任何后续的:w

– Sparhawk
18-10-9在4:45

#7 楼

可以使用多个选项,而不仅仅是“ scp”,请参见:https://www.vim.org/scripts/script.php?script_id=1075
我更喜欢使用“ rsync”,因为对我来说“ diff”在scp上无法正常工作。
示例-使用bash扩展名,在不同的远程服务器(hostname01.domain.my和hostname02.domain.my和...)上的“ / tmp / test”文件启动vim。 ,垂直分割:
vimdiff -O rsync://hostname{01,02,03}.domain.my:/tmp/test

#8 楼

如果您更注重GUI,并使用像Ubuntu或Mint这样的对新手更友好的Linux发行版之一,则这是另一种选择,不需要进行任何其他安装。
您应该将nemo用作默认文件管理器。在菜单上它可能不会被称为“ Nemo”,因此请转到文件管理器(“文件”应用程序)的Help > About下进行查看。
在nemo中,转到File > Connect to server,输入远程计算机的详细信息(SSH的默认端口为22),然后使用您喜欢的任何编辑器打开文件,就像打开本地计算机上的任何文件一样。您甚至可以关闭Nemo并继续在编辑器中工作。
在地址栏中,它似乎正在使用sftp协议。
请注意,如果远程主机的SSH连接没有活动超时,这还会阻止您在超时断开连接后在编辑器中保存更改...

#9 楼

我经常使用类似以下的内容
for i in hosta hostb hostc
do
ssh -t vim xx.txt
done

,所以诀窍是
ssh -t vim xx.txt


评论


该命令不会像OP明确要求的那样在本地执行vim。

–格雷戈里·穆萨(Gregory MOUSSAT)
20 Dec 1'在18:06