活在终端里的每一天

重回ubuntu,这次可以更主动,更成熟的享受全栈linux的工作状态,用了一段时间来折腾这几个软件,小有所成,提笔写篇文章记录一下过程. 我的终极目标是,全面启用VIM的键位和操作模式,拔掉鼠标,能像弹钢琴一样工作.

为了达到这个目标,我这次主力配置了如下几个软件:

  1. 进化版bash--->zsh+oh-my-zsh
  2. bash的壳 ---> tmux
  3. 扔掉unity,改用平铺式窗口管理器--->awesomewm
  4. 扔掉IDE,改用强大得出乎意料的VIM
  5. 其余还有很多好玩的小软件,诸如ranger,xclip,scrot,guake等等,有空也写一下

这一系列下来每个都有自己的配置文件,最现代化的办法应该是搞一个库专门来维护他们,以后升级电脑,换电脑直接从云端拉下来sh一下,一个一毛一样的世界就会重现在你面前,这几个东西我选择的标准基本都是1能否高度定制化(插件化,开源化)2能否配置使用vim模式的键位

个人的配置库放在coding上,国内速度就是飞快

1. 扔掉原装的bash,换上ZSH

用过zsh后你就不会对系统中自带的终端有任何的留恋。没有见过zsh之前,我对linux的终端印象总是停留在rh9时代,tty上去,黑白两色。。。接触过了以后才知道这才是现代化的终端。。。大量的语法糖,超智能提示,超级美观的各种配色主题,开发活跃,大量插件。。。最要命的是,你一旦习惯了zsh给的糖,你就恨不得给你所有的服务器都搞一套。。。

安装很简单,ubuntu16上apt里直接有,oh-my-zsh在github上,捡下来也可以一步安装:

sudo apt-get install zsh -y #install zsh
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh

chsh -s /bin/zsh #将默认的shell切换成zsh

重新登录后就可以使用zsh了,zsh使用rc作为配置模型,所以还需要创建一个~/.zshrc作为配置核心,这个文件在oh-my-zsh中提供有范例,里面有几个关键配置:

# 使用的主题,主题位于~/.oh-my-zsh/themes下
# 你把omz搞下来之所以花了那么久时间就是因为一野搞下来上百个主题。。。
ZSH_THEME="lambda" 
# 启用的插件,插件在omz/plugins目录下,有很多很神奇的插件,可以去官网探索一下
plugins = (git)
#zsh的alias也是亮点之一,比原生的alias强悍
alias xclip='xclip -sel clip'  

我填过的坑有:

dir目录颜色丢失问题

某些主题下目录是不带颜色的,对比过bashrc后重装了dircolors,解决了这个问题:

git clone git://github.com/seebi/dircolors-solarized.git ~/dircolors-solarized
cp ~/dircolors-solarized/dircolors.256dark ~/.dircolors
eval 'dircolors .dircolors'

接着将脚本同样写入到.zshrc里面:

if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'

alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi

2. 装上tmux使你的终端更加强大

tmux作为第二个出场的神器,也是我强力推荐的能显著提高生产力,增加bigger的好东西,主要出场场景有几个:

  1. 将大屏幕横着分竖着分成几个不同的区域,选项卡,提高工作效率
  2. 增加了session的概念,session可以持久化,第二天再开recover一下就回到昨天单记录点,如果装在服务器上,由于不关机,直接a一下就可以马上进入工作状态,还不怕掉线!
  3. 用在服务器上可以进行真正意义上的结对编程,多人可以同时ssh上去,然后attach到同一个session里,可以实现屏幕直播

安装很简单,如果想要最新版本可以在github上面下,然后自己make一下,也很简单:

sudo apt-get install tmux -y
mkdir -p ~/.tmux
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

tmux默认查找配置文件~/.tmux.conf,他官方提供了插件管理器,有几个强大的插件装了以后让你用得更舒服:

