SSH 客户端和命令提示符替代 Windows 外观

SSH 客户端和命令提示符替代 Windows 外观

问题

我一直专注于 Windows 工作。我可以处理这个。

我一直专门在 DOS 上工作(很久以前!)。我可以处理它。

我一直专注于 Unix。我可以处理它。

现在,我正在 Windows 机器上开发一个命令行(python)应用程序,在 DOS 框(即 Windows 的命令提示符)中对其进行测试,然后将其部署到 Linux,并使用 PuTTY 运行它。

我无法处理这个。

当 CTRL-C 在一个窗口(Windows)中切换并在另一个窗口(DOS、Linux)中终止进程时,我的工作效率急剧下降。

当 Enter 在一个窗口(DOS)中复制选择,在另一个窗口(Windows)中删除选择,并在第三个窗口(PuTTY)中运行当前半编辑的命令时,我的工作效率急剧下降。

当我无法点击“撤消”、“返回”或“结束”时,我的工作效率急剧下降。

我寻求的解决方案

运行在 Windows 上的 SSH/Bash 命令行客户端,尽可能使用所有标准的 Windows 快捷键(剪切、复制、粘贴、撤消、Home、End、Insert、Shift-Arrows 等),这些快捷键可在 bash 命令行上使用。如果将光标放在字母之间而不是字母上,则可获得加分。此外,还有一个在 Windows 上运行的等效 DOS 命令行插件,并提供相同的界面。

我知道在需要的时候可能需要有特殊按钮来实际传输 CTRL 代码(如 CTRL-C)。

我怀疑 SSH 客户端需要特定于一个 shell(这样它就知道何时在命令提示符下,以及何时在正在运行的应用程序内。)

我知道有很多SSH 客户端,但我正在寻找针对特定需求的建议。PuTTY 感觉像是困在 Windows 上的 Unix 程序员的一条逃生路线。我恰恰相反。

有人可以推荐一个吗(或者可能是 SSH 客户端和命令行替代品的组合)?

更新:在看到这里的早期答案后,我把我的要求变成了博客文章,这可能会为我所研究的方向提供更多背景信息。

答案1

对于终端工作我使用'薄荷味' 可用作 '赛格威' 包。然后我显然运行一个“真正的” shell(在我的情况下是 zsh),虽然 powershell 并不是那么糟糕(糟糕的部分实际上是 windows 提供的终端。它太可怕了)。

  • 您可以从 bash/zsh 内部启动 cmd.exe
  • 你在 cygwin 中有 ssh
  • 您可以更改 mintty 中光标的外观(因此它显示为 | 而不是块)
  • 您可以像在 xterm 中一样标记文本,然后使用 ctrl+leftclick 可以在标记的文本上启动适当的应用程序(假设您标记http://superuser.com并按 ctrl+leftclick -> 浏览器启动,如果您选择了 C:\Windows,则资源管理器启动等)

唯一的其他方法是通过 ssh 会话直接在远程服务器上进行开发,使用一个不错的编辑器(想到了 vim)。

答案2

由于 Unix 惯例以及终端、终端驱动程序和 shell 之间输入处理职责的划分,这很困难。但您可以做一些事情。

正如已经指出的那样,使用 mintty、Ctrl+Insert 和 Shift+Insert 可从 Windows 剪贴板复制和粘贴。终端无法剪切,因为它无法控制 shell 的行缓冲区。这些快捷方式来自 IBM 的通用用户访问 (CUA) 标准。它们首先出现在 DOS 应用程序中,并且从一开始就存在于 Windows 中。

与此同时,Ctrl+X/C/V 则来自 Mac。可以说它们更方便,但在终端中使用这些键的最大问题当然是 Ctrl+C 是中断键,许多应用程序也使用它来执行诸如取消之类的操作。此外,Ctrl+V 是 shell 中“quoted-insert”的标准键,它可以从下一次按键中删除任何特殊含义,而 Ctrl+X 是许多两步快捷键的第一个键。

我认为在 Bash 中没有办法使用 Shift+箭头来标记文本。相反,您可以按 Ctrl+Space 设置“标记”,然后如果您移动光标,则会选择标记和光标之间的文本。不幸的是,您实际上看不到选择(称为“区域”),因此您必须记住标记的位置。

(Zsh 的工作原理相同,但与 Bash 不同的是,它会突出显示选择。mintty 的增强问题 84 要求能够在终端级别使用键盘选择文本;这样的功能可能会使用 Shift+箭头。)

现在,操作“区域”的默认快捷键是 emacs 的,但你可以将它们更改为 Mac 风格,只需将以下内容放入.inputrc主目录中的文件中即可。(阅读有关.inputrcBash 的男人

"\C-x": kill-region
"\C-c": copy-region-as-kill
"\C-v": yank

但是等等,这些键的特殊含义是什么?好吧,您刚刚失去了所有 Ctrl+X 两步快捷键,因此您必须自己重新绑定您真正需要的快捷键。同时,Ctrl+V 的功能可以转到 Ctrl+Q:

"\C-q": quoted-insert

剩下的就是最重要的 Ctrl+C。这实际上是由终端驱动程序处理的,因此您需要使用“stty”将其移动到其他位置。Mintty 有一个控制序列,允许更改 Escape 键码,以便将其用作中断键。将其放入您的 Bash 启动脚本即可实现此目的:

echo $'\e[7728h'
stty intr ^\

Mintty 的各种特殊键的键码还允许将一些其他 stty 设置更改为 Windows 风格:

  • swtch ^] susp ^]- 使用“暂停”而不是“Ctrl+Z”来使进程休眠
  • eof ^^- 使用 Ctrl+Enter 代替 Ctrl+D 结束文件
  • werase ^_- 使用 Ctrl+Backspace 而不是 Ctrl+W 来删除单词
  • lnext ^q- 使用 Ctrl+Q 代替 Ctrl+V 来直接插入下一个字符

您可能还想删除用于停止(^S)和启动(^Q)输出的终端驱动程序快捷方式,这些快捷方式实际上没什么用,但很容易引起混淆:

stty start - stop -

回到.inputrc,那里有一堆 Windows 风格的键绑定:

# Ctrl+Left/Right to move by whole words
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# Ctrl+Backspace/Delete to delete whole words
"\e[3;5~": kill-word
"\C-_": backward-kill-word

# Ctrl+Shift+Backspace/Delete to delete to start/end of the line
"\e[3;6~": kill-line
"\xC2\x9F": backward-kill-line

# Alt-Backspace and Ctrl+Z for undo
"\e\d": undo
"\C-z":undo

最后,您可能还会发现以下快捷方式也很有用。它们会在历史记录中查找与当前行开头相同的行:

# Ctrl-Up/Down for searching command history
"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

答案3

我认为赛格威满足你的要求...但是我已经好几年没用它了。我现在就安装它,看看它怎么样。不过,如果只用作 ssh 客户端,那就有点大材小用了。

答案4

我发现与 Windows 最兼容的 bash 是 GIT Bash,它比 cygwin 轻量得多。wintty不过有些命令需要使用别名 - 例如,我发现 az cli 需要使用-Xallow-non-ttyset 来设置别名,而其他命令(如 node 和 packer)则不需要此开关

相关内容