本文转自:http://blog.csdn.net/dinosoft/article/details/6330121

有些牛X的人性格会比较古怪,VIM就是这么一位特立独行,难以琢磨的怪客。但如果熟悉了,你就会发现他的好。

VIM(VI,VIM,GVIM)这东西不好上手,而且是相当不好上手,基本上新手打开这个编辑器,想试着输入几个字符之后,便会很恼火地把VIM关掉。

第一次接触vim是上网找工具自动缩进代码。在网上拷的代码因为html的原因,没处理好缩进会全乱掉,手动调那会蛋疼死的。这种机械的话显然要交给机器做。上网搜了一下,居然只找到vim的方法,所以自己就下了一个,gg=G,按了几个奇怪的按键,代码就自动缩进好了。

我之前用过一下,也去看了一些资料,最后觉得这东西是历史的产物,是当年还没鼠标,图形界面不发达的产物。完完全全违反人机交互啊有木有!!所以便把VIM给抛弃了。不过最近又陆陆续续看到关于VIM的一些调侃,而且在一些IT公司的笔试题里面居然有考关于VIM的!所以我决心要好好研究一下VIM,迈入"使用VIM的装B高级程序员"  行列。毕竟这东西名气这么大,应该名不虚传吧。不花精力研究一下,恐怕就要错失一个好东东了。

自己使用后的体验:

  1. 手不用离开键盘,比较方便。不过因为我自己的Thinkpad笔记本带有小红帽,我后来基本就用那个,不用鼠标,确实手要离开键盘比较不方便。可能vim的一些特性优势就没有那么明显了。
  2. 按键的兼容问题。大部分人肯定都像我一样,win中毒很深,用ctrl+c,ctrl+v复制粘贴。但linux里面ctrl+c是interrupt signal。vim里面还有好几个寄存器,搞得想从系统粘贴还要按好多个键,我是受不了。当然,由于vim强大的自定义功能,按键可以自定义,改到自己合用。而win版的gvim已经更改好按键了。

个人认为最好的入门方法:

  1. 先明白vi有两种模式:命令模式和插入模式,按 i 进入插入模式,可进行一般的编辑;按 ESC 回到命令模式。其实还有一种是可视模式啦,按v。
  2. Vim命令速查卡!!(链接万一挂掉就自己搜吧)http://coolshell.cn/articles/150.html,这个版本直接打印会有问题,因为不是标准的A4,所以只打印出中间的一块,可以用我改好的版本http://ishare.iask.sina.com.cn/f/15406711.html

自己玩一下,先熟悉基本的编辑功能。

vim的扩展基本就是插件和快捷键映射,用gvim的话可以在菜单找到启动设定,会自动打开启动配置文件,在linux下是~/.vimrc

Vim进阶设置

1.配色

使用vim肯定要选一个自己喜欢的代码高亮配色。

  1. 在线查看并下载(推荐这个) http://code.google.com/p/vimcolorschemetest/
  2. 打包下载,在 http://www.vim.org/scripts/script.php?script_id=625,由于配色很多,要一个一个试也很麻烦。可以使用插件ColorSchemeExplorer查看(选定后回车生效http://www.vim.org/scripts/script.php?script_id=1298)使用命令 :ColorSchemeExplorer  我自己本机上运行出现错误, 打开csExplorer.vim,用双引号注释掉第36行即可"  exe "silent bot ".10."new "."Color Explorer"

2.快速从模板建立文件

原帖地址:http://www.gracecode.com/archives/2414/

最近很多人被我“拉下水”尝试 (g)Vim,为了支持他们,我会编写些 Vim 脚本方便大家。

这里有个现成的需求,就是很多从 Editplus 转过来的同学,想让 Vim 有从模板新建文件的功能。那么,这篇文章可能就是你们想要的。

安装步骤

下载代码包以后,解压缩到$VIMRUNTIME 目录。重新启动 Vim,输入

/*在系统终端看不到这个变量,可以进入vim后输入 :echo $VIMRUNTIME。我的系统上是/usr/share/vim/vim72,注意只是把plugin解压到$VIMRUNTIME 目录,(后记:其实~/.vim/plugin目录才是正道!)template要放到下面提到的对应目录,作者应该是在windows下的,那个插件脚本是win格式的换行,在我的ubuntu上启动的时候报错,我用Geany改成Unix格式的换行就行了。*/

