使用 wsl-terminal 更好地体验 Win 10 中的 WSL( Windows Subsystem for Linux )终端环境 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
goreliu
V2EX    Windows

使用 wsl-terminal 更好地体验 Win 10 中的 WSL( Windows Subsystem for Linux )终端环境

  •  
  •   goreliu 2017-09-17 17:09:55 +08:00 6868 次点击
    这是一个创建于 2952 天前的主题,其中的信息可能已经有所发展或是发生改变。

    WSL 从最初功能不全 bug 遍地都是,到现在除了少数几个比较顽固的 bug 外,基本足以正常使用了。但自带终端模拟器的体验依然非常糟糕,而且在可以预期的未来都不会有太大的长进了。我是从去年 8 月开始开发 wsl-terminal中文页面)的,期间因为想不到可以添加什么功能而搁置了比较长时间。最近心血来潮,添加了很多实用功能,用户体验也会上升很多。

    希望有在使用的朋友可以多反馈下意见建议,如果之前没有尝试过,也可以体验一下,软件是一个 1.6 MB 的压缩包,解压后即可使用,不会往系统中写入任何东西(如果想添加到开始菜单或者右键菜单,可以使用 tools 中的工具)。

    多谢大家支持。

    wsl-terminal

    用于 Windows Subsystem for Linux (WSL) 的终端模拟器,基于 minttywslbridge

    英文页面

    截图

    screenshot

    查看更多截图

    用法

    1. 这里下载最新版本并解压。

    2. 运行 open-wsl.exe 可以在当前打开一个 WSL 终端模拟器(当前目录需要在本地的 NTFS 分区上,原因)。

    3. 运行 tools/1-add-open-wsl-terminal-here-menu.js (帮助) 来添加一个 Open wsl-terminal Here 右键菜单到资源管理器上 (运行 tools/1-remove-open-wsl-terminal-here-menu.js 可以将其删除)。 如果你使用 Total Commander, 可以参考 Use wsl-terminal with Total Commander

    4. run-wsl-file.exe 可以在 wsl-terminal 里运行任何 .sh (以及任何其他的可执行文件,比如 .py/.pl/.php 文件) 脚本文件,你可以在文件打开方式里设置使用它来打开文件。

    5. vim.exe 可以使用 WSL 中的 vim 打开任何文件 (在 wsl-terminal 中),支持在打开方式中配置。如果你使用其他编辑器,可以把 vim.exe 重命名成 emacs.exe/nvim.exe/nano.exe/less.exe/... 等等。

    快捷键

    Alt + Enter: 全屏

    Alt + F2: 新建窗口

    Alt + F3: 搜索文本

    Ctrl + [Shift] + Tab: 切换窗口

    Ctrl + =+/-/0: 缩放

    Ctrl + Click: 打开光标处的文件、目录名或者网址

    命令行参数

    open-wsl

    用法: open-wsl [选项]... -a: 激活在运行的 wsl-terminal 窗口。 如果 use_tmux=1,会 attach 到正在运行的 tmux 会话上。 -l: 运行一个 login shell (如果 use_tmux=1 则失效)。 -c "command": 运行 command 中的命令。 -C dir: 进入到 dir 目录中,dir 是 WSL 中的目录。 -d distro: 切换发行版。 -b "options": 传递额外的选项给 wslbridge。 -h: 显示帮助信息。 

    cmdtool

    用法: cmdtool [选项]... update: 检查更新,如果有更新可以直接升级。 killall: 杀死所有的 WSL 进程。 install cbwin: 安装 cbwin。 

    另外可以参考 mintty 参数wslbridge 参数

    工具

    tools/1-add-open-wsl-terminal-here-menu.js: 添加 Open wsl-terminal Here 右键菜单到资源管理器上。

    tools/1-remove-open-wsl-terminal-here-menu.js: 移除 Open wsl-terminal Here 右键菜单。

    tools/2-add-wsl-terminal-dir-to-path.js: 将 wsl-terminal 目录添加到 Path 环境变量里。

    tools/2-remove-wsl-terminal-dir-from-path.js: 从 Path 环境变量中移除 wsl-terminal 目录。

    tools/3-write-distro-guids-to-config-file.js: 将所有发行版的 guid 写入到配置文件 etc/wsl-terminal.conf 中.

    tools/4-create-start-menu-shortcut.js: 创建一个开始菜单快捷方式,指向 open-wsl -C ~

    tools/4-create-start-menu-shortcut-login-shell.js: 创建一个开始菜单快捷方式, 指向 open-wsl -l

    tools/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="my 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

    该工具依赖 wget7z 命令(安装方法。Ubuntu: apt install wget p7zip-full, Archlinux: pacman -S wget p7zip)。

    升级过程不会覆盖配置文件,etc/wsl-terminal.confetc/minttyrc 会被放置到 etc/wsl-terminal.conf.pacnewetc/minttyrc.pacnew。升级后 bin 目录会残余一些 .bak 文件,因为这些文件还在运行,不能被删除。下一次升级时,会将之前的 .bak 文件全部删除,你也可以等那些进程退出后手删除那些文件。

    使用 tmux

    1. 在 WSL 里安装 tmux。

    2. etc/wsl-terminal.conf 中设置 use_tmux=1

    3. 添加如下代码到 ~/.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

    14 条回复    2022-09-01 20:29:21 +08:00
    hljjhb
        1
    hljjhb  
       2017-09-17 17:56:43 +08:00 via Android
    赞 回头试下
    secondwtq
        2
    secondwtq  
       2017-09-17 18:04:42 +08:00
    暂时用不到,不过还是顶一个
    longaiwp
        3
    longaiwp  
       2017-09-17 20:11:26 +08:00
    暂时用不到,不过支持一个
    tracyone
        4
    tracyone  
       2017-09-17 20:12:10 +08:00 via iPhone
    gvim 及其内嵌终端
    luxinxin
        5
    luxinxin  
       2017-09-17 20:19:52 +08:00 via iPhone
    之前就用上了,非常好用!右键打开 wsl 特别好使,已经替换掉 git 带的那个 bash 了。
    tunetoystory
        6
    tunetoystory  
       2017-09-17 20:26:44 +08:00
    为啥不用 conemu 呢
    goreliu
        7
    goreliu  
    OP
       2017-09-17 20:37:16 +08:00   1
    @Rabbit52 较早的时候用过一阵,感觉功能很多很杂,但很少有我真正想要的功能,不够简洁,小问题比较多。另外我用的时候对 WSL 的支持不佳(比如不能输入中文,中文的显示也有问题),体积和资源占用也更大一些。
    Trim21
        8
    Trim21  
       2017-09-17 21:33:51 +08:00 via iPhone
    wsl 现在支持操作 Windows 文件系统上面的文件了吗。。。
    luxinxin
        9
    luxinxin  
       2017-09-17 21:36:15 +08:00 via iPhone
    @Trim21 一直都支持吧?都挂载在 /mnt/目录下
    Trim21
        10
    Trim21  
       2017-09-17 23:12:44 +08:00 via iPhone
    @luxinxin emmmm 原来这样 看来我之前使用姿势不对
    yyfearth
        11
    yyfearth  
       2017-09-18 05:26:18 +08:00
    @Trim21 一直都支持的 只不过有同步的问题 说会逐步解决 不知道现在解决的怎么样了
    貌似就是在 Windows 下改动 WSL 会看不到 反之亦然
    goreliu
        12
    goreliu  
    OP
       2017-09-18 07:20:23 +08:00 via Android
    @yyfearth 如果是在 /mnt/* 下,双方对文件的操作都没有问题。如果是其他目录,Windows 下新建的文件,WSL 中看不到,但对已经存在的文件读写都是没问题的(官方不建议写)。
    xxxcjr
        13
    xxxcjr  
       2019-01-31 21:03:30 +08:00
    运行:open-wsl.exe -c "command"后,open-wsl.exe 就马上即出了,有办法解决吗?
    Cu635
        14
    Cu635  
       2022-09-01 20:29:21 +08:00
    lz ,3 年半还多过去了,现在这个跟 wsltty 项目相比有啥差别?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1258 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 17:30 PVG 01:30 LAX 10:30 JFK 13:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86