2012-03-20 25 views
6

Tôi muốn tích hợp trình định dạng mã nguồn Uncrustify với Vim. Bất kỳ tùy chọn nào dưới đây đều đủ.Vim autocmd (lưu tệp, chạy mã định dạng, tải lại tệp)

  1. Format mã mà tôi hiện đang chỉnh sửa (ví dụ: khi gq được nhấn).
  2. Định dạng mã khi tôi lưu tệp và sau đó tải lại tệp đã định dạng vào cửa sổ Vim hiện tại.

Tùy chọn 1 thích hợp hơn. Tôi đã thử

set formatprg=uncrustify\ -c ~/misc/uncrustify.cfg --no-backup 

tức là tôi gọi Uncrustify với tùy chọn dòng lệnh. Điều này không hoạt động. Vi đưa ra lỗi E518: Unknown option: ~/misc/uncrustify.cfg.

Đối với phương án 2, tôi đã thử sau đây trong tập tin vimrc

autocmd bufwritepost *.cpp ! ~/bin/uncrustify -c ~/misc/uncrustify.cfg --no-backup <afile> 

Các tập tin được định dạng sau khi tiết kiệm, nhưng tôi phải tự tải lại các tập tin vào Vim.

Trả lời

4

Các bạn đã thử khoảng trắng thoát:

:set formatprg=uncrustify\ -c\ ~/misc/uncrustify.cfg\ --no-backup

CẬP NHẬT

uncrustify in "Parsing: 170 byte ..." tin nhắn đến thiết bị lỗi chuẩn vì vậy chúng tôi cần phải chuyển hướng nó vào /dev/null:

:set formatprg=uncrustify\ -c\ ~/misc/uncrustify.cfg\ -l\ CPP\ --no-backup\ 2>/dev/null

gq hoạt động trên đường kẻ, do đó bạn có thể chọn các đường cần thiết trong chế độ trực quan và thực hiện gq. Ví dụ: nếu bạn muốn định dạng lại toàn bộ tệp, hãy thực thi ggVGgq.

Thông tin thêm tại :help gq

+0

Điều đó đã xóa lỗi VI. Tôi cũng đã phải thêm tùy chọn -l để chỉ định ngôn ngữ là CPP, vì đầu vào không xác thực là từ stdin. Tuy nhiên, nhấn gq trong vi không định dạng tệp. Nếu tôi nhấn nó một lần nữa, thì chỉ dòng hiện tại được định dạng và dòng sau được thêm vào tệp đang được chỉnh sửa - "Phân tích cú pháp: 57 byte (57 ký tự) từ stdin dưới dạng CPP ngôn ngữ". Tôi nghĩ rằng những gì tôi đang thiếu là làm thế nào để cấu hình lệnh formatprg để đọc toàn bộ tập tin, và thứ hai ngăn chặn đầu ra của dòng trên vào tập tin đang được chỉnh sửa. – user1280213

+0

@ user1280213 Tôi đã cập nhật câu trả lời, hy vọng rằng sẽ giúp – galymzhan

+0

Cảm ơn. Điều đó đã giúp. – user1280213

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