Vim使用指南

Vim是一款简单而强大的文本编辑器,它能以简单的方式完成复杂的操作。Vim(http://www.vim.org/)是一款开源软件,提供 Windows, Linux和MacOS上的多平台的版本。MacOS上的Vim称为MacVim(http://code.google.com/p/macvim /)。

  最近开始迷上Vim,喜欢它的操作模式,更喜欢它花花绿绿的样子。下面分享一下自己的学习体会吧。

一.模式

  Vim与其他文本编辑器最大的不同是模式的概念,Vim定义了三种模式:normal, insert以及visual。Vim利用不同模式的划分,不同的操作隶属于不同的模式,也就是说某种操作只能在某个模式下发生,这样在某种程度上简化了 操作。模式的概念对于刚接触Vim的人来说可能有些不适应,不过一旦熟悉之后,我保证你会喜欢上它,渐渐的你会成为Vimmer。下面看一下这三种模式的 具体定义:

  • Normal mode:Vim的缺省模式,在该模式下运行命令。
  • Insert mode:在该模式下插入/写文本。
  • Visual mode:在该模式下可以选择一块文本区域,并对该区域内的文本执行命令或编辑操作。

  不同模式间的切换非常简单。从Normal到Insert只需按i或I,而从回到Normal只需按<Esc>。从Normal到 Visual只需按v或V,而回到Normal也只需要按<Esc>。当然Vim还提供的更多的模式间切换的方式,见下图,图片来自《A Byte of Vim》(http://www.swaroopch.com/notes/Vim)。

Vim使用指南_第1张图片

二.丢掉鼠标——移动光标

  在Vim上工作你可以完全抛弃鼠标,只用键盘就可以完成全部工作,因为Vim提供了一种多种利用键盘移动光标的方式。下面来看看其中的几种。这部分涉及的操作在Normal模式下完成。

  • 左下上右:分别对应h,jk,l。如果你想一次移动多步,只需在相应命令前加上数字即可,如2h向左移动两步。
  • 开头与结尾:按G跳到最后一行,按1G跳到第一行。在前面加上数字则跳转到相应的行,如50G跳到第50行。

酷不酷?下面还有更酷的!

  • 跳转到下一个词:按w,如果想返回刚才的位置只需按b。和前面类似,若想移动多个词只需指定数字前缀即可。
  • 跳转到下一句:按),按(返回刚才的位置。
  • 跳转到下一段:按},类似的按{返回前一次的位置。
  • 跳来跳去: ctrl-o跳回前一次的位置, ctrl-i跳向下一次的位置。
  • 标记位置:使用ma将一段文本中某个位置标记为a,按'a跳到该位置所在的行,按`a跳到标记a所在的具体位置。可以使用的位置标记有a-zA-Z,共52个。

三.学会help

  Vim中的操作及命令有很多,不可能全都几下来,这是我们就要求助于Vim内置的:help了,如:help various-motions 。或者你去google或stackoverflow提问。

参考资料:

1.http://www.vim.org/

2.http://www.swaroopch.com/notes/Vim

3.http://code.google.com/p/macvim/


在Vim初探(一)中介绍了Vim中模式的概念,以及如何在Vim中以多种方式移动光标。在本节中将介绍拷贝、剪切及黏贴,Undo/Redo,以及搜索的操作。闲话少说,我们开始吧!

一.拷贝、剪切及黏贴

  拷贝(Copy)、剪切(Cut)及黏贴(Paste) 是我们在做文本编辑时最常用的操作。Vim中也有相应的操作,只不过在Vim中它们的命名方式有所变化:Vim将cut称为delete,将copy称为 yank,将paste仍称为paste。在用Vim编辑文本时Vim会在内存中开辟一块缓存将文本放入其中,所有对文本的编辑都将写入这块缓存中直至使 用:write或:w保存编辑状态才将保存的结果写入硬盘。在进行剪切操作时,Vim将文本从缓存中"删除"(delete)并将其存入寄存器。在进行拷 贝操作时,Vim从缓存中“拉出”(yank)相应的文本并将其存入寄存器中。

  在Normal模式下Vim中剪切(delete),拷贝(yank)及黏贴(Paste)操作的相应命令为:d, y, p。在Vim中你可以将剪切和拷贝的操作分别应用于一个字符,一个词,一行文本,以及一段文本。相应的命令分别为:

操作对象  |  剪切 |   拷贝

----------|-------|----------

一个字符  |  dl    |   yl       (注意是小写字母L,而不是数字1)

----------|-------|-----------

一个词     |  dw  |    yw

----------|-------|-----------

一行文本  |  dd   |    yy

----------|-------|-----------

一段文本  |  dap |   yap

----------|-------|----------

  例如若要剪切某个词并将其黏贴到另一个位置,只需将光标移动到该词,按下dw,然后将光标移动到需要黏贴的位置并按下p。同时在黏贴时Vim提供两种方式:

p(小写)    黏贴在当前光标位置之后

P(大写)    黏贴在当前光标位置之前

二.Undo/Redo

  与拷贝,剪切和黏贴类似,Undo/Redo也是我们在编辑文本时常用的操作。在Vim中按u进行Undo操作,按ctrl-r进行Redo操 作  。非常简单!理论上在Vim中可以进行无限层级的Undo/Redo操作。同时Vim提供了一些高级的Undo/Redo操作,即earlier和 later命令。例如我想回到四分钟以前的状态,只需执行命令:earlier 4m 。然后我又想前进到30秒后的状态,则执行命令:later 30s 。刚才的两个例子用时间点做参考,那么如果我想回到之前五次修改之前的状态,则执行命令:undo 5 .Vim以树形结构的方式组织undo list,可以用命令:undolist查看。所以从某种意义上讲,Vim不仅是一个文本编辑器,而且还是一台时光机(time machine)。

三.搜索操作

  Vim中内置了一个强大的搜索引擎。搜索时只需在Normal模式下按/键,键入所要搜索的词并按回车键即可,例如要搜索文本中是否含有 hello,只需执行/hello<cr>即可。若文本中含有多个要搜索的词,按n跳转到该词下一处出现的位置,按N跳转到该词前一处出现的 位置。在Vim中搜索时可以通过一些参数的设置来定制搜索的方式,下面介绍三个搜索相关的参数。

set incsearch    如果你只是模糊的记得要搜索的词,可以打开incsearch,那么你在键入要搜索的词过程中Vim就进行搜索

set ignorecase    搜索时忽略大小写

set smartcase    如果你键入的要搜索的词只含小写字母,则搜索时忽略大小写。否则搜索时考虑大小写。

  另外如果我想确切的搜索某个词,则需求助转义字符\。如我想确切的搜索hello这个词,需要执行/\<hello\>并按回车。 若搜索文本中的数字,则执行\/d命令。/\d\+ 命令搜索一个或多个数字。/\d\*搜索零个或多个数字。我想熟悉正则表达式的同学应该对此不陌生。

参考文献

1.http://www.swaroopch.com/notes/Vim

在 Vim初探(一)和 Vim初探(二)中分别介绍了Vim中模式的概念及一些简单的文本编辑命令,如光标的移动、编辑区域的选取、拷贝、剪切、黏贴等。接下来我想介绍一下在Vim中如何折叠和展开已设定好缩进的文本,以及如何同时查看和编辑多个文本。
一.缩进的折叠和展开

  作为程序员对于代码的缩进肯定是再熟悉不过了。同时现在很多IDE提供了将已经缩进好的一段代码折叠起来或者展开的功能。在Vim中我们也能做 到这一点:首先需要先设置折叠方法,:set foldmethod=indent,然后将光标移动到一段已经具备缩进的文本上(如通过<Tab>键设置),按下zc将缩进折叠起来,按下 zo展开缩进。这只是缩进的折叠与展开一个很简单的例子,还有很多相关的内容,在这里不做赘述,用到时可以通过:help folding来查看详情。

二.多文档的查看与编辑

  很多时候我们需要同时打开多个文档进行编辑,Vim为这类操作提供了三种方式:

  • 在不同窗口中打开多个文档。
  • 在同一窗口中打开多个文档。
  • 在不同Tab中打开多个文档。

1.在不同窗口中打开多个文档

  通常情况下在Vim中打开多个文档时每个文档会出现在一个单独的窗口中。可以通过命令:b n在不同文档窗口间进行切换,其中n表示你想切换到的第几个打开的文档,如当前的活动窗口是第三个打开的文档,如果我想切换到第一个打开的文档只需执 行:b 1即可。如果你还记得的话,上一节中提到了Vim将编辑的文档会读取到缓存中,事实上b代表的就是buffer,所以这个命令可以解读为buffer number 1。可以通过命令:buffers或:ls来查看当前打开了多少个buffers。下面举个例子来直观的说明一下:

  • 首先打开文档test1.txt,相关命令如:e test1.txt
  • 然后打开文档test2.txt,相关命令如:e test2.txt
  • 现在的活动窗口为test2.txt,如果想切换到test1.txt,只需:b 1即可。

2.在同一窗口中打开多个文档

  如果你想在同一窗口中打开多个文档,只需在当前打开的窗口中执行命令:new即可,当前的窗口就会一分为二,然后在新的子窗口中打开相关文件即 可。在不同子窗口间切换只需按ctrl-w < h,j,k,l>或连续按ctrl-w两次。在一个窗口中打开多个文件的一种特殊情况是将一个文档在两个子窗口中呈现,分为两种方式:在 两个水平子窗口:sp,在两个竖直子窗口:vsp。其中sp代表split.执行:q命令关掉其中的某个子窗口。

3.在不同Tab中打开多个文档

  这个特性是我很喜欢的一个特性,因为浏览器已是我生活中不可或缺的东西,总是要在浏览器中打开多个Tab(ctrl/cmd-t)。在Vim中 命令 :tabnew就可以打开一个新Tab,然后就可以在这个Tab中打开并编辑文档了。通过gt命令可以在不同的Tab间切换。关掉一个Tab可以使 用:tabc或:q命令。还有一个命令要提一下就是:tabmove,该命令将Tab移动到指定的位置。

参考文献

1.http://www.swaroopch.com/notes/Vim

之所以说Vim是一款强大的文本编辑软件我觉得很大程度上是因为Vim支持以插件(plugin)的形式进行功能扩展。很多Vim爱好者自己写插件来实现需要的功能,定制自己专属的Vim。Vim支持以下几种类型的插件:
  • vimrc:vimrc类似于配置文件,每次Vim启动的时候都会读取其中的内容并进行相应的设置。在Vim中你可以在两个文件中进行相关设置:vimrc和gvimrc。vimrc用于一些通用的设置,gvimrc用于GUI相关设置。它们位于Vim的安装目录下。
  • 全局插件:用于提供全局或通用的功能。Vim在安装时默认提供一些全局插件,这些插件位于<Vim安装目 录>/<$VIMRUNTIME>/plugin/下。同时你还可以自己选择安装一些插件将其存放在自己的plugin目录下,如在 Linux/MacOS上是<Vim安装目录>/.vim/plugin/,在Windows上是<Vim安装目录> /vimfiles/plugin/(注意该plugin文件夹可能需要自己建立)。
  • 文件类型插件:用于为特定类型的文件提供支持,如C,XML类型的文件。类似于全局插件,Vim既提供一些默认的文件类型插件,也允许用户自行安装一些文件类型插件。文件类型插件存储的位置也与全局插件类似。
  • 文法高亮插件:在<Vim安装目录>/<$VIMRUNTIME>/syntax/下存储这为一些语言提供文法高亮支持 的插件,如c.vim、python.vim等。要使用这些插件,你可能要显示的在Vim中执行:set filetype=language,如:set filetype=python。
  • 编译插件:编译插件,顾名思义就是为能够在Vim直接编译某些语言编写的程序提供支持,这些插件存放在<Vim安装目录>/<$VIMRUNTIME>/compiler/下。

  下面介绍一些常用的vimrc的设置命令。


复制代码
  
   
   
   
   
set nocompatible " explictly get out of vi-compatible mode set background = dark " we plan to use a dark background syntax on " syntax highlighting on set number " turn on line numbers set ruler " always show current position along the bottom set incsearch " do highlight as you type you search phrase set ignorecase " case insensitive by default set smartcase " if there are caps, go case-sensitive colorscheme macvim " the color scheme I am using now
复制代码

  这里仅列出一些对于Vim初学者最常用的设置命令。还有很多你想象不到的Vim设置命令,我相信你可以在网上找到它们。在这里推荐两个模板,从 中找到你喜欢的用来定制专属于你自己的Vim吧:http://www.vi-improved.org/vimrc.php和http: //amix.dk/vim/vimrc.html。

  最后做一下预告:在下期内容中我想介绍如何利用本节中介绍的各种插件打造一个Python IDE。

参考文献:

1.http://www.swaroopch.com/notes/Vim

2.http://www.vi-improved.org/vimrc.php

3.http://amix.dk/vim/vimrc.html

在Vim初探(四)中介绍了Vim的插件技术,本节将利用这些技术打造一个Python IDE。

1.文法高亮

  为了能在Vim中支持Python文法需要用到插件python.vim,该插件默认位于<Vim安装目录>/<$VIMRUNTIME>/syntax/下,如果你在该路径下没有找到这个插件,需要到python.vim : Enhanced version of the python syntax highlighting script下载。然后为了能让Vim识别Python文法需要在vimrc中添加:

   
    
    
    
    
set filetype = python au BufNewFile,BufRead * .py, * .pyw setf python

2.缩进

  在vimrc中添加如下缩进相关的代码:

   
    
    
    
    
set autoindent " same level indent set smartindent " next level indent set expandtab set tabstop = 4 set shiftwidth = 4 set softtabstop = 4

3.项目视图

  像Visual Studio或Eclipse之类的IDE都会提供项目视图(位于左侧或右侧),程序员利用该视图在文件间或类间跳转。利用Ctags和插件Tasklist可以在vim中实现此功能。

  • 首先下载Exuberant Ctags
  • 然后解压Ctags,并进入解压后的目录,利用如下命令编译安装Ctags:
   
    
    
    
    
. / configure && sudo make install
  • 通过这种方式,Ctags被安装在/usr/local/bin下。接下来在vimrc中添加如下命令告诉Vim Ctags的安装路径:
   
    
    
    
    
let Tlist_Ctags_Cmd = ' /usr/local/bin/ctags '
  • 接着安装Tasklist插件:下载TaskList.vim,然后把它放入plugin目录下
  • 最后使用命令:TlistToggle打开taglist窗口,下图展示了该窗口。

Vim使用指南_第2张图片

4.MiniBufExplorer

  在Visual Studio或Eclipse中你打开的缓存会以tab的形式列在窗口的顶端或底部,在Vim中插件MiniBufExplorer来实现此功能。下载 minibufexpl.vim并将其放在plugin目录下。接着在vimrc中添加如下命令:

   
    
    
    
    
let g:miniBufExplMapWindowNavVim = 1 let g:miniBufExplMapWindowNavArrows = 1 let g:miniBufExplMapCTabSwitchBufs = 1 let g:miniBufExplModSelTarget = 1

  下图展示了MiniBufExplorer的使用效果:

Vim使用指南_第3张图片

5.Omnicompletion

  Vim7中添加了对文法提示和自动完成的支持,对于python来说需下载pythoncomplete.vim并将其放在<Vim安装目录>/<$VIMRUNTIME>/autoload/目录下,接着在vimrc中添加如下命令:

   
    
    
    
    
filetype plugin on set ofu = syntaxcomplete # Complete autocmd FileType python set omnifunc = pythoncomplete # Complete autocmd FileType python runtime! autoload / pythoncomplete.vim

  最后在编写代码时通过ctrl-x ctrl-o来打开文法提示上下文菜单,如下图所示:

Vim使用指南_第4张图片

参考文献

1.http://www.swaroopch.com/notes/Vim

2.http://blog.dispatched.ch/2009/05/24/vim-as-python-ide/

3.http://www.phacks.net/macvim-code-completion-syntax-highlighting-for-python-pyqt4-twisted-on-mac-osx-snow-leopard/

4.http://vim.wikia.com/wiki/Omni_completion

你可能感兴趣的:(Vim使用指南)