学程序员员都应该是变态的吗

使用python开发vim插件及心得分享
投稿:hebedich
字体:[ ] 类型:转载 时间:
Vim 插件是一个 .vim 的脚本文件,定义了函数、映射、语法规则和命令,可用于操作窗口、缓冲以及行。一般一个插件包含了命令定义和事件钩子。当使用 Python 编写 vim 插件时,函数外面是使用 VimL 编写,尽管 VimL 学起来很快,但 Python 更加灵活
vim有各种强大的插件,这不仅归功于其提供的用来编写插件的脚本语言vimL,还得益于它良好的接口实现,从而支持python等语言编写插件。当vim编译时带有+python特性时就能使用python2.x编写插件,+python3则支持python3.x,可以使用vim --version来查看vim的编译特性。
要使用python接口,可以用:h python来查看vim提供的帮助文档,本文做一个简单的介绍。我们都知道在vim里可以执行bash命令,只需要:!command即可,那么vim里可以执行python语句吗?当然可以了,vim那么强大!不是吗,是吗?!
vim中执行python命令
在vim中可以使用py[thon] {stmt}来执行python语句{stmt},你可以用:python print "Hello World!"来验证一下。
只能执行一条语句,没什么用,不是吗?所以有更加强大的接口,语法如下:
py[thon] && {endmarker}
{endmarker}
这样我们就可以执行python脚本{script}中的内容了。{endmarker}是一个标记符号,可以是任何内容,不过{endmarker}后面不能有任何的空白字符。看一个简单的例子,假设下面代码保存为script_demo.vim:
function! Foo()python && EOFclass Foo_demo:&&& def __init__(self):&&&&&&& print 'Foo_demo init'Foo_demo()EOFendfunction
那么在vim中我们先用:source path_to_script/script_demo.vim来加载脚本,然后就可以用:call Foo()来运行python脚本了,整个过程如图所示:
此外,我们还可以将python脚本放到一个单独的.py文件中,然后用pyf[ile] {file}来运行python文件中的程序,要注意这里pyf[ile]后面的所有参数被看做是一个文件的名字。
我们已经可以在vim中执行python命令了,但是python怎么获取vim中的一些信息呢?比如说我想知道vim当前缓冲区一共有多少行内容,然后获取最后一行的内容,用python该怎么做呢?
于是vim提供了一个python模块,有趣的是模块名字就叫做vim,我们可以用它来获取vim编辑器里面的所有信息。上面问题用以下python脚本就可以解决了:
function! Bar()python && EOFimport vimcur_buf = vim.current.bufferprint "Lines: {0}".format(len(cur_buf))print "Contents: {0}".format(cur_buf[-1])EOFendfunction
你可以自己加载脚本运行一下见证奇迹!上面代码出现了vim.current.buffer,想必你已经从名字猜到了它的意思了,不过还是来详细看下吧:
vim模块中的常量
vim.buffers: 用来访问vim中缓冲区的列表对象,可以进行如下操作:
:py b = vim.buffers[i]&&& # Indexing (read-only):py b in vim.buffers&&&&& # Membership test:py n = len(vim.buffers)& # Number of elements:py for b in vim.buffers: # Iterating over buffer list
vim.windows: 用来访问vim中窗口的列表对象,和vim.buffers支持的操作基本相。
vim.current: 用来访问vim中当前位置的各种信息,比如:
vim.current.line
vim.current.buffer
vim.current.window
vim.current.tabpage
vim.current.range
vim.vvars: 类似字典的对象,用来存储global(g:)变量或者vim(v:)变量。
还有其他的一些常量,这里不做叙述。注意这里的常量并不是真正意义上的常量,你可以重新给他们赋值。但是我们应该避免这样做,因为这样会丢失该常量引用的值。现在为止我们已经能获取vim中数据,然后用python来对其进行操作,似乎完美了。
不过vim并没有止步于此,它可是Stronger than Stronger!因为我们可以在python里使用vim强大的命令集,这样就可以用python写一些常用的批处理插件,看下面简单的例子:
function! Del(number)python && EOFimport vimnum = vim.eval("a:number")mand("normal gg{0}dd".format(num))mand("w")EOFendfunction
可以调用上面函数Del(n)用来删除当前缓冲区前n行的内容(只是示例而已,现实中别这么做!)上面用到了eval和command函数,如下:
vim模块中两个主要的方法
<mand(str): 执行vim中的命令str(ex-mode,命令模式下的命令),返回值为None,比如:
:mand("%s/aaa/bbb/g")
也可以用<mand("normal "+str)来执行normal模式下的命令,比如说用以下命令删除当前行的内容:
:mand("normal "+'dd')
vim.eval(str): 用vim内部的解释器来计算str中的内容,返回值可以是字符串、字典、或者列表,比如计算12+12的值:
:py print vim.eval("12+12")
将返回结算结果24。
前面的Del函数还提供了一个number参数,在vimL里面可以通过let arg=a:number来使用,在python中通过vim.eval("a:number")来使用。也可以通过参数位置来访问,比如let arg=a:0或者是vim.eval("a:0")。我们可以使用"..."来代替命名参数来定义一个能接收任意数量参数的函数,不过这样只能通过位置来访问。
vim模块还提供了一个异常处理对象vim.error,使用vim模块时一旦出现错误,将会触发一个vim.error异常,简单的例子如下:
try:&&& mand("put a")except vim.error:&&& # nothing in register a
vim模块提供的对象
到这里你基本能用python来对缓冲区进行基本的操作,比如删除行或者是在指定行添加内容等。不过在缓冲区添加内容会很不pythoner,因为你得使用command来调用vim的i/I/a/A命令。好在有更科学的方式,那就是利用vim模块提供的对象来进行操作,看下面简单的例子:
function! Append()python && EOFimport vimcur_buf = vim.current.bufferlens = len(cur_buf)cur_buf.append('" Demo', lens)EOFendfunction
Append函数在当前缓冲区的结尾添加注释内容" Demo,缓冲区对象是怎么一会儿事呢?
缓冲区对象
vim模块提供了缓冲区对象来让我们对缓冲区进行操作,该对象有两个只读属性name和number,name为当前缓冲区文件的名称(包含绝对路径),number为缓冲区的数量。还有一个bool属性valid,用来标识相关缓冲区是否被擦除。
缓冲区对象有以下几种方法:
b.append(str): 在当前行的下面插入新的行,内容为str;b.append(str, n): 在第n行的下面插入新的行,内容为str;b.append(list)
b.append(list, n): 插入多行到缓冲区中;b.range(s,e): 返回一个range对象表示缓冲区中s到e行的内容。
注意使用append添加新行str时,str中一定不能包含换行符"\n"。str结尾可以有"\n",但会被忽略掉。
缓冲区对象的range方法会返回一个range对象来代表部分的缓冲区内容,那么range对象又有那些属性以及方法呢&#63; 其实在操作上range对象和缓冲区对象基本相同,除了range对象的操作均是在指定的区域上。range对象有两个属性start和end,分别是range对象的起始和结尾行。它的方法有r.append(str),r.append(str, n)和r.append(list),r.append(list, n)。
我们可以通过vim.windows来获取vim中的窗口对象,我们只能通过窗口对象的属性来对其进行操作,因为它没有提供方法或者其他接口来操作。其中只读属性有buffer、number、tabpage等,读写属性有cursor、height、width、valid等。具体可以查看帮助:h python-window
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具两个命令把 Vim 打造成 Python IDE的方法
作者:vince67
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了两个命令把 Vim 打造成 Python IDE,需要的朋友可以参考下
运行下面两个命令,即可把 Vim(含插件)配置成 Python IDE。目前支持 MAC 和 Ubuntu。
curl -O /vince67/v7_config/master/vim.sh
bash vim.sh
写了个方便的bash脚本,用来配置VIM
使用的配置来自
&#8226;注意一: 每次运行本脚本,会把旧的 ~/.vimrc 文件备份到 /tmp/vimrc.bak ,并替换原来的 ~/.vimrc 文件 。
&#8226;注意二: 目前支持MAC和Ubuntu系统。
#!/bin/bash
# install fisa vim config
echo '==============================='
echo 'start to install dependences...'
case "$OSTYPE" in
darwin*) brew inst;
sudo apt-get install vim exuberant-;
echo "unknown: OS: $OSTYPE, U should install dependences by yourself" ;;
sudo pip install dbgp vim-debug pep8 flake8 pyflakes isort
echo '==============================='
echo 'start to download vimrc file...'
cp ~/.vimrc /tmp/vimrc.bak
curl -O /fisadev/fisa-vim-config/master/.vimrc
mv .vimrc ~/.vimrc
echo '==============================='
echo 'start to install vim plugins...'
vim +BundleClean +BundleInstall! +qa
sudo chown -R $USER ~/.vim/
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具在centos下打造基于python的vim开发环境 | 峰云就她了
4,757 views
下面是vim的效果图:
这是我自己精简后的python vim开发包环境, 已经推到github中。目的是自己部署开发环境的时候,更加的方便。 &那么其实还有更加丰富的功能,但只会让vim速度变得很慢,不信你可以试试 ! &所以我要说的是,并不是插件越多越好,而是越精简越好,把不用的插件都在.vimrc中注释掉。&
git clone /rfyiamcool/python-vim.git
&git clone https://github.com/rfyiamcool/python-vim.git
我已经把常用的主题放在包里面了,另外在vimrc和插件里面,含有大量的小东西,比如 quick run ,ctags list ,taglist ,pydiction代码补全 等等。&
[ruifengyun@bj-buzz-dev01:~/.vim]$ll bundle/
drwxr-xr-x 3 ruifengyun ruifengyun 4096 Jul 23 15:17 a.vim
drwxr-xr-x 3 ruifengyun ruifengyun 4096 Jul 23 15:17 comdg
drwxr-xr-x 3 ruifengyun ruifengyun 4096 Jul 23 15:17 DoxygenToolkit
drwxr-xr-x 3 ruifengyun ruifengyun 4096 Jul 23 15:17 echofunc
drwxr-xr-x 2 ruifengyun ruifengyun 4096 Jul 23 15:17 nerdtree
drwxr-xr-x 3 ruifengyun ruifengyun 4096 Jul 23 15:17 nvie-vim-pep8
drwxr-xr-x 3 ruifengyun ruifengyun 4096 Jul 23 15:17 nvie-vim-pyflakes
drwxr-xr-x 4 ruifengyun ruifengyun 4096 Jul 23 15:17 taglist
drwxr-xr-x 5 ruifengyun ruifengyun 4096 Jul 23 15:17 vim-autocomplpop
drwxr-xr-x 6 ruifengyun ruifengyun 4096 Jul 23 15:17 vim-quickrun
drwxr-xr-x 7 ruifengyun ruifengyun 4096 Jul 23 15:17 vimwiki
drwxr-xr-x 6 ruifengyun ruifengyun 4096 Jul 23 15:20 vundle
123456789101112131415
&[ruifengyun@bj-buzz-dev01:~/.vim]$ll bundle/total 48drwxr-xr-x 3 ruifengyun ruifengyun 4096 Jul 23 15:17 a.vimdrwxr-xr-x 3 ruifengyun ruifengyun 4096 Jul 23 15:17 comdgdrwxr-xr-x 3 ruifengyun ruifengyun 4096 Jul 23 15:17 DoxygenToolkitdrwxr-xr-x 3 ruifengyun ruifengyun 4096 Jul 23 15:17 echofuncdrwxr-xr-x 2 ruifengyun ruifengyun 4096 Jul 23 15:17 nerdtreedrwxr-xr-x 3 ruifengyun ruifengyun 4096 Jul 23 15:17 nvie-vim-pep8drwxr-xr-x 3 ruifengyun ruifengyun 4096 Jul 23 15:17 nvie-vim-pyflakesdrwxr-xr-x 4 ruifengyun ruifengyun 4096 Jul 23 15:17 taglistdrwxr-xr-x 5 ruifengyun ruifengyun 4096 Jul 23 15:17 vim-autocomplpopdrwxr-xr-x 6 ruifengyun ruifengyun 4096 Jul 23 15:17 vim-quickrundrwxr-xr-x 7 ruifengyun ruifengyun 4096 Jul 23 15:17 vimwikidrwxr-xr-x 6 ruifengyun ruifengyun 4096 Jul 23 15:20 vundle
vim颜色主题,现在就塞了两个&
[ruifengyun@bj-buzz-dev01:~/.vim]$ll colors/
-rw-r--r-- 1 ruifengyun ruifengyun
8258 Jul 23 15:17 monokai.vim
-rw-r--r-- 1 ruifengyun ruifengyun 51917 Jul 23 15:17 solarized.vim
&[ruifengyun@bj-buzz-dev01:~/.vim]$ll colors/total 64-rw-r--r-- 1 ruifengyun ruifengyun&&8258 Jul 23 15:17 monokai.vim-rw-r--r-- 1 ruifengyun ruifengyun 51917 Jul 23 15:17 solarized.vim
python vim环境包的安装方法:
更新vim相关插件,是为了解决一些不兼容的问题。&
sudo yum clean all
sudo yum -y update vim
sudo yum -y install epel-release
sudo yum -y install ctags
&sudo yum clean allsudo yum -y update vimsudo yum -y install epel-releasesudo yum -y install ctags
下载我这边打包好的 .vimrc .vim .bashrc & , 含有一些常用的插件,主题 , 组件。
sudo wget xiaorui.cc/vim_dev.tar.gz
sudo tar zxvf vim_dev.tar.gz
&sudo wget xiaorui.cc/vim_dev.tar.gz&sudo tar zxvf vim_dev.tar.gz
安装powerline-status用来做vim标记状态调试。
sudo pip install powerline-status
下面是shell的提示状态,如果不想让shell有炫目的powerline主题,那么就不用执行下面的命令。
. /usr/local/lib/python2.7/site-packages/powerline/bindings/bash/powerline.sh
&sudo pip install powerline-status&下面是shell的提示状态,如果不想让shell有炫目的powerline主题,那么就不用执行下面的命令。 &. /usr/local/lib/python2.7/site-packages/powerline/bindings/bash/powerline.sh
如果是Ubuntu下的话,第三方python模块安装路径跟ubuntu不太一样. 下面是ubuntu的安装路径.
. /usr/local/lib/python2.7/dist-packages/powerline/bindings/bash/powerline.sh
&. /usr/local/lib/python2.7/dist-packages/powerline/bindings/bash/powerline.sh
对Python及运维开发感兴趣的朋友可以加QQ群 :
!!! { 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群
另外如果大家觉得文章对你有些作用! &
帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址 && …… &&感谢!
您可能也喜欢:
暂无相关产品

我要回帖

更多关于 学程序员 的文章

 

随机推荐