Dotar是一个包含了zsh, spacevim(nvim), tmux和许多其它工具的多合一的Mac/Ubuntu开发环境

# 背景 Dotar的名字源于`dot`和`tar`的结合,代表者打包(`tar`)文件。 # 开始 ## 需求 * `zsh`, `tmux`, `vim`, `ag`已经安装,并且zsh作为你的默认终端: ```sh chsh -s $(which zsh) ``` * 如果缺少`Python 3`和`pynvim`等一些层(如`denite`),则无法加载它们。 ```sh python3 -m pip install --user --upgrade pynvim ``` ## 安装 ```sh bash -c "`curl -fsSL https://git.bitnet.fun/Gaze/dotar/raw/branch/master/install.sh`" ``` ## 升级 ```sh cd ~/.yadr git pull --rebase rake update ``` # 模块 * ZSH * [Prezto - YADR背后的zsh配置框架](http://github.com/sorin-ionescu/prezto) * [如何添加你自己的ZSH主题](doc/zsh/themes.md) ## Zsh Commands #### [文件](./zsh/files.zsh) 命令 | 参数 | 描述 :--------|:------|:----------- 交换 | F1 F2 | swap file F1 with file F2 替换 |[doc](#Replace) |Replace text recursively 替换 选项: ```sh -f 文件正则表达式模式 -s 源模式 -d 目标模式 -r 删除行 --regex 使用正则表达式匹配模式 --seperator= 分隔符, # 默认 -h 显示这条信息" ``` #### 编辑 快捷键 | 别名 :-----------|:-------- Ctrl-R | Vim模式和Bash风格的历史反向查询 ae | 编辑别名 ar | 重载别名 ESC C-x C-e | 在vim中编辑当前的命令行 #### 网络 命令 | 描述 :-----------|:-------- test-port PORT | 测试这个PORT是否打开 intercept-request-hosts | 拦截请求并显示主机信息 host-ip | 显示您系统的主机IP地址 #### 系统 命令 | 描述 :-----------|:-------- yell | 将脚本名称和所有参数打印到标准错误(stderr)流中 die | 与yell相同,但以非0退出状态退出,表示“失败” try | 使用 ||(布尔逻辑中的"或")运算符,只有在左侧表达式未失败时才会评估右侧表达式 list-large-files DIR | 列出大文件,按照文件大小的倒序排序,并按照`KB`, `MB`, `GB`的顺序打印文件大小 #### 字符串 命令 | 描述 :------------|:-------- random-hex | 打印随机十六进制数 random-string| 打印由字母`a-zA-Z0-9`组成的随机字符串 contains |str1 str2 ... target |测试目标字符串是否包含在字符串数组中 #### Git YADR将接管您的~/.gitconfig文件,因此如果您想要存储git用户名和其他设置,请将它们放在~/.gitconfig.user中。 我们建议在此文件中设置您的用户信息。此外,您可以在~/.secrets中适当设置环境变量。 命令 | 别名 | 描述 :--------|:--------|:--------- `ga` |`git add`| `gb` |`git branch`|新建分支 `gbc` or `gnb` |`git checkout -b`|新建并切换到新分支 `gbs` |`git show-branch`| `gc` |`git commit --verbose`| `gco` |`git checkout`|切换到目标分支 `gcp` |`git cherry-pick --ff`| `gcf` |`git commit --amend --reuse-message HEAD`|重新提交且不更改commit信息 `gd` |`git diff`| `gf` |`git fetch`| `gfc` |`git clone`| `gfm` |`git pull`| `gfr` |`git pull --rebase`|拉取远程分支更新到本地 `gl` |`git log`| `gpc` |`git push --set-upstream origin "$(git-branch-current 2> /dev/null)"`|将本地更改推送到远程的同名分支 `gr` |`git rebase`|合并分支到此分支 `gra` |`git rebase --abort`| `grc` |`git rebase --continue`| `grs` |`git rebase --skip`| `gsd` |`git stash drop`| `gsl` |`git stash list`| `gsp` |`git stash pop`| `gst` |`git stash`| #### 其它 - `secure_source` - 使 `~/.yadr/zsh/function.zsh` 文件生效, 使 `function.zsh` 中的更改在当前窗口生效 - `pp $1` - 用法:`pp xx`, 按名称搜索进程 - `set_proxy` - 设置终端代理以使用HTTP代理 - `set_vagrant_proxy` - 设置终端代理以使用Vagrant的HTTP代理 - `set_ss_proxy` - 设置终端代理以使用SOCKS代理 - `unset_proxy` - 取消所有代理设置 - `post $1 $2` - 使用application/json进行curl的POST请求 - `docker_rm_all` - 删除所有Docker镜像 - `kexec` - 通过正则表达式匹配的Pod名称执行Kubernetes Pod - `klog` - 通过正则表达式匹配的Pod名称显示Kubernetes Pod日志 - `git_tag_delete` - 删除GitHub标签 - `git_tag_add` - 添加GitHub标签 - `dc` - docker-compose的别名 ## [fasd](https://github.com/clvv/fasd) "fasd"的名称来源于默认建议的别名:f(文件)、a(文件/目录)、s(显示/搜索/选择)、d(目录)。 一些情况下,您可以输入左侧的命令,而fasd会将您的命令“展开”为右侧的内容。 ``` v def conf => vim /some/awkward/path/to/type/default.conf j abc => cd /hell/of/a/awkward/path/to/get/to/abcdef m movie => mplayer /whatever/whatever/whatever/awesome_movie.mp4 o eng paper => xdg-open /you/dont/remember/where/english_paper.pdf vim `f rc lo` => vim /etc/rc.local vim `f rc conf` => vim /etc/rc.conf ``` Fasd默认附带了一些有用的别名: ```sh alias a='fasd -a' # any alias s='fasd -si' # show / search / select alias d='fasd -d' # directory alias f='fasd -f' # file alias sd='fasd -sid' # interactive directory selection alias sf='fasd -sif' # interactive file selection alias z='fasd_cd -d' # cd, same functionality as j in autojump alias zz='fasd_cd -d -i' # cd with interactive selection ``` Fasd会智能地检测何时显示文件列表,何时只显示最佳匹配项。例如,当您在子shell中使用一些搜索参数调用fasd时,fasd只会返回最佳匹配项。这使您可以执行以下操作: ```sh mv update.html `d www` cp `f mov` . ``` ## Tmux #### 设置 `tmux.conf`为Mac OS上的tmux提供了一些合理的默认设置,例如强大的状态栏和VIM键盘绑定。您可以在`~/.tmux.conf.user`中修改配置。 #### 快捷键 起手式被定义为了 `ctrl+a`(下面的`PRE`就代表起手式) 快捷键 | 功能 :---------|:-------- Ctrl+h(jkl) |←(↓↑→)移动面板 PRE c |创建新面板 PRE s |上下分屏 PRE v |左右分屏 PRE x |关闭面板 PRE shift+h(jkl)|←(↓↑→)移动分割线 PRE , |重命名窗口 PRE d |退出会话 PRE D |退出会话 PRE 1 |进入面板1 PRE >/< |速查表 PRE {/} |将面板向前/后移动 PRE C-o |旋转窗口“向上”(即移动所有面板) PRE M-o |旋转窗口“向下” PRE z |全屏/取消全屏面板 PRE m |标记 PRE ! |将当前面板移动到一个新的独立窗格中 PRE o |前往下一个窗格(循环遍历所有窗格) PRE ; |前往“最后一个”(之前使用过的)窗格 > `C` 是 `Ctrl` 的简写 按下 `PRE [` 来进入滚动模式 快捷键 | 功能 | :--------|:---------| `Shift-V`| 选择文本| `Enter` | 复制文本 | `]` | 粘贴从滚动模式复制的文本 | ## Vim & Spacevim * ``: ``的缩写, 在我们的设置中是 `\` **我们定义的内容** #### 基础 [Here](doc/vim-basic.md) #### 快捷键 **全局** 快捷键 | 功能 :-------:|:--------: C-v | 进入Visual模式 C-x C-v | 从系统剪贴板粘贴文本 tp | 切换粘贴模式 SPC f v d| 打开配置文件 SPC g . | 进入版本控制瞬态状态 SPC l p | 预览Markdown **Typescript** 快捷键 | 功能 :-------:|:--------: SPC l p | 定义预览 SPC l t | 类型 SPC l e | 重命名 SPC l d | 文档 g d | 前往定义 SPC e L | 列出检查器 **Tab** 快捷键 | 功能 :--------:|:--------: \\[1-9] | 打开标签页1-9 SPC t t | 打开标签管理窗口 SPC w F | 打开一个新标签页 SPC w o | 切换标签页 **历史** 快捷键 | 功能 :--------:|:--------: `F7` | 撤销历史 **Debug** 快捷键 | 功能 :-----------:|:--------: SPC h I | 显示Debug信息 **Git Blame** 快捷键 | 功能 :----------:|:--------: b | 在当前行末尾切换显示Git Blame信息 s | 在状态栏中查看当前选定行的Git Blame信息 gb | 打开Git Blame窗口 #### markdown * 安装 `prettier`: `yarn global add prettier` 或 `npm install --global prettier` * 打开vim然后输入命令: `:SPUPdate` #### 选项窗口、窗口、分割栏 - `Ctrl-h,l,j,k` - 用于在左、右、上、下分隔中移动。即使在vim和分割栏并排的情况下,也可以使用 `vim-tmux-navigator`实现此功能。 - `Q` - 进入Ex模式 - `vv` - 垂直分割 (`Ctrl-w,v`) - `ss` - 水平分割 (`Ctrl-w,s`) - `,qo` - 打开快速修复窗口(grep的输出将显示在此窗口中) - `,qc` - 关闭快速修复窗口 #### Rails & Ruby - `,vv` & `,cc` 切换视图和控制器之间的命令是与:Rcontroller和:Rview相对应的映射。通过探索R系列命令,您可以更多地了解rails.vim的乐趣! - `,rs` & `,rl` 在iTerm中运行rspec或特定的spec行(在iTerm窗口中查看信息)。 - `,tt`在spec文件中给一个块添加`now: true`标签, 然后通过`rspec --tag=now`测试该块。 - `,ss` & `,sl` 通过使用`spring rspec`来实现相同的功能,可以通过缓存`Rails env`(必须安装spring gem)来加速Rails的测试。 #### Vim开发 - `,vc` - (Vim命令)复制光标下的命令并运行它。在测试vimrc中的单行更改时非常有用。 - `,vr` - (重新记录的Vim命令)将当前文件作为Vim文件使用,加载源代码。 #### SpaceVim界面元素: SpaceVim的界面元素以[SPC] t或[SPC] T开头。您可以通过在vim窗口中按下[SPC]键来查看第二级指令。同样地,按下所需的第二级指令,然后您可以查看三级指令以进行查看。 - `SPC t h s` - 显示/隐藏语法高亮显示 - `SPC t n` - 显示/隐藏行号 - `SPC t h h` - 高亮显示当前行 - `SPC T m` - 显示/隐藏菜单栏(看不出区别) - `SPC T t` - 显示/隐藏工具栏(看不出区别) - `SPC [1-9]` - 跳转到指定的窗口 - `SPC f t` - 打开文件树 - `SPC p f` - 在当前项目中查找文件 - `SPC f y` - 在命令行中显示并复制当前文件的绝对路径 - `SPC f S` - 保存所有文件 - `SPC f o` - 在文件树中查找当前文件 - `SPC f D` - 删除文件并附带确认删除相关缓冲区 - `SPC f p` - 在当前项目中搜索单词 - `SPC p /` - 在当前项目中进行模糊搜索文本 - `SPC c l` - 切换注释行状态 - `SPC c p` - 切换注释段落状态 #### 搜索文本 - `SPC s J` - 在当前项目中搜索光标下的文本 #### 帮助 - `SPC h d k` - 开始一个输入提示,然后按下您想要描述的按键绑定。 ## iTerm ### iTerm Solarized Colors YADR将会在iTerm中安装Solarized颜色方案。您可以在“Profiles => Colors => Load Presets”中选择Solarized Dark。 ## [Homebrew](http://mxcl.github.com/homebrew/) Homebrew是一个缺失的OSX包管理系统,它将会自动安装。 我们自动安装了一些常用的软件包,如ctags、git、macvim、hub和RipGrep(‘rg’)。请注意,我们的自动完成插件需要MacVim支持Lua。安装程序知道如何安装它,但如果您之前已经安装过它,您需要手动删除之前的MacVim。 ## 常见问题 [Check FAQ](./FAQ.md)