当我通过 SSH 连接到我的工作服务器时,我正在尝试使用 Sublime Text 2 作为编辑器,但我很困惑。我发现这个http://urbangiraffe.com/2011/08/13/remote-editing-with-sublime-text-2/(在许多其他帖子中)看起来可能会有所帮助,但我不完全遵循它,特别是我应该在第 5 行中为远程变量输入什么值。我将“/Users/path/to/local/copy”设置为我的本地根目录,但我不知道这是否正确或者是否还有更多去做。有什么想法吗?我在 OSX10.8
15 回答
有以下三种方式:
使用 SFTP 插件(商业)http://wbond.net/sublime_packages/sftp - 我个人推荐这个,因为在使用密码设置公共 SSH 密钥后,它是安全、简单且值得每一分钱http://opensourcehacker.com/2012/ 10/24/ssh-key-and-passwordless-login-basics-for-developers/
使用注释中提到的
osxfuse
和将远程挂载为本地文件系统。sshfs
这可能有点困难,具体取决于 OSX 版本和您对 UNIX 文件系统的技能。将诸如 rmate 之类的东西组合在一起,它使用某种本地守护程序通过远程隧道进行文件编辑(非常困难,麻烦,但与 sudo 兼容) http://blog.macromates.com/2011/mate-and-rmate/
此外,理论上,您可以在远程服务器上安装 X11 并通过 VNC 或 X11 转发在那里运行 Sublime,但这样做没有意义。
我在 Windows 上使用了 4 种方法: Linux 上的SFTP、WinSCP、Unison和Sublime Text,通过 SSH 到 Windows 的 X11 转发(是的,你可以在没有混乱的配置和使用免费工具的情况下做到这一点)。
如果您可以在 Linux 机器上安装软件,则第四种方法是最好的。
第四种方式:
MobaXterm
- 在 Windows 上安装MobaXterm
- 从 MobaXterm SSH 到您的 Linux 机器
- 在你的 linux 机器上,安装 Sublime Text 3。这是在 Ubuntu 上的方法
- 在命令提示符下,使用 sublime 启动
subl
- 就是这样!你现在在 Linux 上运行了 sublime text,但它的窗口在你的 Windows 桌面上运行。这是可能的,因为 MobaXterm 为您处理通过 SSH 的 X11 转发,因此您不必做任何时髦的事情来让它运行。可能会有一点延迟,但您的文件永远不会不同步,因为您正在 Linux 机器上编辑它们。
注意:在调用 subl 时,如果它抱怨某个库 - 确保安装它们以成功从 mobaxterm 调用 sublimetext。
如果你不能在你的 Linux 机器上安装软件,最好的是 Unison。为什么?
- 免费
- 它很快
- 它是可靠的,不在乎你使用哪个编辑器
- 您可以创建自定义忽略列表
SFTP
设置:安装SFTP Sublime Text 包。此软件包需要许可证。
- 新建一个文件夹
- 将其作为 Sublime Text 项目打开。
- 在边栏中,右键单击文件夹并选择 Map Remote。
- 编辑 sftp-config.json 文件
- 右键单击步骤 1 中的文件夹选择下载。
- 在当地工作。
在 sftp-config 中,我通常设置:
"upload_on_save": true,
"sync_down_on_open": true,
除了机器的 SSH 终端外,这还为我提供了相当无缝的远程编辑体验。
WinSCP
- 安装并运行WinSCP
- 转到首选项 (Ctrl+Alt+P) 并单击传输,然后单击添加。命名预设。
- 将传输模式设置为二进制(您不需要行转换)
- 将文件修改设置为“无更改”
- 单击“文件掩码”旁边的“编辑”按钮并设置包含和排除文件和文件夹(当您存在 .git/.svn 文件夹或想要排除构建产品同步时很有用)。
- 点击确定
- 连接到您的远程服务器并导航到感兴趣的文件夹
- 在本地计算机上选择一个空文件夹。
- 选择您新创建的传输设置预设。
- 最后,按 Ctrl+U(命令 > 保持远程目录为最新)并确保选中“启动时同步”和“更新子目录”。
从那时起,WinSCP 将使您的更改保持同步。
使用 SublimeText 在本地文件夹中工作。只需确保将 Sublime Text 设置为从正在编辑的文件中猜测行尾。
齐声
我发现如果源代码树很大(大约几百 MB,层次结构很深),那么上面描述的 WinSCP 方法可能会有点慢。使用Unison可以获得更好的性能。不利的一面是 Unison 不是自动的(您需要通过按键触发它)并且需要在您的 linux 机器上运行服务器组件。好处是传输速度非常快,非常可靠,并且忽略文件、文件夹和扩展名非常容易设置。
作为@ubik 回答的后续行动,这里有三个简单的(一次性)步骤,可以让“subl”命令在您的远程服务器上运行:
- [本地]使用Sublime 包管理器
rsub
在 Sublime Text 中安装包 [本地] 执行以下 Bash 命令(这将建立一个SSH 隧道,这是 rsub 的秘诀):
printf "Host *\n RemoteForward 52698 127.0.0.1:52698" >> ~/.ssh/config
[服务器] 在远程服务器上执行以下 Bash 命令(这将安装 'subl' shell 命令):
sudo wget -O /usr/local/bin/subl https://raw.github.com/aurora/rmate/master/rmate; sudo chmod +x /usr/local/bin/subl
瞧!你现在通过 SSH 使用 Sublime Text。
您可以使用类似的东西从服务器打开 Sublime Text 中的示例文件subl ~/test.txt
我在 MacOS 上,对我来说最方便的方法是使用CyberDuck,它是免费的(也适用于 Windows)。您可以连接到远程 SSH 文件系统并使用本地编辑器编辑文件。CyberDuck 所做的是将文件下载到本地操作系统上的临时位置,然后使用编辑器打开它。保存文件后,CyberDuck 会自动将其上传到您的远程系统。就好像您正在使用本地编辑器编辑远程文件一样透明。Cyberduck 的开发人员还制作了用于挂载远程文件系统的MountainDuck 。
你可以试试我一直在研究的东西,叫做' xeno '。它将允许您通过 SSH 连接在 Sublime Text(或任何本地编辑器)中打开文件/文件夹,并自动将更改同步到远程机器。它应该适用于几乎所有的 POSIX 系统(我自己在 OS X 上使用它来连接 Linux 机器并在 Sublime Text 中编辑文件)。它是免费和开源的。我希望得到一些反馈。
更多信息:它基本上是一个用 Python 编写的 Git/SSH 混搭,允许您在本地编辑器中编辑远程机器上的文件和文件夹。你不需要配置内核模块,不需要持久连接,这一切都是自动的,并且不会干扰现有的源代码控制,因为它使用了工作树之外的 Git 存储库。此外,由于它是基于 Git 构建的,因此速度非常快,并且支持自动合并两端可能会发生变化的文件,这与 SSHFS/SFTP 不同,后者只会破坏任何具有较旧时间戳的文件。
我知道这已经很老了,但我有一个非常酷的方法值得分享。
打开 WinSCP.exe 并登录到我想要的远程服务器(我
发现在附加之前登录很重要 ... )。在 WinSCP 的首选项 - 两个设置更改。选择 Explorer 类型的界面而不是 Commander - 这样您就看不到本地文件。除非你想(但这似乎很糟糕)。将 Sublime 设置为默认编辑器。
打开 ConEmu,右键单击选项卡栏并选择选项
Attach to...
。将打开一个对话框,其中包含您正在运行的应用程序。选择,WinSCP 并选择确定。ConEmu 现在将有一个打开的选项卡,其中 WinSCP 显示您的远程文件。右键单击 WinSCP 选项卡并选择
New console...
. 当对话框打开时,输入系统上 Sublime 可执行文件的路径。在您按下 之前,在显示选择单选按钮并设置百分比Start
的框中。我通常选择 75%,但您可以根据自己的喜好自定义,以后可以更改。New console split
to right
- 现在您将在 WinSCP 右侧运行的同一窗口中看到 Sublime。在 Sublime 中,从 View 菜单中选择
Sidebar->Hide Sidebar
,然后 bam,您现在拥有与本地完全相同的远程文件 - 当然有一些注意事项是远程编辑任何内容。不过,WinSCP 的速度很快。
- 现在您将在 WinSCP 右侧运行的同一窗口中看到 Sublime。在 Sublime 中,从 View 菜单中选择
我有两台显示器 - 左显示器显示 Chrome 浏览器,右显示器显示代码编辑器。同样在 中ConEmu
,我创建了另一个选项卡并 ssh 进入我正在处理的站点,因此我可以执行诸如运行gulp
或grunt
远程操作之类的操作,还可以从命令行操作文件。大力加快发展。
这是一个屏幕截图:
您可以使用 sftp 将远程目录挂载到您的位置计算机上,然后像往常一样使用 Sublime 文本打开文件。
要使用 sftp 挂载远程目录,请在 Linux 文件管理器中输入以下内容;
sftp://user@remote_box.com:22/home/user/code_directory
根据您的互联网速度,它可能看起来很慢。但这对我有用。
这是本地编辑文件的最简单方法,这些文件位于您之前已将 ssh 设置为远程 IP 的远程主机上
# issue on local box
sudo apt-get install sshfs # on local host install sshfs ( linux )
# on local box create secure mount of remote directory
export REMOTE_IP=107.170.58.249 # remote host IP
sshfs myremoteuserid@${REMOTE_IP}:/your/remote/dir /your/local/dir # for example
完毕 !!!
现在在本地主机上开始编辑文件...当您在本地列出目录时,它可能不会列出任何内容,直到您 cd 进入子目录或列出特定文件...延迟加载...这不会影响编辑文件
subl /your/local/dir/magnum_opus.go # local file edit using sublime text
所以上面实际上是在编辑远程文件
/your/remote/dir/magnum_opus.go # remote file on box $REMOTE_IP
另一个类似于 osxfuse 的 mac 解决方案是只使用 Panic Software 的 Transmit FTP 客户端,它允许您将远程文件夹挂载为本地磁盘。它支持SFTP,非常安全。
我一直在从事一个名为GiySync的项目。它仍然需要一些工作,但它是开源的,我已经每天使用它几年了。我还在开发一个名为GitSyncApp的原生 OS X 版本
现在它只是 OS X,但它应该很容易添加对 Linux 的支持,也可能是 Windows。
它通过监视文件系统事件来工作,它使用git来同步本地机器和服务器上的项目文件夹。
我尝试了其他解决方案,如 osx fuse、Expand Drive、Transmit、几个使用 rsync 的解决方案等。它们都适用于小型项目,但如果您使用大量代码,它们对我不起作用。
许多文件系统选项都进行缓存以提高性能,这很好,直到不是。就像您正在与其他人一起工作并且其他人更改服务器上的文件一样。
如果我在一个不稳定或缓慢的网络上我最终会得到空文件,我也会遇到问题。或者文件没有同步,然后缓存变得很奇怪;希望你最近承诺。使用 git 解决了这个问题,因为它检查每个提交的完整性。
两个奖励功能:
- 每次保存都会有一个提交。它不是超级有用,但如果你必须及时回到过去,你可以。
- 它适用于任何文本编辑器。
根据您的具体需求,您可以考虑使用 BitTorrent Sync。在您的家用 PC 和工作 PC 上创建一个共享文件夹。在您的家用 PC 上编辑文件(使用 Sublime 或任何您喜欢的工具),它们会在您保存时自动同步。BitTorrent Sync 不依赖于存储文件的中央服务器(例如 Dropbox 等),因此理论上您应该清楚由于第三方存储敏感信息而导致的任何问题。
一个非常适合我的解决方案 - 在 Mac 上进行本地编辑,并让文件自动同步到远程机器
确保您对远程计算机具有无密码登录。如果没有,请按照以下步骤操作 http://osxdaily.com/2012/05/25/how-to-set-up-a-password-less-ssh-login/
在 ~/Library/LaunchAgents/filesynchronizer.plist 中创建一个文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>filesynchronizer</string> <key>ProgramArguments</key> <array> <string>/usr/bin/rsync</string> <string>-avz</string> <string>/Users/USERNAME/SyncDirectory</string> <string>USERNAME@REMOTEMACHINE:~</string> </array> <key>WatchPaths</key> <array> <string>/Users/USERNAME/SyncDirectory</string> </array> </dict> </plist>
在终端窗口中运行
launchctl load ~/Library/LaunchAgents/filesynchronizer.plist
就是这样。对 ~/SyncDirectory 中任何文件的任何更改都将同步到远程计算机上的 ~/SyncDirectory。本地更改将覆盖任何远程更改。
这将创建一个监控 SyncDirectory 的已启动作业,并且每当发生任何更改时,都会运行 rsync 以将目录同步到远程计算机。
lsyncd似乎是 sshfs 方法的不错替代方案。如果您使用“-delay 0”,它会实时工作。
这适用于 Mac 和 Windows 用户(我在 Mac 上使用)。多年来,我使用了几个列出的答案,发现FileZilla在我可以通过 SSH 访问的远程主机上编辑文件时非常适合我的需求。设置也很快。
- 我配置了一个新的服务器连接
- 连接到服务器
- 右键单击我要编辑的文件并选择
View/Edit
.
这会打开我的默认编辑器(Sublime),但它可以与您安装的任何编辑器一起使用。
- 保存文件后,Filezilla 会自动提示我询问是否要“将此文件上传回服务器”,我单击“是”,然后它会更新。