爱悠闲 > vim 打造python IDE

vim 打造python IDE

分类: python  |  作者: jazywoo123 相关  |  发布日期 : 2013-06-24  |  热度 : 1071°

一.拷贝、剪切及黏贴

  拷贝(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\*搜索零个或多个数字。我想熟悉正则表达式的同学应该对此不陌生。

===========================================================================================

一.缩进的折叠和展开

  作为程序员对于代码的缩进肯定是再熟悉不过了。同时现在很多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移动到指定的位置。

========================================================================================================

之所以说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。

=================================================================================================================之

本节将利用这些技术打造一个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窗口,下图展示了该窗口。

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的使用效果:

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来打开文法提示上下文菜单,如下图所示: