本文介绍如何用强大的文本编辑器 Vim编程。只要配置得当,效果堪比一个IDE。

配置

基本配置:

"开启语法高亮
syntax on
"依文件类型设置自动缩进
filetype indent plugin on"显示当前的行号列号:
set ruler
"在状态栏显示正在输入的命令
set showcmd"关闭/打开配对括号高亮
"NoMatchParen
DoMatchParen

行号的显示与隐藏:

"显示行号:
set number
"为方便复制,用<F2>开启/关闭行号显示:
nnoremap <F2> :set nonumber!<CR>:set foldcolumn=0<CR>

启用Modeline(即允许被编辑的文件以注释的形式设置Vim选项,详见Vim Wiki: Modeline magic):

set modeline

如果终端使用的是深色背景:

"为深色背景调整配色
set background=dark

插件管理

下文的配置很多都依赖于第三方开发的 Vim 插件。为了方便地安装和维护这些插件,推荐先安装一种插件管理工具,目前较为流行的是 Vundle 和 pathogen。二者功能类似,但 Vundle 的配置更灵活, pathogen 则相对简洁。二者都能很好地与Git结合,安装插件十分方便。

如果你使用 Git 管理你的配置文件,那么还可以将 Pathogen 或 Vundle 与 Git 的 Submodule 功能管理插件结合,使得在多台电脑间同步插件及在本地更新插件变得十分便捷。

# 在存放配置文件的主文件夹下,添加一个 submodule
git submodule add https://github.com/gmarik/vundle.git .vim/bundle/vundle# 用类似的办法添加多个插件后,以后升级插件只需:
git submodule update# 如果其它电脑 checkout 出配置文件后,要先:
git submodule init

插件管理工具无需通过系统的包管理系统安装,只要将需要的文件放在 ~/.vim/ 目录中即可。这样,一套配置文件也可以方便地用在多个不同的系统环境中。

代码补全

Vim 7已经内置了代码补全功能[6],补全操作可分为两种:

关键字补全
即简单地补全到文档中已有的词,快捷键为 Ctrl-NCtrl-P
智能补全
Vim 7中引入 Omni Complete,可根据语义补全,快捷键为 Ctrl-X Ctrl-O

Vim的补全菜单操作方式与一般IDE的方式不同,可加入如下设置:

"让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
set completeopt+=longest"离开插入模式后自动关闭预览窗口
autocmd InsertLeave * if pumvisible() == 0|pclose|endif"回车即选中当前项
inoremap <expr> <CR>       pumvisible() ? "\<C-y>" : "\<CR>""上下左右键的行为
inoremap <expr> <Down>     pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up>       pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp>   pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"

如需自动补全,可安装AutoComplPop插件,安装后如需在补全是显示文档(预览),可加入设置:

let g:acp_completeoptPreview = 1

注释管理

经常要将一段代码注释掉或取消注释,而尤其对于某些只支持单行注释的语言来说,逐行加注释很麻烦,这时快速注释(或取消注释)代码的插件就显得很有用了。

常见的注释管理插件为The NERD Commenter,默认支持多种语言,使用方法也很简单:只需在可视(V)模式中选择一段代码,按下\cc加逐行注释,\cu取消注释,\cm添加块注释。

如有其它需求,也可考虑comments、EnhCommentify等插件。

缩进

使用自动缩进可能需要设置,vim中对自动缩进的详细设置办法见Vim代码缩进设置。

在不同的模式中调整缩进的方法不同:

插入模式
Ctrl-T增加缩进,Ctrl-D减小缩进。
命令模式
>> 右缩进, << 左缩进,注意n<<n>>是缩进多行,如4>>
可视模式
<> 用于左右缩进, n<n> 可做多节缩进,如 2>

另外,= 可对选中的部分进行自动缩进;]p可以实现p的粘贴功能,并自动缩进。

代码浏览与跳转

