我是这样用vim写代码的--插件篇

上一篇介绍了vim的简单编辑方式。熟练掌握vim的基本操作后,还只是一个得心应手的文本编辑器,终究是比IDE要弱很多的。强大的vs中,代码目录树,代码跳转,函数浏览,自动补全,代码调试等功能才是我们舍弃文本编辑器拥抱IDE的核心原因。本篇将介绍本人长期依赖的插件,及基本使用方法,从而真正能够完全用vim环境做开发。

首先要说明的是,自己手动管理插件是非常麻烦的一件事,在尝试了一段痛苦的手动管理经历后,我果断清掉了本地的插件文件夹,开始使用Vundle,一个很方便的vim插件管理器。Vundle本身也是一个vim插件,只需要在vimrc里面配置好即可方便的安装、更新、删除插件,非常好用。

Vundle的安装请参考 https://github.com/VundleVim/Vundle.vim

安装好之后,就可以随心所欲添加github上的各种插件了。这里推荐本人觉得非常必要且好用的几个插件,并附上本人的配置项。

Nerdtree  Plugin ‘scrooloose/nerdtree‘

文件目录树插件,打开目录页签可以方便的浏览工程目录,切换文件,创建、删除和移动文件。

本人的特殊配置:

let g:NERDTreeChDirMode=2  该设置使得当前工作目录与nerdtree的根目录一致,这样可以快速的切换工作目录,配合后续插件设置,使得查找等操作更得心应手。

Nerdtree的使用很简单,命令行输入:NERDTree或者:NERDTreeToggle可打开关闭Nerdtree窗口,不过一般建议在vimrc中配置快捷键,本人使用Ctrl+n(首字母,好记)。在Nerdtree窗口中的移动,和在一般编辑窗口中一致。按下?键,则可以开关快速的帮助。这里列一下最常用的快捷键。

u/shift+u 根目录移到上层目录,后者会保留当前根目录为展开状态。

shift+c  将当前目录设为根节点。

shift+r  刷新当前根目录,由于刷新根目录也比较快,所以本人总是刷新根目录。

enter  展开或折叠目录,如果是文件则可以直接打开文件,比较符合直觉。

o/i/s  三个快捷键均是用于打开当前文件的。只是o是在上一个窗口显示,i是纵向分窗口显示,s是横向分窗口显示。在想要参考文件内容时,后两个快捷键很有用。

有以上快捷键,基本上就能简单使用Nerdtree了。

Ctrlp  Plugin ‘ctrlpvim/ctrlp.vim‘

该插件实现了类似sublime的快速文件查找和跳转。在工程较大时,用来跳转文件非常方便。

let g:ctrlp_working_path_mode = ‘wa‘  在工作目录下的任一文件中使用ctrlp,都会搜索整个工作目录下的文件,大型工程中可随时查找工程目录下其他文件。

let g:ctrlp_custom_ignore={
         \ ‘dir‘: ‘\v[\/]\.(git|hg|svn)$‘,
         \ ‘file‘: ‘\v\.(exe|so|dll|xls|xlsx|doc|docx|meta|bytes|ppt|pptx)$‘,
     \ }

ctrlp忽略目录和文件,该项设置可根据自己项目需要设置。

ctrlp的快捷键非常好记,就是ctrl+p,按下后会跳出相应搜索窗口,输入要搜索的文件名,回车即可打开文件。同样ctrl+s,ctrl+v可以分割窗口打开。当有搜索到多个文件时,可使用ctrl+j/ctrl+k上下移动,选择文件。

Taglist  Plugin ‘vim-scripts/taglist.vim‘

标签列表插件,可以快速查看当前文件的标签,函数,变量等。

let Tlist_Show_One_File=1  每次只显示一个文件的标签,工程较大时,如果显示所有文件的标签打开会很慢。
     let Tlist_Use_Right_Window=1  默认打开到窗口右侧,由于nerdtree已经占用了左侧窗口,taglist放到右侧,避免冲突。
     let Tlist_GainFocus_On_ToggleOpen=1  打开时光标放到taglist窗口,这样打开后可以直接挪动光标到对应的标签跳转,也可以直接按q退出taglist窗口。
     let Tlist_Close_On_Select=1  选中标签后就关闭taglist窗口,个人喜好taglist只在要跳转时出现。

由于vim文件内搜索非常方便,因此使用相对较少。回车即可打开,选择相应的标签,回车跳转。

CtrlSF  Plugin ‘dyng/ctrlsf.vim‘