//注意:在我的ubuntu下,更新gvim后,目录的版本号也变了,变成/usr/share/vim/vim73了

:NewTemplate xhtml

就可以建立个 XHTML 模板,如果是 Vim 7.0 以上的版本,还有个命令

:NewTemplateTab xhtml

即可在新的标签页中新建文件。当然可以映射快捷键,快速新建常用的文件类型,比如我的

" 新建 XHTML 的快捷键 map nn :NewTemplateTab xhtml<cr>

在 normal 模式下,连续按两次 n 就可以在新标签页建立 xhtml 文件了。

配置脚本

此插件文件的路径在

$VIMRUNTIME/plugin/Template.vim

下,主要有两个配置选项,默认为

let g:TemplatePath=$VIM.'/vimfiles/template/' let g:TemplateCursorFlag='#cursor#'

其中,g:TemplatePath 为模板路径,而 g:TemplatePathCursorFlag 则为新建模板以后鼠标移动到的位置(如无指定,则移动到文件底部)。

增加模板

//我自己加了c++的模版,注意名字为cpp.tpl,不是c++.tpl。会根据名字语法高亮,所以不能随便起。

脚本支持用户新建模板,找到 g:TemplatePath 中的 xhtml.tpl 目录。参考其中的内容

<html> <body> #cursor# </body> </html>

应该很容易理解。比如需要新建 python 模板。则在 g:TemplatePath 中建立 python.tpl 并加入#cursor# 的位置即可。

3.我写acm程序的配置

先说明具体想要达到的功能:

  1. 快速从模版新建c++文件。开头那些include什么的就不用写了。(上面介绍的模版已实现)
  2. 按一下按键把粘贴板的内容(测试数据保存到指定文件)。
  3. 按一下按键编译,按一下按键自动运行(输入重定向到那个测试数据文件)。
  4. gdb调试(这东西涉及进程通讯,所以要通过对源码打补丁,再重新编译,不能直接通过插件安装,我猜想应该是这样)

第二点。配置如下:

[plain] view plaincopy
  1. map <F9> :call SaveInputData()<CR>
  2. func! SaveInputData()
  3. exec "tabnew"
  4. exec 'normal "+gP'
  5. exec "w! /tmp/input_data"
  6. endfunc

按F9之后,会新打开一个tab,然后在正常模式执行“+gP,也就是粘贴,接着w!强制写入到/tmp/input_data文件,放到/tmp,无垃圾,绿色环保!

第三点:

网上一般介绍用按键映射gcc编译命令,但这样会有问题,就是无法使用quickfix窗口(参看附录那篇文章的介绍),也就是出错后我们可以打开quickfix窗口显示出错信息,而不是切换回编辑模式那些出错信息就没了,而且支持直接跳转到出错代码行。

我们把按键映射到命令:make即可。而make是根据set makeprg=g++\ %\ -o\ /tmp/a   自动设置编译参数的。生成到/tmp/a,一样环保!

最后我们这些下面的设置就能一键运行了:

[plain] view plaincopy
  1. map <F6> :call ExecCpp()<CR>
  2. func! ExecCpp()
  3. exec "!/tmp/a < /tmp/input_data"
  4. endfunc

叹号表示执行外部命令。把我们的测试数据重定向到输入流。

第四点:

直接去vimgdb的官网看吧,没比这更好的教程了 http://clewn.sourceforge.net/install.html#vimgdb ,同页面还有一个叫Clewn的东西,调试的时候得开两个窗口,很囧。

注意:用g++编译的时候得带-g参数;vimgdb用ctrl+B加breadpoint,R = run,C= continue,P = 打印变量值,简单就这几个命令,详细的看gdb的手册和~/.vim/macros/gdb_mappings.vim

附录有我的设置,按F7开/关gdb调试。当然编译时会加调试信息的。

[plain] view plaincopy
  1. -g
  2. 加入调试代码,可以在完成后使用 strip命令删除用于调试的信息

well蛋!

附录:

推荐一篇好文章

手把手教你把Vim改装成一个IDE编程环境(图文)

原文地址:http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx

我自己的 ~/.gvimrc文件(或~/.vimrc)