代码跳转类似于IDE中的Ctrl+点击功能。与代码补全类似,代码浏览工具亦可分为基于文本分析的和基于代码理解的两类。

简单代码跳转

在命令模式下可直接使用下述指令:

跳转到定义
gd到局部变量的定义,gD到全局变量的定义
搜索
*, # 可对光标处的词向前/向后做全词搜索,g*, g# 做相对应的非全词匹配搜索
代码块首尾
[[, ]] 可跳到当前代码块起始或结束的大括号处。
括号首尾
% 可在配对的括号、块首尾之前跳转。
位置历史
Ctrl-O 在历史记录中后台,Ctrl-I 则为前进。

基于代码理解的跳转

该功能依赖于ctags工具。[9]安装好ctags后,在存放代码的文件夹运行

ctags -R .

即可生成一个描述代码结构的tags文件。

提示:
ctags的功能很强大,更详细的配置请参考其文档。

建议在~/.vimrc中添加如下配置以使Vim在父目录中寻找tags文件:

set tags=tags;/

设置好后,可在Vim中使用如下功能:Ctrl-]转至最佳匹配的相应Tag,Ctrl-T返回上一个匹配。如果有多个匹配,g Ctrl-]可显示所有备选的tags。如有需要,可互换Ctrl-]g Ctrl-]

"在普通和可视模式中,将<c-]>与g<c-]>互换
nnoremap <c-]> g<c-]>
vnoremap <c-]> g<c-]>nnoremap g<c-]> <c-]>
vnoremap g<c-]> <c-]>

就地编译和错误处理

使用:make可调用make命令编译程序,配合Vim内置的QuickFix功能,可以像IDE一样打开一个窗口展示编译错误和警告,通过它还可以方便地跳转到各编译错误的产生位置。

常用的命令有:cw[indow](如有错误打开quickfix窗口)、:cn(跳到下一个错误)、:cp(跳到前一个错误)等,具体可:help quickfix

如果想在有错时自动打开quickfix窗口:

" 编译后,如有错误则打开quickfix窗口。(光标仍停留在源码窗口)
"
" 注意:需要开启netsting autocmd
autocmd QuickFixCmdPost [^l]* nested cwindow
autocmd QuickFixCmdPost    l* nested lwindow

默认情况下,:mak[e]会跳转到第一个错误,如果不想启用这个功能,请使用:make!

代码折叠

代码较长时可启用代码折叠功能,如按语法高亮元素折叠:

set foldmethod=syntax
"默认情况下不折叠
set foldlevel=99

随后即可使用z系列命令管理代码折叠。如za会翻转当前位置的折叠状态,zA会递归翻转当前层所有代码的折叠状态等。当然也可以把功能键映射到za:

map <F3> za

查看文档

K 键可用于查看当前函数的文档。

其它插件

近来仍被积极维护的代码托管在 GitHub 上的插件:

Fugitive
让 Vim 更好地与 Git 整合。
Powerline
炫丽实用的状态栏
Tagbar
比 taglist 更现代的代码结构浏览工具
The NERD tree
以树形结构浏览文件夹中的文件
Syntastic
语法检查
surround.vim
快速删除/修改光标周围配对的括号

其它常用插件[14]

Project
方便管理工程中的文件
snipmate.vim
在编辑中实现模板展开
a.vim
.cpp/.h等文件对中跳转
matchit.zip
增强%的功能
winmanager
将文件管理窗口和taglist堆叠起来。

相关文档

  • 配置基于Vim的Python编程环境
  • 让vim自动判断中文编码