set -g @plugin 'tmux-plugins/tpm'  #插件管理器
set -g @plugin 'tmux-plugins/tmux-sensible'  #常用的高级设置
set -g @plugin 'tmux-plugins/tmux-resurrect' #session持久化
set -g @plugin 'tmux-plugins/tmux-pain-control' #vim模式的快捷键
set -g @plugin 'tmux-plugins/tmux-prefix-highlight' #高亮按下前缀键

tmux的快捷键很多,但都是有固定套路的,比如:

prefix+| 将屏幕竖分为两半,同理横着就是prefix+-
prefix+hjkl vim模式了,在各个不同的panel间移动
prefix+c(create) 创建新的窗口,同理prefix+n(next)移动到下个窗口
prefix+? 显示所有可用的快捷键

我踩过的坑有:

在tmux下使用vim,固定的配色会显示不正确

这是因为tmux使用的颜色模式和原来的不一样,解决方法很简单启动tmux时使用

alias tmux=`tmux -2`

然后在tmux的配置文件中使用

set -g default-terminal "screen-256color"

3. 是时候改用awesomewm了,unity走开走开

为了更好的使用awesomewm,我推荐你多来几个显示器,你会爽到飞起,唯一不舒服的就是,你又得再记7,8个快捷键。。。

unity很华丽,但启动也不是一般的慢,而且实在没法做到全键盘操作,对于我等coder,华丽的界面虽然可以给你带来心灵的局部愉悦,但并不是我等的追踪的本意,是不?

amesomewm意为平铺式窗口管理器 我原来在多个任务之间切换的时惯用虚拟桌面+alt/tab,任务一多加上坑爹的unity,实在让人抓狂,换用awesome后,手不用离开键盘,3个屏幕随意切换,再加上高度定制的配置文件,当你看明白后,可以定制里面的一切。简直就是coder式的窗口管理器!
安装

# awesome核心,扩展,屏保,gnome风格的窗口元素
sudo apt-get install -y awesome awesome-extra xscreensaver gnome-settings-daemon

安装很简单,注销后在登录界面可以选择使用awswome登录。配置很麻烦,因为这全套都是用lua撸出来的!包括每一个按钮,每一个函数。。。默认配置文件在~/.config/awesome/rc.lua,文件很长,我就不贴了,有兴趣的自己看我整理好的配置文件,全面定制过vim-style的快捷键:

Mod+j/k: 在同一个屏幕中切换程序
Mod+1/2/3:切换到当前屏幕的第N个虚拟桌面
Ctrl+Mod+j/k:切换到下一个屏幕
Mod+o:将当前的程序丢到另一个屏幕上显示

我踩过的坑有:

程序自启动问题

程序自启动其实有两个点:

  1. x启动后但awesome没启动:这个点可以使用xinitrc和xprofile挂载窗口主题,屏保:
#!/usr/bin/env bash
gnome-settings-daemon &
#网络管理程序
# nm-applet &
# 自动更新程序
# update-notifier &
# 屏保
xscreensaver -nosplash &
ln -sf ~/.confhub/awesomewm-config/config/xinitrc ~/.xinitrc
ln -sf ~/.confhub/awesomewm-config/config/xinitrc ~/.xprofile
  1. awesome框架启动完成后,就可以使用rc.lua来加载常用程序了,记得要使用runonce来启动,容错率更高
run_once("synapse")
run_once("ss-qt5")
run_once("fcitx-autostart")
run_once("nm-applet")
run_once("open-xscreen")

4. VIM终于来了

大神说的:世界上只有3种编辑器,VIM,Emacs,其他。。。


大神又说:Emacs是编辑器中的神,而VIM是神的编辑器。。。

我主要使用vim来进行nodejs和web相关的开发,vim完全可以胜任,下述的配置也是围绕这个展开,但如果你想使用vim来调试java的话,我个人感觉依然是idea+vim插件比较强势
VIM是这堆东西里面最复杂的一个,我也留到最后再写,基本上vim一个插件就可以给你玩几天,更别提几十个插件了。。。

