2012-06-28 28 views
21

Tôi đã bắt đầu tự dạy mình Haskell và tôi đã cài đặt The Haskell Platform cho Windows. Tôi đang sử dụng WinGHCi kể từ bây giờ. Tôi đã học được rằng nó có lệnh :cd được sử dụng để thay đổi thư mục. Nhưng câu hỏi đặt ra là, làm cách nào để biết tôi hiện đang ở trong thư mục nào? Mà không biết rằng đầu tiên tại sao tôi muốn thay đổi thư mục. Tôi đã tìm kiếm rất nhiều nhưng không thể tìm thấy câu trả lời.Cách xem thư mục làm việc hiện tại trong WinGHCi

Hãy cho tôi biết nếu có cách nào để biết thư mục làm việc hiện tại. Tốt hơn là tôi muốn cấu hình nhắc lệnh chính nó để hiển thị thư mục hiện tại, khá giống với Console của Linux.


Sau @ đề nghị Daniel, tôi đã làm những:

  • Kể từ khi tôi làm việc trên Windows 7, không có .ghci tập tin (Tôi nghĩ rằng đó là cho Unix-like OS), vì vậy tôi đã tạo ra một file ghci.conf trong C:\Users\Apelles\AppData\Roaming\ghc thư mục, như it is instructed here.
  • Sao chép dán tập lệnh từ câu trả lời của Daniel thành ghci.conf.
  • Sau đó, tôi bắt đầu ghci.exe là cửa sổ giống giao diện điều khiển. Tôi nhận thấy rằng nó nạp thêm vài mô-đun hơn nó thường được sử dụng để tải trước. Dưới đây là ảnh chụp:

enter image description here

Như bạn có thể thấy nó tải nhiều mô-đun, và dòng cuối cùng nói,

Không thể phân tích chuỗi nhắc. Sử dụng cú pháp Haskell.

Điều đó có nghĩa là gì? Dòng nào gây ra sự cố (từ tập lệnh sau)?

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 

Ngoài ra, nếu tôi đổi tên ghci.conf tập tin vào một số tên ngẫu nhiên, và sau đó bắt đầu ghci.exe, nó tải các module: enter image description here

Như tôi đã nói trước đây, nó tải ít số mô-đun, có nghĩa với ghci.conf, ghci.exe thực hiện thành công nhưng không thành công tại một số điểm. Cách khắc phục điều đó?

+8

Hãy thử 'Prelude>:! pwd' (hoặc bất kỳ Windows nào tương đương với pwd). Tôi nghĩ rằng WinGHCi chạy một ghci bình thường bên dưới, vì vậy mà nên làm việc. –

+0

@DanielFischer: Điều đó hoạt động tốt. Nó có thể được cấu hình các dấu nhắc lệnh chính nó? – Nawaz

+0

Có, bạn có thể cấu hình lời nhắc bằng dấu nhắc ': set '(gõ':? 'Để được trợ giúp ngắn về lệnh ghci). Đó là mỗi phiên, tuy nhiên. Để làm cho nó vĩnh viễn, hãy thực hiện nó trong tệp '.ghci' của bạn (tôi nghĩ chúng được gọi khác nhau trên Windows, không nhớ cái gì). Tôi không chắc chắn làm thế nào để thiết lập nó vào thư mục hiện tại, mặc dù. –

Trả lời

3

giải pháp Một người đàn ông nghèo để thiết lập nhanh chóng ghci vào thư mục làm việc hiện tại sẽ được đặt

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 

trong file .ghci.

Trong dòng đầu tiên, chúng tôi xác định cur :: String -> IO String nhận thư mục hiện tại và trả về lệnh ghci để đặt lời nhắc tương ứng. Sau đó, chúng ta định nghĩa một lệnh ghci doprompt thực hiện hành động đó và một lệnh để thay đổi thư mục và thiết lập dấu nhắc. Dòng cuối cùng thực hiện :doprompt khi khởi động.

Thật không may, điều đó không làm cho :cd dir phản ánh thay đổi của thư mục, bạn sẽ phải thực hiện thủ công :doprompt sau đó hoặc sử dụng :mycd để thay đổi thư mục.

Để tránh các lời nhắc quá dài, người ta có thể thao tác kết quả của getCurrentDirectory bằng cách thả phần ban đầu của đường dẫn tệp.

Một hạn chế khác đối với phương pháp đơn giản đó là lời nhắc không chứa thông tin về các mô-đun đã nạp nữa. Tôi tin rằng tất cả những gì có thể được khắc phục, nhưng tôi không đủ năng lực để làm việc đào bới bây giờ.

+0

Hãy để tôi thử điều này. Hiện tại, +1 để tìm cách trả lời. – Nawaz

+0

Tôi đã thử trên Windows và không hoạt động. Tôi đã thêm những điều mà tôi đã làm, cho câu hỏi của tôi. Nhìn thấy nó. – Nawaz

+0

Tôi rất tiếc khi nghe điều đó. Bất kỳ dấu hiệu nào không thành công? (Tôi chưa thấy chỉnh sửa cho câu hỏi của bạn) –

21

System.Directory.getCurrentDirectory

Các vấn đề liên quan