Linux下的编辑器以vim和emacs为主流,一个编辑器之神,一个是神的编辑器。

本文以主要介绍如何在linux下以vim为基础搭建一个比较顺手的代码编辑器。

  • 有两种比较流行的方式:

自动安装
手动安装

  • 自动安装

  这种是方法是比较省事的方法,只要一个.vimrc配置文件就可以搞定所有的事情,一次配好即可。以后只要有这个配置文件,就可以走遍天下。
这种方式需要使用一个VIM插件管理工具来自动管理VIM插件的安装与卸载,笔者使用的Vundle来管理VIM插件,Vundle的全称是Vim Bundle,它是一款Vim插件管理工具。Vundle让你可以非常轻松地安装、更新、搜索和清理Vim插件。它还能管理你的运行时环境,并帮助标记。

    • 可以在Github上下载Vundle: https://github.com/VundleVim/Vundle.vim

下载完成后,解压到用户根目录的.vim目录下即可

    • 在终端(命令行)中使用git clone获取: git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

clone完成后, 会在用户根目录下多出来一个bundle目录,此时Vundle已经安装完成。安装好Vundle以后,就可以根据自己的需要安装插件了。Vundle提供了几种不同的插件安装方式,一般我们用到的插件在github都可以找到,因此最常用的一般就是直接找github上插件对应的仓名,添加到.vimrc中即可。然后打开vim,执行:PluginInstall命令,即可自动安装,等待Vundle执行完下载安装操作后,就可以开始享受VIM了。

笔者的.vimrc文件配置如下:

  1. "===============================================================================================
  2. set nocompatible " be iMproved, required
  3. filetype off " required
  4.  
  5. " set the runtime path to include Vundle and initialize
  6. set rtp+=~/.vim/bundle/Vundle.vim
  7. call vundle#begin()
  8. " alternatively, pass a path where Vundle should install plugins
  9. "call vundle#begin('~/some/path/here')
  10.  
  11. " let Vundle manage Vundle, required
  12. Plugin 'VundleVim/Vundle.vim'
  13.  
  14. " The following are examples of different formats supported.
  15. " Keep Plugin commands between vundle#begin/end.
  16. " plugin on GitHub repo
  17. Plugin 'tpope/vim-fugitive'
  18.  
  19. " plugin from http://vim-scripts.org/vim/scripts.html
  20. Plugin 'L9'
  21.  
  22. " Git plugin not hosted on GitHub
  23. "Plugin 'git://git.wincent.com/command-t.git'
  24.  
  25. " git repos on your local machine (i.e. when working on your own plugin)
  26. "Plugin 'file:///home/gmarik/path/to/plugin'
  27.  
  28. " The sparkup vim script is in a subdirectory of this repo called vim.
  29. " Pass the path to set the runtimepath properly.
  30. "Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
  31.  
  32. " Install L9 and avoid a Naming conflict if you've already installed a
  33. " different version somewhere else.
  34. "Plugin 'ascenator/L9', {'name': 'newL9'}
  35.  
  36. " All of your Plugins must be added before the following line
  37.  
  38. "============================ my plugins start =============================
  39. Plugin 'scrooloose/nerdtree'
  40. Plugin 'kien/ctrlp.vim'
  41. Plugin 'vim-airline/vim-airline'
  42. Plugin 'vim-airline/vim-airline-themes'
  43. Plugin 'majutsushi/tagbar'
  44. Plugin 'tacahiroy/ctrlp-funky'
  45. Plugin 'jlanzarotta/bufexplorer'
  46. Plugin 'easymotion/vim-easymotion'
  47. Plugin 'haya14busa/incsearch.vim'
  48. Plugin 'dkprice/vim-easygrep'
  49. Plugin 'dyng/ctrlsf.vim'
  50. Plugin 'Xuyuanp/nerdtree-git-plugin'
  51. Plugin 'hfts/Porsche'
  52. Plugin 'vim-scripts/OmniCppComplete'
  53. Plugin 'vim-scripts/AutoComplPop'
  54. Plugin 'scrooloose/nerdcommenter'
  55.  
  56. "============================ my plugins end ===============================
  57.  
  58. call vundle#end() " required
  59. filetype plugin indent on " required
  60. " To ignore plugin indent changes, instead use:
  61. "filetype plugin on
  62. "
  63. " Brief help
  64. " :PluginList - lists configured plugins
  65. " :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
  66. " :PluginSearch foo - searches for foo; append `!` to refresh local cache
  67. " :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
  68. "
  69. " see :h vundle for more details or wiki for FAQ
  70. " Put your non-Plugin stuff after this line
  71.  
  72. "========== for vim ==============
  73. syntax enable " 开启语法高亮
  74. set t_Co= " 开启256色显示
  75. set scrolloff= " 滚动时保持边距5
  76. set number " 开启行号显示
  77. set mouse=a " 开启鼠标
  78. set cmdheight=
  79. set nocompatible
  80. set confirm " 在处理未保存或只读文件的时候,弹出确认
  81. set autoindent " 自动缩进
  82. set tabstop= " Tab键的宽度
  83. set expandtab " 展开tab为空格
  84. set softtabstop= " 统一缩进为4
  85. set shiftwidth=
  86. filetype plugin indent on "打开文件类型检测, 加了这句才可以用智能补全
  87. set completeopt=longest,menu
  88. set hlsearch " 高亮搜索
  89. set laststatus= " 始终显示状态栏
  90. set encoding=utf- "
  91. set ignorecase " 搜索忽略大小写
  92. set nopaste " 切换到正常模式
  93. set list lcs=tab:\¦\ " 显示对齐线 | ¦
  94.  
  95. colorscheme Porsche
  96.  
  97. set cursorline
  98. "hi cursorline cterm=none term=none
  99. "autocmd WinEnter * setlocal cursorline
  100. "autocmd WinLeave * setlocal nocursorline
  101. "highlight CursorLine guibg=#30F010 ctermbg=189
  102.  
  103. "自动补全
  104. :inoremap ( ()<ESC>i
  105. :inoremap ) <c-r>=ClosePair(')')<CR>
  106. :inoremap { {<CR>}<ESC>O
  107. :inoremap } <c-r>=ClosePair('}')<CR>
  108. :inoremap [ []<ESC>i
  109. :inoremap ] <c-r>=ClosePair(']')<CR>
  110. :inoremap " ""<ESC>i
  111. :inoremap ' ''<ESC>i
  112. function! ClosePair(char)
  113. if getline('.')[col('.') - ] == a:char
  114. return "\<Right>"
  115. else
  116. return a:char
  117. endif
  118. endfunction"
  119.  
  120. "========== for quick key =======
  121. " F11默认时全屏
  122. nmap <F2> :NERDTreeToggle<cr>
  123. nmap <F3> :TagbarToggle<CR>
  124. nmap <F4> :ToggleBufExplorer<cr>
  125. nmap <F5> :CtrlPFunky<cr>
  126. nmap <F10> :set paste<cr> " 切换到粘贴模式
  127. nmap <F12> :source ~/.vimrc<cr>
  128. nmap <silent> <leader>ll :colorscheme Porsche<cr>
  129. nmap <silent> <leader>jj :colorscheme space-vim-dark<cr>
  130. nmap <silent> <leader>nm :set nonumber<cr>
  131. nmap <silent> <leader>mn :set number<cr>
  132. nmap <silent> <leader>ag :Ag<cr>
  133. nmap <silent> <leader>ff ::shell<cr>
  134.  
  135. "========== for NERDTree ==============
  136. "let g:NERDTree_title='NERD Tree'
  137. "let g:winManagerWindowLayout='NERDTree|TagList,Tarbar'
  138. autocmd vimenter * NERDTree
  139. nmap wm :NERDTreeToggle<cr>
  140. autocmd bufenter * if (winnr("$") == && exists("b:NERDTree") ) | q | endif
  141. function! NERDTree_Start()
  142. exec 'NERDTree'
  143. endfunction
  144. function! NERDTree_IsValid()
  145. return
  146. endfunction
  147. nmap <silent> mt :if IsWinManagerVisible() <BAR> WMToggle<CR> <BAR> else <BAR> WMToggle<CR>:q<CR> endif "<CR>
  148.  
  149. "========== for CtrlP ===================
  150. let g:ctrlp_map = '<c-p>'
  151. let g:ctrlp_cmd = 'CtrlP'
  152. let g:ctrlp_working_path_mode = 'r'
  153. let g:ctrlp_match_window = 'bottom,order:ttb,min:1,max:15,results:100'
  154. let g:ctrlp_tabpage_position = 'al'
  155. let g:ctrlp_working_path_mode = 'r'
  156. let g:ctrlp_reuse_window = 'netrw\|help\|quickfix'
  157. let g:ctrlp_open_new_file = 't'
  158. let g:ctrlp_open_multiple_files = 'tjr'
  159. let g:ctrlp_arg_map =
  160. let g:ctrlp_extensions = ['tag', 'buffertag', 'quickfix', 'dir', 'rtscript',
  161. \ 'undo', 'line', 'changes', 'mixed', 'bookmarkdir']
  162. set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.png,*.jpg,*.jpeg,*.gif " MacOSX/Linux
  163. let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'
  164.  
  165. if executable('ag')
  166. " Use Ag over Grep
  167. set grepprg=ag\ --nogroup\ --nocolor
  168. " Use ag in CtrlP for listing files.
  169. let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
  170. " Ag is fast enough that CtrlP doesn't need to cache
  171. let g:ctrlp_use_caching = 0
  172. endif
  173.  
  174. "========== for CtrlPFunky ==============
  175. nnoremap <Leader>u :execute 'CtrlPFunky ' . expand('<cword>')<Cr>
  176. let g:ctrlp_extensions = ['funky']
  177. let g:ctrlp_funky_syntax_highlight = 1
  178. let g:ctrlp_funky_matchtype = 'path'
  179. let g:ctrlp_funky_nerdtree_include_files = 1
  180.  
  181. "========== for vim-airline ==============
  182. let g:airline_theme="light" "light
  183. let g:airline#extensions#tabline#enabled = 1
  184. let g:airline#extensions#tabline#left_sep = ' '
  185. let g:airline#extensions#tabline#left_alt_sep = '|'
  186.  
  187. "========== for EasyMotion ==============
  188. " <Leader>f{char} to move to {char}
  189. map <Leader>f <Plug>(easymotion-bd-f)
  190. nmap <Leader>f <Plug>(easymotion-overwin-f)
  191. " s{char}{char} to move to {char}{char}
  192. nmap s <Plug>(easymotion-overwin-f2)
  193. " Move to line
  194. map <Leader>L <Plug>(easymotion-bd-jk)
  195. nmap <Leader>L <Plug>(easymotion-overwin-line)
  196. " Move to word
  197. map <Leader>w <Plug>(easymotion-bd-w)
  198. nmap <Leader>w <Plug>(easymotion-overwin-w)
  199.  
  200. "========== for insearch ==============
  201. map / <Plug>(incsearch-forward)
  202. map ? <Plug>(incsearch-backward)
  203. map g/ <Plug>(incsearch-stay)
  204. nnoremap <Esc><Esc> :<C-u>nohlsearch<CR>
  205. "set incsearch
  206. set hlsearch
  207. let g:incsearch#auto_nohlsearch = 0
  208. map n <Plug>(incsearch-nohl-n)
  209. map N <Plug>(incsearch-nohl-N)
  210. map * <Plug>(incsearch-nohl-*)
  211. map # <Plug>(incsearch-nohl-#)
  212. map g* <Plug>(incsearch-nohl-g*)
  213. map g# <Plug>(incsearch-nohl-g#)
  214.  
  215. "=========== for NERDTREE-GIT-PLUGIN =====
  216. let g:NERDTreeIndicatorMapCustom = {
  217. \ "Modified" : "",
  218. \ "Staged" : "",
  219. \ "Untracked" : "",
  220. \ "Renamed" : "",
  221. \ "Unmerged" : "",
  222. \ "Deleted" : "",
  223. \ "Dirty" : "",
  224. \ "Clean" : "✔︎",
  225. \ "Unknown" : "?"
  226. \ }
  227.  
  228. "=========== cscope ===============
  229. if has("cscope")
  230. set csprg=/usr/local/bin/cscope
  231. set csto=0
  232. set cst
  233. set nocsverb
  234. " add any database in current directory
  235. if filereadable("cscope.out")
  236. cs add cscope.out
  237. " else add database pointed to by environment
  238. elseif $CSCOPE_DB != ""
  239. cs add $CSCOPE_DB
  240. endif
  241. set csverb
  242. endif
  243. nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>
  244. nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR>
  245. nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR>
  246. nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR>
  247. nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR>
  248. nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
  249. nmap <C-\>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
  250. nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>
  251.  
  252. "=========== omnicppcomplete ===============
  253. let OmniCpp_GlobalScopeSearch = 1
  254. let OmniCpp_NamespaceSearch = 2
  255. let OmniCpp_DisplayMode = 1
  256. let OmniCpp_ShowScopeInAbbr = 1
  257. let OmniCpp_ShowPrototypeInAbbr = 1
  258. let OmniCpp_ShowAccess = 1
  259. let OmniCpp_MayCompleteDot = 1
  260. let OmniCpp_MayCompleteArrow = 1
  261. let OmniCpp_MayCompleteScope = 1
  262. let OmniCpp_MayCompleteScope = 1
  263. let OmniCpp_SelectFirstItem = 1
  264. let OmniCpp_DefaultNamespace=["std"]
  265. let OmniCpp_SelectFirstItem = 2
  266.  
  267. "===============NERD Commenter=========================
  268. let g:NERDSpaceDelims = 1 " Add spaces after comment delimiters by default
  269. let g:NERDCompactSexyComs = 1 " Use compact syntax for prettified multi-line comments
  270. let g:NERDDefaultAlign = 'left' " Align line-wise comment delimiters flush left instead of following code indentation
  271. let g:NERDAltDelims_java = 1 " Set a language to use its alternate delimiters by default
  272. let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } } " Add your own custom formats or override the defaults
  273. let g:NERDCommentEmptyLines = " Allow commenting and inverting empty lines (useful when commenting a region)
  274. let g:NERDTrimTrailingWhitespace = " Enable trimming of trailing whitespace when uncommenting
  275. "===============================================================================================
  • 手动安装

手动安装,当然是要自己一个一个地安装插件了。这种方式的特点是需要自己一个一下下载vim插件,然后手动进行安装。虽然比较费事,但如果之前有vim插件安装包的备份文件,那就可以不依赖于网络。所以还是推荐在自己的本地留一份常用插件的安装包备份。手动安装的过程比较简单,基本上就是“下载-解压”,先从网卡下载好插件的压缩包,一般来说直接解压到.vim目录中即可。

笔者常用的几个插件如下,一般都可以在github上找到,其实从上面的配置文件中就可以找到笔者使用了哪些vim插件。
Plugin 'scrooloose/nerdtree'
Plugin 'kien/ctrlp.vim'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'majutsushi/tagbar'
Plugin 'tacahiroy/ctrlp-funky'
Plugin 'jlanzarotta/bufexplorer'
Plugin 'easymotion/vim-easymotion'
Plugin 'haya14busa/incsearch.vim'
Plugin 'dkprice/vim-easygrep'
Plugin 'dyng/ctrlsf.vim'
Plugin 'Xuyuanp/nerdtree-git-plugin'
Plugin 'hfts/Porsche'
Plugin 'vim-scripts/OmniCppComplete'
Plugin 'vim-scripts/AutoComplPop'
Plugin 'scrooloose/nerdcommenter'

最后,附上笔者vim的两张截图:

VIM配置的更多相关文章

  1. acm的ubuntu (ubuntu16.04 安装指南,chrome安装,vim配置,git设置和github,装QQ)

    日常手贱把ubuntu14.04更新到了16.04,然后就game over了.mdzz,不然泥萌也看不到这篇博客了=.= 然后花了些时间重装了一个16.04版的,原来那个14.04的用可以用,就是动 ...

  2. 简单快捷好用的vim配置和终端配置推荐

    vim 配置实用spf13-vim,安装方便简单快捷,极力推荐. 另外oh-my-zsh 终端配置很好,与之搭配使用效果更佳. 安装都很简单,一个脚本搞定, 都是在gitHub上开源的,自行搜索,这里 ...

  3. 快速学习C语言三: 开发环境, VIM配置, TCP基础,Linux开发基础,Socket开发基础

    上次学了一些C开发相关的工具,这次再配置一下VIM,让开发过程更爽一些. 另外再学一些linux下网络开发的基础,好多人学C也是为了做网络开发. 开发环境 首先得有个Linux环境,有时候家里机器是W ...

  4. centos vim配置高亮语法和格式化粘贴

    centos vim配置高亮语法和格式化粘贴 设置vim别名和高亮grep词语 echo -e "\nalias vi=vim\nalias grep='grep --color'\n&qu ...

  5. vim配置方法

    /etc/vimrc (公共的) ~/.vimrc (私人的) rpm -qa|grep vim 这个命令,如何vim已经正确安装,则会显示上面三个包的名称 全部安装 yum -y install v ...

  6. VIM配置相关记录

    把一直使用中的vim配置做个GIT入库管理,也把之前积累在机器上的文档,做个汇总. https://github.com/wujuguang/kyvim 1. 安装完整版vim vi和vim的区别?在 ...

  7. Vim配置及说明——IDE编程环境

    Vim配置及说明——IDE编程环境 Vim配置及说明——IDE编程环境 1.基本及字体 2.插件管理 3.主题风格 4.窗口设置 5.目录树导航 6.标签导航 7.taglist 8.多文档编辑 9. ...

  8. Env:VIM配置

    注:文章来自于http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html 花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配 ...

  9. vim配置python开发环境

    vim配置python开发环境 一.安装vim sudo apt-get install vim 二.vim基础配置 #Centos6.5 /usr/share/vim/vim72 vi /etc/v ...

  10. Vim配置IDE开发环境

    我的vim IDE界面: 1.安装Vim和Vim基本插件首先安装好Vim和Vim的基本插件.这些使用apt-get安装即可:lingd@ubuntu:~/arm$sudo apt-get instal ...