看名字猜用途,就是全局搜索插件,配合一定的设置和快捷键,能到达到和vs中一样的搜索体验。该插件的安装稍微麻烦一点,需要依赖ack或ag。针对windows有编译好的版本可以直接使用 https://github.com/k-takata/the_silver_searcher-win32。将执行文件放到vim目录下即可。

let g:ctrlsf_ackprg=‘ag‘  据说ag效率更高一点

let g:ctrlsf_default_view_mode=‘compact‘  默认设置下,ctrlsf的形态很像sublime的搜索,每个结果有前后部分上下文,个人更偏好vs式的预览,这两种模式也可以按M随时切换。

let g:ctrlsf_auto_close=0  设置不自动关闭,搜索字符串不像搜标签,经常需要点开看看。
     let g:ctrlsf_case_sensitive=‘no‘   大小写不敏感,为了查询更快速,默认设成大小写不敏感搜索。
     let g:ctrlsf_ignore_dir=[‘tags‘]  忽略部分目录
     let g:ctrlsf_default_root=‘cwd‘  设置在当前工作目录下搜索,和nerdtree一致。

以上配置,加上快捷键配置后,任意位置按下ctrl+f,即可全局搜索当前词,也可删掉当前内容,输入要查找的内容(由于这种需求较少,所以没有单独设快捷键)。如搜索内容中间有空格之类的特殊字符,可在最外侧用单引号包起来。

YouCompleteme  Plugin ‘Valloric/YouCompleteMe‘

最难装却是最重要的插件,自动补全插件,没有这个插件的情况下,vim自带的neocomplete也能简单用用,但确实没有YCM强大。

let g:ycm_min_num_of_chars_for_completion=2  设置最少2个字符触发补全
     let g:ycm_semantic_triggers={
         \ ‘c‘ : [‘->‘, ‘.‘],
         \ ‘lua‘ : [‘.‘, ‘:‘],
     \}  触发语义分析的符号,基本上可以媲美vs,并且对lua等脚本语言也能有很好的补全效果。

该功能本人认为不需要快捷键,打几个字母就会自动跳出提示。

以上就是本人日常工作中用到的所有插件了。最开始的时候,总觉得什么插件都好,装了一大堆插件,由于有些插件会有按键冲突之类的,一边用一边删,最后就留下了以上几个插件。一些项目特殊需要,可以自己写一些简单的vimscript函数,配上快捷键。使用了两年下来,基本没有觉得有什么短缺的,完全能胜任编码工作。文章最后贴上本人windows系统上的vimrc,可以参考酌情使用。

source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin

