有没有可以在 Windows 上使用 Powershell 的 tmux/screen 替代品?我知道 Powerscreen,但它似乎已经停用很长时间了。Cygwin 不能与 Powershell 一起使用,对吧?Console2 是非常穷人的解决方案。
还有其他想法吗?
答案1
尽管最初提出这个问题时这是不可能的,但有了适用于 Linux 的 Windows 子系统,现在可以使用“真实的”tmux
来管理 PowerShell 窗口。
简洁版本
在已安装的 WSL 实例中tmux
,使用以下命令进行设置~/.tmux.conf
:
set -g default-command "cd $(pwsh.exe -c 'Write-Host -NoNewLine \$env:userprofile' | xargs -0 wslpath); exec pwsh.exe --nologo"
set-window-option -g automatic-rename off
bind c new-window -n "PowerShell"
优点和特点
大部分您通常期望的功能tmux
,包括:
- 完整(?)热键支持
- PowerShell 的回滚/复制模式
- 还有很多
限制
- 如果原始会话断开,重新连接将导致管道断裂。但是,只要原始会话保持打开状态,您就可以同时连接多个客户端。
更多细节
有几种方法可以进行设置,但目前我采用以下方法:
安装适用于 Linux 的 Windows 子系统。您不必启用 WSL2;只需 WSL v1 即可完成此操作(可能比 WSL2 更好)。
安装 Alpine Linux 发行版。我使用它作为 tmux 功能的基础,因为它的开销非常小(包括 在内的开销不到 12MB
tmux
)。接下来的几个步骤是可选的。我为 PowerShell tmux 创建了一个新的克隆 WSL 实例。您可以只使用默认的 Alpine 实例,但我喜欢拥有单一用途的 WSL 实例,类似于 Docker 容器。
mkdir $env:userprofile\Documents\WSL\instances # Or wherever you want to set this up mkdir $env:userprofile\Documents\WSL\images cd $env:userprofile\Documents\WSL wsl --export Alpine .\images\alpine_base.tar mkdir .\instances\posh_tmux wsl --import posh_tmux .\instances\posh_tmux .\images\alpine_base.tar --version 1
使用 root 身份启动 WSL 实例
wsl -d posh_tmux -u root
adduser tmux
,并设置密码。/etc/wsl.conf
通过创建以下内容来设置实例的默认用户:[user] default = tmux
apk add tmux
安装tmux
退出会话,重新启动
wsl ~ -d tmux
(省略用户名,因为它现在默认为 tmux 用户)~/.tmux.conf
使用以下内容创建:set -g default-command "cd $(pwsh.exe -c 'Write-Host -NoNewLine \$env:userprofile' | xargs -0 wslpath); exec pwsh.exe --nologo" set-window-option -g automatic-rename off bind c new-window -n "PowerShell" # Give this tmux a "PowerShell blue" color to differentiate it set -g status-bg blue # Use UTF8 set -qg utf8 set-window-option -qg utf8 on # Recommended, to avoid the Ctrl+B finger-gymnastics # Change default prefix to Screen's unbind C-b set-option -g prefix C-a bind-key C-a send-prefix bind-key -n C-b send-prefix bind C-a last-window # Optional # split panes using - and | bind | split-window -h bind - split-window -v unbind '"' unbind % set -g history-limit 10000 set -g default-terminal "screen-256color"
~/.profile
使用以下内容创建:if tmux has-session -t=posh; then exec tmux attach-session -t posh else exec tmux new-session -s posh -n PowerShell fi
在 Windows Terminal、ConEmu 或您喜欢的任何方式中设置
PowerShell Core tmux
配置文件。启动命令很简单wsl -d tmux_posh
如果您需要在不进入 tmux/PowerShell 的情况下访问实例(例如,进入
sudo apk upgrade
或 编辑配置),请改用wsl ~ -d tmux_posh -e sh
(或wsl ~ -d tmux_posh -u root
)启动。您可以
tmux
通过 访问 PowerShell 中的命令wsl -d tmux_posh -e tmux <tmux_command
。例如,wsl -d tmux_posh -e tmux rename-window host1
。TODO:tmux
为此创建一个包装器 PowerShell 函数。TODO:PowerShell 提示函数将窗口名称动态设置为最后执行的命令
答案2
它与 tmux 或 screen 并不完全类似,但 PowerShell 具有管理远程会话的功能。Ed Wilson 写了一篇关于它的博客文章,标题为了解如何管理远程 PowerShell 会话,这可能会有所帮助。另请参阅about_PSSessions PowerShell 帮助主题。
你能详细说一下你想要实现的目标吗?
答案3
试试 Cmder。它太棒了!它甚至与 Windows 版 git 捆绑在一起。 https://cmder.app/
答案4
我已经有一段时间没用过 Windows 了,但刚刚偶然发现https://wezfurlong.org/wezterm/features.html很符合我的要求
除其他外,它还有标签和垂直/水平分割