前面的话
最近想好好把python学一学,计划是先学习一下flask,结合vue做一些简单的网站之类,之后再学学爬虫、图像处理、机器学习之类的东西。看了一下大家写Python好像没有什么比较推崇的IDE,又不像java那么依赖IDE做补全和重构,加上自己之前用VIM写python感觉特别流畅,所以就想用VIM自己搭一个python开发环境。
参考了一个youtube上标题貌似是“Use vim as python IDE”的视频,学着上面的指导安装了python-mode、ctrlP、jedi、powerline和rope这些vim插件,但是在装完rope使用的时候,遇到了一个问题,就是rope的代码补全帮助 (RopeCodeAssist命令) 不能用,作为rope里我认为最牛逼的一个功能没有之一,不能用的话也太让人揪心了。
整了好几个小时以后发现不是rope的问题,是vim里面快捷键的问题。我在vim的普通模式直接输:RopeCodeAssist命令是可以用的,但是通过快捷键<M-/>去没有,而是出来了搜索功能,就想是vim中普通模式下按/的效果。原因是alt开头的快捷键在xshell中映射得不对。
vim中的快捷键映射
vim的设置中,可以在.vimrc文件中使用map命令设置键位映射,如在.vimrc中增加一行map a b,那么在普通模式下输入a就会起到b的效果(在vim按b是光标向后移动一个词)。更tricky一点,用inoremap a b,那么在编辑模式下输入的a字符全都会变成b。
如果要表示一个ctrl开头的快捷键,可以用<C表示,如在map命令中,C-r表示快捷键ctrl+r,用法是先按住ctrl不放,再按r键。相应的<M和<A都是表示Alt键,<S表示shift键。
问题解决
按理说RopeCodeAssist这个命令映射到了<M-/>上,但是实际上按下alt+/以后vim并没有收到<M-/>按键值,而是收到<ESC>/。这样就很容易理解前面的现象了:在编辑模式按下<ESC>进入普通模式,在普通模式按下/进入搜索模式。
为什么会输入值不是期待的值呢?如果用过emacs会有这样的经验,<ESC>/不相符合。
解决的方法是在vimrc中把<ESC>/就会触发
1 | " ^[不是单独的两个字符,而是一个字符,是真实的ESC键取值,在vim中可以通过先按<C-v>,然后按<ESC>输入。 |