本文记录 Linux 开发环境搭建点滴,以备查询。另外,本文所用 Linux 版本混合了 CentOS 7.1 和 Debian 8.2。
dotfiles
dotfiles 指的是 Linux 下一些常用的隐藏文件(以**.**开头)。Github 目前有一些其他人分享的 dotfiles:
终端:安装及配置 Zsh
在默认情况下,Linux 下的终端是 bash,但其跟 zsh 相比起来还是有点差距。博文使用 zsh 的九个理由就讲了九个使用 zsh 的理由。
安装 zsh,直接利用 yum 安装即可:
1 | $ sudo yum install zsh |
然后可以直接用 oh-my-zsh 来配置 zsh:
1 | $ sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)" |
或者用
1 | $ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" |
接下来可以编辑一下 ~/.zshrc 来修改 zsh 颜色主题及安装插件。
需要注意的是,可能需要设置一下环境变量。具体可参考下一博文 Linux 中环境变量设置。
下图是个人终端效果:
注:终端背景颜色是通过终端的 Edit->Profile Preference->Colors,具体两个步骤如下:
RGB数值大概分别为37 42 44。
目录切换神器:autojump
autojump 是一款可以帮助我们快速切换目录的神器。最简单和常用的一个命令就是通过输入j foo
就可以跳转到包含foo
的之前打开过的目录。这里需要注意的是,autojump 所构建的用于快速跳转的数据库基于打开过的目录,所以我们利用跳转命令仅能跳转到打开过的目录。不过,利用局部性原理
,我们大部分的时候只会跳转到我们打开过的目录,所以这个软件将能够大大提高我们的效率。
一个操作样例如下:
1 | $ pwd |
该软件在 CentOS 上的安装稍微简单一点:
1 | $ sudo yum install autojump |
在 Debian 上,
1 | $ sudo apt-get install autojump |
然后打开/usr/share/doc/autojump/README.Debian
文件,按照说明,将
1 | . /usr/share/autojump/autojump.sh |
添加到.zshrc
文件中。
屏幕分割神器:TMUX
关于 TMUX 的概念,博文 Tmux - Linux从业者必备利器说的很详细生动。而另一博文 Tmux 的使用方法和个性化配置对TMUX的配置说的很不错。
安装 TMUX 直接用 yum 就可以了:
1 | $ sudo yum install tmux |
接下来就主要配置下 TMUX 就行了。新建文件 ~/.tmux.conf:
1 | #设置前缀为Ctrl + x |
效果图如下:
部分 TMUX 快捷键可参考博文 tmux 快捷键:
VIM 的配置
VIM 屏幕分割
博文 VIM 分屏功能总结总结的简要易懂,就直接摘录了:
总结起来,基本都是 ctrl+w 然后加上某一个按键字母,触发一个功能。
(1)在 Shell 里打开几个文件并且分屏:
vim -On file1 file2 …
vim -on file1 file2 …
大 O 表示垂直分割(vertical),小 o 表示水平分割(默认 horizontal),后面的n表示分几个屏,实际上我觉得不用写,默认按后面要分割的文件数来决定分几个屏。
(2)在 VIM 里打开一个分屏:
创建空白分屏:
:new
打开任意文件:
:vsplit(:vsp) filename
:sp(split) filename
打开当前文件:
ctrl+w 和 s(split)
ctrl+w 和 v(vsplit)
(3)关闭一个分屏:
:only 或者 ctrl+w 和 o 取消其它分屏,只保留当前分屏
关闭当前分屏:
ctrl+w 和 c(close)
只剩最后一个分屏以后退出:
ctrl+w 和 q(quit)
(4)移动光标,也就是切换分屏;也可以移动分屏,比如将左分屏移动到右边。
ctrl+w 和 w(各种切换,只有两个分屏的时候还是比较方便的)
ctrl+w 和 h(H) 左
ctrl+w 和 j(J) 下
ctrl+w 和 k(K) 上
ctrl+w 和 l(L) 右
(5)最后就是改变分屏尺寸的操作了。
ctrl+w 和 < 左
ctrl+w 和 右
ctrl+w 和 + 上
ctrl+w 和 - 下
ctrl+w 和 = 恢复均等
安装 Vundle
Vundle 的安装参照其 Github 主页即可:
1 | $ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim |
然后从 Bitbucket 上下载个人的 .vimrc 配置文件:
1 | git clone git@bitbucket.org:xiehongfeng100/dotfiles.git |
将 .vimrc 覆盖原 ~/.vimrc 文件,进入 vim,执行 :BundelInstall
安装过程类似下图(摘自 Vundle Github 主页):
注意:这样子安装完成后,可能会提示:
YouCompleteMe unavailable: requires Vim compiled with Python 2.x support
UltiSnips requires py >= 2.7 or py3
而且通过vim --version
可以查看得到 vim 现在还不支持 python:
这个时候千万不要将系统自动安装的python
卸载(而选择源码安装),因为之前在 Debian (8.2.0 AMD64,采用 Cinnamon 桌面)卸载完 python,整个系统就挂了,不得不选择重装系统。
这时,我们可以通过安装vim-nox
来使 vim 支持 python 特性。
学会使用插件帮助
好多插件其实都有帮助文档,而这却是常常被忽略的地方。使用 :help 插件名
就可以看到对应插件的帮助文档。
神秘的 leader
相信很多人都看到 VIM 下的很多插件的快捷键都是以 leader 键开头。这个键其实我们是可以自己设置的:
1 | " [+] Leader Settings ------------------------ |
缓冲区跳转
对 VIM 中的缓冲区,博文 Vim 多文件编辑:缓冲区有一个比较详细的介绍。
关于缓冲区之间跳转,有以下几种方式:
1 | :buffers 列出所有缓冲区 |
:b接受缓冲区编号,或者部分文件名。例如:
- :b2将会跳转到编号为2的缓冲区,如果你正在用:ls列出缓冲区,这时只需要输入编号回车即可。
:b exa将会跳转到最匹配exa的文件名,比如example.html,模糊匹配打开文件正是Vim缓冲区的强大之处。
(这个必学啊!)
另外,通过:buffers
命令可查阅现有缓冲区文件的标记。缓冲区相关的标记如下:
1 | - (非活动的缓冲区) |
文件跳转
必记的 3 个命令(经常跟定义声明命令相结合起来):
Ctrl+^
用于已打开的两个文件之间跳转(非常常用)Ctrl+O
向后翻转Ctrl+I
向前翻转
定义声明跳转
对定义声明跳转几乎也是必不可少的一项功能。
C/C++
有待添加
Python
所用插件为 Jedi-Vim。这款插件为 Python 自动补全插件。但实际上,它所能做到的远远大于此。通过配置的快捷键就可以看得出来:
1 | let g:jedi#goto_command = "<leader>d" " 必用 |
自动完成插件
YouCompleteMe
YCM 是自动完成神器,必备!
安装
先安装 Clang:
1 | $ sudo yum install clang |
在上一步的基础上,参照 YouCompleteMe 主页,个人配置采用:
1 | $ cd ~/.vim/bundle/YouCompleteMe |
有时这样子会提示 clang 没有安装(假设 clang 已安装),就将第二条语句改为:
1 | $ ./install.py --clang-completer --system-libclang |
如果提示 clang-llvm 压缩文件(如~/.vim/bundle/YouCompleteMe/third_party/ycmd/clang_archives/clang+llvm-3.7.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz)没有足够空间(/tmp
)可以解压,请参考博文如何增加 Linux 下临时文件夹 /tmp 的大小。
另外,install.py 的参数是可以通过
1 | $ ./install.py --help |
来得到的。
配置
YCM 的配置在 .vimrc 中已经有详细说明。这里要说明的是,我将 YCM 的选词快捷键从 Tab 键改为 Ctrl+N/U
,以不跟 snipMate 插件冲突。该部分配置如下:
1 | let g:ycm_key_list_select_completion = ['<c-n>', '<Down>'] " 将 YCM 的选词从 tab 键改为 Ctrl+N/U |
jedi-vim
Python 语法、函数自动补全,很强大,必用!
Emmet
Emmet 是一款强大的 HTML 快速生成插件。
SnifMate
该插件是一个语句自动完成插件。例如我们在 C 语言文件输入 for 后,按 Tab 键
,就可以自动补全 for 结构。
delimitMate
自动补全引号(单引号/双引号/反引号), 括号(()[]{})
syntastic
强大的语法提示功能
Nerdtree
这也是一个必备插件,用于文件目录导航。安装完只需进行简单配置即可:
1 | " [+] Nerdtree Settings --------------------- |
触发键:Ctrl+N
Tagbar
这个插件用于生成标签信息。简单设置如下:
1 | " [+] Tagbar Settings ------------------------ |
触发键:Ctrl+M
Ctrlp
如果我们想要在 VIM 中搜索其他文件,该插件是一大利器。简单设置如下:
1 | " [+] Ctrlp Settings ------------------------- |
触发键:Ctrl+F
NerdCommentor
看名字就知道这个插件是个注释插件。非常强大!以前注释都用快操作然后再输入指定语言的注释符,现在这些这个软件都可以代劳。不过,我们要进行块注释,我们还是得先选择要注释的块,再调用这个插件。简单设置如下:
1 | " [+] NerdCommentor Settings ----------------- |
快捷键:
注释:<leader>+cc
解开注释:<leader>+cu
VIM-Autoformat
这个插件用来对代码进行格式化。实际上,它只是一个代码格式化软件管理插件,也即具体实现格式化的并不是这个插件,是其他软件,而这个插件是为了方便管理这些软件。具体实施格式化的软件列表见 Github。
在这里,我只用到了 astyle 和 autopep8 两个具体软件:
- astyle:对 C/C++/C#/Java 进行格式化。下载源码后,进入
astyle/build/gcc
目录 make,将生成的 bin/astyle 可执行文件拷贝到 /usr/bin - autopep8:对 Python 进行格式化。安装:
sudo apt-get install python-autopep8
快捷键:F3
Git 管理
vim-fugitive
这是一款很强大的 Git 管理工具。它的命令以 G 开头,后接 Git 的命令,如 Gstatus 相当于 Git 中的 git status。
必用的几个命令如下:
Gdiff
(很强大)- Gstatus
- Glog
- Gblame
对于文件添加、删除、提交等,个人觉得还是用原生 Git 比较好。更多命令可以在 VIM 中执行命令 :help fugitive,或针对具体命令执行如 :help Gstatus。同时,可参看博文 VIM 插件介绍-Fugitive。
vimsignify
该插件方便我们在左边栏看到相对于上次提交的 添加、删除、修改 的行,一目了然,非常方便。如下图所示:
Gundo
这个插件如其名,就是让我们可以回滚操作,是一个 Git 管理工具。简单配置如下:
1 | " [+] Gundo Settings ------------------------- |
我们在编辑一个文件后,按下快捷键 F5
,就可以触发该插件,然后可以选择回到具体的版本。如下图,我们删除文件文件中的一行,按 F5 键,就可看到 5 秒之前的操作,而且可以回滚到其他版本(如 Original)
状态栏
状态栏这里使用配置简单的 vim-airline 插件。其主题插件是 vim-airline-themes。简单配置如下:
1 | let g:airline#extensions#tabline#enabled = 1 |
其他配置
这部分可能随时在更新,所以最好从 BitBucket 上下载最新的 .vimrc 文件。
1 | " [+] Regular Settings ------------------------ |
上边配置中值得一提的是:
- 突出当前行
- 搜索时大小写不敏感
- 关闭搜索高亮
- 显示括号配对
- 显示 Tab 键和末尾空格
- 在 Escape 模式下关闭方向键