所以我了解了规模以后,果断使用了github上面星最高的vim项目:·spf13,8000多颗星基于这个,移除了不用的插件,改成适合做web和nodejs开发的结构


下面就是漫长的踩坑之旅:

重新编译vim

注意,ubuntu apt中的vim虽然已经是huge集了(除非你和我一样,直接使用ubuntu16,一步到位),但对于我们还是不适用,因为我们要使用YCM做语法完成和跳转,而YCM在我这里使用python2死活时不时有bug,而换成python3后就妥妥的,所以第一步就是要从source编译vim,加入python3,参考这个

基于spf13开搞

直接从git上拉下来,修改配置后就可以开始安装:

git clone https://github.com/spf13/spf13-vim.git ~/.spf13-vim

# 重新调整分组,去除php等我不需要的插件们
ln -sf ~/.confhub/vim-config/vimrc.before.local ~/.vimrc.before.local
# 额外装的插件
ln -sf ~/.confhub/vim-config/vimrc.bundles.local ~/.vimrc.bundles.local
# 自定义配置
ln -sf ~/.confhub/vim-config/vimrc.local ~/.vimrc.local

# 脚本会把插件全部拉下来,都在github上,很慢,要有耐心
sh ~/.spf13-vim/bootstrap.sh
# js的自动完成使用
cd ~/.vim/bundle/YouCompleteMe && ./install.sh --tern-completer

YCM很难整,js的语法提示部分使用的是ternjs,搞过了才知道原来很多编辑器里内带的js自动完成都是由ternjs完成的。安装编译过程可能会有很多问题,语法提示模式时YCM跟随VIM启动,然后YCM接管默认的提示模型,额外的js就去调用tern来完成提示。

在项目的根目录放置一个.tern-project文件就可以实现完美的语法提示:

{
    "libs": [
        "ecma6",
        "browser",
        "underscore",
        "jquery",
        "chai"
    ],
    "plugins": {
        "node": {}
    }
}

效果是这样:

YCM的提示和系统的提示展开快捷键冲突

这个问题纠结了很久,一直不知道是什么问题,后来在stackoverflow上发现了有人有类似的问题才反映过来:

" fix the ycm and snippets bugs
let g:UltiSnipsExpandTrigger = "<nop>"
let g:ulti_expand_or_jump_res = 0
function ExpandSnippetOrCarriageReturn()
    let snippet = UltiSnips#ExpandSnippetOrJump()
    if g:ulti_expand_or_jump_res > 0
        return snippet
    else
        return "\<CR>"
    endif
endfunction
inoremap <expr> <CR> pumvisible() ? "<C-R>=ExpandSnippetOrCarriageReturn()<CR>" : "\<CR>"

spf13

spf13已经是大而全的了,基本已经没啥需要改进单,为了工作方便额外,还装了如下这些插件方便js开发:

Bundle 'mxw/vim-jsx'  #react jsx的格式化和语法高亮
Bundle 'ternjs/tern_for_vim' #tern
Bundle 'maksimr/vim-jsbeautify' #jsbeautify的vim接口
Bundle 'sjl/gundo.vim' #历史记录时光机
Bundle 'mustache/vim-mustache-handlebars' #handlebars模板高亮

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,679评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 前言 最早我也只是在服务器上编辑文件的时候用用vim来改改程序,并没有把vim当做自己的主力编辑器。但是偶然的一次...
    Python中文社区阅读 1,885评论 1 14
  • 「最近还好吗,有找到你珍惜的人吗?」 看到这个突然想起最近一段对话 中秋快乐 还好吗? 毛事没有 中秋快乐啊 就停...
    拧发条的鸟阅读 242评论 0 0
  • 这是一篇反思日记!今天突然压抑不住自己的心情,决心一定要写一点什么。思来想去,写什么呢,一本正经的文章写不来,那就...
    每天慌阅读 433评论 0 0