WSL 從最初功能不全 bug 遍地都是,到如今除了少數幾個比較頑固的 bug 外,基本足以正常使用了。但自帶終端模擬器的體驗依然很是糟糕,並且在能夠預期的將來都不會有太大的長進了。我是從去年 8 月開始開發 wsl-terminal(中文頁面)的,期間由於想不到能夠添加什麼功能而擱置了比較長時間。最近心血來潮,添加了不少實用功能,用戶體驗也會上升不少。html
但願有在使用的朋友能夠多反饋下意見建議,若是以前沒有嘗試過,也能夠體驗一下,軟件是一個 1.6 MB 的壓縮包,解壓後便可使用,不會往系統中寫入任何東西(若是想添加到開始菜單或者右鍵菜單,可使用 tools 中的工具)。linux
用於 Windows Subsystem for Linux (WSL) 的終端模擬器,基於 mintty 和 wslbridge。git
查看更多截圖。github
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 分區上,緣由)。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
(以及任何其餘的可執行文件,好比 .py
.pl
文件) 腳本文件,你能夠在文件打開方式裏設置使用它來打開文件。vim.exe
可使用 WSL 中的 vim 打開任何文件 (在 wsl-terminal 中),支持在打開方式中配置。若是你使用其餘編輯器,能夠把 vim.exe
重命名成 emacs.exe
nvim.exe
nano.exe
等等,會調用對應的編輯器打開。按鍵 | 功能 |
---|---|
Alt + Enter |
全屏 |
Alt + F2 |
新建窗口 |
Alt + F3 |
搜索文本 |
Ctrl + [Shift] + Tab |
切換窗口 |
Ctrl + = + - 0 |
縮放 |
Ctrl + Click |
打開光標處的文件、目錄名或者網址 |
將 wsl-terminal 綁定到快捷鍵。shell
用法: 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: 切換髮行版。 -b "options": 傳遞額外的選項給 wslbridge。 -B "options": 傳遞額外的選項給 mintty。 -h: 顯示幫助信息。
-B
和 -b
後能夠添加的選項,請參考 mintty 參數 和 wslbridge 參數。vim
用法: cmdtool [選項]... wcmd: 使用 cmd.exe /c 運行 Windows 程序。 wstart: 使用 cmd.exe /c start 運行 Windows 程序。 update: 檢查更新,若是有更新能夠直接升級。 killall: 殺死全部的 WSL 進程。 install cbwin: 安裝 cbwin。 install dash: 安裝 Cygwin 中的 dash(用於調試)。 install busybox: 安裝 Cygwin 中的 busybox(用於調試)。
tools
目錄下的工具:bash
文件名 | 功能 |
---|---|
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 環境變量裏。 |
2-remove-wsl-terminal-dir-from-path.js | 從 Path 環境變量中移除 wsl-terminal 目錄。 |
3-write-distro-guids-to-config-file.js | 將全部發行版的 guid 寫入到配置文件 etc/wsl-terminal.conf 中。 |
4-create-start-menu-shortcut.js | 建立一個開始菜單快捷方式,指向 open-wsl -C ~ 。 |
4-create-start-menu-shortcut-login-shell.js | 建立一個開始菜單快捷方式,指向 open-wsl -l 。 |
4-remove-all-start-menu-shortcuts.js | 移除全部 wsl-terminal 的開始菜單快捷方式。 |
雙擊 .js
文件便可運行。若是 .js
文件被某個編輯器關聯上了,能夠修改打開方式爲 Microsoft (R) Windows Based Script Host
,或者在 tools
目錄運行一個 cmd.exe
,而後用 wscript xxx.js
運行對應文件。微信
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 的最新版本而後升級。若是下載速度過慢,能夠先使用其餘方法從發佈頁面下載 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
文件所有刪除,你也能夠等那些進程退出後手刪除那些文件。
etc/wsl-terminal.conf
中設置 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 了。
使用 open-wsl -d distro
(在 cmd.exe
裏運行)來切換髮行版:
# 列出全部發行版 > wslconfig /l Legacy (默認) Ubuntu # 使用 Ubuntu(會運行 wslconfig /s Ubuntu 而後打開 wsl-terminal) > open-wsl -d Ubuntu # Ubuntu 已是默認的發行版了 > wslconfig /l Ubuntu (默認) Legacy
若是你不想修改默認的發行版,能夠在 etc/wsl-terminal.conf
裏設置 distro_guid
:
運行 tools/3-write-distro-guids-to-config-file.js
(幫助),而後會有窗口彈出結果:
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 前邊的 ; 來使用對應的發行版。
若是你想經過命令行將 distro_guid 傳遞給 open-wsl
:
# 將 distro guid 傳遞給 wslbridge > open-wsl -b "--distro-guid {47a89313-4300-4678-96ae-e53c41a79e03}"
確保已經在 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 等領域相關問題,靈活訂價,歡迎諮詢,微信 ly50247。