Bash on Windows(WSL)优化: 使用Hyper作为命令行终端(与cmder比较)

背景

win10发布的linux子系统可以说是程序员的福音了,经过几次版本更新,配合适当的设置,
开发需要的linux基本功能基本都具备了,进一步降低了购买mac的必要性(日常黑一下)。

目前网上关于WSL的文章虽然不算很多,但也不算少了。所以对于基本的安装/配置我们不再赘述。
这篇blog主要是为了安利一个windows下的终端————Hyper;然后会提及一些个人使用子系统的经验,希望可以帮到大家~

先放一个Hyper的使用图给大家看一看

Hyper使用中-3 tab

当前使用最广泛的终端–cmder

正在看这篇blog的你,如果已经是一个bash on windows的使用者,却还没有用过cmder,那我会非常惊讶。
作为windows平台下几乎是唯一一个堪用的终端(Hyper到我写blog的现在(2018-4)基本在中文互联网中查不到痕迹),cmder已经是谈到bash on windows优化时的标配项目了。

虽然原生的ubuntu终端其实加上在一些配置(尤其是85%的透明化)之后,在外观上并不弱于cmder;但是不支持tab实在是一大硬伤。我曾经使用原生ubuntu终端+tmux过一段时间,度过Geek Time(类比于贤者时间,标识使用一个看起来很Geek的事物后心理感受异常良好从而忽略其实用程度)之后,就败退回cmder了。

不过作为矮子里面拔高个的产物,纵然比其他矮子们要好很多,cmder还是有诸多不足:

  1. 对中文的支持不好,经常有字符重叠的现象
  2. 存在bug,例如界面缩放之后内部识别有问题,光标和实际位置不符合,且部分字符会看不到(对于多屏幕来说这个影响很大);例如剪切板复制粘贴的内容往往不全等等
  3. 不够好看,尤其是tab栏,浓浓的xp风格

其中第一条经过配置之后可以在绝大部分情况下ok;
第二条随着cmder的更新正在不断改善,所以虽然目前面对的很糟心,可见的未来应该会有好转;
然而第三点看起来没什么,但对于颜控来说真的很糟心….个人以为,对于每天都在面对的东西,尽可能选择好看一点的对改善工作时的心情有很大帮助,对比cmder,hyper的tab看起来真的是太令人感动了QAQ

Hypers的安装,以及一些配置tips

下载安装

直接在Hyper的下载页下载然后安装就可以了;

配置

Hyper采用json串配置,使用到bash的各位应该也有很熟悉了~
配置栏在Edit->Perferences,点开就会出现使用文本编辑器打开的配置文件=,=

值得说明的配置的话,基本在配置文件里都有相关的注释,比如在开启Hypers要不要直接进入bash,配置以及注释如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
// the shell to run when spawning a new session (i.e. /usr/local/bin/fish)
// if left empty, your system's login shell will be used by default
//
// Windows
// - Make sure to use a full path if the binary name doesn't work
// - Remove `--login` in shellArgs
//
// Bash on Windows
// - Example: `C:\\Windows\\System32\\bash.exe`
//
// Powershell on Windows
// - Example: `C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`
shell: '',

ps: 个人是没有配置这个,直接在打开之后通过bash命令进入bash的

除了这个以外,还有对使用体验比较重要的是主题配置:

1
2
3
4
5
6
7
// a list of plugins to fetch and install from npm
// format: [@org/]project[#version]
// examples:
// `hyperpower`
// `@company/project`
// `project#1.0.1`
plugins: ['hyperterm-monokai'],

ps: 个人目前使用的是上面写的hyperterm-monokai主题,从sublime开始,我就是mookai的粉丝啦~

一些bash on windows的使用tips

