vim作为Linux下最流行的文本编辑器,为广大程序员们提供了强大的文本编辑功能,但是其学习曲线却十分陡峭,对初学者不太友好。本篇博客记录了本菜鸟日常开发中应用到的一些vim进阶技巧和插件,方便自己记忆和查阅,持续更新中。
1. vim编辑中返回命令行:
在使用vim编写代码的过程中,常常会有退出编辑界面,回到命令行执行各类命令的需求。最简单的操作当然是 :q 的方式退出vim,不过再想回到原位置就比较费事了。其实可以在vim中输入:shell,直接回到命令行节面,执行完各项操作后,只需要按下Ctrl + d 就可以回到之前退出的地方。除此之外,在vim中直接按下Ctrl + z也可以暂时退出vim,执行完操作之后,在命令行窗口中输入fg,敲下回车就能回到vim中了
2.vim下安装NERDTree和YouCompleteMe插件:
NERDTree是vim下的一个很好用的查看和切换文件目录的插件,YouCompleteMe则是一款强大的自动补全插件,他们都可以通过Vundle下载安装。而Vundle,则是一款开源的管理vim插件的插件,安装方法如下:
安装Vundle
- 从githhub上下载Vundle到.vim/bundle文件夹中
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
- 配置.vimrc文件
vim ~/.vimrc
set nocompatible " be iMproved
filetype off " required!
"
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
"
" let Vundle manage Vundle
" required!
"
Bundle 'gmarik/vundle'
"
" My Bundles here:
"
filetype plugin indent on " required!
"
" Brief help
" :BundleList - list configured bundles
" :BundleInstall(!) - install(update) bundles
" :BundleSearch(!) foo - search(or refresh cache first) for foo
" :BundleClean(!) - confirm(or auto-approve) removal of unused bundles
"
" see :h vundle for more details or wiki for FAQ
" NOTE: comments after Bundle command are not allowed..
用Vundle来安装NERDTree插件
- 在~/.vimrc文件里添加一行 Bundle 'scrooloose/nerdtree'
- 退出并重新打开
vim
,执行:BundleInstall
,这样NERDTree就安装好了
安装YouCompleteMe插件
- 准备工作
YouCompleteMe的安装稍微复杂一些
- 首先通过
vim
和vim --version | grep python
确认vim的版本>=Vim 7.4.1578,并且支持Python2或者Python3,ubuntu16.04及其以后的版本都满足以上的要求。 - 安装
sudo apt-get install build-essential cmake
- 安装
sudo apt-get install python-dev python3-dev
-
下载YCM,与NERDTree相同的方法,用Vundle管理
在~/.vimrc文件里添加一行 Bundle 'Valloric/YouCompleteMe',退出并重新打开vim
,执行:BundleInstall
进行下载。 -
编译YCM
cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer
此过程等待时间会比较长,编译成功后log显示进度条 [100%] Built target ycm_core -
配置YCM
- 修改.ycm_extra_conf.py
vim ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py
在flags下补全
'-isystem',
'/usr/include',
'-isystem',
'usr/include/c++/5.4.0',
'-isystem',
'usr/include/x86_64-linux-gnu/c++',
并注释掉下面这一段
try:
final_flags.remove( ‘-stdlib-libc++‘ )
except ValueError:
pass
- 修改.vimrc
" YouCompleteMe
set runtimepath+=~/.vim/bundle/YouCompleteMe
let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py' " 配置全局路径
let g:ycm_confirm_extra_conf = 0 " 每次直接加载该文件,不提示是否要加载
let g:ycm_min_num_of_chars_for_completion=1 " 从第1个键入字符就开始罗列匹配项
let g:ycm_seed_identifiers_with_syntax = 1 " 语法关键字补全
let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释与字符串中的内容也要补全
let g:ycm_complete_in_comments = 1 " 在注释输入中也能补全
let g:ycm_complete_in_strings = 1 " 在字符串输入中也能补
let g:syntastic_ignore_files=[".*\.py$"]
" 跳转到定义处
nnoremap <c-g> :YcmCompleter GoToDefinitionElseDeclaration<CR>
" 回车即选中当前项
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"
" 上下选择的映射按键
let g:ycm_key_list_select_completion = ['<c-f>', '<Down>']
let g:ycm_key_list_previous_completion = ['<c-b>', '<Up>']
- 到此为止,YCM插件就安装完毕了。此时打开一个文件编译,就可以使用YCM的功能了。
安装Powerline
在~/.vimrc中添加
Plugin 'Lokaltog/vim-powerline'
let g:Powerline_symbols = 'fancy'
set laststatus=2
然后在vim中输入:BundleInstall安装,安装完成后重启vim即可看到状态栏变得酷炫了,如果显示乱码,说明字体文件缺失
,可以通过如下方法安装。
shell> git clone https://github.com/powerline/fonts.git
shell> cd fonts
shell> ./install.sh
如果还有乱码,把~/.vimrc中的
let g:Powerline_symbols = 'fancy'
改为
let g:Powerline_symbols = 'unicode'
安装Vim-gitgutter 这款插件可以在在vim中与git联动,方便的看到每个文件的改动,只需要在~/.vimrc中添加
Bundle 'airblade/vim-gitgutter'
之后在vim中输入:BundleInstall即可安装完成
3. vim编辑中拷贝整个文件:
有两个比较快速的方法,都在一般模式中操作,输入:%y 或者连续按下ggyG,都可以复制整个文件内容到Vim的剪贴板,然后移动光标到目标位置,按p,完成粘贴操作
4. vim中的光标移动:
字符移动
在Vim的Normal模式里(如果你在Visual模式或者Insert模式,可以按<Esc>回到Normal模式), 通过h, j, k, l, i来进行左下上右的光标移动。
在Vim中多数操作都支持数字前缀,比如10j可以向下移动10行。
单词移动
多数情况下单词移动比字符移动更加高效。 w移动光标到下一个单词的词首,b移动光标到上一个单词的词首;e移动光标到下一个单词的结尾,ge移动光标到上一个单词的结尾。
单词移动同样支持数字前缀,比如4w可以向后移动4个单词。连续的标点符号算一个单词。
有趣的是,W, B, E具有同样的功能,只不过它是用空格来分隔单词的,可以跳地更远~
^到行首,$到行尾。
拷贝一行:^y$。
相对屏幕移动
通过c-f向下翻页,c-b向上翻页;c-e逐行下滚,c-y逐行上滚。这在几乎所有Unix软件中都是好使的,比如man和less。 H可以移动到屏幕的首行,L到屏幕尾行,M到屏幕中间。
zt可以置顶当前行,通常用来查看完整的下文,比如函数、类的定义。 zz将当前行移到屏幕中部,zb移到底部。
4. vim中的常见配置:
以下均为在~/.vimrc中配置生效或者在vim中命令模式中输入生效:
set hlsearch 设置搜索项高亮显示
set nu 设置显示行号
set nonu 设置关闭行号显示
set tabstop=4 设置tab键为4个空格
set expandtab 设置将文本中的tab转化为空格
set autoindent 设置自动缩进
set cursorline 设置当前行划线显示
set cursorcolumn 设置高亮显示当前列
set ruler 设置显示当前文件
参考文档:
https://www.jianshu.com/p/c9a9a18f8972
https://harttle.land/2015/11/07/vim-cursor.html