2014-05-07 69 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的評論)。由於信息太少,所以我可以提供一個解決方法,使其更加強大。 –