[plain] view plaincopy
  1. sset encoding=utf8
  2. let g:vimgdb_debug_file = ""
  3. run macros/gdb_mappings.vim
  4. set langmenu=zh_CN.UTF-8
  5. set imcmdline
  6. source $VIMRUNTIME/delmenu.vim
  7. source $VIMRUNTIME/menu.vim
  8. set backspace=indent,eol,start
  9. set whichwrap=b,s,<,>,[,]
  10. syntax on
  11. set nocompatible
  12. set number
  13. set cin
  14. set autoindent
  15. set smartindent
  16. set tabstop=4
  17. set shiftwidth=4
  18. set showmatch
  19. set et
  20. set autochdir
  21. let Tlist_Show_One_File=1
  22. let Tlist_Exit_OnlyWindow=1
  23. let g:winManagerWindowLayout='FileExplorer|TagList'
  24. nmap wm :WMToggle<cr>
  25. filetype plugin indent on
  26. set completeopt=longest,menu
  27. let g:SuperTabRetainCompletionType=2
  28. let g:SuperTabDefaultCompletionType="<C-X><C-O>"
  29. map <F5> :w<CR>:make<CR>
  30. imap <F5> :w<CR>:make<CR>
  31. "map <F12> :call CompileCpp()<CR>
  32. "func! CompileCpp()
  33. "exec "w"
  34. "exec "!g++ -g % -o /tmp/a"
  35. "endfunc
  36. map <F6> :call ExecCpp()<CR>
  37. func! ExecCpp()
  38. exec "!/tmp/a < /tmp/input_data"
  39. endfunc
  40. map <F9> :call SaveInputData()<CR>
  41. func! SaveInputData()
  42. exec "tabnew"
  43. exec 'normal "+gP'
  44. exec "w! /tmp/input_data"
  45. endfunc
  46. map <F8> :call RunPython()<CR>
  47. func! RunPython()
  48. exec "w"
  49. exec "!python %"
  50. endfunc
  51. "source $VIMRUNTIME/mswin.vim
  52. "behave mswin
  53. map <A-c> NewTemplateTab cpp<cr>
  54. map <A-p> NewTemplateTab python<cr>
  55. "map nn :NewTemplateTab cpp<cr>
  56. "map np :NewTemplateTab python<cr>
  57. autocmd FileType python setlocal et sta sw=4 sts=4
  58. let g:pydiction_location = '/home/dinosoft/.vim/pydiction/complete-dict'
  59. set makeprg=g++\ -g\ %\ -o\ /tmp/a
  60. autocmd FileType cpp nmap <C-N> :cn<cr>
  61. autocmd FileType cpp nmap <C-P> :cp<cr>
  62. color tango-desert
  63. :inoremap ( ()<ESC>i
  64. :inoremap ) <c-r>=ClosePair(')')<CR>
  65. :inoremap { {<CR>}<ESC>O
  66. :inoremap } <c-r>=ClosePair('}')<CR>
  67. :inoremap [ []<ESC>i
  68. :inoremap ] <c-r>=ClosePair(']')<CR>
  69. ":inoremap " ""<ESC>i
  70. ":inoremap ' ''<ESC>i
  71. function ClosePair(char)
  72. if getline('.')[col('.') - 1] == a:char
  73. return "\<Right>"
  74. else
  75. return a:char
  76. endif
  77. endfunction
  78. nmap <S-Insert> "+gP
  79. imap <S-Insert> <ESC><S-Insert>i
  80. vmap <C-C> "+y
  81. vmap <S-Insert> "+gP
  82. nmap <C-left> gt
  83. imap <C-left> gt
  84. nmap <C-right> gT
  85. imap <C-right> gT
  86. nmap <C-S> :w!
  87. imap <C-S> :w!
  88. map <C-A> ggVG

~/.vim/macros/gdb_mappings.vim