随机推荐

  1. 6. UIImageView 的使用

    1. UIImageView 的认识 QQ:853740091 UIImageView 继承UIView,通过他的名字我们也可以看出这个是用来显示图片的 2. 使用方法 UIImageView *im ...

  2. JavaScript 操作 Cookie

    转自作者:聂微东出处:http://www.cnblogs.com/Darren_code/      什么是 Cookie “cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器 ...

  3. iOS 之UIButton左文右图

    对于button,当添加了图片时,默认是左图右文的 '[self.pageViewsLB setImage:[UIImage imageNamed:@"read"] forStat ...

  4. WordPress一键部署网站

    每个人心里都有一个建站梦,所以今天作为我第一篇文章,就给大家圆了这场梦. 今天我来详细的一步一步带领大家利用WordPress程序来建立自己的小站以及解决直接域名访问(本地安装wordpress请阅读 ...

  5. C# ADO.net 数据库连接池

    前一阵开发一套系统,同组的同事提供了一个数据库连接组件,是他自己封装的,使用了自定义的连接池,用着很是不爽,而且经常会因为程序不严谨的原因,导致连接池里的连接被用完,也导致其他错误,因此我想自己研究一 ...

  6. url地址的图片路径

    url地址的图片路径: (./images/1.jpg) 中的./指根路径,有或没有都可以: (../images/1.jpg) 中的../指相对路径: (../../images/1.jpg) 中的 ...

  7. java相关的小问题

    对线程异常的处理 调用Thread的静态方法Thread.setDefaultUncaughtExceptionHandler()

  8. OpneCv2.x 模块结构

    转自:http://blog.csdn.net/huang9012/article/details/21811271 之前啃了不少OpenCV的官方文档,发现如果了解了一些OpenCV整体的模块架构后 ...

  9. Swif - 可选型

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #4dbf56 } p.p2 { margin: 0.0px 0. ...

  10. haxe jni调用输入法

    public static void startInputDialog(final String title, final String text, final String buttonLabel, ...