前端开发笔记番外篇:在瘟到死上玩壳(中文读者福利)

内容概要

这篇主要讲什么呢……恩,是讲一讲进来玩前端在 Windows 上各种折腾 shell 的一些心得。

先贴开源仓库地址 https://github.com/qiansen1386/my-zsh-config

Windows 下的神器 babun

反正目前,Cygwin mintty 就是目前最好的模拟器。主要是完美复制了,组件化插件,管线,做好一件事的 Linux 哲学。 我对 Bash on Windows 的热情一下子就减小了好多。要啥自行车啊,谁知道微软的这破玩意儿好不好用呢……

微软就喜欢提供自以为是最优解的一条龙服务。每次看它 presentation 里做得炫酷牛逼的各种 Magic ,我就怕得不行…….Net 从 1 到 2 到 4 到 Core,妈的打脸多少次了……每次看它投入大量资源到一个软件,把他包装的各种完善,然后几天之后等到开源社区有更好的解决方案了,之前高大上的完善软件瞬间就变成一堆老旧过时的笨重垃圾。这叫一个酸爽。老老实实做一个功能,把接口做好,让社区彼此协作,每人做好一个小组件,感觉这才是比较符合我审美的哲学。当然.NET的粉丝们请不要和我撕逼,我承认微软在新 CEO 上台之后做得很多举措都是让人眼前一亮,且微软同学们的代码质量都是过硬的。就是有些 API 设计得各种叠床架屋脱裤放屁打脸狂魔(逃

当然,mintty 的集大成者 Babun 不是没有毛病的,刚装上的时候,各种出问题。比如有的时候按 tab 键没有反应。此时的修理办法就是,在控制台里输入 compinit 重新生成下不知道是缓存还是啥。不过每次打开都这样输入一遍,也不是个事儿。幸好伟大的社区对这种常见错误,都早有解决之法。

# 这里只提供一个简单的解法。虽然我自己用过是这样,但是不保证你们用了也是这样。请不要觉得这都是特技,化学的成分,其实原贴里有补充其他的办法。
compaudit | xargs chmod g-w
rm -f ~/.zcompdump; compinit
cp `ls .zcompdump*`

输入这三行代码就重新生成一下 .zcompdump 文件,一般来说都可以搞定。 详情请见:babun-Issues#159

Zsh & oh-my-zsh

buban 自带 ZshOh-my-zsh. 没有装过 zsh 的小伙伴请参考 https://github.com/qiansen1386/vagrant-frontend/blob/master/zsh.install.sh

# Install Zsh
sudo apt-get install -y zsh
# Install Oh-my-zsh
wget --no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
# Change default shell to zsh
sudo chsh -s /bin/zsh vagrant
# Use default template for .zshrc settings
sudo cp /home/vagrant/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

哼,才不是广告。。。

简单到不行。 接下来修改 .zshrc 配置文件。 主要改两处,一是主题,二是插件

先说主题

agnoster 主题是我目前觉得最好看的自带主题,也希望大家也可以分享下各位认为好看的主题。(由于官方精力所限不在收录第三方主题,大量主题都是游离状态,需要自己在 GitHub 淘宝)

修改主题的方法就是,找到 ZSH_THEME= 这一行,把原文改成 ZSH_THEME="agnoster"。(如果是非官方主题请确保下载主题文件到) 这个主题有个毛病(一个需要特殊配置的功能),就是参考了 Python 社区做得的一个编辑器插件神器 Powerline 的做法。在 shell 状态栏里放了很多 unicode 的符号。然而等宽字体一般不包含全部 unicode 字符。所以你在 shell 里打 echo "\ue0b0 \u00b1 \ue0a0 \u27a6 \u2718 \u26a1 \u2699" 一般显示为乱码。所以需要安装一个定制的字体,把这些字符打包进去。也就是传说中的 Powerline-patched font。随便选一个装就好,这样就可以看到这些字符了。

注意: Babun 在瘟到死系统下,只识别 .otf 扩展的字体。

我喜欢非衬线字体,所以没有试过Hack这些。

非衬线里面,主要推荐 Fira Mono for Powerline / Source Code Pro for Powerline 比较不推荐 Droid Sans,因为在本地上用边缘特别粗糙,字重也特别重。其他诸如 UbuntuMono 也挺漂亮的,但是感觉略花俏。有试过其他字体的小伙伴可以分享下他们的感触。 需要注意的是,regular 一般字重轻于 Medium,一般使用还是推荐 regular。没有试过 LightUltraLight,应该更炫酷,不过不常见,没试过。

额,这个主题,还有一个毛病……(这么多毛病你还要选这个主题,你是不是脑残外貌党……其实我就是啊\(v)/)

如果你不在启动脚本里加入 export DEFAULT_USER=<username> 的话,他会在路径前加上一段 <username> @ <hostname>, 太不简洁优雅了。所以一定要在 .profile 啊,这类启动脚本里加上那一句设置 DEFAULT_USER 的话!

最终极简效果图:

最终效果图

顺便一说,上面这个图我机智地用 base64 编码了之后直接嵌到了网页里。不然单独维护一个 img 文件夹也是很头疼的事情啊。哈哈哈哈哈。看源代码的时候不太美观倒是。

再说插件

插件这个东西不能乱用。有的时候,甚至有些软件会建议用户关闭 zsh 自带的的插件。(貌似是Node还是npm来着)我除了默认的 git 插件以外,别的插件用的真的不多。不过有一个插件我印象深刻……就是 ssh-agent 插件。具体原理我不是特别懂。不想信口开河。不过总而言之就是当你加了 ssh 地址的 git 远端,推送的时候,就需要通过 ssh 的通道。此时,让 git 知道去哪里找到 SSH 的私钥公钥。一般情况下,我们比较熟悉的是把本机的私钥加入到网络服务中,而有的时候,我们需要反过来,把已经注册到某个网络服务中的私钥绑定到其他机器。在 Windows 里,我习惯用 putty 套件的 pageant 组件管理 key,用 SourceTree 管理 git。可是在 Linux 里就需要用 Shell 来做这个事,我不是特别熟悉。

以上内容都可以在 Oh my Zsh Wiki: Customization 官方文档中找到更详细的说明。

重启才能启用配置?

source 的妙用。 用 source .zshrc 就能启用 .zshrc 的配置。

神 tm Vim

我是来吐槽的,不是夸的。之前我没系统学过 vim,请轻喷。 set mouse=r 不知道手打了多少遍,忍无可忍查了查如何配置vim,然后发现只要创建一个 .vimrc 文件就好。那时候心头一万匹草泥马。23333

之前太偷懒,该来的总要来→_→SSH

ssh-agent 重剑无锋,全靠武功。

。。。To be Continue。。。

从来没重视过 git alias 直到我用了 babun

babun 自己定制了一批 git 的别名,用之前不理解,用之后才发觉,这才是 tm 终端的正确玩法啊。 我把 babun 的配置贴在下面好了。喜欢的同学自己可以在终端里按 git config --global -- 玩一下。

[alias]
	last = log -1 --stat
	cp = cherry-pick
	co = checkout
	cl = clone
	ci = commit
	st = status -sb
	br = branch
	unstage = reset HEAD --
	dc = diff --cached
	lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %Cblue<%an>%Creset' --abbrev-commit --date=relative --all

题外话,建议给 core.autocrlf 设为 input,让 git 不修改源文件的换行符。autocrlf 表面上很易用。实际上,我感觉他只适用于项目目标为Win,git 服务器为Linux的情况。而如果你的项目目标就是*nix,autocrlf 会把 diff 功能基本废掉。每行都改动一片红一片绿的世界最好只停留在股市里……

comments powered by Disqus