vimrc映射问题;无法从vimrc执行python脚本映射
唉,我在学习Vim的时候真是碰壁。
我想在我的vimrc文件里设置一个简单的快捷键,用来执行当前文件的Python脚本。
这个快捷键设置得很好,在我直接输入到Vim的命令行里时可以正常工作。这个快捷键是:
map <buffer>
<S-e>
:w<CR>
:!usr/bin/env python % <CR>
但是它在我的vimrc里加载不出来 :( 我现在用的是基本的.vimrc_sample文件,只加了这个快捷键。
奇怪的是,我在vimrc里设置的另一个快捷键却能正常工作:
map
<S-t>
itest<Esc>
这个可以用,但执行脚本的那个却不行?这是怎么回事?
我用的是Ubuntu 10.10,Python 2.6,Vim 7.2
非常感谢大家的帮助!
2 个回答
0
天哪,真是墨菲定律啊。
我找了一个小时的答案,结果在我发这个问题后1分钟就解决了。问题出在映射中的<buffer>
。
把它去掉后,映射就正常工作了,所以变成了:
nnoremap E w:
<CR>
:!python % <CR>
2
我怀疑在你使用 map
之前有些东西。<buffer>
这个参数意味着这个快捷键只在当前的缓冲区(也就是当前打开的文件)中有效,所以如果你在 vimrc 里加这个而没有像 autocmd FileType python
这样的命令在前面,那就有点奇怪了。也许这就是它不工作的原因:你在测试这个快捷键之前,可能切换到了另一个缓冲区。
还有一些额外的注意事项:
- 尽量不要在可以用
noremap
的地方使用map
。 - 你可能不想让这个快捷键在可视模式下生效(至少在没有
<C-u>
的情况下),也不想让它在选择模式和操作等待模式下生效,所以用nnoremap
。 <S-e>
和E
是一样的。- 你可以用管道符号把
w
和!...
组合成一个命令::w | !/usr/bin/env python %<CR>
。 - 你忘了在
usr
前面加斜杠。