vimrc映射问题;无法从vimrc执行python脚本映射

0 投票
2 回答
774 浏览
提问于 2025-04-16 14:31

唉,我在学习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 这样的命令在前面,那就有点奇怪了。也许这就是它不工作的原因:你在测试这个快捷键之前,可能切换到了另一个缓冲区。

还有一些额外的注意事项:

  1. 尽量不要在可以用 noremap 的地方使用 map
  2. 你可能不想让这个快捷键在可视模式下生效(至少在没有 <C-u> 的情况下),也不想让它在选择模式和操作等待模式下生效,所以用 nnoremap
  3. <S-e>E 是一样的。
  4. 你可以用管道符号把 w!... 组合成一个命令::w | !/usr/bin/env python %<CR>
  5. 你忘了在 usr 前面加斜杠。

撰写回答