如何在WinGHCi中查看当前的工作目录

Naw*_*waz 30 haskell working-directory ghci winghci

我已经开始自学Haskell了,为此我已经安装了适用于Windows 的Haskell平台.我现在正在使用WinGHCi.我了解到它有:cd用于更改目录的命令.但问题是,我怎么知道我目前在哪个目录?我不知道为什么要更改目录.我搜索了很多但找不到答案.

请告诉我是否有办法知道当前的工作目录.我最好配置命令提示符本身来显示当前目录,就像Linux的控制台一样.


按照@Daniel的建议,我做了这些:

  • 由于我的工作在Windows 7上,没有.ghci文件(我认为这是类Unix操作系统),所以我创建了一个文件ghci.confC:\Users\Apelles\AppData\Roaming\ghc文件夹,因为它是在这里指示.
  • 复制粘贴了Daniel的答案中的脚本ghci.conf.
  • 然后我开始ghci.exe这是类似控制台的窗口.我注意到它加载了比之前通常用于加载的模块更多的模块.这是快照:

在此输入图像描述

你可以看到它加载了更多的模块,最后一行说,

无法解析提示字符串.使用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
Run Code Online (Sandbox Code Playgroud)

此外,如果我将ghci.conf文件重命名为某个随机名称,然后启动ghci.exe,则会加载这些模块: 在此输入图像描述

正如我之前所说的,它加载的模块少的数量,这意味着与ghci.conf,ghci.exe做了成功,但在某些时候会失败.如何解决?

jp0*_*121 29

System.Directory.getCurrentDirectory


Бој*_*ски 5

我不知道这是“正确”的方式做到这一点,但因为:!允许shell命令,你也可以(你的操作系统),相应的shell命令把它读出来的目录或内容(所以cdls和喜欢)。例如,您可以编写:

:! cd
Run Code Online (Sandbox Code Playgroud)

这取决于您需要该目录的内容。如果您只想在控制台中将其打印出来,则可以提供帮助。

祝一切顺利!


Dan*_*her 4

将 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
Run Code Online (Sandbox Code Playgroud)

在文件中.ghci

在第一行中,我们定义cur :: String -> IO String获取当前目录并返回 ghci 命令以相应地设置提示。然后我们定义一个doprompt执行该操作的 ghci 命令以及一个更改目录和设置提示的命令。最后一行:doprompt在启动时执行。

不幸的是,这并没有反映目录的更改,之后:cd dir必须做一份手册,或者使用它来更改目录。:doprompt:mycd

getCurrentDirectory为了避免提示太长,可以通过删除文件路径的初始部分来操纵结果。

这种简单方法的另一个缺点是提示不再包含有关已加载模块的信息。我相信所有这些都可以克服,但我现在没有足够的动力去挖掘。