不能不会的东西-------- VI/VIM

linux vim config .viminfo this config can help u to use vim conlfjlsdjfl 立即下载

一、VIM的历史

1976年左右Bill Joy开发了vi,他也是伯克利大学的毕业生,后来他跟其他人一起成立了Sun Microsystems公司并成为了Sun的首席科学家。一开始Bill开发了ex,尔后开发了vi作为ex的visual interface,也就是说vi允许一次能看到一屏的文本而非一行,vi也因此得名。

“早期,当键盘和视频终端成为最新的计算机交互手段时,人们开发了VI。那时候的键盘不具有目前熟悉的全部功能键,所以,VI就设计成只需要打字机的键盘加上退出键就能完成对文本的输入和修改(现在有的还接受一些其他的键输入方式,如光标控制键)。尽管看起来受了限制,不能充分利用现代键盘新增的许多键,可是‘祸中有福’,限制带来的好处是手指不离开打字区就能完成所有的编辑工作。”

技术不断进步,需求也在不断提高,VI的各种变种也不断涌现,知名的有nvi,elvis,VIM,vile,yzis,其中移植性最好、特性最多、使用最广的当属VIM,VIM主要是Bram Moolenaar开发的。最初Bram在Amiga计算机上改进一个叫Stevie的VI版本,他称之为“Vi IMitation”。随着功能的逐渐丰富,VIM的含义也就改成了“Vi IMproved”。相比原始的VI,VIM增加的一项最重要的功能便是多级撤销,VI只支持一级撤销。

[separator]

二、VI/VIM基础知识

  很多人应该都知道VI是个有模式的编辑器:编辑模式和命令模式,按ESC回到命令模式,用i或者a进入编辑模式,由于区分了模式,导致VI的命令非常简洁,而无模式编辑器比如Emacs,所有的命令都需要加上控制键Ctrl或Alt。

    VI继承了ed的理念,另外也有历史原因,VI追求的是快捷——启动程序迅速,编辑文本高效,功能专注,而Emacs追求的是功能的丰富强大以及集成带来的方便。

