如何用Vim搭建IDE?
推荐:http://harttle.com/2015/07/18/vim-cpp.html
转自:http://harttle.com/2015/11/04/vim-ide.html
一年前我从Vim切换到了WebStorm,是因为WebStorm强大的重构功能,以及Super Search功能。涉及多文件编辑和重构时WebStorm的优势便非常明显。
最近到手了HHKB,从键盘到触摸板的切换还是挺麻烦的,于是Vim编辑的需求又来了。。加之WebStorm经常假死,我决定重新启用Vim。同时重新打造了我的Vim,使它能够满足我在IDE中的所有需求。这篇文章便来记述整个过程,或许有些帮助。先上图:
上图中,下面的Console是通过Tmux搞的。Tmux的配置和使用参见:优雅地使用命令行:Tmux终端复用。
准备工作
安装Git、Homebrew(如果你是Mac),并安装新版本的Vim(>=7.3)。一般linux发行版都会预装Vim,你需要检查一下vim的版本:
$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jul 4 2015 01:13:13)
MacOS X (unix) version
Included patches: 1-712
Compiled by Homebrew
如果上述命令失败,那么你需要安装一个Vim~ 这里提供了Vim的基本快捷键备忘录。
OSX
$ brew update
$ brew install vim
Linux
apt-get install vim # ubuntu
pacman -S vim # archlinux
yum install vim # centos
Vundle
Vundle是基于Git的vim插件管理工具,是目前最推荐的工具。之前我的.vim
下手动维护着各种插件,目录结构看起来是这样的:
|- doc/
| |- emmet.txt
| |- NERDCommenter.txt
| |- ...
|- plugin/
| |- emmet.vim
| |- NERDCommenter.vim
| |- ...
|- autoload/
| |- emmet.vim
| |- NERDCommenter.vim
| |- ...
|- ftplugin/
使用Vundle后变成了这样:
|- bundle/
| |- emmet/
| | |- doc/
| | |- autoload/
| |- NERDCommenter/
| | |- doc/
| | |- autoload/
|- ftplugin/
其中
ftplugin
里面是我的配置,比如编译运行的快捷键等。另外,如果你在用Git同步Vim配置的话,可以把bundle/
加入.gitignore
。
那么怎么安装Vundle呢?
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
然后在你的.vimrc
中加入Vundle的配置:
set nocompatible " required
filetype off " required
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
call vundle#end() " required
filetype plugin indent on " required
然后在vim中运行:PluginInstall
即可(或者在Bash中运行vim +PluginInstall
)。以后只需要在添加一行Plugin 'xxx'
并运行:PluginInstall
即可自动安装插件。
窗格管理
要把Vim打造成一个IDE,你需要熟悉Vim如何创建窗格,以及如何在窗格间切换。 :sp
可以水平分割当前窗格,:vs
可以垂直分割当前窗格。可以重复多次,创建复杂的窗格布局:
C-w, C-w
可以切换到下一窗格,C-w, j
切换到下面的窗格,C-w, k
切换到上面的窗格,C-w, h
切换到左边的窗格,C-w, l
切换到右边的窗格。 我为这些操作设置了更加方便的快捷键,比如Ctrl+J切换到下面的窗格:
nnoremap <C-J> <C-W><C-J>
多文件管理可以使用多窗格,也可以使用Buffer的方式。比如
vim a.js b.js
就会在Buffer中同时打开两个文件。使用:ls
列出当前Buffer中的文件,然后使用数字键切换。也可以使用:b 2
切换到Buffer中的第二个文件。
折叠
有些人特喜欢代码折叠,我就在这里列一下如何优雅地折叠代码。首先在.vimrc
中添加配置:
set foldmethod=indent
au BufWinLeave * silent mkview " 保存文件的折叠状态
au BufRead * silent loadview " 恢复文件的折叠状态
nnoremap <space> za " 用空格来切换折叠状态
开启以indent来折叠代码后,打开一个文件会发现有缩进的内容全被折叠起来了。所以我们引入一个SimpleFold来更智能地折叠:
Plugin 'tmhedberg/SimpylFold'
不要忘了运行
:PluginInstall
。
自动补全
自动补全当然是用YCM:
Plugin 'Valloric/YouCompleteMe'
然后进行配置就好了,YCM是通过Vim的omnifunc
机制来自动补全的,所以你需要为你想要支持的语言安装一个提供omnifunc
接口的Vim插件。
我在另一篇博客中有详细介绍了自动补全、语法检查等配置。
项目树
这想必是IDE能提供的最大的好处之一,在Vim中可以使用NERDTree来显示文件树,它的快捷键非常多,所以和Vim一样的越用越爽。
Plugin 'scrooloose/nerdtree'
" 这个插件可以显示文件的Git增删状态
Plugin 'Xuyuanp/nerdtree-git-plugin'
这里给出我的一些NERDTree配置:
" Ctrl+N 打开/关闭
map <C-n> :NERDTreeToggle<CR>
" 当不带参数打开Vim时自动加载项目树
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
" 当所有文件关闭时关闭项目树窗格
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif
" 不显示这些文件
let NERDTreeIgnore=['\.pyc$', '\~$', 'node_modules'] "ignore files in NERDTree
" 不显示项目树上额外的信息,例如帮助、提示什么的
let NERDTreeMinimalUI=1
全局搜索
WebStrom的全局搜索是我当初使用它的主要原因;而现在全局搜索总是突然崩溃,也是我放弃WebStorm而转到Vim的主要原因。
成也萧何败萧何
安装ctrlp:
Plugin 'kien/ctrlp.vim'
然后按下C-P
,便可以全局搜索啦。使用C-j
, C-k
上下翻页,<Enter>
打开选中文件。同样,给出一些有用的配置:
let g:ctrlp_working_path_mode = 'ra'
set wildignore+=*/tmp/*,*/node_modules/*,*.so,*.swp,*.zip
let g:ctrlp_custom_ignore = {'dir': '\v[\/]\.(git|hg|svn)$', 'file': '\v\.(exe|so|dll)$'}
剪切板
剪切板想必是所有Vim用户的痛。但是!在Mac下只需要设置:
set clipboard=unnamed
你在Vim中copy的所有内容都会上系统剪切板。在Vim中拷贝内容时,可以切换到拷贝模式防止自动缩进和补全。 我的快捷键是<F9>
:
set pastetoggle=<F9>
状态栏
有没有注意到我酷炫的状态栏?安装一个powerline:
Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}
此外,为了正确显示Powerline的图标,还需要一些设置:
set guifont=Inconsolata\ for\ Powerline:h15
let g:Powerline_symbols = 'fancy'
set encoding=utf-8
set t_Co=256
set fillchars+=stl:\ ,stlnc:\
set term=xterm-256color
set termencoding=utf-8
然后在系统字体库中导入powerline font,如果是Mac的话可以使用Font Book来导入。 然后需要设置terminal(iTerm)的non-ASCII字体为PowerlineSymboles:
注释、反注释
NERDCommenter是个不错的工具,支持非常多的语言:
Plugin 'scrooloose/nerdcommenter' " commenter: \cc \cu
然后按下\cc
来注释当前航,\cu
来反注释,\c<space>
来切换注释。其中的\\
是可以设置的:
let mapleader=';'
Loremipsum
哈哈如果你没见过标题中的这个词就可以跳过了。前端开发中通常需要添加一些占位符来让页面看起来有内容又像人话,loremipsum(拉丁语)通常就是这些占位符的起始字符。比如下面一段:
Sodales eget, leo. Sed ligula augue, cursus et, posuere non, mollis sit
amet, est. Mauris massa. Proin hendrerit massa. Phasellus eu purus. Donec est
neque, dignissim a, eleifend vitae, lobortis ut.
安装一个loremipsum即可:
Plugin 'vim-scripts/loremipsum'
我还加了点设置来方便控制长度:
inoremap Lorem <Esc><Esc>:Loremipsum 20<CR>
inoremap Ipsum <Esc><Esc>:Loremipsum 70<CR>
这样,当输入Lorem
时产生长度为20单词的占位符,输入Ipsum
时产生长度为70的占位符。
参考链接:
- https://realpython.com/blog/python/vim-and-python-a-match-made-in-heaven/
- https://coderwall.com/p/yiot4q/setup-vim-powerline-and-iterm2-on-mac-os-x
如何用Vim搭建IDE?的更多相关文章
- 使用 Vim 搭建 JavaScript 开发环境
原文链接: https://spacevim.org/cn/use-vim-as-a-javascript-ide/ SpaceVim 是一个模块化的 Vim IDE,针对 JavaScript 这一 ...
- 使用 Vim 搭建 C/C++ 开发环境
原文链接: https://spacevim.org/cn/use-vim-as-a-c-cpp-ide/ SpaceVim 是一个模块化的 Vim IDE,针对 C/C++ 语言的支持主要依靠 la ...
- 使用 Vim 搭建 Python 开发环境
原文链接: https://spacevim.org/cn/use-vim-as-a-python-ide/ SpaceVim 是一个模块化的 Vim IDE,针对 Python 这一语言的支持主要依 ...
- centos 如何用 rsyslog 搭建本地日志服务(续1: omprog模块与php deamon的配合使用)
上一篇说到了如何用 rsyslog 搭建本地的日志服务,地址在这里,没有看的童鞋可以先瞅一眼 : http://www.cnblogs.com/smallrookie/p/5677004.html 显 ...
- 如何让vim像IDE一样一键放大缩小字号?
原创,转载请注明出处 在其他IDE中,比如codeblocks,按住ctrl,然后滑动鼠标滚轮就可以实现字体的放大缩小. 在强大的vim中code怎么能缺少这种功能?! 在vim插件库中查询一番,发现 ...
- linux常用终端指令+如何用vim写一个c程序并运行
在装好ubuntu之后今天学习了一些linux的一些基础知识: windows里面打开命令窗口是win+r,在linux系统里面,ctrl+alt+t打开终端,今天的一些指令都是围绕终端来说的 首先s ...
- 如何用hugo搭建个人博客
如何用hugo搭建个人博客 1. 安装 Hugo 点击跳转 Hugo Releases win10 步骤: 下载解压 , 然后添加环境变量 测试: #命令行测试 hugo version 2. 创建站 ...
- vim搭建C编程IDE
曾经在一篇关于vim技巧的文章里有一句话:"世界上只有三种编辑器,EMACS.VIM和其它." 我不知道这是不是太过于绝对了,但是从我所看到的每一篇linux下编程以及文字编辑的文 ...
- win7+vim搭建+verilog HDL IDE
参考地址:http://www.huangdc.com/421 参考文章为2016年,部分更新贴于文章内了 安装下载vim vim在win下叫gvim,下载地址:https://www.vim.org ...
随机推荐
- 文本相似性计算--MinHash和LSH算法
给定N个集合,从中找到相似的集合对,如何实现呢?直观的方法是比较任意两个集合.那么可以十分精确的找到每一对相似的集合,但是时间复杂度是O(n2).此外,假如,N个集合中只有少数几对集合相似,绝大多数集 ...
- Caused by: java.lang.RuntimeException: JxBrowser license check failed: No valid license found
使用jxbrower报错,原因时证书检验失败, 解决方案: 1.首先创建证书,下面是我在IDEA maven项目中创建的位置,Java项目中在src/目录下创建, META-INF/teamdev.l ...
- Java基础知识-简明阐述双亲委派机制及作用
1.双亲委派机制及作用 1.1 什么是双亲委派机制 当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类 ...
- Android创建自定义Application
开发目的 创建一个自定义的MainApplication继承Application. 读取AndroidManifest.xml文件中Application节点的META-DATA数据.此处以ApiK ...
- UnitOneSummary
目录 一.程序结构分析 第一次作业 第二次作业 第三次作业 二.Test & Bugs 三.设计模式 四.总结与反思 一.程序结构分析 第一次作业 思路: 1.输入预处理: 去除空格和\t 替 ...
- 原生php 实现 thinkphp 数据库链式操作!!!
https://www.bilibili.com/video/BV1v4411A74Q?p=16&spm_id_from=pageDriver 没事可以看两遍,加深一下基础知识!!!
- Leedcode算法专题训练(动态规划)
递归和动态规划都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保存了子问题的解,避免重复计算. 斐波那契数列 1. 爬楼梯 70. Climbing Stairs (Easy) L ...
- 在Win10中手动添加/修改本地IP
1 前言 好久没动Win10了... 今天需要用Win10做一下实验,手动修改IP,于是写下了这篇文章作为过程记录. 2 概述 Win10里面修改本地IP不是一件特别困难的事,简单来说可以分为两种方式 ...
- 嗝,我饱了——IDEA食用指南
1 概述 IDEA全称IntelliJ IDEA,主要用于Java开发的IDE,代码自动提示,重构,JUnit,代码分析等的功能非常牛逼,这篇文章首先介绍目前为止IDEA最新版本的特性,然后从UI,常 ...
- 我最近做了一个react的后台管理系统,用于快速创建后台项目模板
react-ant-admin 此框架使用与二次开发,前端框架使用react,UI框架使用ant-design,全局数据状态管理使用redux,ajax使用库为axios.用于快速搭建中后台页面.欢迎 ...