set diffexpr=MyDiff()
function MyDiff()
  let opt = ‘-a --binary ‘
  if &diffopt =~ ‘icase‘ | let opt = opt . ‘-i ‘ | endif
  if &diffopt =~ ‘iwhite‘ | let opt = opt . ‘-b ‘ | endif
  let arg1 = v:fname_in
  if arg1 =~ ‘ ‘ | let arg1 = ‘"‘ . arg1 . ‘"‘ | endif
  let arg2 = v:fname_new
  if arg2 =~ ‘ ‘ | let arg2 = ‘"‘ . arg2 . ‘"‘ | endif
  let arg3 = v:fname_out
  if arg3 =~ ‘ ‘ | let arg3 = ‘"‘ . arg3 . ‘"‘ | endif
  if $VIMRUNTIME =~ ‘ ‘
    if &sh =~ ‘\<cmd‘
      if empty(&shellxquote)
        let l:shxq_sav = ‘‘
        set shellxquote&
      endif
      let cmd = ‘"‘ . $VIMRUNTIME . ‘\diff"‘
    else
      let cmd = substitute($VIMRUNTIME, ‘ ‘, ‘" ‘, ‘‘) . ‘\diff"‘
    endif
  else
    let cmd = $VIMRUNTIME . ‘\diff‘
  endif
  silent execute ‘!‘ . cmd . ‘ ‘ . opt . arg1 . ‘ ‘ . arg2 . ‘ > ‘ . arg3
  if exists(‘l:shxq_sav‘)
    let &shellxquote=l:shxq_sav
  endif
endfunction

"vundle-----------------------------------------------------------------------
set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=$HOME/vimfiles/bundle/Vundle.vim/
call vundle#begin(‘$HOME/vimfiles/bundle/‘)

" let Vundle manage Vundle, required
Plugin ‘VundleVim/Vundle.vim‘
Plugin ‘scrooloose/nerdtree‘
let g:NERDTreeChDirMode=2
Plugin ‘vim-scripts/taglist.vim‘
let Tlist_Show_One_File=1
let Tlist_Use_Right_Window=1
let Tlist_GainFocus_On_ToggleOpen=1
let Tlist_Close_On_Select=1
Plugin ‘ctrlpvim/ctrlp.vim‘
let g:ctrlp_working_path_mode = ‘wa‘
let g:ctrlp_custom_ignore={
    \ ‘dir‘:  ‘\v[\/]\.(git|hg|svn)$‘,
    \ ‘file‘: ‘\v\.(exe|so|dll|xls|xlsx|doc|docx|meta|bytes|ppt|pptx)$‘,
    \ }
Plugin ‘vim-scripts/a.vim‘

Plugin ‘dyng/ctrlsf.vim‘
let g:ctrlsf_ackprg=‘ag‘
let g:ctrlsf_auto_close=0
let g:ctrlsf_case_sensitive=‘no‘
let g:ctrlsf_default_view_mode=‘compact‘
let g:ctrlsf_ignore_dir=[‘tags‘]
let g:ctrlsf_default_root=‘cwd‘

Plugin ‘Valloric/YouCompleteMe‘
let g:ycm_min_num_of_chars_for_completion=2
let g:ycm_semantic_triggers={
			\ ‘c‘ : [‘->‘, ‘.‘],
			\ ‘lua‘ : [‘.‘, ‘:‘],
			\}

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

"endvundle-----------------------------------------------------------------------

set backspace=2		" more powerful backspacing

set encoding=utf-8
set fileencodings=ucs-bom,utf-8,chinese

set langmenu=zh_CN.UTF-8
let $LANG=‘zh_CN.UTF-8‘

source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim

colorscheme desert
syntax enable
syntax on

set lines=50 columns=200 linespace=1
set background=dark
set guifont=consolas:h11:cANSI

set foldenable
set foldmethod=manual

set tabstop=4
set shiftwidth=4
set softtabstop=4
set autoindent

set noundofile
set nobackup
set noswapfile
set ignorecase

set hlsearch
set incsearch
set showmatch
set wildmenu

set ruler

set laststatus=2

set number

set exrc
set secure

set cursorline

set tags=tags;

"set guioptions-=m  "menu bar
set guioptions-=T  "toolbar
set guioptions-=r  "scrollbar
set guioptions-=L

map <silent> <C-j> :resize+5<CR>
map <silent> <C-k> :resize-5<CR>
map <silent> <C-h> :vertical resize-5<CR>
map <silent> <C-l> :vertical resize+5<CR>

map <silent> <C-Up> :resize-5<CR>
map <silent> <C-Down> :resize+5<CR>
map <silent> <C-Left> :vertical resize-5<CR>
map <silent> <C-Right> :vertical resize+5<CR>
map <silent> <C-tab> :tabn<CR>

map <silent> <C-n> :NERDTreeToggle<CR>
map <silent> <C-m> :TlistToggle<CR>

nmap <C-f> <Plug>CtrlSFCwordPath
vmap <C-f> <Plug>CtrlSFVwordPath

"open folder of current file
function Folder()
	silent exec "!explorer " . expand("%:h")
endfunction
nmap <silent> <S-e> :call Folder()<CR>

  

原文地址:https://www.cnblogs.com/kevonyang/p/8576492.html

时间: 2024-07-29 08:16:24

我是这样用vim写代码的--插件篇的相关文章

[转]DllMain中不当操作导致死锁问题的分析&mdash;&mdash;DllMain中要谨慎写代码(完结篇)

在CSDN中发现这篇文章,讲解的比较详细,所以在这里备份一个.原文链接:http://blog.csdn.net/breaksoftware/article/details/8167641 DllMain的相关特性 首先列出<DllMain中不当操作导致死锁问题的分析--进程对DllMain函数的调用规律的研究和分析>中论证的11个特性: Dll的加载不会导致之前创建的线程调用其DllMain函数. 线程创建后会调用已经加载了的DLL的DllMain,且调用原因是DLL_THREAD_ATTA

VIM 代码片段插件 ultisnips 使用教程

博客原文 安装 Ultisnips 插件安装分两部分,一个是 ultisnips 插件本身,另外一个是代码片段仓库.一般来说把默认的代码片段仓库下载下来按需修改后上传到自己的 github 即可.如果你和我一样也使用 vim-plug 来管理插件的话,添加下面的代码到你的 vimrc 中保存刷新即可 Plug 'SirVer/ultisnips' " 你自己的代码仓库 git 地址 Plug 'keelii/vim-snippets' 上面的示例中所有的代码片段都存放在插件安装目录下面的 vim

我需要完全理解这部分代码才能确保它能够正常工作,如果由我来修复代码中的问题,我是不会这么写的,因此希望你也不要这么来写(转)

Jim Bird是一位经验丰富的软件开发经理.项目经理与CTO,专注于软件开发与维护.软件质量与安全等领域中疑难问题的解决.在过去的15年间,Jim曾管理过团队建设并主导过高性能的财务系统的建设.他的主要兴趣在于如何提升小团队的效率以构建真正的软件:高质量.安全.可靠.高性能及适应性强.近日,Jim撰写了一篇博文,谈到了代码审查的价值,如何进行代码审查,代码审查的过程以及在代码审查中需要注意的问题,希望能为大家平日的代码审查带来一些启示. 开始代码审查 从一开始,开发者就会互相帮助,如果测试中遇

vim代码格式化插件clang-format

title: vim代码格式化插件clang-format date: 2017-12-12 20:28:26 tags: vim categories: 开发工具 安装vim-clang-format插件 项目地址: vim-clang-format 如果用Vundle管理vim插件,直接在.vimrc中添加一行 Plugin 'vim-clang-format' 运行:PluginInstall就可以自动安装插件 "配置 let g:clang_format#auto_format_on_i

推荐四个phpstorm酷炫实用插件 让你写代码的时候不在孤单!

程序员写代码很孤独,每天只能和电脑屏幕交流,想要一个程序员鼓励师妹子,老板又不给配,如何让自己写代码的时候不再孤单呢?今天给大家分享的这四个插件,既实用又好玩,还能提高开发效率,这四个插件主要用到phpstorm编辑器上的,大家可自行下载安装. phpstorm安装插件在哪里?找到file->setting->plugins,在右侧搜索框里输入插件名称,就能在线检索安装. 一.Background Image Plus 背景修改插件,可以设置自己喜欢的图片作为你的编码背景.安装成功之后重启,菜

看外国女程序员如何直播写代码

我第一次直播写代码是在去年七月份.想要直播一下我在业余时间内为开源项目领域所做的工作,尽管在youtube上的大部分直播都是关于游戏的.我比较擅长于NodeJS的硬件库方面的工作(尽管大部分项目都是自己的).并且我在youtube上曾经开启过一个房间了,那为什么我不继续做下去?我的栏目可以叫做:基于JavaScript的硬件开发. 当然,我并不是第一个在直播平台直播代码的,Handmade Hero是我见到的第一个直播代码的人.接下来Vlambeer的工程师们也开始了直播代码,他们在youtub

如何提高编程能力?写更多代码是最显著的方法,但是本文这一种与写代码完全相反,一起来看看吧

起初我是在2010年5月为Fuel Your Coding网站写的这篇文章.然后这个网站现在已经不存在了,为了让爱好编程的人们能够继续受益,所以在这里重新发表这篇文章.我考虑过是否要按照现如今的情况来对这篇文章进行修改,但是我认为它已经足够经得住检验了.只有少许的部分可能不尽人意.尽情的欣赏这篇文章吧. 正如每个人都知道的那样,写更多的代码是提高编程能力最显著方法.但是我所确信的另外一种可以提高编程能力的方法是与写代码完全相反的.我将要尽可能清楚的陈述这种方法. 只有大量的阅读别人的代码才能显著

Vim自动补全插件----YouCompleteMe安装与配置

Vim自动补全插件----YouCompleteMe安装与配置 使用Vim编写程序少不了使用自动补全插件,在Linux下有没有类似VS中的Visual Assist X这么方便快捷的补全插件呢?以前用的是neocomplcache+code_complete+omnicppcomplete,但效果还是不是很好.看到有YCM后前面的插件可以说拜拜了. YouCompleteMe:一个随键而全的.支持模糊搜索的.高速补全的插件.YCM 由 google 公司搜索项目组的软件工程师 Strahinja

【转】Vim自动补全插件----YouCompleteMe安装与配置

原文网址:http://www.cnblogs.com/zhongcq/p/3630047.html 使用Vim编写程序少不了使用自动补全插件,在Linux下有没有类似VS中的Visual Assist X这么方便快捷的补全插件呢?以前用的是neocomplcache+code_complete+omnicppcomplete,但效果还是不是很好.看到有YCM后前面的插件可以说拜拜了. YouCompleteMe:一个随键而全的.支持模糊搜索的.高速补全的插件.YCM 由 google 公司搜索