在使用 vim 编辑远程文件时,scp 是最常用的传输方式。使用方式如下
:edit scp://username@hostname//root/.ssh/authorized_keys
注意命令中 hostname 后的 //
,如果只有一个 /
,表示编辑用户目录下的问题。两个 /
表示文件路径从根目录开始
Windows 下并没有原生的 scp 工具可用,需要自己安装。比较常见的选择是 Cygwin 和 PuTTY,不过本文使用的是 msysgit 安装后自带的 scp 工具,如果已经安装了这个最常用的 windows 平台 git 版本,将会比其它两种方式方便很多。Cygwin 是个大家伙,PuTTY 虽然能够比较好的支持 Windows 路径,但使用的 ssh key 有些古老,需要额外的转换操作。
在开始前,请确保 msysgit 的 bin
目录已经添加到系统的环境变量 Path
中。该目录通常在 msysgit 安装目录下,包含了很多 unix 工具的不完全移植版本。在 git bash 中使用 scp 命令:
scp root@192.168.1.11:.ssh/authorized_keys /C/tmp/authorized_keys
msysgit 的 scp 命令不能用识别 Window 下的 C:
格式的盘符,需要将其转换为 /C/
格式。vim 的 netrw 插件并不直接支持这种格式的路径,默认情况下 netrw 把临时文件保存在操作系统的临时文件下(可以使用 :! set TEMP
查看)。因此编辑远程文件时会出问题。所幸的是 netrw 提供了对 Cygwin 的支持,对其进行稍加修改就能够支持 msysgit 的 scp。
1) 打开 $VIM\vim73\autoload\netrw.vim
2) 替换所有的 cygdrive/
为 /
后保存(也许你应该在替换前确认到底做了哪些修改)
:%s/cygdrive\///g
:wq
3) 配置 vimrc , 使 Cygwin 模式。如果系统临时文件目录比较长,名称中包含 ~
等字符,还需要修改临时文件的目录 $TMP
。vim 生成的临时文件名可以使用 :echo tempname()
查看。
let g:netrw_cygwin = 1
let $TMP='C:\tmp\'
到此已经可以正常使用 scp 编辑远程文件了。在配置好 ssh key 之后,可以加入选项
let g:netrw_silent = 1
这样每次下载和上传文件后后将自动关闭shell窗口