## 安装 ### win访问github 我们在linux下安装vimplus 请忽略该章节。 1. 确保自己电脑能够访问github,进入`http://tool.chinaz.com/dns/`地址并查询`github.com` ![](media/image-20220821193806021.png) 2. 修改自己的host文件 ![](media/image-20220821193942018.png) 修改内容如下: ![](media/image-20220821194026820.png) 3. cmd终端下执行`ipconfig/flushdns`命令刷新dns ![](media/image-20220821194129154.png) 4. 这样就可以访问`github`网站了 ### ubuntu访问github 1. 查询地址 - nslookup github.global.ssl.fastly.net - nslookup github.com 执行结果如下: ![](media/image-20220821195650513.png) 2. 修改host ![](media/image-20220821195543929.png) 3. 重启网络和系統 ``` sudo /etc/init.d/networking restart sudo reboot ``` ### vimplus安裝 ```bash git clone https://github.com/chxuan/vimplus.git ~/.vimplus cd ~/.vimplus ./install.sh ``` 执行过程如下: ![](media/image-20220821191404851.png) ### vimplus更新 ```bash cd ~/.vimplus ./update.sh ``` 不过一般情况下由于要访问github,不科学上网的话,会更新失败。所以这里可以使用我下载好的`plugged.zip`插件直接解压放到`~/.vim`下即可,我解压后结果如下 ![](media/image-20220821213312754.png) `plugged.zip`下载地址如下: 链接:https://pan.baidu.com/s/1dJ1DU0VH0hBFuDkUnfJVNA 提取码:k7vy ## 配置文件说明 - `~/.vimrc`:为vimplus默认配置 - `~/.vimrc.custom.plugins`:用户自定义插件列表 - `~/.vimrc.custom.config`:为用户自定义配置文件。一般性配置可放入该文件,可覆盖`~/.vimrc`里面的配置 ## 启动vim 可能遇见问题 1. 如下 `YouCompleteMe` 代码补全插件没有安装好导致 ![](media/image-20220821202647032.png) 修复如下: ```bash cd ~/.vim/plugged/YouCompleteMe install.py ``` 2. 防止乱码修改终端字体 ![](media/image-20220821203345526.png) 3. 打开vim 提示下面的错误 ``` startify: Can't read viminfo file. Read :help startify-faq-02 ``` 修复如下: ```bash cd ~ sudo chmod 777 .viminfo vim .viminfo :wq ``` 4. todo ## 插件列表 | 插件 | 说明 | | ------------------------------------------------------------ | ------------------------------------------------------------ | | [cpp-mode](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fchxuan%2Fcpp-mode) | 提供生成函数实现、函数声明/实现跳转、.h .cpp切换等功能 | | [vim-edit](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fchxuan%2Fvim-edit) | 方便的文本编辑插件 | | [change-colorscheme](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fchxuan%2Fchange-colorscheme) | 随心所欲切换主题 | | [prepare-code](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fchxuan%2Fprepare-code) | 新建文件时,生成预定义代码片段 | | [vim-buffer](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fchxuan%2Fvim-buffer) | vim缓存操作 | | [vimplus-startify](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fchxuan%2Fvimplus-startify) | vimplus开始页面(修改自[mhinz/vim-startify](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fmhinz%2Fvim-startify)) | | [tagbar](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fpreservim%2Ftagbar) | 使用[preservim/tagbar](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fpreservim%2Ftagbar)的最新版本,[taglist](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fvim-scripts%2Ftaglist.vim)的替代品,显示类/方法/变量 | | [vim-plug](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fjunegunn%2Fvim-plug) | 比[Vundle](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2FVundleVim%2FVundle.vim)下载更快的插件管理软件 | | [YouCompleteMe](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2FValloric%2FYouCompleteMe) | 史上最强大的基于语义的自动补全插件,支持C/C++、C#、Python、PHP等语言 | | [NerdTree](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fpreservim%2Fnerdtree) | 代码资源管理器 | | [vim-nerdtree-syntax-highlight](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Ftiagofumo%2Fvim-nerdtree-syntax-highlight) | NerdTree文件类型高亮 | | [nerdtree-git-plugin](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2FXuyuanp%2Fnerdtree-git-plugin) | NerdTree显示git状态 | | [vim-devicons](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fryanoasis%2Fvim-devicons) | 显示文件类型图标 | | [Airline](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fvim-airline%2Fvim-airline) | 可以取代[powerline](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fpowerline%2Fpowerline)的状态栏美化插件 | | [auto-pairs](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fjiangmiao%2Fauto-pairs) | 自动补全引号、圆括号、花括号等 | | [LeaderF](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2FYggdroot%2FLeaderF) | 比[ctrlp](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fctrlpvim%2Fctrlp.vim)更强大的文件的模糊搜索工具 | | [ack](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fmileszs%2Fack.vim) | 强大的文本搜索工具 | | [vim-surround](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Ftpope%2Fvim-surround) | 自动增加、替换配对符的插件 | | [vim-commentary](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Ftpope%2Fvim-commentary) | 快速注释代码插件 | | [vim-repeat](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Ftpope%2Fvim-repeat) | 重复上一次操作 | | [vim-endwise](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Ftpope%2Fvim-endwise) | if/end/endif/endfunction补全 | | [tabular](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fgodlygeek%2Ftabular) | 代码、注释、表格对齐 | | [vim-easymotion](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Feasymotion%2Fvim-easymotion) | 强大的光标快速移动工具,强大到颠覆你的插件观 | | [incsearch.vim](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fhaya14busa%2Fincsearch.vim) | 模糊字符搜索插件 | | [vim-fugitive](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Ftpope%2Fvim-fugitive) | 集成Git | | [gv](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fjunegunn%2Fgv.vim) | 显示git提交记录 | | [vim-slash](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fjunegunn%2Fvim-slash) | 优化搜索,移动光标后清除高亮 | | [echodoc](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2FShougo%2Fechodoc.vim) | 补全函数时在命令栏显示函数签名 | | [vim-smooth-scroll](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fterryma%2Fvim-smooth-scroll) | 让翻页更顺畅 | | [clever-f.vim](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Frhysd%2Fclever-f.vim) | 强化f和F键 | ## 快捷键 以下是部分快捷键,可通过`vimplus`的`,h`命令查看`vimplus`帮助文档。 | 快捷键 | 说明 | | ------ | ------------------------------------------------------------ | | `,` | Leader Key | | `n` | 打开/关闭代码资源管理器 | | `t` | 打开/关闭函数列表 | | `a` | .h .cpp 文件切换 仅仅是同名的文件比如 a.c 和a.h | | `u` | 转到函数声明 | | `U` | 转到函数实现 | | `u` | 转到变量声明 | | `o` | 打开include文件 先把光标移动到需要打开的头文件名字上 然后在执行 | | `y` | 拷贝函数声明 | | `p` | 生成函数实现 | | `w` | 单词跳转 | | `f` | 搜索~目录下的文件 | | `F` | 搜索当前目录下的文本 | | `g` | 显示git仓库提交记录 | | `G` | 显示当前文件提交记录 | | `gg` | 显示当前文件在某个commit下的完整内容 | | `ff` | 语法错误自动修复(FixIt) | | `` | 切换到上一个buffer | | `` | 切换到下一个buffer | | `d` | 删除当前buffer | | `D` | 删除当前buffer外的所有buffer | | `vim` | 运行vim编辑器时,默认启动开始页面 | | `` | 显示语法错误提示窗口 | | `` | 显示上一主题 | | `` | 显示下一主题 | | `l` | 按竖线对齐 | | `=` | 按等号对齐 | | `Ya` | 复制行文本到字母a | | `Da` | 剪切行文本到字母a | | `Ca` | 改写行文本到字母a | | `rr` | 替换文本 | | `r` | 全局替换,目前只支持单个文件 | | `rev` | 翻转当前光标下的单词或使用V模式选择的文本 | | `gcc` | 注释代码 | | `gcap` | 注释段落 | | `vif` | 选中函数内容 | | `dif` | 删除函数内容 | | `cif` | 改写函数内容 | | `vaf` | 选中函数内容(包括函数名 花括号) | | `daf` | 删除函数内容(包括函数名 花括号) | | `caf` | 改写函数内容(包括函数名 花括号) | | `fa` | 查找字母a,然后再按f键查找下一个 | | `e` | 快速编辑~/.vimrc文件 | | `s` | 重新加载~/.vimrc文件 | | `vp` | 快速编辑~/.vimrc.custom.plugins文件 | | `vc` | 快速编辑~/.vimrc.custom.config文件 | | `h` | 打开vimplus帮助文档 | | `H` | 打开当前光标所在单词的vim帮助文档 | | `t` | 生成try-catch代码块 | | `y` | 复制当前选中到系统剪切板 | | `i` | 安装插件 | | `u` | 更新插件 | | `c` | 删除插件 | ## 常用使用命令 1. 打开文件夹 下面`progect_dir`代表我们的工程目录 ```bash cd progect_dir vim # 在normal模式下 输入下面命令即可显示工程目录 再次输入 就关闭工程目录 逗号即是 leader key 关于leader key可以在./vimrc 里面配置 ,n ``` ![](media/image-20220821220155351.png) 2. 多窗口间的切换 **normal**模式下执行 ```bash ctrl w h 或者 ctrl w ← # 向左切换 ctrl w j 或者 ctrl w ↑ # 向上切换 ctrl w k 或者 ctrl w ↓ # 向下切换 ctrl w l 或者 ctrl w → # 向右切换 ctrl w t # 跳到最顶端窗口 ctrl w b # 跳到最低端窗口 ctrl ww # 依次往下个窗口切换,不常用这个命令 # ctrl 是键盘的ctrl键,不是要输入ctrl字符 # h l 对应 左方向键, 右方向键 # j k 对应 下方向键, 正方向键 ``` ![](media/image-20220821220623241.png) 3. 缓存区 如果打开多个文件,使用ctrl p/n切换的时候就比较慢,可以使用 ```bash :ls bn 來切換到自己想切换的文件 n 是第几个 ``` 如下图所示: ![](media/image-20220822111151623.png) ![image-20220822111231301](media/image-20220822111231301.png) 4. 关闭打开的标签 比如现在打开了多个文件,现在想删除掉一个 ``` # 刪除当前的缓存区 ,d # 刪除 除了当前文件以外的其他文件 ,D ``` 5. 如果打开多个文件间的切换**normal** 模式下執行 - `ctrl p`:往前切标签 - `ctrl n`:往后切标签 - `ctrl 6`:当前标签和上次的标签来回切 ![](media/image-20220821225323336.png) 6. 显示当前文件的函数列表,定义的变量,宏等信息 有时候需要查看一个文件的函数列表输入下面命令即可 ```bash ,t ``` ![](media/image-20220821225634989.png) 7. 在.c文件下需要打开某个包含的头文件 ```bash ,o ``` ![](media/image-20220822091512028.png) 8. 调整窗口大小 如下图所示,左边的窗口太小了,需要调大点,操作如下: ![](media/image-20220822094312423.png) - 先映射快捷键 **注意**:只需修改一次即可 ```bash # 快速修改~/.vimrc 文件 ,e #末尾添加 下面的快捷键映射,默认调整1 # shift ↑ ↓ ← → nnoremap :resize -1 nnoremap :resize +1 nnoremap :vertical resize -1 nnoremap :vertical resize +1 ``` 修改后结果如下: ![](media/image-20220822094811625.png) - 执行下面的命令 ```bash shift → # 命令行窗口修改要拉宽的大小回撤即可,如下 我要放大 +60 也就是 增加60列 当然也可以 -60 就是缩小60列 ``` ![](media/image-20220822102104534.png) ​ ```bash #同理想往上或者往下 调都可以,只需把shift 后面的箭头换了即可 shift ↑ ↓ ← → ``` 9. 文件的保存和退出 ```bash #命令 #功能 :wq #当前的buffer写入文件保存 并退出 :w #当前的buffer写入文件保存 但不退出 :q #退出当前buffer 如果buffer修改了未保存会退出失败 :q! #强制退出当前buffer,不保存 :qa! #强制退出所有buffer,且不保存 :wa! #保存所有的buffer,不退出 ``` 10. 为当前文件新建一个窗口 有时候我们需要分屏操作,分屏后的窗口内存为当前buffer的内容输入下面的命令 ```bash # 水平分屏效果 :sp #垂直分屏 :vs #想要关闭当前窗口的时候 ctrl w c ``` 11. 光标移动操作 - `ctrl o`上一个 - `ctrl i`下一个 - `H`跳到屏幕顶端 - `M`跳到屏幕中间 - `L`跳到屏幕的底端 - `:n` 跳到第n行 - `w`跳到下个单词的开始(标点或者空格分开的单词) - `W`跳到下个单词的开始(空格分开的单词) - `e`跳到下个单词的尾部(标点或者空格分开的单词) - `E`跳到下个单词尾部( 空格分开的单词) - `b`跳到上个单词的头部(标点或者空格分开的单词) - `B`跳到上个单词的头部(空格分开的单词) - `ge`跳到上个单词的尾部 - `gg`跳到文件头 - `G`跳到文件尾 - `fx`跳到下个为x的字符 - `Fx`跳到上个为x的字符 - `[[`跳到函数开头 - `]]`跳到函数结尾 12. 查找 - 当前打开的文件中查找 ```bash /要查找的字符串 # 然后回车 n #向后查找 N #向前查找 #搜索前执行下面命令 忽略大小写 默认是忽略的 :set ignorecase ``` - 如果想再单词下面直接查找,把光标移动到单词上 ``` * 往下搜 # 往上搜 ``` - 环形搜索 ``` :set nowrapscan 禁用环形搜索 :set wrapscan 启用环形搜索 ``` - 光标移动到字符串下,输入/ 然后输入ctrl r 然后 ctrl w 那么光标处的字符串就被复制了且 在/下面也有 ![](media/image-20220822164403586.png) - 搜索工程目录下的文件 ```bash ,f 输入你要查找的文件名 ctrl j 或者ctrl k 向上或者向下翻 esc 退出查找 ``` ![](media/image-20220822165919834.png) - 搜索工程目录下文本 ```bash ,F 输入你要查找的文本内容 ctrl w c 关闭搜索的窗口 ``` ![](media/image-20220822170326983.png) - 13. 复制与粘贴 常用的命令如下: y 在使用v模式选定了某一块的时候,复制选定块到缓冲区用; yy 复制整行(nyy复制n行,n为数字); y^ 复制当前到行头的内容; y$ 复制当前到行尾的内容; yw 复制一个word (nyw或者ynw,复制n个word,n为数字); yG 复制至档尾(nyG或者ynG,复制到第n行,例如1yG或者y1G,复制到档尾); 3. 剪切的命令是d 即delete,d与y命令基本类似,所以两个命令用法一样,包括含有数字的用法. d 剪切选定块到缓冲区; dd 剪切整行 d^ 剪切至行首 d$ 剪切至行尾 dw 剪切一个word dG 剪切至档尾 4. 粘贴的命令式p 即put(放下) p 小写p代表贴至游标后(下),因为游标是在具体字符的位置上,所以实际是在该字符的后面 P 大写P代表贴至游标前(上) 整行的复制粘贴在游标的上(下)一行,非整行的复制则是粘贴在游标的前(后) 注: 在正则表达式中,^表示匹配字符串的开始位置,$表示匹配字符串的结束位置。 命令前面加数字表示重复的次数,加字母表示使用的缓冲区名称。使用英文句号"."可以重复上一个命令。 在复制粘贴时,另一组常用的命令是u(撤销操作),U(撤销某一行最近所有修改),Ctrl+R(重做),这些功能主要是vim中的,vi中略有差别 14.