入手Vim的原因, Vim可以在几乎任何环境下使用, 对平台的依赖性不强(不包括部分插件在某些平台使用的不方便性).
保持Vim的使用, 我主要是用来写代码. 作为一款文本编辑器软件, 对于软件自身带来的功能没有太大的要求, 而Vim默认的整洁干净对于我是很重要的加分项. 最早学习编程的时候, 用过VS6.0, Visual Studio, 那个时候并没有在意编辑器的区别, 能用就行. 后来尝试用txt编辑, gcc/g++编译. 后来接触了Atom, 更加美观的纯文本编辑器. 再之后直到现在, 一直使用Vim, 因为随着学习的深入, 接触到了更多的Linux环境, 并且渐渐地喜欢了使用命令行. 而且Vim可以直接在Terminal使用, 可以直接在remote服务器上开发, 而不需要频繁地将项目导来导去, 或者用X11使用GUI编辑器.
深入Vim. 说实话, 使用Vim看起来帅炸了. Vim支持全方面config, 并且可以使用丰富的插件, community也非常活跃. customized的Vim, 已经不再是默认的枯燥编辑器, 不仅功能更加强大, 并且非常的美观且硬核.
除了之前提到的Vim不依赖环境, 还有个优点是便捷. 比方说, 有时候想要尝试刚看到的编程技巧或知识点, 打开别的编辑器需要一定时间, 比如说点击编辑器图标, 等待软件加载, 而Vim在敲完命令行的一瞬间就打开了. 虽然这可能只是几秒和一瞬间的区别, 但是深入使用以后, 这几秒的软件加载时间真的suck.
本文不赘述Vim的一些基本用法, 学习Vim的基础使用, 可以参考Vim Cheat Sheet, 或者在Vim中F1打开help介绍.
vim help file
Vim的配置文件, 默认为用户home目录下的.vimrc, 这里我将主要介绍一些我使用的Vim设置和插件, 我的.vimrc.
Vim的插件管理非常简单, 我使用的是vim-plug. 插件管理有很多, 用法也都非常类似. 以下是一些我使用的插件.
morhetz/gruvbox 是一个colorscheme美化插件, 安装插件后需要在.vimrc中添加colorscheme gruvbox以激活使用.
如需自定义个别细节颜色, 可修改~/.vim/plugged/gruvbox/colors/gruvbox.vim配置文件.
例如关于目前gruvbox在dark mode下, 对于语法检测的error和warning显示颜色的问题, 可以修改:
call s:HL('SyntasticError', s:vim_fg, s:red, s:undercurl, s:red)
call s:HL('SyntasticWarning', s:vim_fg, s:orange, s:undercurl, s:yellow)
mbbill/undotree 可视化的撤销返回列表.
preservim/nerdtree 项目树列表. Vim默认自带的有netrw插件, 也可用来显示项目树, :Explore可调出.
但是在使用netrw一段时间以后, 发现一些我想要的功能无法实现, 或难以实现.
例如想要随意打开或关闭项目树, 使用nerdtree, 可以使用:NERDTreeToggle,
或者在.vimrc设置keybinding:
nnoremap <leader>v :NERDTreeToggle<CR>
rhysd/vim-clang-format 需要clang-formatcommand配合使用, 关于clang-format的说明.
clang-format用于规范C家族以及多种编程语言的格式编排, 会在当前目录以及向上寻找.clang-format配置文件, 对于C/C++代码的格式, 我使用基于Google C++ Style的自定义修改规范, 我的.clang-format
ludovicchabant/vim-gutentags 需要ctags或别的tag生成软件配合使用, 用于动态自动生成tags文件.
tags记录了项目中定义的变量, 函数, 宏, 等信息, 可用于对已定义信息的查询和跳转.
macOS需要brew install ctags安装GNU版本的ctags. macOS自带的BSD版本缺少许多功能, 无法正常被此插件使用.
ycm-core/YouCompleteMe 非常重要且强大的插件, 包含自动补全, 语法诊断, 定义跳转, 定义提示, 等功能. 可以说, 有了YCM就基本上实现大多数使用者, 对于写代码的需求. 当然在Vim使用YCM, 往往还需要进行一些配置, 才能达到最想要的使用体验.
由于本人使用C++居多, 所以使用clangd作为语法引擎. 配合tags, .ycm_extra_conf.py, .vimrc中path对于gf(go file)路径的添加, 以及其他的配置, 形成一套完善的代码开发环境.
任何规范的文本, 每一行末尾是不应该出现无意义的空格的, 然而正常编辑的过程中, 空格是无法显示的. 添加以下配置到.vimrc, 可以将行末尾的空格高亮.
"HighLight trailing whitespace"
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
Vim用户可以安装powerline-vim, 配置status bar. 由于powerline-vim默认安装全局路径, Vim又会默认调用powerline-vim, 对于用户没有在.vimrc中指定配置的情况下, 就会报错, 这就非常annoying, 所以我一般偏向与通过pip3 install --user powerline-status安装python库, 再添加配置使用:
"use powerline-vim for normal use
"instead of installing for both user and root
"run to install lib: pip3 install --user powerline-status
python3 from powerline.vim import setup as powerline_setup
python3 powerline_setup()
python3 del powerline_setup
Vim是个很强大的编辑器, 但是不可否认的有着一定的learning curve, 需要首先学习一定的按键操作才能正常使用.
Vim具备非常丰富的插件支持, 以及全方位的config配置. 想要配置成理想的环境和功能, 需要花费不少的时间和精力, 但也因为这个, 它的可扩展性是许多IDE所不具备的.
同时, Vim keybinding可被用于很多地方, 包括浏览器Chrome, Firefox, 等都有插件, 可以实现操作键盘的网页浏览和链接跳转. 鼠标的滚动和点击使用方便了普通用户的操作, 然而纯键盘的使用, 大大的提高了效率.
在我看来, Vim已经不单单只是一款文本编辑软件, 更多的是一种使用习惯, 鼓励所有想要深入学习了解计算机的tinker们尝试.