2012-06-28 43 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

相关问题