本系列文章包括3篇,主要分享我在后端开发过程中使用终端的一些经验和心得,分享fish shell使用,使用tmux终端复用管理会话、窗口,以及vim插件使用,让vim变成强大的IDE。通过阅读本系列文章,你也可以打造一个高效易用的终端,能很大的提高工作的效率,让手指飞起来,让命令行飞起来。

本系列的3篇文章包括:

打造最强终端之一:Fish shell简明教程

打造最强终端之二:Tmux配置及使用教程

打造最强终端之三:vim插件使用教程

本系列文章使用的fish配置文件,tmux配置文件和vim插件都上传到了github, cool-terminal-conf.

本文为第三篇,vim插件使用教程。

依赖

id-utils

id-utils包含了一系列实用工具,用于生成和查询符号,exvim使用id-utils生成符号索引,用于搜索。

1
2
# ubuntu
sudo apt install id-utils

exuberant-ctags

ctags主要是为源代码产生标签文件,从而实现代码的定义的跟踪跳转

1
2
# ubuntu
apt install exuberant-ctags

exVim

exVim将vim打造成一个友好编程环境的项目,exVim引入vim中(.exvim)项目文件的概念。通过Vim编辑此项目文件(.exvim),将调用exVim插件。这样,您可以应用不同的Vim设置,插件设置,甚至可以根据不同项目的需要加载插件。通常,它使Vim成为世界上最好的IDE!

入门

1
vim udp.exvim

生成的.exvim工程,窗口左边为 project window,右边为 edit window,edit window可以配置目录过滤规则(folder_filter_mode),过滤目录(folder_filter),过滤文件(file_filter)等,在project window执行<leader>R命令生成目录树(<leader>R指的是按下’\‘,紧接着按下’R’,vim操作都是大小写敏感),然后执行 :Up更新工程。

生成的工程结构如下图:

3-vim-exvim-project

本节涉及的使用命令有

1
2
3
<leader>R   生成左边project windows所示的工程
<leader>r 刷新工程目录
:Up Update工程,exvim将使用ctag,id-utils,cscope等插件解析工程,这样就能在工程中实现查找、函数跳转等功能

工程窗口

光标的移动与vim相同,使用 h j k l 分别对应光标的 左移 上移 下移 右移 ,同时exvim提供 ctrl-jctrl-k用于文件夹之间的光标移动

将光标移动到文件上,按下enter将打开文件

将光标移动到文件夹上,安装enter将折叠/展开目录,同时exvim也提供了 zozc 分别用于目录的折叠和展开

在目录下使用o新建一行,输入文件名,enter编辑文件后:w保存,将新建一个文件

将光标移动到目录上,按下O,将在该目录下新建一个文件夹,exvim提示你输入文件夹名

Tips: 想快速定位到当前正在编辑的文件,按下 <leader>fc 将会回到project window并将光标定位到正在编辑的文件,如果不小心关闭了project window这招也很实用。

搜索

vim使用 / 搜索文本,如果是搜索一个单词,exvim提供一种更加快捷方便的方式,将光标置于要搜索的单词上,按下 gd 即可搜索改单词。

同时exvim提供全局搜索,使用ex-gsearch进行文本搜索,支持两种方式:

  • <leader>gg:搜索光标下的单词
  • :GS <word>:搜索和包含的文本
  • :GSW <word>:搜索完整的

搜索完成后将在全局搜索窗口显示搜索结果,如下图所示

3-vim-exvim-search

过滤搜索结果

上图是我们全局搜索session的结果,包含session, Seesion, new_session等包含session文本的结果,那如何对搜索结果进行进一步过滤呢,比如过滤出Session的结果。具体操作:在搜索结果窗口搜索 /\<Session\>,该命令表示搜索完整的Session单词,然后按下<leader>r对搜索结果进行过滤,这样,搜索窗口就只包含匹配单词的结果了,如下图所示

3-vim-exvim-search-filter

问题: 当我们使用 :GS 搜索文本 tcp::socket时,发现没有输出结果,而我们确定代码中肯定包含 tcp::socket 文本,这是因为ex-gsearch仅支持 ,所以包含: , 空格 的关键字无法搜索到。解决办法就只能分两步:首先搜索一个单词,然后在搜索结果窗口中过滤搜索结果,将完整的 搜索词 过滤出来

符号列表

前面我们使用:Up命令,exvim使用ctag, id-utils等插件生成标签符号,ex-symbols提供几种方法在符号窗口列出符号

1
2
3
4
<leader>ss 列出所有符号
<leader>sg 列出光标下单词的符号
<leader>sq 打开符号窗口,显示为最后一次的symbols列表
:SL <your-tag> 使用<your-tag>作为搜索tag,列出所有匹配项

下图为光标在TCPConnection下, sg 展示的 symbols窗口

3-vim-exvim-symbols

其他插件

ctrlp

ctrlp用于快速打开文件,按下ctrl-p,然后输入要匹配的文件名,ctrl-j ctrl-k上下移动光标,选择要打开的文件

3-vim-ctrlp

TabBar

TabBar插件使vim打开的文件在顶部以tab的形式展示,如下图所示

3-vim-tabbar

我修改了一些快捷方式:

1
2
3
ctrl-h  上一个tab
ctrl-l  下一个tab
ctrl-x  关闭tab

a.vim

a.vim主要用于头文件和源文件之间的快速跳转,比如正在编辑tcp.h,按下 :A 即可快速打开 tcp.cpp

3-vim-a

NERDTree

NERDTree用于文件浏览,在展示当前目录下的所有文件,快捷方式我设置的为 ctrl-n

3-vim-nerdtree

总结

上面列出的插件是我使用vim过程中使用最频繁的,掌握了大大的提高开发效率,当然还有些其他的插件,如indentLine, undotree等,读者可以根据实际使用中慢慢掌握,vim学习难度比较高,但是掌握后,开发效率能很大的提升。

参考

exvim