在VIM里头:help mode可以看到VIM的所有 模式,主要有如下几种:
  • Normal mode   即通常所谓的命令模式,在此模式使用a、i、A、I、o、O等进入Insert mode
  • Insert mode   即通常所谓的编辑模式,在此模式使用ESC进入Normal mode或者Ctrl-o临时进入Normal mode。
  • Command-line mode 命令行模式,在Normal mode下按冒号进入,按ESC取消执行命令或者回车执行命令,然后回到Normal mode。(Visual Studio.Net也添加了命令行脚本功能,幸甚)
  • Visual mode   即选择模式(注意跟用鼠标选择不同),用v,V,C-v或C-q进入
  • Select mode   鼠标选择
  • Replace mode   在Normal mode下按R进入,按ESC返回Normal mode,相当于Windows下命令行中按Insert键进入的覆盖模式

  从VI/VIM中退出:按ESC确认返回到Normal mode,然后

  • :wq 保存并退出
  • :q! 不保存并退出
  • :x 退出,如果文件更改则保存
  • ZZ 退出,如果文件更改则保存(按住Shift,再按两次z)

  VI的命令是非常具有美感的,下面是几个例子:

  • i 在光标前插入 I 在行首插入
  • a 在光标后插入 A 在行末插入
  • o 在下一行插入 O 在上一行插入
  • x 删除当前字符 X 删除前一个字符

  类似的还有b,B,ge,gE,w,W,e,E,f,F,t,T,这些命令都可以用:help cmdname查到帮助。

  • dd 删除一行 yy 拷贝一行
  • h j k l 左下上右移动光标
  • Ctrl-w h,Ctrl-w j,Ctrl-w k,Ctrl-w l 切换到左下上右窗口

  类似ed,VI/VIM的命令大多都可以带一个数字前缀或者一个数字范围,比如:

  • 5dd 从当前行开始删除5行
  • 5yy 从当前行开始拷贝5行
  • 1,3d 删除1至3行
  • 1,3y 拷贝1至3行 (.代表当前行,$代表最后一行)

  d<motion>,y<motion>,c<motion>,v<motion>分别代表删除/拷贝/修改/选择<motion>

  命令指定的范围,比如
  int main(void)
  {
  ......;
  }

  将光标放在{处,然后输入v%就可以把大括号中内容选定,然后按=就可以按照C语言格式缩排(:help =可以看到=命令的描述),%命令的作用是跳到匹配处,比如括号之间,C的宏指令#if #else #endif之间。

  int some_ugly_modifier and some_ugly_name (void)
  如果光标放在第一个s上,想删除到“(”为止,则输入dt(就可以了,t(的作用是跳到下一个
  "("前。

  dG可以从当前位置一直删除到文件末尾,因为G的作用是跳到文件最后一行。

  VIM的命令可以非常快捷的做到一些复杂的编辑操作。


  命令解释如下:

  • %       全文(“%”是“1,$”范围的缩写)
  • s       替换
  • /       搜索字符串开始
  • (       左括号
  • /)      开始记录匹配
  • /d+     一个或多个数字
  • /)      结束记录匹配
  • )       右括号
  • /       搜索字符串结束
  • /=      把后面的表达式计算出来作为替换字符串
  • "("     左括号
  • .       字符串连接运算符
  • (submatch(1) + 1)       把第一个匹配的结果加一作为一个整体返回
  • .")"    添上右括号
  • /g      替换字符串结束,g表示替换每一行的所有匹配结果。
  • :set ve=all 使得光标可以定位到屏幕任何位置(缺省下VIM的光标只能放在行内的字符上)
  • gg              到文件第一行
  • //s/+&/s*$      找以&结尾的行,&前至少一个空白字符,后0或多个空白字符
  • qa              记录宏到寄存器a
  • D               删除到行尾
  • 78|             定位到第78列
  • i&<ESC>         插入&并返回到命令模式
  • n               查找下一个&
  • q               停止记录宏
  • 10000@a         执行一万遍寄存器a中保存的命令
  • :set ve=""      恢复ve缺省值

三、编程辅助

  既然是程序员的编辑器,自然要show一下它的编程辅助功能。

  (1) ctags,cscope

  现在的IDE都提供了类、函数的索引功能,可以方便的找到某个类或者函数的在哪里定义的,VIM这方面可以利用ctags、cscope做到, Exuberant ctags支持的语言种类非常多,UltraEdit的tags功能也是利用的ctags。cscope只支持C,它能实现Source Insight的一些功能,比如查找某个函数调用了哪些函数,某个函数被哪些函数调用。VIM对这两个工具集成的非常好,利用它们就可以在源文件中方便的跳转搜索类和函数了。

  Reference:

  (2)multi window,multi buffer,multi tab page

  一个buffer对应一个文件,它可以对应多个window,这样可以方便的对照编辑一个文件的不同部分,tab page跟现在许多编辑器上常见的标签页意义并不一样,可以将tab page理解为一个windows的容器,这样如果想新建一个窗口编辑文件但又不想打乱现在的多窗口布局,那么就可以新开一个tab page,把新窗口放到这个新的tab page里头。tab page是VIM 7.0不久前新增的特性,目前VIM 7.0还未正式发布。(此文发表至PConline时,已经正式发布。)

  •   Reference:
  •   :help windows
  •   :help buffers
  •   :help tabpage

  (3) 语法高亮

  VIM发行版里带了450多种语言的语法高亮,在其主页vim.org上还可以找到更多。

  •   Reference:
  •   :help syntax

  (4) 自动缩进

  在打开自动缩进选项后,VIM会自动的控制缩进,比如输入{自动向右缩进一个tab字符(具体用什么缩进可以配置),输入}自动回退缩进。使用=命令可以对选择的程序块排版缩进,这对于整理代码非常有帮助。另外对选择的块用>>和<<命令可以很方便的控制一个程序块的缩进。

  •   Reference:
  •   :help cindent
  •   :help autoindent
  •   :help smartindent

  (5) 类和函数列表

  taglist等插件可以提供很方便的类和函数列表功能。

  (6) 自动完成

  VIM在Insert mode下输入一个单词的前几个字符,然后用Ctrl-p或者Ctrl-n就可以列出以这些字符开头的单词,特别在配置了ctags后也能列出头文件中的符号,特别方便,除此外VIM还有行自动完成、文件名自动完成等,这点即使是现在强大的IDE也未免不足。

  如果设置了如下选项:

  •   :set wildmode=list:full
  •   :set wildmenu

  则在命令行打开文件或者输入命令时按Tab(以输入字符为前缀补全)或者Ctrl-d(列出包含输入字符的所有匹配项目)自动补全,这一功能大大降低了VIM的使用难度。

  另外有许多插件可以实现许多IDE中的自动完成类成员的功能,当然,这个功能还比不上Eclispe、Visual Studio等IDE中的强大,这一点是VIM比较可惜的地方。VIM 7.0引入了Omni Completion,可以自定义匹配完成函数,也许可以弥补这个缺陷。

  •   Reference: :help 'complete'
  •   :help omni-completion

  (7) folding

  VIM支持折叠代码,还可以根据文件中特殊的标记对文件中的行折叠,可以实现Outline视图,这可以极大的方便编辑很大的文件。

  Reference: :help fold

  (8) quickfix

  许多人对于UNIX开发的印象都是“编辑代码,退出编辑器,编译,发现错误,记录出错信息,遍辑代码,退出编辑器,编译,用gdb调试,再编辑代码……”,这是古老的VI时代的事情了,有了VIM的quickfix特性,可以在VIM里编译然后直接跳到编译出错的行,这个反复的过程无需退出编辑器,而且VIM的quickfix特性可以经配置后支持不同的编译器以及不同的语言:只要编译器在出错信息里包含文件名和行号。

  不过比较遗憾的是VIM对于集成调试支持还不好,有些项目尝试集成GDB到VIM,比如http://skawina.eu.org/mikolaj/vimgdb/和http://www.volny.cz/zellerin/gdbvim/,在http://www.vim.org/search.php中的scripts处搜索gdb也可以找到一些插件.这方面Emacs的GUD(Grand Unified Debugger)调试界面要更强大,毕竟GCC/GDB/Emacs是一家。

  Reference: :help quickfix

  (9)auto command

  VIM可以在某些事件发生时比如打开文件、保存文件、切换窗口时自动执行一些VIM命令,VIM的许多插件都利用了这个功能。常用的一种情况是把某种文件后缀指定到一种文件格式上,比如*.jv指定到Java文件格式,这样在每次打开.jv类型的文件时自动使用Java的语法高亮:

  :autocmd BufNewFile, BufRead *.jv :set ft=Java

  Reference: :help autocmd.txt

  (10)mode line

  在编辑文件时常常指定一些选项,比如缩进量、是否将制表符转换成空格等,每次手动指定这些选项很麻烦,写到vimrc中却又成了全局选项,而且换了一份 VIM,原有的设置就丢失了。VIM可以识别文件中的特殊行,自动设置一些选项,下面是写在C源文件开头的一个mode line示例:

  • /* vi:set tw=0 ts=8 sw=8 noet nowrap ft=c fdm=syntax: */
  • /*
  • * File: xxxx.c
  • * Author: xxx
  • */

 


四、强大方便的帮助系统

  使用了那么多软件,只有VIM和Emacs的帮助系统给笔者方便快捷的感觉,大部分软件的帮助往往是摆设而已,而VIM的帮助的确是考虑到了自己“help”的身份,利用它能很方便容易的找到想要的东西。

  VIM的帮助是超链接形式的,它使用的就是tags,所以可以跟ctags功能一样按Ctrl-]跳转到链接所指处,按Ctrl-t返回。

  • :help   打开帮助首页,这个首页分类非常清楚
  • :help cmd 查找normal mode命令,比如:help dd
  • :help i_cmd 查找insert mode命令,比如:help i_Ctrl-y
  • :help :cmd 查找command-line命令,比如:help :s
  • :help 'option 查找选项,比如:help 'tabstop
如果你记不清命令或者选项的全称,那么可以利用Tab或者Ctrl-d的自动补全功能。

  :help options 可以找到所有的选项说明

  查看某一个选项的值(实际上选项是VIM中的一种变量,类似SHELL的变量以$符号引用,VIM的选项以&引用,另外VIM的寄存器以@引用):

  :echo &tabstop

五、其它高级功能

  (1)寄存器

  VIM里面的寄存器可以用来保存拷贝的文本、记录的宏、设置的书签等等,一般的编辑器都只有一个剪切板(MS Office加入了多个剪切板),而VIM和Emacs编辑器中的多寄存器可以实现多个剪切板的功能。VIM中有九类寄存器:

  • 无名寄存器 " 最近一次删除/修改/替换操作的文本都会放入这个寄存器
  • 10个数字寄存器 0-9 拷贝或者删除的文本存入这些寄存器,这些寄存器是循环使用的,在每次存入内容到寄存器1时,原有的内容会依次存入到后一个寄存器中。
  • 小删除寄存器 - 删除内容少于一行时放入这个寄存器。
  • 26个命名寄存器 a-zA-Z 大小写无关。这些寄存器可以在拷贝或者删除等操作中指定使用。
  • 四个只读寄存器 :.%# 特殊用途。
  • 表达式寄存器 = 特殊用途。
  • 选择和拖放寄存器 *+~ 用于与系统剪切板交互,以及接收拖放操作的内容。
  • 黑洞寄存器 _ 放到这里面的内容都被丢弃,这样可以删除或拷贝时不影响其它寄存器。
  • 最后一次搜索模式寄存器 / 保存最后一次搜索的正则表达式。

  使用:reg命令可以看到所有寄存器中的内容,使用"+y或者"*y可以将visual mode下选择
  的内容拷贝到系统剪切板,使用"+p或者"*p可以将剪切板中的内容粘贴到VIM中,如果打开了
  mswin特性的话则在insert mode下使用Ctrl-x,Ctrl-v,Ctrl-c了。

  Reference: :help registers

  (2) 宏
  Normal mode下按q<reg>,<reg>指{a-zA-Z0-9"}37个寄存器中的一个,然后可以进行任何操作,包括在模式间切换,最后在Normal模式下按q可以结束宏录制,用@<reg>命令可以应用这个宏,命令前可以带数字前缀表示执行多少次这个宏。

  Reference: :help q

  (3) 书签

  Normal mode下按m<reg>作书签,<reg>指26个命名寄存器中的一个,然后可以用'<reg>或者`<reg>跳到书签处。

  Reference: :help m

  (4) 映射

  VI/VIM可以将某个按键序列映射到一个命令序列上,比如在配置文件.vimrc(Windows下是_vimrc)中写入

map <F6> <ESC>i<C-R>=strftime("%Y-%m-%d")<ESC><ESC>

  即可以在Normal mode下插入当前日期。

  Reference: :help :map

  (5) 缩写

  VI/VIM支持用一个缩写字符串代替一个长的字符串,比如

  :ab hw hello world

  然后在Insert mode下输入“hw ”(不包括引号)后VIM就自动替换成了“hello world”。这里展示一个Emacs下abbrev功能的动画(没错,是Emacs的):

  http://www.bloomington.in.us/~brutt/msf-abbrev.html
  http://www.bloomington.in.us/~brutt/msf-abbrev-demo.gif

  Reference: :help :ab

  (6) :s//和:g//,:!g//

  这两个命名加上正则表达式,常常能完成非常复杂的编辑任务,可以毫不夸张地说是VIM的两柄瑞士军刀。:s是替换操作,:g是查找匹配模式的行,:!g是查找不匹配模式的行。

  http://www.vim.org/tips/tip.php?tip_id=1063这个tip可以把:g找到的行拷贝到一个新的缓冲区中,非常有用。

  •   Reference: :help :s
  •   :help :g

  (7) 插件

  VIM自己有脚本语言,另外也支持用Perl/Python/Tcl/Ruby/Scheme编写插件,这些插件极大的丰富了VIM的功能。

  (8) color scheme

  VIM有许多配色方案,下面这个链接有许多配色方案效果的图样:http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/

  (9) 二进制编辑

  VIM可以利用xxd实现二进制编辑,不过这项功能还是不够好用。

  (10) sign

  sign指在编辑窗口的最左列显示一个标记,利用这个功能能实现很多IDE中的书签标记或者断点标记。

  Reference: :help sign

六、VIM Scripts

  VIM script包含几大类:

  •   color scheme 配色方案
  •   ftplugin File type插件,特定语言语法的设置,比如如何识别注释
  •   syntax   语法高亮的配色
  •   plugin   提供额外功能的插件,比如智能完成、缓冲区管理。

  VIM的script安装非常简单,下载的script文件或者压缩包里头都有安装说明,在VIM的安装目录(比如C:/VIM64)下面有一个 vimfiles目录,把script放到vimfiles目录下即可。对于多用户系统,可以在HOME目录(一般是c:/Documents and Settings<USER_NAME>/)下面建立一个vimfiles目录,把script放置到这里。

  下面是一些好用的VIM插件,具体使用办法请参考各自。vim文件头部的注释。

  BufExplorer.vim   *****
  http://www.vim.org/scripts/script.php?script_id=42
  这个插件可以使编辑多文件更加方便,装完插件后Normal mode下输入/be即可打开缓冲区列表,光标放置在某一个文件上按回车即可打开这个文件,而缓冲区列表自动关闭。

  Taglist.vim   *****
  http://www.vim.org/scripts/script.php?script_id=273
  这个插件可以实现类或者函数列表功能,支持C/C++,java,perl,python,tcl,sql,php等语言,它可以在VIM中创建一个窗口,列出编辑的源文件中的类、函数、变量定义列表,而且更方便的是这个列表也插入在了右键菜单中,分类存放,访问非常方便。

  TabBar.vim   ***
  http://www.vim.org/scripts/script.php?script_id=1338
  这个插件实现了类似UltraEdit中的标签页的功能,而且能通过Alt-<n>来切换,<n>代表1-9。

  minibufexpl.vim   ***
  http://www.vim.org/scripts/script.php?script_id=159
  实现了类似UltraEdit中的标签也功能。

  c.vim    ***
  http://www.vim.org/scripts/script.php?script_id=213
  提供了很多便于C/C++编程的功能,比如文件头模版,代码片断等。

  CRefVim    **
  http://www.vim.org/scripts/script.php?script_id=614
  为VIM定制的C参考手册,这样对于语法或者函数不清楚的地方可以方便的查找了。

  latex-suite   *****
  http://www.vim.org/scripts/script.php?script_id=475
  http://vim-latex.sf.net/
  提供了很多便于编辑TeX/LaTeX文件的功能,比如在VIM里面编译或者预览、自动插入TeX标记等。

  word_complete.vim ***
  http://www.vim.org/scripts/script.php?script_id=73
  Insert模式下在输入的时候自动补全单词,如果补全正确可以按Tab键接受,否则可以不管它继续输入或者按Ctrl-n,Ctrl-p切换补全。注意是输入三个字符后才开始补全。

  Vim JDE
  http://www.vim.org/scripts/script.php?script_id=1213
  支持C/C++等的自动完成(需要VIM 7.0,编译时打开+ruby特性).

  cppcomplete.vim   **
  http://www.vim.org/scripts/script.php?script_id=527
  能自动完成C/C++/Java的结构或类成员,注意它的快捷键是Alt-l(字母L)不是Alt-i。

  The NEAD Commenter **
  http://www.vim.org/scripts/script.php?script_id=1218
  在许多类型的文件中方便的加上注释或者取消注释。

  winmanager
  http://www.vim.org/scripts/script.php?script_id=95
  把标准的File Explorer以及Buffer Explorer插件集成在一起,提供现代编辑器中常见的文件列表和缓冲区列表功能。

  sketch.vim ***
  http://www.vim.org/scripts/script.php?script_id=705
  Draw with mouse: boxes, arrows, lines, fills. Transparent/opaque drag and drop.照着它的教程做一遍,你就会震撼于它的创意了。

  DrawIt.vim **
  http://www.vim.org/scripts/script.php?script_id=40
  可以方便的画连线图。

  MultipleSearch   ***
  http://www.vim.org/scripts/script.php?script_id=479
  MultipleSearch2.vim ***
  http://www.vim.org/scripts/script.php?script_id=1183
  Mark.vim   ***
  http://www.vim.org/scripts/script.php?script_id=1238
  otf.vim    **
  http://www.vim.org/scripts/script.php?script_id=634
  这些插件可以同时高亮显示多次搜索结果,这个特性非常有利于显示代码中某些变量或函数的调用位置。

  SearchComplete.vim *
  http://www.vim.org/scripts/script.php?script_id=474
  可以用/搜索时按Tab补全要搜索的单词。

  Vim Intellisense
  http://insenvim.sourceforge.net
  顾名思义,此插件用于给VIM提供智能完成功能,支持C++,C#,Java,JSP,HTML,SQL,XML,笔者安装后一直懒得配置,也就没用上。

  project
  http://www.vim.org/scripts/script.php?script_id=69
  提供一些IDE功能,看介绍似乎很不错。

  JavaBrower
  http://www.vim.org/scripts/script.php?script_id=588
  提供文件中Java类的树状列表。

  vimspell
  http://www.vim.org/scripts/script.php?script_id=465
  ispell or aspell based spell checker with fly-spelling。

  cream
  http://cream.sourceforge.net/
  一套配置文件,可以把VIM的界面改成CUA(Common User Access)模型,降低VIM的学习难度,个人不推荐这种做法,不过其中有些高级配置值得学习(有意思的是Emacs也有类似的项目: Easymacs,EmacsW32)。

  IComplete
  http://icomplete.sf.net
  搭配VIM 7.0的Omni Complete,可以做到C/C++的智能完成功能.

七、VIM资源

  几个学习正则表达式的工具(from happyvim at newsmth)

  http://www.yzis.org/   yzis是一个新的VI变种,它支持变宽字体,目前功能还不够丰富。

  http://ex-vi.sourceforge.net/ 传统VI的源代码

八、编译安装最新CVS版的VIM

  1. 获取源代码

  cvs -z3 -d:pserver:anonymous@cvs.sf.net:/cvsroot/vim co vim7

  源代码位于当前目录的vim7目录下面,假设安装目标在d:/work/program/Vim/vim70b

  2.编译

  注意重新编译前最好clean一下,确保“*obj*”目录被删除了,否则可能出现莫名其妙的问题,比如链接时找不到一些函数。下面是一个批处理脚本:

  rem --------------------------------------------->
  @echo off
  set path=c:/winnt;c:/winnt/system32
  vcvars32.bat
  cd vim7/src
  rem .sh文件跟其它程序有关联,避免运行VC的link时执行了link.sh
  ren link.sh link.sh.old
  @echo clean...
  rem clean时加入这些选项是因为$(OUTDIR)和$(OBJDIR)根据这些标志合成的,
  rem 如果不加这些标志, 在rmdir /s /q时会找不到目录, 从而没有删除掉。
  nmake -f Make_mvc.mak clean FEATURES=HUGE GUI=yes OLE=yes MBYTE=yes IME=yes GDYNAMIC_IME=yes GIME=yes PERL=d:/work/program/Perl DYNAMIC_PERL=yes PERL_VER=58 PYTHON=d:/work/program/Python24 DYNAMIC_PYTHON=yes PYTHON_VER=24 SNIFF=yes CSCOPE=yes CPUNU=i586 DEBUG=yes MAP=lines
  @echo build big debug version...
  nmake -f Make_mvc.mak all FEATURES=HUGE GUI=yes OLE=yes MBYTE=yes IME=yes GDYNAMIC_IME=yes GIME=yes PERL=d:/work/program/Perl DYNAMIC_PERL=yes PERL_VER=58 PYTHON=d:/work/program/Python24 DYNAMIC_PYTHON=yes PYTHON_VER=24 SNIFF=yes CSCOPE=yes CPUNU=i586 DEBUG=yes MAP=lines
  ren link.sh.old link.sh
  @echo done.
  pause
  @echo on
  rem <-----------------------------------------------

  对于MinGW,

  @echo off
  @echo clean...
  make -f Make_ming.mak clean DEBUG=yes
  @echo make...
  make -f Make_ming.mak all GUI=yes OLE=yes MBYTE=yes IME=yes GDYNAMIC_IME=yes GIME=yes PERL=d:/work/program/Perl DYNAMIC_PERL=yes PERL_VER=58 PYTHON=d:/work/program/Python24 DYNAMIC_PYTHON=yes PYTHON_VER=24 CSCOPE=yes CPUNU=i586 DEBUG=yes MAP=lines
  @echo done.
  pause
  @echo on

  如果发现MinGW编译出来的gvimd.exe非常大(约4~5MB),可以用MinGW自带的strip处理一下。

  3. 安装

  如果你的系统先前有一份不同版本的VIM,那么需要先卸载掉(运行vim/vimXX/uninstal.exe,或者在拷贝完文件后运行新版VIM的 install.exe,它也会提示卸载旧版本),最近的VIM 7 CVS代码安装目录也从vim70aa转变到vim70b,也需要卸载原先的vim70aa,这一步主要是删除一些注册表项。

  如果你从CVS上更新代码后,install要求的安装目录名字没有改变(也就是说VIM版本没变),那么不需要卸载原先的版本,直接拷贝文件覆盖即可,如果你想更改目录安装的话也需要卸载。

  cd vim7
  dir /s/b *.exe
  dir /s/b *.dll
  xcopy vim7/runtime d:/work/program/vim/vim70b (vim70b是一个目录)
  copy vim7/src/*.exe d:/work/program/Vim/vim70b
  copy vim7/src/xxd/xxd.exe d:/work/program/Vim/vim70b
  copy vim7/src/vimtbar.dll d:/work/program/Vim/vim70b
  copy vim7/src/GvimExt/gvimext.dll d:/work/program/Vim/vim70b
  copy vim7/src/VisVim/Visvim.dll d:/work/program/Vim/vim70b

  然后进入vim70b目录运行install.exe,如果发现一个DOS窗口一闪而逝,那么很可能是建立的vim70b目录名不对,比如笔者前几天升级后使用的仍然是vim70aa目录名,在DOS窗口中运行install.exe它就提示需要在vim70b目录下运行,将vim70aa改名即可。 install.exe的源代码是vim7/src/dosinst.c,这里面修改了注册表,并拷贝一些文件到WINDOWS目录下等等。

  4.善后

  视情况你需要更新PATH环境变量、文件关联、_vimrc中的路径名等,并将diff.exe,ctags.exe,cscope.exe拷贝到vim70b下面。

  最后运行gvimd.exe,键入:ver开始享受VIM吧。

九、一份vimrc配置文件(注:原文如此,不太清楚作者所要表达的信息)

十、VIM的不足

  前面已经提到,VIM在自动完成和集成调试方面还比不上现代的许多IDE,另外VIM对二进制编辑还没有UltraEdit强大,对于现在流行的重构, VIM也支持不力,但是作为一个文本编辑器而言,堪比的只有Emacs,另外Visual SlickEdit也很强大,不过它是商业软件。VIM也可以嵌入到Visual Studio中作为编辑器,另外Code Forge,Eclipse,NetBeans,Sun Visual Workshop等也提供了一定的VIM支持或者键绑定。

  •   Reference:
  •   :help workshop
  •   :help netbeans
  •   :help debugger

机器学习的学习准则(期望风险最小化、经验风险最小化、结构风险最小化) 要评价模型f(x, θ)的好坏,可通过期望风险R(θ)来衡量:求期望损失R(θ)不仅需要知道损失函数还需要知道真实分布,损失函数可以通过一定的准则计算得到,但是样本空间的真实分布是未知的。所以不能直接求R(θ)。期望风险R(θ)无法计算,给定一个训练集D =,我们可以计算经验风险,经验风险就是在训练集上的平均损失:为了解决过拟合问题,引入了参数正则化来限制模型的能力。使其不要过度的最小化经验风险。这种准则就是结构风险最小化准则 阅读详情

相关推荐

EPSON RX8010SJ RTC实战:I2C寄存器配置避坑指南(附完整初始化代码)

本文详细解析了EPSON RX8010SJ RTC芯片在I2C寄存器配置中的常见问题与解决方案,包括TEST位、STOP位和中断控制等关键配置要点。通过实战经验分享和完整的初始化代码模板,帮助开发者避免常见陷阱,确保RTC模块的稳定运行。

weixin_28678831的博客 407

.viminfo文件

.viminfo 文件的主要作用。b、作用、内容及定制行为。

m0_59091453的博客 1711

Impala>Impala安装部署

文章目录1.安装前提2.下载安装包、依赖包3.虚拟机新增磁盘(可选)4.配置本地yum源5.安装Impala6.修改Hadoop、Hive配置7.修改impala配置8.启动、关闭impala服务 1.安装前提 集群提前安装好hadoop,hive。 hive安装包scp在所有需要安装impala的节点上,因为impala需要引用hive的依赖包。 hadoop框架需要支持C程序访问接口,查看下...

qq_44509920的博客 838

viminfo了解

在编辑文件之后退出时,vi(vim)提示”Can’t write viminfo file”错误,了解一下viminfo文件:信息文件 viminfo 被设计为储存状态信息:命令行和模式搜索的历史记录寄存器内文本各种文件的标记缓...

congsikuai0611的博客 641

手把手教你用MATLAB/Simulink模拟微电网潮流方向(附代码下载)

本文提供了一份详细的MATLAB/Simulink微电网潮流仿真实战指南。通过手把手教学,指导读者从零搭建包含光伏、储能和负荷的微电网模型,并模拟并网、孤岛等多种运行场景下的潮流方向变化。文章核心在于利用Simulink实现微电网的动态潮流分析与可视化,帮助工程师深入理解分布式能源系统中的功率平衡与控制策略。

weixin_28314575的博客 108

UDF学习(二)基础数据类型与常见宏

thread_loop_c (t,d) 必须与begin_c_loop (c,t)同时使用,但begin_c_loop (c,t)不一定与thread_loop_c (t,d)同时使用。同理thread_loop_f(t,d)必须与begin_f_loop (c,t)同时使用,但begin_f_loop (c,t)不一定与thread_loop_f(t,d)同时使用。begin_c_loop (c,t) 在计算域内对网格单元进行循环。c_face_loop (c,t)遍历网格单元上的所有网格面。

weixin_44386973的博客 857

vim使用(三):.viminfo和.vimrc

1. viminfo 在vim中操作的行为,vim会自动记录下来,保存在 ~/.viminfo 文件中。 这样为了方便下次处理, 如:vim打开文件时,光标会自动在上次离开的位置显示。 原来搜索过的字符串,新打开文件时自动高亮显示。 vimrc文件是vim的环境设置文件。 整体的vim的设置是在 /etc/vimrc 文件中。

yonggang7的专栏 3万+

Unreal5从入门到精通之如何在VR中使用3DUI

前面我们讲过《Unreal5从入门到精通之UMG的使用》一般制作游戏时,UI都是添加到屏幕视窗上面的,但是在制作VR时,我们往往需要制作一个3D的UI,放置在场景中,然后使用手柄的射线来和UI进行交互。今天我们就来讲解下,如何在VR中创作和交互3DUI首次操作会感觉好复杂,多多练习,当你熟悉了UE蓝图的操作后会发现,这只是一个常规的蓝图操作而已。祝大家在虚幻的学习过程中非常顺利。希望这篇博客对你有所帮助。

TxNet 1986

回归结对编程

当被问及提高代码质量的最好方法时,我一般回答是:代码审查。代码审查是最佳的减少 bug 的方法。但我更喜欢的是 —— 结对编程。        我这一生中,很少进行结对编程,当然非正式的除外(例如和别人一起解决bug)。在 Typemock 工作的时候,我大部分时间都在改 bug,没有特定的做法,也没有人指导应该怎么合作,仅仅是随意地和不同的人解决不同的问题。

HTML5中国的专栏 386

2021-10-29【微生物】丨基于qiime2工具16S/ITS分析全套流程(上)

目录摘要工具与方法使用命令结果展示总结二级目录三级目录 摘要 前两个月项目特别多,最近终于有机会闲下来写点文章,把之前搭建的流程梳理一遍。前同事分析16S/ITS使用的qiime1,我接手后感觉不太适应,希望能够使用新版本来搭建,于是花了几天时间重新搭了这个流程, 工具与方法 使用工具:qiime2 使用版本:qiime2-2021.4 参考文档:https://docs.qiime2.org/2021.4/(最新版本2021.8) 使用命令 在这里插入代码片 结果展示 总结 二级目录 三级目录 ...

1万+

基于SOLIDWORKS API的工业级插件开发指南

SOLIDWORKS API是基于COM技术的一套开发接口,支持C#、VB.NET等语言,用于自动化建模、属性管理、界面定制等功能。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 2751

有关viminfo的设置

viminfo设置位置

WhoisPo的专栏 776

企业微信第三方应用014_企业微信5种第三方应用的安装方式_上架到应用市场_服务商后台点击安装测试_生成应用推广二维码安装---企业微信开发016

成员授权的意思就是,只要是这个成员扫码安装了这个应用,那么这个应用就只有这个成员可以用。安装的时候可以设置可见范围,这个地方可以设置整个公司或者是某个部门或者是某些人可以让这个应用来进行操作。创建了以后,这个二维码就可以发出来进行推广别人用户扫描了以后就可以把自己的企业微信给安装上对应的应用了。然后在对应的这个微信的企业后台就可以看到在第三方中有这个应用了。可以看到这个就是服务商的后台对应的一个应用,我们点击打开应用。可以看到这里有两个授权,一个是成员授权,一个是管理员授权。就可以去创建推广二维码了。

添柴程序猿的专栏 592

vi/vim

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

Zero426的博客 1274

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

vim vi 粘贴出现多余的东西,换行等等

vim 粘贴出现多余的东西 https://www.cnblogs.com/mylinux/p/5549184.html 在拷贝前输入:set paste (这样的话,vim就不会启动自动缩进,而只是纯拷贝粘贴) 拷贝完成之后,输入:set nopaste (关闭paste) 替换文字 指令 说明 :s/searchStr/replaceStr/g 替换当前行中的所有 se...

学习笔记 2824

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ubuntu没有vim包怎么办/.vi命令不能使用怎么办,vi命令相关的包被删除了怎么办

sudo命令要密码,只要在后面输入登陆系统的密码就可以了,【@@不会显示你输入了什么东西@@】输入密码后回车即可 1安装vim的命令 sudo apt install vim 使用这个命令是下载gcc的命令----这个命令系统会自动去匹配与系统最适应的vim版本 …… 结果 内心奔溃,优快云里,百度,看到的都是标题党在作祟 正在读取软件包列表… 完成 正在分析软件包的依赖关系树 正在读取...

qq_43625764的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Linux 中 vi/vim 的使用

vi / vim 的使用方法,常用命令

PeiFengTuNan_的博客 514

yum vi/vim -- Linux

yum--Linux 软件包管理器 好用的插件 lrzsz &&epel-release Linux开发工具 vi/vim理论 vi/vim快捷键 命令模式命令 快捷键 vim末行模式命令集 简单vim配置

原来45的博客 1009

【运维】vi 和 vim 的区别

vi/ vim 所有的Unix Like系统都会内建vi文书编辑器,其他的文书编辑器不一定会存在。但我们目前使用vim比较多。 vim具有程序编辑能力,可以主动以字体颜色辨别语法的正确性,方便程序设计。 什么是vim? vim是从vi发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的的功能特别丰富。 简单来说,vi是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vi...

杨幂等 5611

vi 不能写入 转换失败

vi 不能写入 转换失败 Q: 1)通常在非中文编码方式的文本中输入中文后,vi不能保存文件.错误信息如下: test.txt" 不能写入 -- 转换失败 请按 ENTER 或其它命令继续 2)而且删除中文字符时,总是半个半个的删除,过长的行还会显示乱码. A: 在用户的home目录下的.vim或.exrc文件中,加入set encoding=cp936或set encoding

xge的专栏 3360

【Linux】vi/vim的使用

vi/vim这个代码编辑器得到很多Linux程序猿的推送,自Linux/Unix出现以来,一直得到部分程序猿的推送。如果你用惯各类IDE,或者windows下的编辑器,将会非常不习惯这个东东,然而你也必须要懂,因为遇到一些无图形界面的服务器,你不得不利用vi/vim去编辑Linux的部分文件,下面说说vi/vim的使用。 首先呢,如果这个Linux有图形界面,比如Ubuntu12.04,按Ctr

编程记录,亲测有效 5344

vi/vim使用命令

你是否在编辑文件时以为键盘坏了,为什么不能删除呢,为什么不能敲代码呢,等你初识vi,会觉得这个东西为什么设计得这么难用,这篇教程带你熟练得用上这款经典的工具Vi 是在 Unix 系统上广泛使用的编辑器,Vim 是 Vi 的改进版本,由 Bram Moolenaar 在 1991 年发布,Vim兼容vi命令,现在很多系统将vi符号链接到Vim,所以使用vi命令其实还是用的Vim。

weixin_62799021的博客 1478

ubuntu vi, vim 编辑器的使用

昨天尝试在ubuntu11.10(注意,这个系统没有装vim,以前都是直接都装的,这个版本只装了vi)上安装android的开发环境,开始安装jdk就遇到了很多困难,安装jdk总是安装不成功,后来一看系统才发现,我装的是64位的ubuntu的系统,去官方下载64的bin和rpm包,又尝试安装,但是还是有错误,实在没办法了。就先更新了下系统,有400多个更新。 然后按照网上一篇帖子开始安装,还真安

学习记录 3169

《Linux从小白到高手》理论篇:vi/vim编辑器和Linux文件处理“三剑客”(sed/grep/awk)

本篇介绍vi/vim编辑器和Linux文件处理“三剑客”(sed/grep/awk),这5个工具命令可能是Linux最最常用的,而且功能超级强大。

qq_45732829的博客 1495

vi 删除一行_vi/vim 命令整理

作者:千珏邮箱:wl625363199@gmail.com公众号:千珏标题:vi/vim 命令整理(转载请标明出处)hello,各位观众老爷们大家好,我发现一天一更设计模式确实有点困难,所以决定2-3天一更设计模式,不更的时候就会在我的公众号里面更新一些别的技术相关的东西,可能是工具的使用,新技术的讲解等(不确定,想写啥就写啥).关于vim经常玩linux的人应该很清楚,是一个非常强大的...

weixin_39556891的博客 1441

一文彻底解决vi/vim编辑器操作

vi/vim从配置到基础操作到高级操作,一文彻底解决

闪耀大叔的博客 1359
上一篇: verilog语法学习心得
下一篇: 我的Gvim配置
study16
博客等级 码龄18年 18粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值