众所周知,在 Windows 命令行环境中编辑文件,非常困难,甚至不能实现,需要使用第三方软件。
这里说的命令行环境,是指在命令提示符或 Powershell 窗口里面,命令提示符即 Command Prompt,也就是著名的黑窗口软件 cmd.exe,命令行文本编辑是指在 cmd 或 Powershell 窗口内打开一个命令行软件来编辑文件或者直接调用内部命令编辑文件,而不是在 cmd 或 Powershell 中在它们的窗口外打开一个新窗口来运行其它软件,打开外部软件窗口,打开的是一个 GUI 软件,也就是有图形界面的软件,但在某些场景下,操作系统没有图形界面,只能在命令行环境登录操作系统,GUI 软件无法运行,比如 Windows Server core,或通过 Powershell Remoting 登录 Windows,或通过 ssh 登录到 Windows,在这些场景下打开一个图形界面的应用程序会导致命令行窗口被占用而无法输入后续的命令,打开的应用程序也不能像 GUI 环境中一样和用户完成交互,也有可能打开程序后看不到任何反应。
在命令行环境运行的软件,叫作控制台软件,想要在命令行环境编辑文件内容,需要一个控制台版本的文本编辑软件,早期 Windows 支持 edit 命令,后来发布的操作系统又不支持了,命令提示符支持 copy con <文件名> 直接在控制台编辑文件内容,直到现在最新版本的 Windows 还支持,但 copy con 只能创建新文件,不能打开现有文件,非常不好用,而且很别扭。
VIM 是一个非常强大的文本编辑软件,Linux 操作系统通常自带 VIM,VIM 也有 Windows 版,有 GUI 版本,也有 console 版本,即控制台版本,在 VIM 官方网站 vim.org 下载 Windows 版本,提供免安装压缩包,解压就可以使用,也提供安装程序版本,下载后安装一下,安装的时候可以选择是否安装命令行版本,GUI 版本始终会安装,在 VIM 程序目录,gvim.exe 是 GUI 版本 VIM,vim.exe 是控制台版 VIM,在命令行环境运行 vim.exe,将 vim.exe 放到支持 ssh 服务的 Windows 操作系统上,使用 ssh 登录到 Windows 时可以直接在控制台编辑服务端文件。
有一个问题是命令行环境通常要求软件小而且文件少,VIM 命令行软件只需要一个 vim.exe 就行,但也有一些限制,会缺少一些扩展功能,如果只是简单编辑一下文件,完全不会影响使用。如果只复制 vim.exe,每次运行 VIM 都需要按键盘才能开始工作,提示信息如下- Press ENTER or type command to continue
复制代码 这是正常现象,因为 VIM 的配置文件、语法和着色相关的文件全部缺失,要解决这个问题,通常只要在 vim.exe 所在文件夹新建一个空的默认配置文件即可。
也可以根据提示从 VIM 程序目录复制一些文件,提示信息可以在 vim.exe 窗口内部切换到命令模式,然后输入最稳妥的办法还是将 VIM 程序目录全部文件一起保留。
Powershell Remoting 不能有交互操作,所以会提示错误。- C:\wuxiancheng\vim\vim.exe : Vim: Warning: Output is not to a terminal
- + CategoryInfo : NotSpecified: (Vim: Warning: O...t to a terminal:String) [], RemoteException
- + FullyQualifiedErrorId : NativeCommandError
- Vim: Warning: Input is not from a terminal
复制代码 Powershell Remoting 支持在服务端和客户端之间传递文件,比如 Copy-Item -ToSession 和 Copy-Item -FromSession 分别用来将文件从客户端复制到服务端和将文件从服役端复制到客户端,如果通过 ssh 登录,也可以使用 sftp 登录到服务端,然后使用 get 命令下载文件,使用 put 命令来上传文件,如果要编辑另一台电脑上的文件,可以先将文件复制到客户端,在客户端编辑后再传到服务商,只不过这样的操作很麻烦,每保存一次文件就要上传一次。Windows 上 sshd 服务支持引入得比较晚,早期操作系统不支持 sshd 服务,从 Windows Server 2019 和 Windows 10 1809 开始才内置了 OpenSSH Server,而且默认没有激活,可以以管理员身份运行以下 Powershell 命令激活。- Add-WindowsCapability -Name OpenSSH.Server -Online
复制代码 参考链接 VIM OpenSSH Server |