vim进阶技巧

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的安装稍微复杂一些
  • 首先通过vimvim --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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值