前言
有时候我们需要编辑远程服务器上的文件,通常的做法是使用 vim/nvim/nano 这样的命令行编辑器,但这些工具肯定没有本地编辑器用得顺手,没有长期的练习和使用不可能达到 vim 大神们那样的熟练度。
另外一种做法是使用 Termius 这一类 SSH 客户端工具自带的 SFTP 服务,从而间接使用本地的 Sublime Text 等文本编辑器。但每一次要编辑文件时,都要切换到 SFTP 窗口,找到要编辑的文件,双击打开后编辑,这一系列操作让编辑文件和在终端输入命令之间显得十分割裂。并且我在 MacOS 上几乎尝试了所有 SSH 客户端管理工具,这些工具要么闭源,要么占用内存过多,要么和上述所说的一样,不方便使用本地工具编辑文件,最后都被我 pass 掉,还是决定使用 iTerm + tssh 来管理我的 VPS。
那么,究竟有没有一种方法,可以在终端中使用一行命令,直接调用本地的 Sublime Text 来编辑 VPS 上的远程文件呢?答案是有的,而且使用起来十分优雅!
工具介绍
rmate 最初是为 TextMate 编辑器开发的远程编辑工具,但开源社区中有人重构了这个工具,使其可以通过插件的方式与其他一些编辑器(例如 Sublime Text)一起使用。它的工作原理是:在远程服务器上运行 rmate 命令,该命令会通过 SSH 隧道将文件传输到本地编辑器,编辑完成后再同步回服务器。
仓库地址:aurora/rmate: Remote TextMate 2 implemented as shell script
安装步骤
1. 在远程主机上安装 rmate
首先需要在远程服务器上安装 rmate。执行以下命令:
sudo wget -O /usr/local/bin/rmate https://raw.githubusercontent.com/aurora/rmate/master/rmate
sudo chmod a+x /usr/local/bin/rmate
2. 在本地安装 Sublime Text 插件
在本地的 Sublime Text 中,我们需要安装 RemoteSubl 插件来支持 rmate 协议。
仓库地址:randy3k/RemoteSubl: Use rmate with Sublime Text, an improved fork of rsub
安装步骤如下:
- 确保已安装 Package Control
- 打开命令面板(Windows/Linux 按
Ctrl+Shift+P,Mac 按Cmd+Shift+P) - 输入 "Package Control: Install Package"
- 搜索并安装 "RemoteSubl"
3. 配置 SSH 端口转发
为了让远程服务器能够与本地 Sublime Text 通信,需要设置 SSH 端口转发。有两种方式:
方式一:命令行指定
ssh -R 52698:localhost:52698 user@<server-ip>
方式二:SSH 配置文件(推荐)
编辑 ~/.ssh/config 文件,添加以下配置:
Host <server-nickname>
HostName <server-ip>
User <username>
RemoteForward 52698 localhost:52698
这样每次 SSH 连接时就会自动设置端口转发,不需要额外参数。
或者直接配置一个全局的,这样所有安装了 rmate 工具的 VPS 都可以使用:
Host *
RemoteForward 52698 127.0.0.1:52698
使用方法
- 确保本地已打开 Sublime Text
- 通过 SSH 连接到远程服务器
- 在远程服务器上使用 rmate 命令打开文件:
rmate test.txt
文件会自动在本地的 Sublime Text 中打开,编辑后保存时会自动同步到远程服务器。
使用技巧:为 rmate 设置别名
由于 Sublime Text 包含了一个命令行工具 subl,我们可以将 rmate 命名为 subl,和本地保持一致:
sudo wget -O /usr/local/bin/subl https://raw.githubusercontent.com/aurora/rmate/master/rmate
sudo chmod a+x /usr/local/bin/subl
这样一来,本地和远程文件都可以使用 subl 命令来编辑了:
subl test.txt