Vim - 远程文件编辑
Vim - 远程文件编辑
Section titled “Vim - 远程文件编辑”处理远程服务器上的文件是一项常见的任务。虽然你可以通过 SSH 连接到服务器并在那里编辑文件,但 Vim 允许你直接从本地 Vim 实例(利用你的本地配置和插件)编辑远程文件。这主要得益于内置的 netrw 插件。
- 访问远程文件
- 理解
netrw如何处理读取和写入 - 其他支持的协议
使用 netrw 访问远程文件
Section titled “使用 netrw 访问远程文件”Vim 的 netrw 插件(默认启用)允许你通过网络编辑文件。打开远程文件的语法是:
vim <protocol>://[user@]hostname/<path_to_file>例如,要使用 SCP 协议,以用户 john 的身份编辑 remote-server.com 上的 /tmp/message.txt 文件:
$ vim scp://john@remote-server.com//tmp/message.txt注意主机名后面的双斜杠 // 表示服务器上的绝对路径。单斜杠 / 将表示相对于用户主目录的路径 (例如,scp://john@remote-server.com/project/file.txt)。如果已配置,Vim 会提示输入密码或使用 SSH 密钥。
你也可以在已运行的 Vim 会话中,使用 :edit (或 :e) 命令打开远程文件:
:e scp://john@remote-server.com//etc/config.conf文件打开后,你可以像编辑任何本地文件一样编辑它。当你使用 :w 保存时,netrw 会处理将文件传回远程服务器的操作。
理解 netrw 的读写操作
Section titled “理解 netrw 的读写操作”当你打开一个远程文件时,netrw 会将其获取到临时本地文件。你编辑的是这个本地副本。当你写入文件时 (例如使用 :w),netrw 会将此临时文件的内容传回远程位置。
原教程中提到了 :Nread 和 :Nwrite。这些是底层的 netrw 命令。通常,用户通过标准 Vim 命令(如 :e、:w、:split 等)应用于远程路径来透明地与 netrw 交互。
例如,要明确地将远程文件读入当前缓冲区 (不如使用 :e 常见):
:Nread scp://john@remote-server.com//tmp/status.log并将当前缓冲区的内容写入远程文件:
:Nwrite scp://john@remote-server.com//var/www/html/index.html然而,使用 :e remote_path 然后 :w 是更常用的工作流程。
你也可以通过打开一个目录路径来浏览远程目录:
:e scp://john@remote-server.com/projects/这会打开一个 netrw 浏览器窗口,列出远程目录的内容。你可以从那里导航并打开文件。更多详情请参见 :help netrw。
其他支持的协议
Section titled “其他支持的协议”除了 SCP,netrw 还支持其他几种用于远程文件访问的协议:
- FTP:
ftp://[user[:password]@]hostname/path - SFTP:
sftp://[user@]hostname/path(对于交互使用通常比 SCP 更受欢迎) - HTTP/HTTPS:
http://hostname/path或https://hostname/path(通常只读) - rsync:
rsync://[user@]hostname[:port]/path(用于文件传输,通常需要在本地和远程都安装rsync) - DAV (WebDAV):
dav://[user@]hostname/path或davs://...用于安全的 WebDAV
这些协议的可用性和行为取决于你的 Vim 编译选项和系统配置。如果你的服务器支持 SSH,SFTP 是一个可靠的选择。
另一种方法:为了更无缝地进行远程编辑,一些用户更喜欢在操作系统级别使用 sshfs 等工具挂载远程文件系统。挂载后,远程文件对 Vim 和所有其他应用程序来说就显示为本地文件了。