2011-08-29 43 views
2

搜索結果返回Q &作爲鈴聲,我不知道如何改寫這個更好的,所以原諒我,如果這是一個重複:如何從腳本路徑運行Vim shell?

我運行一個Python腳本的Vim。該腳本位於~/path/to/my/script.py,同一路徑中有一個樣式表文件。

代碼的內容打開文件:

f = open('./stylesheet.css', 'r') 
s = f.read() 
f.close() 

如果我跑在Vim我的代碼,像這樣:!python %,它將返回:IOError: [Errno 2] No such file or directory: 'stylesheet.css'

如此看來Vim執行我的代碼不是從代碼的位置,但從/ home或根?

如何在執行過程中使用代碼路徑作爲根路徑?

回答

5

您可以使用此:lcd %:p:h | !python %

簡要說明。 lcd將目錄更改爲當前正在編輯的文件 - http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file

然後對文件執行python命令。

這個命令的一個問題是,你的當前目錄現在是(從你的例子)~/path/to/my/。你將不得不做另一個:lcd回到你目前的目錄。我無法找到一種方法在vim中將其全部組合成一個命令。也許別人可以。

編輯 - 如何對CD回來

打消了我的複雜方法

了簡單的解決方案參考下面IB的意見。

+0

非常感謝。我將把它映射到一個新的命令':runthere'或類似的東西。 – Benjamin

+0

我認爲用戶定義的命令必須以大寫字母開頭。看看編輯的答案。您可以將CDP更改爲:Runthere或其他內容。乾杯,這是一個有趣的練習,以更好地瞭解vim。 – arunkumar

+0

大寫字母你是對的:)謝謝。 – Benjamin

0

Vim的快捷方式當前文件%,所以不是:!python $,類型:!python %

+0

抱歉,這是從我的部分:(一錯字,我的意思% – Benjamin

+0

好了,你的vim實例,可能有一個不正確的當前的工作目錄,鍵入':!pwd',它是包含'stylesheet.css'的目錄嗎? – tlehman

+0

@habitmelon你不需要''':':pwd''也會打印當前工作目錄 – ZyX

1

要打開相同的目錄中的腳本文件,你可以試試:

import os 

script_dir = os.path.dirname(__file__) 
target_file = os.path.join(script_dir, 'stylesheet.css') 

with open(target_file, 'r') as f: 
    s = f.read() 
+1

我不認爲它是一種解決方案,因爲它是Vim特有的,我選擇的答案也是如此。但我喜歡你所提供的,並且一定會用它作爲安全帶:) – Benjamin