除了搜相关内容就能立刻看到的消除提示音之类的配置之外,个人使用时感觉比较有帮助的一些小tips给大家分享如下~

  1. 活用别名(alias)

    什么是别名呢,就是对于一些你经常使用的命令,可以设置一些简短的语句,用的时候直接使用那些就可以了

    配置方式:
    把形如alias short_comand='long comand'的语句放在~/.bashrc文件里面就可以啦~
    (对于已经打开的shell,需要使用source ~/.bashrc来刷新命令=,=)

    个人配置的别名举例:

    1
    2
    3
    4
    5
    alias project='cd /mnt/c/Users/cifan/Documents/Project'
    alias download='cd /mnt/c/Users/cifan/Downloads'
    alias desktop='cd /mnt/c/Users/cifan/Desktop'
    alias onedrive='cd /mnt/c/Users/cifan/OneDrive'
    alias win_ffplay='/mnt/c/Users/cifan/Downloads/ffmpeg-20170317-9e6b269-win64-static/bin/ffplay.exe'

    我这样配置了之后,只要在shell里面打印project,就可以直接到我存放Project的目录啦~
    再比如win_ffplay,因为新的bash on windows里支持运行windows程序,像这样把一些windows程序的地址别名到这里,平时的使用还是i很方便的~

    ps:对于我来说,使用最多的还是那些cd命令的别名啦

  2. ls 颜色设置

    一个在实际使用中一个比较困扰我的问题是在bash on windows这边,使用ls显示的目录大都有很难看的底色;而对于正常的linux环境下,则没有这个问题;

    这个的原因其实是因为windows的目录在linux这边的权限不同,导致windows的目录在ls的默认颜色中就应该有那种底色;
    所以只要修改环境变量$LS_COLORS就可以啦~~

    具体的不同:在windows下,目录都是ow,即Directory that is other-writable (o+w) and not sticky;而正常linux系统下的目录都是di

    默认的$LS_COLORS如下:

    1
    rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:

    可以看到其中ow的配色是34;42,其中那个42就是指定颜色的底色的意思,我们只要在配置中删掉它就可以啦~
    修改方式,还是在~/.bashrc文件里加上相关设置,然后执行source命令就可以了=,=
    我的修改示例:

    1
    2
    3
    # for ls colors
    LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:"
    export LS_COLORS

    ps:想要对这个详细了解的朋友,可以搜ls颜色修改,会有很多很多文章的=,=

其实都是很简单的linux配置,不过个人感觉对实际使用的帮助还是蛮大的~(尤其对于颜控和折腾党)
ps: 个人感觉其实这种简单实用的配置最大的问题就是用的人觉得很平常很平常想不到分享,不用的人根本想都想不到这些东西还可以设置= =如果不是发现身边的一些朋友竟然都不知道这些,我是不会想到”分享”这么浅显的经验啦…

Hyper的不足

虽然是安利,但我们也要客观的安利嘛=,=对比相对成熟的cmder,Hyper还是有一些不足,这是我个人目前使用月余之后发现的不足,给大家参考一下:

  1. 不支持背景透明

    这个要差差差差评,一个颜值取胜的shell不支持背景透明,完全是自绝于群众好嘛!!!要知道,最难看的客户端配置了80%透明之后颜值都能有800%的提高啊(说的就是你,原生cmd

  2. tab不支持重命名和拖动

    不支持重命名还好,实际使用中重命名也是蛮麻烦的…但是不支持拖动就有些尴尬了,对于习惯按照功能对tab排序的人(就是我)来说会很难受…

ps: 旧版本的Hyper,因为渲染框架的原因,在使用中文输入法的时候光标会有问题,不过写博文的时候新版本就已经更改框架了,所以看到博文的人是不会遇到这个问题啦=,=

一些闲话

个人开始发现Hyper是很激动啦,所以用了之后立刻想写这个博文来安利一下…不过后来发现tab不能拖动真的很难受= =就用回了cmder一段时间,尤其发现cmder修复了界面缩放以及光标的问题之后更是一度决定啊还是用回去得了…但最后复制粘贴的bug还是把我又劝退回了Hyper….
这样来回几次,这篇文章拖了快2个月…

总而言之,还是建议大家两样都使用下,然后再决定用哪一个=,=

拓展阅读

  1. Bash on Ubuntu on Windows的安装和配置 (一) WSL的安装和配置 | Kevinzjy’s Blog

    虽然觉得看到这篇安利的人,应该都已经安好了,不过还是附一篇相关的安装博客好了…推荐这个博客的最大原因是里面提到的提示音以及vim方向键的设置,真的在看到这个博客之前虽然一直饱受困扰但一直没有想到去改善下啊啊啊啊啊,至于其中提到的X-sever,大家看看就好了=,=个人觉得没必要,尤其在可以调用windows程序的现在

  2. linux修改ls文件颜色

    关于ls颜色的一个博文,推荐的缘故主要是博主贴了各项key值含义的表格在博文里,好学的童鞋可以查看一下