1
0
mirror of https://shylinux.com/x/ContextOS synced 2025-04-26 09:14:06 +08:00
ContextOS/usr/wiki/zsh_tmux_vim.md
2018-09-19 01:17:54 +08:00

493 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 《终端工具链》简介
终端工具链,就是对编程开发过程中所用到的各种命令行的工具进行高效的组合,不断的提升编程速度与开发效率。
- 在主流的系统中Ubuntu的命令行最为强大有丰富的命令行工具可以很容易组合出自己的终端工具链
- 其次是MacOSX命令行也很丰富再搭配上苹果电脑的硬件与系统可以组合出很流畅的终端工具链
- 最后是Windows命令行功能弱的可以忽略但可以安装一个shell工具[git-scm](https://git-scm.com/downloads)使用一些基本的命令如果需要更丰富的命令行工具可以本地安装虚拟机或是远程连接云主机使用Ubuntu。
命令行终端,与图形界面不同,是以一种文本化的方式与系统进行交互。
可以很直接、很高效执行各种系统操作,同时各种重复性的操作,都可以很方便的写成程序脚本,和系统命令一样直接调用,不断的提升操作效率。
在终端里,有大量丰富的命令可以使用,不可能全部掌握,一些基本的命令会使用即可。
但在开发流程想提升编程速度与开发效率就需要深入理解与熟练掌握这几个工具zsh、tmux、docker、git、vim。
- **zsh** 和系统默认自带的bash一样也是一种shell不断的解析用户或脚本的输入执行各种命令。但提供了更丰富的特性如各种补全命令补全、文件补全、历史补全可以极大的提升操作效率。
- **tmux** 是一款高效的终端分屏器可以在终端把一块屏幕分成多个小窗口每个窗口都启动一个独立shell这样就可以充分的利用屏幕同时执行多个命令。
- **docker** 是一种容器软件,像虚拟机一样为应用软件提供一个完整独立的运行环境,但以一种更加轻量简捷的方式实现,极大的简化的软件的部署与分发。
- **git** 是代码的版本控制软件,用来管理代码的每次变化,分支与版本,本地与远程代码仓库,可以实现多人协作开发。
- **vim** 是一款极其强大的编辑器,通过模式化快捷键提升编辑速度,通过灵活的脚本与插件扩展丰富的功能。
使用zsh+tmux+vim的工具链根据自己的使用习惯进行个性化配置就可以极大的提升编程速度与开发效率。
## 入门指南
每个系统上打开终端的方式都不一样,根据自己的系统进行操作。
- 在Ubuntu中按Ctrl+Alt+T可以直接打开终端。
- 在Mac中打开Finder然后打开应用->实用工具->终端。
- 在Windows里先下载一个应用[git-scm](https://git-scm.com/downloads)按步骤安装即可然后打开应用Git bash。
打开终端后,你就打开了一个全新的世界,通过命令行,你就可以自由自在的控制你自己的电脑,并可以直接与世界上成千上万的计算机进行各种交互。
先来体验一下几个基本的命令吧。
输入"date",并按回车,即可查看当前日期与时间。
```
$ date
Wed Sep 12 09:32:53 CST 2018
```
输入"pwd",并按回车,即可查看当前所在目录。
```
$ pwd
/Users/shaoying
```
在Mac上输入"open"可以打开各种应用,如访问网页。
```
$ open http://www.baidu.com
```
在Mac上将文字转换成语音播放。
```
say hello
```
查看电脑开机时长。
```
$ uptime
19:31 up 26 days, 21:21, 3 users, load averages: 2.00 1.96 1.98
```
查看主机名。
```
$ hostname
shy-MacBook-Pro.local
```
下载文件使用wget命令参数输入下载链接地址即可下载文件到当前目录。
```
$ wget http://www.baidu.com
```
### zsh使用
Mac上自带zsh不用安装但Ubuntu上需要自己安装一下。
```
$ sudo apt-get install zsh
```
原生的zsh不是很好用可以安装一个[zsh插件管理器](https://github.com/robbyrussell/oh-my-zsh)。
更多信息可以查看[ohmyzsh官网](https://ohmyz.sh/)。
```
$ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
```
如果在Ubuntu上没有安装curl可以安装一下。
```
$ sudo apt-get install curl
```
### tmux使用
### docker使用
- [Windows版docker下载](https://store.docker.com/editions/community/docker-ce-desktop-windows)
- [Mac版docker下载](https://store.docker.com/editions/community/docker-ce-desktop-mac)
#### docker镜像管理
- 查看镜像 docker image ls
- 下载镜像 docker image pull
刚安装docker后查看镜像列表如下为空。
```
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
```
像github管理代码仓库一样docker hub上也存放了很多镜像用户可以自由的下载与上传各种镜像。
如下示例下载一个busybox镜像。busybox是将Unix下的常用命令经过挑选裁剪集成一个程序中搭配Linux内核就可以做出一个小型的操作系统在嵌入式领域应用广泛。
体积很小不到1M下载很快所以这里用做示例。更多信息参考[busybox官网](https://busybox.net/)
```
$ docker image pull busybox
```
下载完成后再查看镜像列表就会看到busybox镜像相关的信息。
```
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest e1ddd7948a1c 6 weeks ago 1.16MB
```
#### docker容器管理
- 查看容器 docker ps
- 启动容器 docker run
- 停止容器 docker exec
- 停止容器 docker stop
如下示例,查看容器列表,因为还没启动任何容器,所以这里为空。
```
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
```
如下示例用busybox:latest镜像启动一个容器并调用sh命令。
```
$ docker run --name demo -dt busybox:latest sh
29ff6b8343c4a2c57eab297e74e62422ab9bbd481d69f5ebf108f4aa23ae835c
```
其中,-d 指用守护的方式启动,与交互式 -i 不同,守护式启动,容器可以一直运行,不会因为终端容器关闭而停止。
--name参数指定容器的名字为demodocker中标识容器有两种方式一是通过ID查找容器二是通过NAMES查找容器为了方便记忆与查找建议启动容器时加上名字参数。
如下示例,再次查看容器列表,看到容器已经启动。
```
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
29ff6b8343c4 busybox:latest "sh" 4 minutes ago Up 4 minutes demo
```
连接容器demo调用命令解析器sh。这样就连接上了容器的命令行可以执行各种命令。
```
$ docker exec -it demo sh
#
```
容器的停止退出连接后容器依然在后台运行可以反复被连接。如果想停止容器的运行就用stop命令。
```
$ docker stop demo
```
#### 挂载文件
之前启动的容器都是与本机之间没有什么交互,是一个完全独立的运行环境。
如果需要容器与本机交互一些文件,就可以在启动容器时指定文件参数。
```
$ docker run --name demo1 -v/Users/shaoying:/home/shaoying -dt busybox:latest sh
```
#### 端口映射
### git入门
Mac上自带git不需要安装。
Windows上安装了的git-scm也集成了git也不需要单独安装。
但Ubuntu需要自己安装一下。
```
$ sudo apt-get install git
```
### vim入门
Mac上自带vim不需要安装。
Windows上安装了的git-scm也集成了vim也不需要单独安装。
但Ubuntu默认只安装了vivim需要自己安装一下。
```
$ sudo apt-get install vim
```
vim是最高效的编辑器没有之一。熟练掌握它的使用会极大的提升文本或代码的编辑速度。
当然与常见的其它编辑器不同vim有独特的操作模式刚开始使用会有些奇怪。
不过一但你理解了它的运行逻辑,适应了它的操作习惯,你这辈子都不会再想用其它的编辑器。
输入命令vim如果带有参数则会打开此文件如果没有参数则直接打开一个空文件。
```
$ vim hi.txt
```
按字母"i",进入编辑模式,然后就可以输入任意文本。
```
Hello Vim World!
Vim is best and fast.
You can use vim to input text or code into complute in a free style.
```
输入完内容后,按左上角的"Esc"键,就可以退出编辑模式,回到命令模式。
在命令模式下可以对文件内容进行各种查看、搜索、修改等操作。vim很多高效的操作都是在命令模式下执行的。
最后,需要保存文件并退出时,按冒号键":",进入底行模式,再输入"wq"并按回车。
```
:wq
```
#### vim的常用模式
与其它编辑器不同vim是一种模式化编辑器即处在不同模式下每个按键都会不同的功能。
之所以vim是最高效的编辑器这就是其中的原因之一。
常见的模式有:命令模式、编辑模式、底行模式。
启动vim后默认的模式是命令模式其它模式都是以命令模式为基准中心进行相互切换。
即由命令模式切到到编辑模式,由编辑模式切换到命令模式;由命令模式切换到底行模式,由底行模式切换到命令模式。
- 命令模式: 通过各种快捷键,对文件内容进行各种快速的查看、搜索、修改等操作。
- 编辑模式: 和其它编辑器一样,各种字母数字按键会当成文件的内容直接输入。
- 底行模式: 通过输入各种命令行调用vim各种函数或脚本对文件内容进行复杂的处理。
不同模式下按键的功能是不一样的,所以要知道当前的模式,并能自由切换。如果不知道自己所在的模式,就按\<Esc\>总会回到命令模式的。
- 命令模式->底行模式: 输入冒号键":",从命令模式切换到底行模式。
- 命令模式<-底行模式: 输入回车键\<Enter\>执行命令或输入退出键\<Esc\>不执行命令然后从底行模式返回到命令模式
- 命令模式->编辑模式: 输入"i"、"I"、"a"、"A"、"o"、"O"、"s"、"S",其中任何一个键都可以进行编辑模式。
- "i": 在光标左边的位置开始插入内容
- "a": 在光标右边的位置开始插入内容
- "o": 在光标下面新加一空白并开始插入内容
- "O": 在光标上面新加一空白并开始插入内容
- "A": 在光标当前行尾的位置开始插入内容
- "I": 在光标当前行首的位置开始插入内容
- "s": 删除光标下的字符,并在光标当前的位置开始插入内容
- "S": 删除光标当前行的所有字符,并在光标当前行开始插入内容
- 命令模式<-编辑模式: 输入退出键\<Esc\>从编辑模式返回到命令模式
#### vim的帮助文档
vim有很灵活的快捷键大量的配置与命令和丰富的插件所以除了要多练习还需要多看文档vim自带的帮助文档就很丰富很完整
英文不好也没关系vim帮助文档中的英语单词都比较简单很容易阅读与理解
当然也有很多复杂的单词不过那也无所谓就算每篇文档只看懂一半也能学到很多有用的技巧
因为英文的文档是最接近作者的思维功能讲解的也更加全面所以直接查看英文文档是一个优秀程序的必备修养
所以要克服自己的心理刚开始看懂多少是多少慢慢养成直接看英文文档的习惯文档看的多了自然看懂的就会越来越多
阅读英文文档不仅可以提高英文水平而且对你写文档和写代码的水平也会有很大的帮助
打开vim在命令模式下输入":help"并按回车就可以进入文档中心查看各种文档
```
:help
```
***学VIM第一要掌握的四个快捷键就是hjkl***。
把双手自然的放在键盘上右手离的最近的四个键就是hjkl所以这么黄金的位置当然分配给了使用最频繁的光标移动了
- "h"键在最左边所以按"h"当然就是把光标左移
- "l"键在最右边所以按"l"当然就是把光标右移
- "j"键在食指下面是按键最快的所以按"j"当然就是把光标向下移
- 最后是"k"当然就是把光标向上移
在帮助文档中可以练习一下光标移动的这四个键多体验一下你就会感觉到vim的强大
在vim鼠标就是最影响编辑速度的瓶颈练习过一段时间的快捷键后再碰鼠标你就会很明显的感觉到鼠标严重拖慢你的操作速度
再练习过一段时间后别说鼠标了就是那四个方向键和"Esc"键你会懒得去用因为那太慢太慢了
最终使用vim的效果就是你的手腕不会有任何移动只有手指在26个字母和10个数字键上噼里啪啦的在敲击
在vim有tags标签就像网页中的超链接一样可以点击访问另外一个文档
使用的方式就是把光标移动到有特殊标记的单词上按下两个组合键快捷"Ctrl+]"就可以跳到另外一篇文档中
看完那篇文档后按下组合键"Ctrl+T"就可以返回原来的文档
另外浏览文件常用的快捷键还有
- Ctrl+F 向下翻页
- Ctrl+B 向上翻页
- Ctrl+D 向下翻半页
- Ctrl+U 向上翻半页
- gg 跳到文件第一行
- G 跳到文件最后一行
#### vim的文本修改
除了前面的光标移动与翻页功能命令模式下还有很多操作命令
- cc 删除当前行并进入编辑模式
- dd 删除当前行
- yy 复制当前行
- p 在光标之后粘贴复制的内容
- x 删除光标所在的字符
- r 替换光标所在的字符输入字符r后接着输入新字符
- u 取消操作
- Ctrl+R 恢复取消的操作
#### vim的单词搜索
除了hjkl移动光标外还有更快捷移动光标的方式就是搜索
- 行内搜索: "f""t"当用h或l进行左右移动时经常需要按多好次键才能移动到目标位置所以输入f加上目标位置所在的字符就可以直接跳过去t与f相同也是跳转只是t是跳到目标字符的左边一个位置
- 匹配搜索: "\*""#"按一下"\*"vim就会用光标所在的单词向下搜索直接跳到当前单词出现的下一位置#与\*相反是向上搜索
- 全文搜索: "?""/"如果相搜索任意单词在命令模式下输入"/"然后输入想要搜索的单词最后输入回车即可向下搜索并移动光标到单词所在位置。?/相反是向上搜索
#### vim的命令组合
#### vim的常用配置
除了前面那一堆高效的快捷键外vim另一强大的原因就是灵活的配置
你完全可以根据自己的习惯修改各种各样的配置让编辑器更加得心应手
vim的配置命令是set在命令模式中输入":set "再加上需要修改的配置
***显示行号***输入":set number"即可在窗口左边显示文件的所有行号就可以很清楚的知道当前的位置
```
:set number
```
***显示相对行号***很多时候目标位置距当前位置相隔很多行还要去目测或一行行去数相对位置
设置显示相对行号后就可以直接看到窗口中所有行相对于当前行的相对行号
```
:set relativenumber
```
***显示光标纬线***有时屏幕屏幕太大往往对不准同一列的字符或同一行的内容就可以显示经纬经
```
:set cursorline
```
***显示光标经线***
```
:set cursorcolumn
```
状态行也可以显示很多用有的信息
***显示光标位置***
```
:set ruler
```
***显示当前命令***
```
:set showcmd
```
***显示当前模式***
```
:set showmode
```
#### vim的启动脚本
vim有大量的配置与命令不可能每次启动vim都要手动去输入一遍
vim具有脚本解析的功能并且会在启动的时候会加载启动脚本文件
所以就可以把一些常用的命令放到启动脚本中每次打开文件时vim会自动的首先执行这些命令
vim默认的启动脚本文件是在家目录下的.vimrc如下打开启动脚本文件并把之前的那些命令写到脚本中
因为vim会把脚本文件中的每一行当成一条命令来解析并执行所以行首不需要再专门输入":"。
```
$ vim ~/.vimrc
set number
set relativenumber
set cursorline
set cursorcolumn
set ruler
set showcmd
set showmode
set cc=80
set nowrap
set scrolloff=3
```
#### vim的扩展插件
除的vim自带的配置与命令还有大量丰富的插件可以扩展很多功能
但大量的插件手动维护太复杂可以下载一个[vim插件管理器](https://github.com/junegunn/vim-plug)
执行如下命令下载plug-vim
```
$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
```
下载完成后还需要在启动脚本文件中加入一些命令启用此插件管理器
打开~/.vimrc并添加以下第2行及以后的内容
```
$ vi ~/.vimrc
call plug#begin()
Plug 'vim-scripts/tComment'
call plug#end()
```
以后如果需要添加新的插件就可以在"call plug#begin()""call plug#end()"之间插入Plug命令
如安装插件tComment就插入"Plug 'vim-scripts/tComment'"。
重新加载启动脚本
```
:source ~/.vimrc
```
执行":PlugInstall"命令plug-vim就会从github上下载tComment插件
```
:PlugInstall
```
重新加载启动脚本
```
:source ~/.vimrc
```
输入":help tComment"即可查看此插件的帮助文档
```
:help tComment
```
***tComment插件***可以对代码进行快速注释或取消注释在编写代码尤其是调试代码时经常会遇到需要暂时注释掉一段代码但稍后又取消掉注释
tComment通过简单的命令就可以很快的实现此功能不再需要手动的去插入一堆注释的符号
- "gcc" 注释或取消注释当前行的代码
## 个性化配置
### zsh安装
Mac上自带zsh不用安装但Ubuntu上需要自己安装一下
```
$ sudo apt-get install zsh
```
在Mac上将zsh设置为默认的shell
```
$ chsh -s /bin/zsh
```
在Ubuntu上将zsh设置为默认的shell
```
$ chsh -s /usr/bin/zsh
```
原生的zsh不是很好用可以安装一个[zsh插件管理器](https://github.com/robbyrussell/oh-my-zsh)
更多信息可以查看[ohmyzsh官网](https://ohmyz.sh/)
```
$ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
```
如果在Ubuntu上没有安装curl可以安装一下
```
$ sudo apt-get install curl
```
### tmux安装
[tmux源码](https://github.com/tmux/tmux)
Ubuntu上安装
```
$ sudo apt-get install tmux
```
Mac上安装
```
$ brew install tmux
```
如果Mac上没有brew可以安装一下[Mac包管理器](https://github.com/Homebrew/brew)更多信息参考[HomeBrew官网](https://brew.sh/)
```
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
### docker安装
[docker下载](https://www.docker.com/products/docker-desktop)
[docker源码](https://github.com/docker/docker-ce)
### git安装
Mac上自带git不需要安装但Ubuntu需要自己安装一下
```
$ sudo apt-get install git
```
### vim安装
Mac上自带vim不需要安装但Ubuntu需要自己安装一下
```
$ sudo apt-get install vim
```
vim通过丰富的插件可以扩展很多功能定制出完全个性化的编辑器
但大量的插件手动维护太复杂可以下载一个[vim插件管理器](https://github.com/VundleVim/Vundle.vim)
```
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
```
启用vundle插件管理打开~/.vimrc并添加以下第2行及以后的内容
```
$ vi ~/.vimrc
filetype off
set nocompatible
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
call vundle#end()
filetype plugin indent on
```
#### YouCompleteMe安装
vim只是编辑器如果需要语法检查与补全功能可以安装插件[YouCompleteMe](https://github.com/Valloric/YouCompleteMe)
打开.vimrc配置文件添加插件
```
$ vim ~/.vimrc
Plugin 'vim-syntastic/syntastic'
Plugin 'Valloric/YouCompleteMe'
```
保存配置文件重新打开vim并执行安装命令
```
$ vim
:PlugInstall
```
由于网络原因可能下载不了可以手动下载插件
```
$ git clone https://github.com/Valloric/YouCompleteMe ~/.vim/bundle/YouCompleteMe
$ cd ~/.vim/bundle/YouCompleteMe
$ git submodule update --init --recursive
```
不论是用vundle安装或手动下载都需要进入插件目录进行编译安装
```
$ cd ~/.vim/bundle/YouCompleteMe
$ ./install.py --clang-completer
```
Ubuntu上如果没有cmake还需要安装一下
```
$ sudo apt-get install cmake
```
#### vim源码安装
vim默认不支持python的语法补全如果需要用到python可以下载[vim源码](https://github.com/vim/vim)编译安装 更多信息查看[vim官网](https://www.vim.org/)
```
$ sudo apt-get install python
$ sudo apt-get install python-pip
$ sudo apt-get install python-dev
$ sudo apt-get install libncurses5-dev
$ sudo apt-get install build-essential
$ git clone https://github.com/vim/vim.git && cd vim
$ ./configure --with-features=huge\
--enable-pythoninterp\
--with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu/\
--enable-multibyte\
--prefix=/usr/local/vim8/
$ make -j8
$ sudo mkdir /usr/local/vim8
$ sudo make install
```
## 源码解析
```
$ sudo apt-get install build-essential
```