2012-06-28 44 views
21

我已經開始自學Haskell了,爲此我已經爲Windows安裝了The Haskell Platform。截至目前,我正在使用WinGHCi。我瞭解到它有用於更改目錄的命令:cd。但問題是,我怎麼知道我目前在哪個目錄?不知道爲什麼我會想改變目錄。我搜查了很多,但找不到答案。如何在WinGHCi中查看當前工作目錄

請告訴我是否有辦法瞭解當前工作目錄。最好我想配置命令提示符來顯示當前目錄,就像Linux的控制檯一樣。


繼@丹尼爾的建議下,我做了這些:

  • 由於我的工作在Windows 7上,沒有.ghci文件(我認爲這是類Unix操作系統),所以我創建了一個文件ghci.confC:\Users\Apelles\AppData\Roaming\ghc文件夾中,如it is instructed here
  • 將丹尼爾答案中的腳本複製粘貼到ghci.conf
  • 然後我開始ghci.exe這是一個類似控制檯的窗口。我注意到它裝載的模塊比之前通常使用的還要少。這裏是快照:

enter image description here

正如你可以看到它加載多個模塊,最後一行說,

無法解析提示字符串。使用Haskell語法。

這是什麼意思?哪一行導致問題(來自以下腳本)?

let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set prompt \"" ++ cwd ++ fill ++ " \""); } 
:def doprompt (\_ -> cur ">") 
:def mycd (\dir -> System.Directory.setCurrentDirectory dir >> cur ">") 
:doprompt 

另外,如果我重新命名ghci.conf文件到一些隨機的名字,然後啓動ghci.exe,它加載這些模塊: enter image description here

正如我以前說過,它加載更少的模塊的數量,這意味着與ghci.conf,ghci.exe做成功,但在某些時候失敗。如何解決這個問題?

+8

嘗試'前奏>:! pwd'(或任何Windows相當於pwd的)。我認爲WinGHCi在底下運行一個普通的ghci,所以這應該工作。 –

+0

@DanielFischer:這很好。是否可以配置命令提示符本身? – Nawaz

+0

是的,你可以使用':set prompt Whatever'(在'ghci命令的簡短幫助中鍵入':?'''')來配置提示符。然而,這是每次會議。爲了使它成爲永久的,請在'.ghci'文件中進行(我認爲它們在Windows上的調用方式不同,不記得是什麼)。不過,我不確定如何將其設置爲當前目錄。 –

回答

3

一個窮人的解決方案設置ghci的提示當前工作目錄將被投入

let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set prompt \"" ++ cwd ++ fill ++ " \""); } 
:def doprompt (\_ -> cur ">") 
:def mycd (\dir -> System.Directory.setCurrentDirectory dir >> cur ">") 
:doprompt 

.ghci文件。

在第一行中,我們定義了cur :: String -> IO String,它獲取當前目錄並返回ghci命令來相應地設置提示。然後我們定義一個執行該操作的ghci命令doprompt以及一個命令來更改目錄並設置提示。最後一行在啓動時執行:doprompt

不幸的是,這並不能使:cd dir反映目錄的變化,人們必須事後做一個手工:doprompt,或使用:mycd來更改目錄。

爲了避免太長的提示,可以通過刪除文件路徑的初始部分來操作getCurrentDirectory的結果。

該簡單方法的另一個缺點是提示不再包含有關已加載模塊的信息。我相信所有這些都可以克服,但我現在沒有足夠的動力去挖掘。

+0

讓我試試這個。目前,嘗試回答+1。 – Nawaz

+0

我在Windows上試過了,它沒有工作。我在我的問題中添加了我所做的事情。看見。 – Nawaz

+0

我很抱歉聽到這個消息。任何跡象表明失敗了? (我看不到編輯你的問題) –

21

System.Directory.getCurrentDirectory

相關問題