参考资料

  1. ↑ How to setup VIM properly for editing Python files - *.py (StackOverflow)
  2. ↑ amix的vimrc
  3. ↑ Python and vim: Make your own IDE (2009.2)
  4. ↑ Python官网上的Vim介绍
  5. ↑ Git Tools - Submodules
  6. ↑ 细说 Vim 7 之新特性-LinuxToy
  7. ↑ VimTip 1228: Improve completion popup menu
  8. ↑ Vim文档
  9. ↑ Browsing programs with tags -- Vim Tips Wiki
  10. ↑ Vim and Ctags tips and tricks
  11. ↑ use :tjump instead of :tag vim on pressing ctrl-] (StackOverflow)
  12. ↑ Automatically open the quickfix window on :make
  13. ↑ LinuxTOY Xu Xiaodong 的VimEnv
  14. ↑ 手把手教你把Vim改装成一个IDE编程环境(图文)

常用命令

对于入门vim基本命令可以参考 简明 Vim 练级攻略,以下是本人关于移动光标插入/修改删除复制粘帖撤销和恢复等常用命令

  • 移动光标

    1. 对于在行内移动,通过使用f/F + 字符来移动到特定的字符,然后再使用. 来重复执行命令;f表示向前移动,F表示向后移动。如果想直接移动到行首或行尾,使用^$
    2. 对于在多行移动,就有多种选择:第一种是通过ggG行数 + G指定行数来移动,gg表示移动文件的第一行,G表示移动文件的最后一行,行数 + G表示移动到特定的行。第二种就是通过正则搜索的方式来移动,/string表示正向查找,?string表示反向查找,n查找下一个匹配的结果,N表示上一个匹配的结果,按up/down可以浏览搜索历史。第三种就是使用标记来移动,m + {a-z}标记位置(适用于单个文件,如果是多个文件,使用大写字母{A-Z}),`{mark}移动到标记位置的列,'{mark} 移动到标记位置的行首,还有一些特殊的标记,'表示跳转前光标的位置
  • 选择文本
    v不规则选择
    V按行选择
    Ctrl + V按列选择
  • 插入/修改
    i在当前字符前面插入
    I在行首插入
    a在当前字符后面插入
    A在行尾插入
    o在当前行的下一行插入
    O在当前行的上一行插入r更改当前的字符
    R更改多个字符
    cw/caw更改单词
    cf + 字符更改从当前字符到指定字符
    c$更改从当前字符到行尾
    cc更改整行
  • 删除
    x删除字符
    df + 字符删除从当前字符到指定字符
    dw/daw删除单词
    d$删除从当前光标到行尾
    dd删除一行
  • 剪切与粘帖
    dd + pdelete一行,然后放在当前光标下方
    dd + Pdelete一行,然后放在当前光标上方
    dw + p delete单词,然后放在当前光标后面
    dw + P delete单词,然后放在当前光标前面
    p/P可接受计数前缀,重复粘贴
  • 复制
    yw复制单词
    yf复制从当前字符到指定字符
    y$复制当前光标到行尾
    yy复制整行
  • 撤销和恢复
    u撤销
    ctrl + r重做
  • 重复操作
    数字+action表示执行某个操作多少次
    .重复上一个操作
  • 宏录制
    q + 寄存器(a-z)开始录制
    录制动作
    q停止录制
    @ + 寄存器 / @@replay被录制的宏

扩展阅读

  • Vim配置
    从零搭建和配置OSX开发环境
    将你的Vim 打造成轻巧强大的IDE
  • Vim插件
    vim中的杀手级插件: vundle
    谁说Vim不是IDE?(三)
    vim中的杀手级插件: YouCompleteMe
  • Vim入门和使用技巧
    简明 Vim 练级攻略

vim配置文件

vim配置主要有以下优点:

1.按F5可以直接编译并执行C、C++、java代码以及执行shell脚本,按“F8”可进行C、C++代码的调试

2.自动插入文件头 ,新建C、C++源文件时自动插入表头:包括文件名、作者、联系方式、建立时间等,读者可根据需求自行更改

3.映射“Ctrl + A”为全选并复制快捷键,方便复制代码

4.按“F2”可以直接消除代码中的空行

5.“F3”可列出当前目录文件,打开树状文件目录

6. 支持鼠标选择、方向键移动

7. 代码高亮,自动缩进,显示行号,显示状态行

8.按“Ctrl + P”可自动补全

9.[]、{}、()、""、' '等都自动补全

10.其他功能读者可以研究以下文件

vim本来就是很强大,很方便的编辑器,加上我的代码后肯定会如虎添翼,或许读者使用其他编程语言,可以根据自己的需要进行修改,配置文件里面已经加上注释。

读者感兴趣的话直接复制下面的代码到文本文件,然后把文件改名为“ .vimrc” (不要忘记前面的“.”),然后把文件放到用户文件夹的根目录下面即可。重新打开vim即可看到效果。

为方便管理,源码托管到了github,后期增加了好多新功能,

具体详见:https://github.com/ma6174/vim

这是在github上的vim配置的截图:

下面是精简的,没有插件的vim配置文件,保存到自己的.vimrc文件就能使用。

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 显示相关  """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""set shortmess=atI   " 启动的时候不显示那个援助乌干达儿童的提示  "winpos 5 5          " 设定窗口位置  "set lines=40 columns=155    " 设定窗口大小  "set nu              " 显示行号  set go=             " 不要图形按钮  "color asmanian2     " 设置背景主题  set guifont=Courier_New:h10:cANSI   " 设置字体  "syntax on           " 语法高亮  autocmd InsertLeave * se nocul  " 用浅色高亮当前行  autocmd InsertEnter * se cul    " 用浅色高亮当前行  "set ruler           " 显示标尺  set showcmd         " 输入的命令显示出来,看的清楚些  "set cmdheight=1     " 命令行(在状态行下)的高度,设置为1  "set whichwrap+=<,>,h,l   " 允许backspace和光标键跨越行边界(不建议)  "set scrolloff=3     " 光标移动到buffer的顶部和底部时保持3行距离  set novisualbell    " 不要闪烁(不明白)  set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}   "状态行显示的内容  set laststatus=1    " 启动显示状态行(1),总是显示状态行(2)  set foldenable      " 允许折叠  set foldmethod=manual   " 手动折叠  "set background=dark "背景使用黑色 set nocompatible  "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限  " 显示中文帮助if version >= 603set helplang=cnset encoding=utf-8endif" 设置配色方案"colorscheme murphy"字体 "if (has("gui_running")) "   set guifont=Bitstream\ Vera\ Sans\ Mono\ 10 "endif set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936set termencoding=utf-8set encoding=utf-8set fileencodings=ucs-bom,utf-8,cp936set fileencoding=utf-8""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""新文件标题"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""新建.c,.h,.sh,.java文件,自动插入文件头 autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()" ""定义函数SetTitle,自动插入文件头 func SetTitle() "如果文件类型为.sh文件 if &filetype == 'sh' call setline(1,"\#########################################################################") call append(line("."), "\# File Name: ".expand("%")) call append(line(".")+1, "\# Author: ma6174") call append(line(".")+2, "\# mail: ma6174@163.com") call append(line(".")+3, "\# Created Time: ".strftime("%c")) call append(line(".")+4, "\#########################################################################") call append(line(".")+5, "\#!/bin/bash") call append(line(".")+6, "") else call setline(1, "/*************************************************************************") call append(line("."), "    > File Name: ".expand("%")) call append(line(".")+1, "    > Author: ma6174") call append(line(".")+2, "    > Mail: ma6174@163.com ") call append(line(".")+3, "    > Created Time: ".strftime("%c")) call append(line(".")+4, " ************************************************************************/") call append(line(".")+5, "")endifif &filetype == 'cpp'call append(line(".")+6, "#include<iostream>")call append(line(".")+7, "using namespace std;")call append(line(".")+8, "")endifif &filetype == 'c'call append(line(".")+6, "#include<stdio.h>")call append(line(".")+7, "")endif"新建文件后,自动定位到文件末尾autocmd BufNewFile * normal Gendfunc """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""键盘命令""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""nmap <leader>w :w!<cr>nmap <leader>f :find<cr>" 映射全选+复制 ctrl+amap <C-A> ggVGYmap! <C-A> <Esc>ggVGYmap <F12> gg=G" 选中状态下 Ctrl+c 复制vmap <C-c> "+y"去空行  nnoremap <F2> :g/^\s*$/d<CR> "比较文件  nnoremap <C-F2> :vert diffsplit "新建标签  map <M-F2> :tabnew<CR>  "列出当前目录文件  map <F3> :tabnew .<CR>  "打开树状文件目录  map <C-F3> \be  "C,C++ 按F5编译运行map <F5> :call CompileRunGcc()<CR>func! CompileRunGcc()exec "w"if &filetype == 'c'exec "!g++ % -o %<"exec "! ./%<"elseif &filetype == 'cpp'exec "!g++ % -o %<"exec "! ./%<"elseif &filetype == 'java' exec "!javac %" exec "!java %<"elseif &filetype == 'sh':!./%endifendfunc"C,C++的调试map <F8> :call Rungdb()<CR>func! Rungdb()exec "w"exec "!g++ % -g -o %<"exec "!gdb ./%<"endfunc""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""实用设置"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 设置当文件被改动时自动载入set autoread" quickfix模式autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>"代码补全 set completeopt=preview,menu "允许插件  filetype plugin on"共享剪贴板  set clipboard+=unnamed "从不备份  set nobackup"make 运行:set makeprg=g++\ -Wall\ \ %"自动保存set autowriteset ruler                   " 打开状态栏标尺set cursorline              " 突出显示当前行set magic                   " 设置魔术set guioptions-=T           " 隐藏工具栏set guioptions-=m           " 隐藏菜单栏"set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\" 设置在状态行显示的信息set foldcolumn=0set foldmethod=indent set foldlevel=3 set foldenable              " 开始折叠" 不要使用vi的键盘模式,而是vim自己的set nocompatible" 语法高亮set syntax=on" 去掉输入错误的提示声音set noeb" 在处理未保存或只读文件的时候,弹出确认set confirm" 自动缩进set autoindentset cindent" Tab键的宽度set tabstop=4" 统一缩进为4set softtabstop=4set shiftwidth=4" 不要用空格代替制表符set noexpandtab" 在行和段开始处使用制表符set smarttab" 显示行号set number" 历史记录数set history=1000"禁止生成临时文件set nobackupset noswapfile"搜索忽略大小写set ignorecase"搜索逐字符高亮set hlsearchset incsearch"行内替换set gdefault"编码设置set enc=utf-8set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936"语言设置set langmenu=zh_CN.UTF-8set helplang=cn" 我的状态行显示的内容(包括文件类型和解码)"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}"set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]" 总是显示状态行set laststatus=2" 命令行(在状态行下)的高度,默认为1,这里是2set cmdheight=2" 侦测文件类型filetype on" 载入文件类型插件filetype plugin on" 为特定文件类型载入相关缩进文件filetype indent on" 保存全局变量set viminfo+=!" 带有如下符号的单词不要被换行分割set iskeyword+=_,$,@,%,#,-" 字符间插入的像素行数目set linespace=0" 增强模式中的命令行自动完成操作set wildmenu" 使回格键(backspace)正常处理indent, eol, start等set backspace=2" 允许backspace和光标键跨越行边界set whichwrap+=<,>,h,l" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)set mouse=aset selection=exclusiveset selectmode=mouse,key" 通过使用: commands命令,告诉我们文件的哪一行被改变过set report=0" 在被分割的窗口间显示空白,便于阅读set fillchars=vert:\ ,stl:\ ,stlnc:\" 高亮显示匹配的括号set showmatch" 匹配括号高亮的时间(单位是十分之一秒)set matchtime=1" 光标移动到buffer的顶部和底部时保持3行距离set scrolloff=3" 为C程序提供自动缩进set smartindent" 高亮显示普通txt文件(需要txt.vim脚本)au BufRead,BufNewFile *  setfiletype txt"自动补全:inoremap ( ()<ESC>i:inoremap ) <c-r>=ClosePair(')')<CR>:inoremap { {<CR>}<ESC>O:inoremap } <c-r>=ClosePair('}')<CR>:inoremap [ []<ESC>i:inoremap ] <c-r>=ClosePair(']')<CR>:inoremap " ""<ESC>i:inoremap ' ''<ESC>ifunction! ClosePair(char)if getline('.')[col('.') - 1] == a:charreturn "\<Right>"elsereturn a:charendifendfunctionfiletype plugin indent on "打开文件类型检测, 加了这句才可以用智能补全set completeopt=longest,menu"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" CTags的设定  """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""let Tlist_Sort_Type = "name"    " 按照名称排序  let Tlist_Use_Right_Window = 1  " 在右侧显示窗口  let Tlist_Compart_Format = 1    " 压缩方式  let Tlist_Exist_OnlyWindow = 1  " 如果只有一个buffer,kill窗口也kill掉buffer  let Tlist_File_Fold_Auto_Close = 0  " 不要关闭其他文件的tags  let Tlist_Enable_Fold_Column = 0    " 不要显示折叠树  autocmd FileType java set tags+=D:\tools\java\tags  "autocmd FileType h,cpp,cc,c set tags+=D:\tools\cpp\tags  "let Tlist_Show_One_File=1            "不同时显示多个文件的tag,只显示当前文件的"设置tags  set tags=tags  "set autochdir """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""其他东东""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""默认打开Taglist let Tlist_Auto_Open=1 """""""""""""""""""""""""""""" " Tag list (ctags) """""""""""""""""""""""""""""""" let Tlist_Ctags_Cmd = '/usr/bin/ctags' let Tlist_Show_One_File = 1 "不同时显示多个文件的tag,只显示当前文件的 let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim let Tlist_Use_Right_Window = 1 "在右侧窗口中显示taglist窗口" minibufexpl插件的一般设置let g:miniBufExplMapWindowNavVim = 1let g:miniBufExplMapWindowNavArrows = 1let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1

为了方便大家下载使用,我把它放到我的空间里了,两个命令就可以瞬间得到.vimrc文件

下载:vimrc

unzip -f vimrc.zip -d ~/

简易安装方法:

打开终端,执行下面的命令就自动安装好了:

wget -qO- https://raw.github.com/ma6174/vim/master/setup.sh | sh -x

或者自己手动安装:(以ubuntu为例)

  1. 安装vim sudo apt-get install vim
  2. 安装ctags:sudo apt-get install ctags
  3. 安装一些必备程序:sudo apt-get install xclip vim-gnome astyle python-setuptools
  4. python代码格式化工具:sudo easy_install -ZU autopep8
  5. sudo ln -s /usr/bin/ctags /usr/local/bin/ctags
  6. clone配置文件:cd ~/ && git clone git://github.com/ma6174/vim.git
  7. mv ~/vim ~/.vim
  8. mv ~/.vim/.vimrc ~/
  9. clone bundle 程序:git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
  10. 打开vim并执行bundle程序:BundleInstall
  11. 重新打开vim即可看到效果

原文转自:用Vim编程——配置与技巧

用Vim编程——配置与技巧相关推荐

  1. 无插件Vim编程技巧

    相信大家看过< 简明Vim教程>也玩了< Vim大冒险>的游戏了,相信大家对Vim都有一个好的入门了.我在这里把我日常用Vim编程的一些技巧列出来给大家看看,希望对大家有用,另 ...

  2. Vim 分屏功能+无插件Vim编程技巧

    本篇文章主要教你如何使用 Vim 分屏功能. 分屏启动Vim 使用大写的O参数来垂直分屏. vim -On file1 file2 ... 使用小写的o参数来水平分屏. vim -on file1 f ...

  3. ubuntu下vim的配置

    写在前面,我写本文的目的不在于教大家怎么来配置VIM,因为我是新手,我也是参考了各位前辈的方法,在此只是记录一下过程,当然我个人觉得更重要的是心得体会.其实大家可能也发觉,国内的抄袭转载现象很严重,基 ...

  4. Vim的配置和高级使用

    Vim的配置和高级使用 前言 一.代码编辑器介绍 1.1 vim 1.2 Eclipse 1.3 Brackets 1.4 Emacs 1.5 LightTable 1.6 Chocolat 1.7 ...

  5. 避免最常见的 10 大 JNI 编程错误的技巧和工具

    避免最常见的 10 大 JNI 编程错误的技巧和工具 Java™ 本机接口(Java Native Interface,JNI)是一个标准的 Java API,它支持将 Java 代码与使用其他编程语 ...

  6. Linux vi/vim文本编辑器技巧, vim多窗口使用技巧

    Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地 ...

  7. Java编程配置思路详解

    Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...

  8. 2021-01-20 Python编程特殊小技巧汇集

    Python编程特殊小技巧汇集 Python作为一种高级编辑语言,有很多使用的小技巧,分享一期. 1.变量值互换 a = 0b = 1a,b = b, a 2.连续赋值 a, b = 2, 1 3.自 ...

  9. vim编辑器的常用技巧

    vim编辑器的常用技巧 文章目录 vim编辑器的常用技巧 前言 Vi的使用 vi的三种模式 常用按键说明 Vim额外功能 多文件编辑 多窗口编辑 参考文章 前言 我们在使用 Windows 系统时,如 ...

最新文章

  1. android11通知栏按钮,android开发(11) 消息栏通知(Notification)
  2. hdu 4493 Tutor 水题
  3. 在大规模 Kubernetes 集群上实现高 SLO 的方法
  4. WAI-ARIA对自动完成小部件的支持
  5. 拉格朗日插值_拉格朗日插值定理的理论基础
  6. Unity5 Sprite 图集打包 AssetBundle 更新探索
  7. Storm概念学习系列之Stream消息流 和 Stream Grouping 消息流组
  8. Region proposal学习笔记
  9. UVA 1584 环状序列
  10. Amazon AWS S3 上传文件 并获取公用url
  11. 《算法分析与设计》 第一章 算法设计基础 基本知识点
  12. beyond compare 对class文件反编译及比较
  13. 数据不落地、移动新应用、安全更可靠
  14. kettle同步数据 (SAP hana到 Mysql)
  15. 【独家】一文读懂数据可视化
  16. c语言坐标三角形判断,C语言输入三角形边长判断其类型并输出面积实例代码
  17. 5、CPU Subsystem 01(5.1-5.7)
  18. python-scikit-learn基础
  19. 发送手机短信验证码-后端、前端(验证码倒计时)
  20. 异常解决——SpringBoot项目启动卡住,无任何异常信息

热门文章

  1. Lake Counting(信息学奥赛一本通-T1249)
  2. 接水问题(信息学奥赛一本通-T1233)
  3. 排队接水(信息学奥赛一本通-T1319)
  4. 信息学奥赛C++语言:输出亲朋字符串
  5. sparksql 保存点_Spark(十二)【SparkSql中数据读取和保存】
  6. AttributeError: ‘str‘ object has no attribute ‘copy
  7. OpenCV辅助对象(help objects)(2)_Range
  8. 剖析Caffe源码之Layer
  9. 细粒度图像分类_北大提出PKU FG-XMedia:细粒度跨媒体检索数据集和评测基准
  10. swiper叠加轮播效果 (含源码) - 案例篇