将你的Vim 打造成轻巧强大的IDE

Vim和Emacs一个称为神之编辑器一个被称为编辑器之神,固然很是夸张,但也足以说明这两 款软件的优秀和在程序员界的地位。但是它们都已漫长的学习曲线让人望而生畏,阻止了大 多数人进入。作为一名几乎完全使用Vim写各种代码、文档的人,我想把我自己平时使用的 插件和配置整理下来,方便自己的总结和归纳,如果能有幸帮助到一些想学习Vim但是又不知 道如何入门的人来说,那就再荣幸不过了。

在下面的内容中,我会介绍我使用的插件、Vim的配置,最后如果你觉得这些配置手动太麻烦 的话,我推荐你看我的另一篇文章(从零搭建和配置OSX开发环境), 在那篇文章的末尾,我给出了一个自动化配置和管理Vim的方法

先贴一张我的Vim的截图:

将你的Vim 打造成轻巧强大的IDE

你看的到的插件

从上面那种截图中肉眼能看到的插件说起,把整个界面按照左窗口、主窗口、右窗口和下窗 口命名,依次介绍出现在这个窗口中的主要插件。

主窗口

作为一款主要用于书写代码的文本编辑器,一个足够舒服、靓丽的配色当然是首要考虑的。 我使用的配色主题是molokai(官方地址),在 你安装好了这个插件之后,你需要下面几行配置应用它:

" Switch syntax highlighting on, when the terminal has colors
if (t_Co > 2 || has("gui_running")) && !exists("syntax_on")syntax on
endif" Javascript syntax hightlight
syntax enable" Set syntax highlighting for specific file types
autocmd BufRead,BufNewFile Appraisals set filetype=ruby
autocmd BufRead,BufNewFile *.md set filetype=markdown
autocmd Syntax javascript set syntax=jquery" Color scheme
colorscheme molokai
highlight NonText guibg=#060606
highlight Folded  guibg=#0A0A0A guifg=#9090D0

另外一个推荐的vim主题是solarized(官方地址)。

在选定了一个适合自己的主题之后,就需要一些配置去解决排版的问题,比如字符编码和缩 进等问题。

" Backspace deletes like most programs in insert mode
set backspace=2
" Show the cursor position all the time
set ruler
" Display incomplete commands
set showcmd
" Set fileencodings
set fileencodings=utf-8,bg18030,gbk,big5filetype plugin indent on" Softtabs, 2 spaces
set tabstop=2
set shiftwidth=2
set shiftround
set expandtab" Display extra whitespace
set list listchars=tab:»·,trail:·" Make it obvious where 80 characters is
set textwidth=80
set colorcolumn=+1" Numbers
set number
set numberwidth=5set matchpairs+=<:>
set hlsearch

在第68行,水平和垂直方向分别有一条高亮条,这是用来表示我当 前光标所处于的行和列 用的。实现它,只需要几行简单的配置就可以了:
" Highlight current line
au WinLeave * set nocursorline nocursorcolumn
au WinEnter * set cursorline cursorcolumn
set cursorline cursorcolumn

关于代码补全

有些人可能已经发现了,在我的主窗口中没有演示代码补全的功能,我需要对此做一个说明。 我本人不喜欢过于强大的代码补全,所以默认的对于我来说已经完全足够了,如果你需要使 用更强大的代码补全,我推荐你使用YouCompleteMe(官方地址)。

YouCompleteMe

左窗口

左窗口是一个用于浏览目录结构的插件nerdtree(官方地址)。 同样一些简单的配置之后,它便能为你提供一个方便够用的功能。

" NERD tree
let NERDChristmasTree=0
let NERDTreeWinSize=35
let NERDTreeChDirMode=2
let NERDTreeIgnore=['\~$', '\.pyc$', '\.swp$']
let NERDTreeShowBookmarks=1
let NERDTreeWinPos="left"
" Automatically open a NERDTree if no files where specified
autocmd vimenter * if !argc() | NERDTree | endif
" Close vim if the only window left open is a NERDTree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif
" Open a NERDTree
nmap <F5> :NERDTreeToggle<cr>

右窗口

在我的截图中,右窗口陈列出了我当前打开的rb文件中申明的类、变量及方法等等。这是一 款名叫tagbar的插件,它为我们提供了一个简单的方式去浏览当前文件的结构,并且支持 在各个标签之间快捷的跳转。同理,安装之后,需要一些配置:

" Tagbar
let g:tagbar_width=35
let g:tagbar_autofocus=1
nmap <F6> :TagbarToggle<CR>

如果你发现默认的Tagbar不能支持你的语言,比如Css, Clojure, Markdown等等,你可以 参照这篇文章为它提供额外的支持。

下窗口

下窗口包含了两个部分:一个是用于全局搜索的窗口和一个状态条。

全局搜索是一个基于文件名的搜索功能,可以快速定位一个文件。这是ctrlp这个插件提 供的功能。下面是ctrlp的一些配置:

" ctrap
set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.png,*.jpg,*.jpeg,*.gif " MacOSX/Linux
let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'

ctrlp默认会使用grep进行搜索,效率低且慢。所以,我使用了ag去替换默认的搜索 功能。ag是一款轻量级的搜索工具,速度非常快。为了集成ag,需要添加下列配置:
if executable('ag')" Use Ag over Grepset grepprg=ag\ --nogroup\ --nocolor" Use ag in CtrlP for listing files.let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'" Ag is fast enough that CtrlP doesn't need to cachelet g:ctrlp_use_caching = 0
endif

下面状态条中会依次显示:当前模式、Git分支、文件路径、文件是否保存以及当前所载行和 列的信息。这是通过vim-powerline来实现的。其中显示Git信息需要配合vim-fugitive插件一些使用。
set laststatus=2 " Always display the status line
set statusline+=%{fugitive#statusline()} "  Git Hotness

小结

通过以上的配置,你就可以拥有一些如第一张图所示的那样,看起来还不错的编辑器。当然, Vim之所以如此倍受推崇,只是依靠这些还是远远不够的。接下来,我要介绍一些看不见的插 件来实实在在的提升Vim体验。

看不见的实用插件

现代化的插件管理

在我的另一篇文章中(从零搭建和配置OSX开发环境) ,我已经详细介绍过Vundle这个管理Vim插件的一个软件,这里不做过多介绍。

在Vim中执行你想要运行的命令

vim-run-interactive让你可以在Vim中执行几乎任何你想要在命令行中执行的命令。举例 来说,假设你有条git update的自定义命令,你可以通过:RunInInteractiveShell git update来执行它,而不需要退出Vim。添加一条配置,可以简化这个步骤:

" Run commands that require an interactive shell
nnoremap <Leader>r :RunInInteractiveShell<space>

如此一来,你可以通过<Leader> + r + 命令键来激活执行命令。如果你不知道什么是Leader键,你可以去百度或者Google一下。

Vim的语法检查

Vim中有个很强大的语法检查插件,它支持几乎所有常用的语言的语法检测[syntastic(https://github.com/scrooloose/syntastic)]。 附上一张来自官方的截图:

syntastic plugin

为了让它更好的工作,同样需要一些配置:

" configure syntastic syntax checking to check on open as well as save
let g:syntastic_check_on_open=1
let g:syntastic_html_tidy_ignore_errors=[" proprietary attribute \"ng-"]
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_wq = 0
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

Rails集成开发套件

我是一名Ruby的爱好者,所以Vim中少不了针对Ruby的一系列插件。我作为一名Web开发者, Rails这个大名鼎鼎的框架自然也是有所涉猎。所以在我的Vim中有着针对它们开发的一套插 件。

插件列表:

  • ruby-vim:在快速的在module, class, method中跳跃。
  • vim-bundler:在Vim中集成Bundler。
  • vim-endwise:自动补全end关键字。
  • vim-rails:它的功能很多,可以说是用 Vim开发Rails不可缺少的一个插件。更详细的信息,可以前往它的官方网站获取。
  • vim-rspec:在Vim中执行Rspec测试。
" Cucumber navigation commands
autocmd User Rails Rnavcommand step features/step_definitions -glob=**/* -suffix=_steps.rb
autocmd User Rails Rnavcommand config config -glob=**/* -suffix=.rb -default=routes" RSpec.vim mappings
map <Leader>t :call RunCurrentSpecFile()<CR>
map <Leader>s :call RunNearestSpec()<CR>
map <Leader>l :call RunLastSpec()<CR>
map <Leader>a :call RunAllSpecs()<CR>

更多好用的工具

还有很多好用的插件,如果每个都一一说明,那么篇幅再长一倍怕也是不够。所以,我这里 就把一些好用的插件列出来,有兴趣的可以自己看看。

  • rename.vim:在Vim中为文件重命名。
  • vim-coffee-script:在Vim中舒心 的编写、编译Coffeescript。
  • vim-mkdir:当你在Vim中新建文件的时候, 自动帮你创建不存在的目录。
  • vim-surround:快速的删除、修改和添加 括号、引号、XML标签等等。
  • matchit:用%去在两个对应的字符间跳转。
  • tComment:快速注释、反注释代码。
  • emmet-vim:Emmet的Vim版。
  • tabular:快速对齐。
  • snipmate.vim:快速的代码片段。
  • vim-easymotion:在文件中快速定位。
  • vim-instant-markdown:Vim中对 Markdown文档的实时预览。

备注

有更多的一些插件我没有都列出来,它们一般用于特定语法的开发,不一定适合所有人。你 可以参考从零搭建和配置OSX开发环境 这篇文章,自动管理、配置你的Vim环境。

来自: http://yuez.me/jiang-ni-de-vim-da-zao-cheng-qing-qiao-qiang-da-de-ide/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NutchServer的安全层

我曾作为GSoC 2016项目在Apache Nutch的NutchServer的Security Layer上工作&#xff0c;并完成了它。 在此博客文章中&#xff0c;我将解释其工作原理和使用方法。 首先&#xff0c;建议您阅读以前有关GSoC 2016接受的帖子&#xff1a; http ://furkankamaci.com/gsoc-2016-acc…

借助opencv将unsigned char数组显示为图像

在用C或者C做图像处理程序时&#xff0c;经常需要把结果图显示出来看看效果&#xff0c;这时候可以借助opencv的Mat类型&#xff0c;如下&#xff1a;Mat gray1_mat(rect_height, rect_width, CV_8UC1, minsrc);//为了显示图片 先改为mat类型imshow("去雾图像显示", …

眼图观测实验报告_眼图观察测量实验

实验12眼图观察测量实验一、实验目的1.学会观察眼图及其分析方法&#xff0c;调整传输滤波器特性。二、实验仪器1.眼图观察电路(底板右下侧)2&#xff0e;时钟与基带数据发生模块&#xff0c;位号&#xff1a;G 3&#xff0e;噪声模块&#xff0c;位号E 4&#xff0e;100M双踪示…

C、C++申请指针内存的问题

关于指针的血和泪的教训 1、指针申请时一定要检查是否申请成功&#xff0c;当项目比较庞大时&#xff0c;内存有可能申请不成功导致程序中断&#xff0c;而这时候往往无从知道哪里出现了问题。如下&#xff1a;double* wid (double*)malloc((num1) *sizeof(double));//存储每个…

invalid use of null value

给mysql的数据表的一个字段插入数据,不成功, 然后在数据表设计中,把不是null勾选上,又提示 invalid use of null value 这种情况比较尴尬 只能删掉这一个字段,然后新建一个同样名字的字段,然后直接勾选不是null然后在保存就行了 转载于:https://www.cnblogs.com/jnhs/p/1008253…

android 13.0 Launcher3定制folder文件夹16宫格实现二

1. 概述 在13.0的系统产品rom定制化开发中,对于Launcher3的定制功能也是不少的,比如在Launcher3中添加默认文件夹,把默认的app添加的文件夹里面,其他的app 然后按顺序排序。在文件夹布局就是默认的16宫格布局,接下来分析下相关源码来实现功能 2.Launcher3定制化之修改添…

vim配置及插件安装管理(超级详细)

1写在前面 Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用的IDE是何等的重要啊, 估计很多人就是卡在这个门槛上了, "工欲善其事, 必先利其器"嘛, 我想如果有一…

vue 父链和子组件索引_vue子组件和父组件双向绑定的几种方案

v-model案例模仿v-model实现案例我是一串要和内部名字联动的一串文字(父组件)父组件改变值带动(父组件)点一下试试.sync方案实现案例这是父组件的东西。利用这个框改变值&#xff0c;看看有没有传到子组件&#xff0c;也可以改子组件看看这里有变化没// v-model方案 你写上一个…

程序逻辑上多一些提示

写程序时要想下各种可能出错的情况&#xff0c;提前给出错误提示&#xff0c;项目大了就可以比较容易找错误。 比如&#xff0c;当特征点个数小于4时不能计算单应矩阵&#xff0c;所以当个数小于4时先输出提示&#xff1a; if (matchePoints.size()>10)for (int i 0; i<…

安卓清理垃圾清理代码_用方面清理代码

安卓清理垃圾清理代码在我以前的文章中&#xff0c;我描述了字母转换&#xff0c;并且提到了我们使用AspectJ来解决该任务&#xff0c;但是我没有提及AspectJ的工作原理和一般性方面。 因此&#xff0c;在接下来的几行中&#xff0c;我将解释&#xff1a; 什么是面向方面的编程…

最大功率点跟踪_ADI公司推出集成最大功率点跟踪和I2C的80V降压升压电池充电控制器...

中国&#xff0c;北京 – Analog Devices, Inc. (ADI)&#xff0c;今日宣布推出LT8491降压-升压电池充电控制器&#xff0c;该控制器具有最大功率点跟踪(MPPT)、温度补偿和I2C接口等特性&#xff0c;适用于遥测和控制。该器件的工作电压可高于、低于或等于经调节的电池浮充电压…

VIM 编码配置

在 Vim 中&#xff0c;有四个与编码有关的选项&#xff0c;它们是&#xff1a;fileencodings、fileencoding、encoding 和 termencoding。在实际使用中&#xff0c;任何一个选项出现错误&#xff0c;都会导致出现乱码。因此&#xff0c;每一个 Vim 用户都应该明确这四个选项的含…

关于摄像头的一些零碎知识

项目上需要用到读取摄像头的帧数据&#xff0c;在对视频帧做算法处理。简单了解了一下摄像头的分类和如何读取。 1、总体上来说&#xff0c;在win平台下面摄像头数据采集无外乎两种方式vfw和direct show。其中vfw是不依赖于sdk的&#xff0c;只要有系统api即可实现摄像头数据的…

MQTT和Java入门

MQTT&#xff08;MQ遥测传输&#xff09;是一种轻量级的发布/订阅消息传递协议。 MQTT在物联网应用程序中得到了广泛使用&#xff0c;因为它被设计为在占用空间小的系统上运行在远程位置。 MQTT 3.1是OASIS标准&#xff0c;您可以在http://mqtt.org/上找到所有信息。 本文将指…

函数的命名空间

# 函数进阶 # a 1 # def func(): # print(a) # func()# 命名空间和作用域 # print() # input() # list # tuple#命名空间 有三种 #内置命名空间 —— python解释器# 就是python解释器一启动就可以使用的名字存储在内置命名空间中# 内置的名字在启动解释器的时候被加载进内…

在Linux环境下mysql的root密码忘记解决方法

原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lxsym.blog.51cto.com/1364623/477027 MySQL密码的恢复方法之一 1&#xff0e;首先确认服务器出于安全的状态&#xff0c;也就是没有人能…

史迪仔的原型_星际宝贝三个版本对比,莉罗抛弃史迪仔,童年真的回不去了

星际宝贝这部动漫大家应该不陌生&#xff0c;以前为了看这部动漫&#xff0c;经常蹲着点打开电视&#xff0c;看到莉罗和626一天的烦恼都没了。星际宝贝可以说风靡全球&#xff0c;所以日漫还有国漫也不甘落后&#xff0c;纷纷和迪士尼完成了自己的星际宝贝&#xff0c;来跟宅编…

warning C4091: “typedef ”: 没有声明变量时忽略“_matcher”的左侧

C 警告 warning C4091: “typedef ”: 没有声明变量时忽略“_matcher”的左侧 typedef struct _matcher {int Idx1;int Idx2;double dis; };修改方法&#xff1a;删掉typedef &#xff0c;这是C语言的结构体&#xff0c;C 会自动分配。

C# 获取对象 大小 Marshal.SizeOf (sizeof 只能在不安全的上下文中使用)

C# 能否获取一个对象所占内存的大小&#xff1f; 今日&#xff0c;在项目重构的时候忽然想到一个问题&#xff0c;一个类哪些成员的增加&#xff0c;会影响一个类所占内存的大小&#xff1f;C#有没有办法知道一个对象占多少内存呢&#xff1f; 第一个问题&#xff1a;很快想到是…

警告warningC4018有符号/无符号不匹配

C警告 warning C4018: “<”: 有符号/无符号不匹配 警告代码如下&#xff1a;for (int i 0; i<matchePoints.size(); i){imagePoints1.push_back(keypoints1[matchePoints[i].Idx1].pt);imagePoints2.push_back(keypoints2[matchePoints[i].Idx2].pt);} 错误原因&…