2011-10-09 21 views
13

Tôi đã suy nghĩ về công việc chỉnh sửa Haskell lý tưởng của tôi:Tự động tải lại ghci & chạy hlint trên bản cập nhật tập tin

  • tôi mở ba nhà ga (split sử dụng iterm2).
  • Thiết bị đầu cuối 1 chạy vim để chỉnh sửa các tệp nguồn haskell.
  • Thiết bị đầu cuối 2 tự động chạy hlint trên các tệp đã thay đổi khi bật tệp trong thư mục hiện tại hoặc cập nhật thư mục con hoặc được tạo
  • Thiết bị đầu cuối 3 chạy ghci, tự động tải/tải lại các tệp đã thay đổi.

Có ai đã thiết lập bất kỳ thứ gì như thế này không? Mục đích là để có hlint liên tục xem mã của tôi cho các vấn đề về kiểu dáng và cho ghci có sẵn để thay đổi nhanh chóng, mà không phải làm bất cứ điều gì khác ngoài việc lưu tệp trong vim.

Tôi đã nghĩ đến việc sử dụng một cái gì đó như watchr để tự động hóa.

+1

Đối với tự động chạy 'hlint', xem câu trả lời của tôi [ở đây] (http: // stackoverflow.com/questions/6323150/sbt-like-features-in-the-haskell-build-ecosystem/6324784 # 6324784). GHCi là một chút phức tạp hơn vì nó tương tác. – hammar

+3

IMO bạn không thực sự muốn ghci tự động tải lại khi thay đổi, vì tất cả các ràng buộc đều bị mất. Khi tôi có thói quen thỉnh thoảng nhấn 'C-s' trong khi gõ, tôi sẽ luôn luôn tức giận về bản thân mình, vì tôi phải tải lại những ràng buộc tạm thời đó. Tôi cũng có thể đặt chúng trong hồ sơ, nhưng tôi quá lười biếng để làm như vậy. Tải lại một tệp dễ dàng như nhấn [:], [r], [enter] trong chuỗi đó, vậy vấn đề là gì? – fuz

+1

Đây không phải là lý do tại sao emacs được phát minh? :-) – pat

Trả lời

7

Bạn có thể chạy các lệnh shell tùy ý trong vim sử dụng BufWrite autocommand:

Ví dụ, đặt điều này trong ~/.vimrc của bạn:

au BufWrite *.hs !echo % >> ~/saves.txt 

này sẽ chạy echo <CURRENT FILENAME> >> ~/saves.txt mỗi khi bạn lưu một tập tin Haskell.

Vì vậy, đây là cách dễ dàng để kích hoạt tập lệnh bên ngoài.

Bây giờ bạn có thể viết một số iterm scripts để chuyển tiếp lệnh đến các thiết bị đầu cuối khác của bạn. Một cái gì đó như:

tell my_ghci_terminal 
    write text ":r\n" 
end tell 
tell my_hlint_terminal 
    write text "<RUN HLINT ON WHATEVER>" 
end tell 

Vì vậy, bạn có thể sử dụng autocommand vim để kích hoạt các kịch bản iTerm thích hợp (đi qua các tên tập tin hiện tại vì vậy kịch bản có thể nói ghci và hlint mà tập tin để xử lý).

Có thể bạn sẽ muốn bật và tắt (bạn có thể không muốn làm điều này cho mọi tệp), vì vậy hãy nghĩ đến việc gói chức năng trong hàm vim cho phép bạn chuyển đổi nó (cũng như đặt đối số) cho cách iterm nên tìm thiết bị đầu cuối ghci và hlint của bạn).

1

Bạn có thể thử viết kịch bản cho trình chỉnh sửa của mình móc vào ghci và gửi ":r\n" bất cứ khi nào bạn nhấn C-s. Tôi không biết làm thế nào bạn có thể làm điều đó, nhưng tôi khá lạc quan rằng có một cách sử dụng vim.

2

Không chắc chắn nếu bạn vẫn đang tìm kiếm, nhưng giải pháp cho vấn đề tự động hlint của bạn là Syntastic, tự động chạy hlint hoặc ghc-mod trên tệp của bạn và làm nổi bật các dòng/đặt lên ở các vị trí liệt kê lỗi/cảnh báo/cảnh báo kiểu.

Ngoài ra, khi bạn di chuyển con trỏ lên dòng đó, nó sẽ hiển thị thông báo/nhận xét trên thanh trạng thái.

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