我最近从 Ubuntu 切换到 Windows 11,发现此功能不起作用:
在 Ubuntu 终端中,当我使用 sftp CLI 时,Tab
意味着完成目录中的文件/文件夹名称。
但是,在 Windows 终端中,使用 sftp CLI 时,Tab
意味着插入一个制表符。
我可以将Tab
其行为改为与 Ubuntu 中的行为相同吗?
PS我觉得这个问题有点类似于在终端中使用 sftp 时,Mac OS X 中的 Tab 自动完成,对他来说,是 MacOS 而不是 Windows 11。
答案1
的行为Tab部分由程序定义。要使制表符补全起作用,程序需要将终端设置为一次一个字符的模式(原始模式),而不是默认的行模式,并在内部处理所有输入(箭头键、退格键等),而不是将其留给 tty 层。
OpenSSH 的客户sftp
端使用自由编辑用于输入编辑和制表符补全的库(类似于更常见的 readline),因此这些功能只有在sftp.exe
使用 libedit 支持编译时才会激活。不幸的是,Microsoft 版本的 OpenSSH 不使用 libedit,因此您只能获得 OS 终端层提供的功能。您需要维护自己的 Win32-OpenSSH 版本,或者使用其他具有该版本的变体(可能是“Git for Windows”中的 MSYS OpenSSH 或 Cygwin OpenSSH)。
(我还建议使用lftp
FTP&SFTP 客户端,因为它具有更令人愉快的 CLI,但不幸的是它似乎根本不适用于 Windows。)
一名开发人员关闭了 Win32-OpenSSH 的一个相关 GitHub 问题,他认为 tty 层应该处理制表符补全——这确实是 Windows 上的一项功能,其中 Conhost 在使用 Cmd.exe 时处理制表符补全,但不允许补全偏僻的在 sftp.exe 支持的情况下文件名。