2014-05-07 36 views
0

我用下面的映射,当我按F5键运行Python解释:nerdtree是打破我的映射之一

autocmd Filetype python nnoremap <buffer> <F5> <C-o>:update<Bar>execute '!python '.shellescape(@%, 1)<CR> 

虽然偶尔当前文件的变量被扩展到类似“NERD_tree_1 ......”这当然会导致此错误:

powershell -command "python NERD_tree_1p" 
C:\Python27\python.exe: can't open file 'NERD_tree_1p': [Errno 2] No such file o 
r directory 
shell returned 1 
Hit any key to close this window... 

不知道如何书呆子树是如何造成这个问题或如何解决它。

+0

你在NerdTree缓冲区执行呢?这个缓冲区曾经是NerdTree缓冲区吗? –

+0

不知道,什么会导致它在nerdtree缓冲区中执行。似乎几乎是随机发生的。前几次我打F5它运行良好,那么它会给我这个错误。我还注意到,当我得到该错误时,当我关闭命令提示符并返回到vim时,我有一个空的缓冲区打开,名为“NERD_tree_1”,我必须关闭它。 – red888

+0

'@%'展开为当前文件。除非在NerdTree缓冲区中执行此命令,否则它不应该是'NERD ...',因为您一次没有指定'b:undo_ftplugin'来拆除映射文件类型更改时的python文件。 –

回答

1

寄存器%包含当前的缓冲区名称。不知何故,您似乎在NERDTree用来显示错误发生时的目录树的暂存缓冲区中。

你应该注意到光标位于“错误的”(即非Python)缓冲区中。如果这发生在Python缓冲区中,我无法解释这一点。

你可以让你的映射更健壮,包括Python的文件类型进行检查,如:

... if &filetype ==# 'python'<Bar>update<Bar>execute '!python '.shellescape(@%, 1)<Bar>endif<CR> 
+0

我认为这种映射已经做到了。我从这个SO帖子得到它:http://stackoverflow.com/questions/12030965/change-the-mapping-of-f5-on-the-basis-of-specific-file-type – red888

+0

对,但你有一些奇怪的交互作用(请参阅Peter Rincker的评论)。由于信息太少,所以我可以提供一个解决方法,使其更加强大。 –