[plain] view plaincopy
  1. " Mappings example for use with gdb
  2. " Maintainer:   <xdegaye at users dot sourceforge dot net>
  3. " Last Change:  Mar 6 2006
  4. if ! has("gdb")
  5. finish
  6. endif
  7. let s:gdb_k = 1
  8. map <F7> :call <SID>Toggle()<CR>
  9. " Toggle between vim default and custom mappings
  10. function! s:Toggle()
  11. if s:gdb_k
  12. let s:gdb_k = 0
  13. " easwy add
  14. if ! exists("g:vimgdb_debug_file")
  15. let g:vimgdb_debug_file = ""
  16. elseif g:vimgdb_debug_file == ""
  17. call inputsave()
  18. let g:vimgdb_debug_file =  expand("%:r:t")
  19. call inputrestore()
  20. endif
  21. call gdb("file /tmp/a")
  22. "call gdb("file " . g:vimgdb_debug_file)
  23. " easwy end
  24. map <Space> :call gdb("")<CR>
  25. nmap <silent> <C-Z> :call gdb("\032")<CR>
  26. nmap <silent> B :call gdb("info breakpoints")<CR>
  27. nmap <silent> L :call gdb("info locals")<CR>
  28. nmap <silent> A :call gdb("info args")<CR>
  29. nmap <silent> S :call gdb("step")<CR>
  30. nmap <silent> I :call gdb("stepi")<CR>
  31. nmap <silent> <C-N> :call gdb("next")<CR>
  32. nmap <silent> X :call gdb("nexti")<CR>
  33. nmap <silent> F :call gdb("finish")<CR>
  34. nmap <silent> R :call gdb("run")<CR>
  35. nmap <silent> Q :call gdb("quit")<CR>
  36. nmap <silent> C :call gdb("continue")<CR>
  37. nmap <silent> W :call gdb("where")<CR>
  38. nmap <silent> <C-U> :call gdb("up")<CR>
  39. nmap <silent> <C-D> :call gdb("down")<CR>
  40. " set/clear bp at current line
  41. nmap <silent> <C-B> :call <SID>Breakpoint("break")<CR>
  42. nmap <silent> <C-E> :call <SID>Breakpoint("clear")<CR>
  43. " print value at cursor
  44. nmap <silent> <C-P> :call gdb("print " . expand("<cword>"))<CR>
  45. " display Visual selected expression
  46. vmap <silent> <C-P> y:call gdb("createvar " . "<C-R>"")<CR>
  47. " print value referenced by word at cursor
  48. nmap <silent> <C-X> :call gdb("print *" . expand("<cword>"))<CR>
  49. echohl ErrorMsg
  50. echo "gdb keys mapped"
  51. echohl None
  52. " Restore vim defaults
  53. else
  54. let s:gdb_k = 1
  55. " easwy add
  56. call gdb("quit")
  57. " end easwy
  58. "
  59. nunmap <Space>
  60. nunmap <C-Z>
  61. nunmap B
  62. nunmap L
  63. nunmap A
  64. nunmap S
  65. nunmap I
  66. nunmap <C-N>
  67. nunmap X
  68. nunmap F
  69. nunmap R
  70. nunmap Q
  71. nunmap C
  72. nunmap W
  73. nunmap <C-U>
  74. nunmap <C-D>
  75. nunmap <C-B>
  76. nunmap <C-E>
  77. nunmap <C-P>
  78. nunmap <C-X>
  79. echohl ErrorMsg
  80. echo "gdb keys reset to default"
  81. echohl None
  82. endif
  83. endfunction
  84. " Run cmd on the current line in assembly or symbolic source code
  85. " parameter cmd may be 'break' or 'clear'
  86. function! s:Breakpoint(cmd)
  87. " An asm buffer (a 'nofile')
  88. if &buftype == "nofile"
  89. " line start with address 0xhhhh...
  90. let s = substitute(getline("."), "^\\s*\\(0x\\x\\+\\).*{1}quot;, "*\\1", "")
  91. if s != "*"
  92. call gdb(a:cmd . " " . s)
  93. endif
  94. " A source file
  95. else
  96. let s = "\"" . fnamemodify(expand("%"), ":p") . ":" . line(".") . "\""
  97. call gdb(a:cmd . " " . s)
  98. endif
  99. endfunction
  100. " map vimGdb keys
  101. "call s:Toggle()

代码编辑神器VIM(附我写acm程序时的配置)(转)相关推荐

  1. emacs阅读linux代码,Emacs - 代码编辑神器之一

    Emacs是一款著名的集成开发环境和文本编辑器.Emacs被公认为是最受专业程序员喜爱的代码编辑器之一,另外一个和Emacs起名被大家熟知的代码编辑神器是vim. Emacs它的核心是Emacs Li ...

  2. 多功能mac代码编辑神器coderunner 4 比Xcode都强大

    coderunner 4是Mac平台上的一款轻量级多功能代码编辑神器.本站第一时间为大家带来 coderunner 全新升级版 coderunner 4,支持 23 种语言和.txt 文档制作,比Xc ...

  3. 代码编辑神器--VSCode

    代码编辑神器–VSCode VSCode 全称 Visual Studio Code,是微软出的一款轻量级代码编辑器,免费.开源而且功能强大.它支持几乎所有主流的程序语言的语法高亮.智能代码补全.自定 ...

  4. 【小题目】写JAVA程序时可以创建一个名为123.java的源文件吗

    在写JAVA程序时创建名为123.java的源文件,前提是该源文件中没有public修饰的类,因为一旦使用public修饰后类名必须与文件名相同,而类名为标识符,不能以数字开头.因此,在没有用publ ...

  5. 【debug】写应用程序时遇到的桌面图标、运行图标、背景图片问题

    摘要 记一次写程序时遇到的跟图片有关的编程.用python写程序时,跟图片有关的地方大致有以下三个: 桌面图标 运行图标 背景图片 所需模块说明 from io import BytesIO from ...

  6. Linux之Vim文本代码编辑神器应用get技巧

    作为一名IT运维人员,在工作闲暇之际会研究一些与工作运维有关的运维方法技能或技巧.我写这篇文章目的,纯粹出于对VIM编辑器的一知半解,或者说是在学习过程中形成的笔记. 熟悉Linux的同行们都清楚一件 ...

  7. 编辑神器VIM下安装zencoding

    各大编辑器使用不如人意,notepad++,多人推荐,但zencoding使用太小家气.对我而言,其它的如ue启动太慢,等等原因. 不得不用神器: vim下载, http://www.vim.org/ ...

  8. linux保存编辑信息,linux系统编辑神器 -vim用法大全

    vim编辑器 文本编辑器,字处理器 ASCIInano, sed vi: Visual Interface vim: VI iMproved 全屏编辑器,模式化编辑器 vim模式: 编辑模式(命令模式 ...

  9. Sourcetail 一款代码编辑神器,让看源码如丝般顺滑

    大家好,我是小麦,上一次的文章<一个超级实用的源码阅读小技巧>,我简单提到通过gcc+egypt+graphviz(dot)这三个工具,快速生成函数调用图,总体来说也非常好用. 众所周知V ...

最新文章

  1. 错误信息:Microsoft 分布式事务处理协调器(MS DTC)已取消此分布式事务
  2. 探讨后端选型中不同语言及对应的Web框架
  3. python函数学习1
  4. iOS 6 的5个新特性创建杀手级应用
  5. 【安全牛学习笔记】缓冲区溢出
  6. python3带tkinter窗口的ftp服务器,并使用pyinstaller打包成exe
  7. fluent瞬态计算终止条件在哪里设置_基于商用软件FLUENT的LES(大涡模拟)计算教学...
  8. 网络爬虫学习(十二)
  9. 用于敏捷开发的免费 UML 工具 2022
  10. debian9 使用cups远程管理打印服务
  11. IDea更改主题和部分修改主题方法
  12. 计算机在智能制造专业中的应用,数控技术在智能制造中的应用及发展分析
  13. 请查收一封来自程序员的情书
  14. 如何在直播中解决黑屏、花屏、闪屏问题
  15. 抖音 Android 性能优化系列:启动优化实践
  16. 一辉Oo的视觉算法学习笔记2
  17. 1.微服务架构-什么是微服务
  18. python:HTTPX 库的快速开始
  19. 连快播王欣都要做区块链,蚂蚁金服为什么不碰ICO?
  20. MySQL攻略 -DAO和增删改查通用方法-BasicDAO的认知与实现、案例练习

热门文章

  1. Git 远程仓库分支管理
  2. Linux_NIS+NFS+Autofs
  3. centos7 ambari2.6.1.5+hdp2.6.4.0 大数据集群安装部署
  4. 使用css修改checkbox选择框的样式
  5. 缓存服务器syns to listen sockets drop导致创建socket失败
  6. asp.net 一次性提交大量数据,服务器会报错,要在 web.config 中设置一下
  7. RedisTemplate
  8. 五、MDT 2013 Update 1批量部署-WINDOWS 7样本机镜像部署
  9. 对采用rsync+inotify数据同步方式进行健康检测
  10. CMS:文章管理之模型和Store