WSL 從最初功能不全 bug 遍地都是,到現(xiàn)在除了少數(shù)幾個比較頑固的 bug 外,基本足以正常使用了。但自帶終端模擬器的體驗依然非常糟糕,而且在可以預(yù)期的未來都不會有太大的長進了。我是從去年 8 月開始開發(fā) wsl-terminal(中文頁面)的,期間因為想不到可以添加什么功能而擱置了比較長時間。最近心血來潮,添加了很多實用功能,用戶體驗也會上升很多。
希望有在使用的朋友可以多反饋下意見建議,如果之前沒有嘗試過,也可以體驗一下,軟件是一個 1.6 MB 的壓縮包,解壓后即可使用,不會往系統(tǒng)中寫入任何東西(如果想添加到開始菜單或者右鍵菜單,可以使用 tools 中的工具)。
介紹
用于 Windows Subsystem for Linux (WSL) 的終端模擬器,基于 mintty 和 wslbridge。
截圖

查看更多截圖。
用法
從這里下載最新版本并解壓,或者在
cmd.exe或 WSL 里運行bash -c "wget https://github.com/goreliu/wsl-terminal/releases/download/v0.8.1/wsl-terminal-0.8.1.7z && 7z x wsl-terminal-0.8.1.7z"。運行
open-wsl.exe可以在當前目錄打開一個 WSL 終端模擬器(wsl-terminal 需要放置在本地的 NTFS 分區(qū)上,原因)。運行
tools/1-add-open-wsl-terminal-here-menu.js(幫助) 來添加一個Open wsl-terminal Here右鍵菜單到資源管理器上 (運行tools/1-remove-open-wsl-terminal-here-menu.js可以將其刪除)。 如果你使用 Total Commander, 可以參考 在 Total Commander 中使用 wsl-terminal 。run-wsl-file.exe可以在 wsl-terminal 里運行任何.sh(以及任何其他的可執(zhí)行文件,比如.py.pl文件) 腳本文件,你可以在文件打開方式里設(shè)置使用它來打開文件。vim.exe可以使用 WSL 中的 vim 打開任何文件 (在 wsl-terminal 中),支持在打開方式中配置。如果你使用其他編輯器,可以把vim.exe重命名成emacs.exenvim.exenano.exe等等,會調(diào)用對應(yīng)的編輯器打開。
快捷鍵
| 按鍵 | 功能 |
|---|---|
Alt + Enter
|
全屏 |
Alt + F2
|
新建窗口 |
Alt + F3
|
搜索文本 |
Ctrl + [Shift] + Tab
|
切換窗口 |
Ctrl + = + - 0
|
縮放 |
Ctrl + Click
|
打開光標處的文件、目錄名或者網(wǎng)址 |
命令行參數(shù)
open-wsl
用法: open-wsl [選項]...
-a: 激活在運行的 wsl-terminal 窗口。
如果 use_tmux=1,會 attach 到正在運行的 tmux 會話上。
-l: 運行一個 login shell(如果 use_tmux=1 則失效)。
-c command: 運行命令 (例如 -c "echo a b; echo c; cat")。
-e commands: 運行后邊的所有命令 (例如 -e echo a b; echo c; cat)。
-C dir: 進入到 dir 目錄中,WSL 目錄(例如 /home/username)。
-W dir: 進入到 dir 目錄中,Windows 目錄(例如 c:\Users\username)。
-d distro: 切換發(fā)行版。
-b "options": 傳遞額外的選項給 wslbridge。
-B "options": 傳遞額外的選項給 mintty。
-h: 顯示幫助信息。
-B 和 -b 后可以添加的選項,請參考 mintty 參數(shù) 和 wslbridge 參數(shù)。
cmdtool(在 WSL 中運行)
用法: cmdtool [選項]...
wcmd: 使用 cmd.exe /c 運行 Windows 程序。
wstart: 使用 cmd.exe /c start 運行 Windows 程序。
update: 檢查更新,如果有更新可以直接升級。
killall: 殺死所有的 WSL 進程。
install cbwin: 安裝 cbwin。
install dash: 安裝 Cygwin 中的 dash(用于調(diào)試)。
install busybox: 安裝 Cygwin 中的 busybox(用于調(diào)試)。
工具
tools 目錄下的工具:
| 文件名 | 功能 |
|---|---|
| 1-add-open-wsl-terminal-here-menu.js | 添加 Open wsl-terminal Here 右鍵菜單到資源管理器上。 |
| 1-remove-open-wsl-terminal-here-menu.js | 移除 Open wsl-terminal Here 右鍵菜單。 |
| 2-add-wsl-terminal-dir-to-path.js | 將 wsl-terminal 目錄添加到 Path 環(huán)境變量里。 |
| 2-remove-wsl-terminal-dir-from-path.js | 從 Path 環(huán)境變量中移除 wsl-terminal 目錄。 |
| 3-write-distro-guids-to-config-file.js | 將所有發(fā)行版的 guid 寫入到配置文件 etc/wsl-terminal.conf 中。 |
| 4-create-start-menu-shortcut.js | 創(chuàng)建一個開始菜單快捷方式,指向 open-wsl -C ~。 |
| 4-create-start-menu-shortcut-login-shell.js | 創(chuàng)建一個開始菜單快捷方式,指向 open-wsl -l。 |
| 4-remove-all-start-menu-shortcuts.js | 移除所有 wsl-terminal 的開始菜單快捷方式。 |
雙擊 .js 文件即可運行。如果 .js 文件被某個編輯器關(guān)聯(lián)上了,可以修改打開方式為 Microsoft (R) Windows Based Script Host,或者在 tools 目錄運行一個 cmd.exe,然后用 wscript xxx.js 運行對應(yīng)文件。
配置文件
etc/wsl-terminal.conf 是 wsl-terminal 的配置文件:
[config]
title="窗口標題"
shell=bash
use_tmux=0
;icon=
;distro_guid=
etc/themes/ 目錄下的是主題文件,使用主題。
etc/minttyrc 是 mintty 的配置文件, mintty 幫助。
升級
在 wsl-terminal 里打開 open-wsl.exe,然后運行 ./cmdtool update 可以檢查 wsl-terminal 的最新版本然后升級。如果下載速度過慢,可以先使用其他方法從發(fā)布頁面下載 wsl-terminal-v{version}.7z 文件,然后將其放入到 wsl-terminal 目錄,然后運行 ./cmdtool update。
該工具依賴 wget 和 7z 命令(安裝方法。Ubuntu: apt install wget p7zip-full, Archlinux: pacman -S wget p7zip)。
升級過程不會覆蓋配置文件,etc/wsl-terminal.conf 和 etc/minttyrc 會被放置到 etc/wsl-terminal.conf.pacnew 和 etc/minttyrc.pacnew。升級后 bin 目錄會殘余一些 .bak 文件,因為這些文件還在運行,不能被刪除。下一次升級時,會將之前的 .bak 文件全部刪除,你也可以等那些進程退出后手刪除那些文件。
使用 tmux
在 WSL 里安裝 tmux。
在
etc/wsl-terminal.conf中設(shè)置use_tmux=1。如果版本號低于0.8.1,還需要添加attach_tmux_locally=1。添加如下代碼到
~/.bashrc(如果配置的是shell=bash)或者~/.zshrc(如果配置的是shell=zsh):
[[ -z "$TMUX" && -n "$USE_TMUX" ]] && {
[[ -n "$ATTACH_ONLY" ]] && {
tmux a 2>/dev/null || {
cd && exec tmux
}
exit
}
tmux new-window -c "$PWD" 2>/dev/null && exec tmux a
exec tmux
}
然后 open-wsl 就會使用 tmux 了。
切換發(fā)行版
使用 open-wsl -d distro (在 cmd.exe 里運行)來切換發(fā)行版:
# 列出所有發(fā)行版
> wslconfig /l
Legacy (默認)
Ubuntu
# 使用 Ubuntu(會運行 wslconfig /s Ubuntu 然后打開 wsl-terminal)
> open-wsl -d Ubuntu
# Ubuntu 已經(jīng)是默認的發(fā)行版了
> wslconfig /l
Ubuntu (默認)
Legacy
如果你不想修改默認的發(fā)行版,可以在 etc/wsl-terminal.conf 里設(shè)置 distro_guid:
運行 tools/3-write-distro-guids-to-config-file.js(幫助),然后會有窗口彈出結(jié)果:
result has been written to ..\etc\wsl-terminal.conf:
; Legacy
;distro_guid={12345678-1234-5678-0123-456789abcdef}
; Ubuntu
;distro_guid={47a89313-4300-4678-96ae-e53c41a79e03}
remove the ; before distro_guid to use the distro.
可以去掉 distro_guid 前邊的 ; 來使用對應(yīng)的發(fā)行版。
如果你想通過命令行將 distro_guid 傳遞給 open-wsl:
# 將 distro guid 傳遞給 wslbridge
> open-wsl -b "--distro-guid {47a89313-4300-4678-96ae-e53c41a79e03}"
鏈接
編譯
確保已經(jīng)在 WSL 里安裝了這些 wget tar xz gzip p7zip (安裝方法。Ubuntu: apt install wget tar xz-utils gzip p7zip-full, Archlinux: pacman -S wget tar xz gzip p7zip)。
運行 build.bat。
許可
MIT
付費解決 Windows、Linux、Shell、C、C++、AHK、Python、JavaScript、Lua 等領(lǐng)域相關(guān)問題,靈活定價,歡迎咨詢,微信 ly50247。