Khi tôi sử dụng:%! để chạy các nội dung của một tập tin thông qua một bộ lọc và bộ lọc không thành công (nó trả về một mã khác 0) và in một thông báo lỗi để stderr tôi nhận được tập tin của tôi thay thế bằng thông báo lỗi này. Có cách nào để nói vim bỏ qua lọc nếu bộ lọc trả về một mã trạng thái chỉ ra một lỗi và/hoặc bỏ qua đầu ra chương trình lọc ghi vào stderr?bộ lọc vim và stdout/stderr
Có những trường hợp bạn muốn tệp của mình được thay thế bằng đầu ra của bộ lọc nhưng thường thì hành vi này là sai. Tất nhiên tôi chỉ có thể hoàn tác việc lọc bằng một phím bấm nhưng nó không phải là tối ưu.
Ngoài ra tôi có một vấn đề tương tự khi viết tập lệnh vim tùy chỉnh để thực hiện việc lọc. Tôi có một kịch bản lệnh gọi một chương trình lọc với hệ thống() và thay thế tệp trong bộ đệm với đầu ra của nó nhưng dường như không có cách nào để phát hiện xem các dòng được trả về bởi hệ thống() có được viết thành stdout hay stderr hay không . Có cách nào để nói với họ ngoài trong kịch bản vim?
Tất nhiên! Với mọi ngôn ngữ kịch bản "thực", nó không phải là vấn đề gì cả. Không nghĩ về điều đó. Mặc dù tôi muốn kịch bản vim nếu có thể bởi vì tôi không muốn có nhiều phụ thuộc vào kịch bản của tôi hơn là cần thiết. – ahe
Tôi biết chỉ có một cách khác: sử dụng 'system()', chuyển hướng stderr đến một tệp tạm thời (hoặc '/ dev/null'), lưu stdout vào một số biến và sử dụng' v: shell_error' để xác định liệu một lệnh có bị lỗi trước hay không đệm ghi đè. Lưu ý rằng các bộ lọc ':!' Thay thế «!» Bằng lệnh trước đó và «%» với tên tệp hiện tại trong khi 'system()' thì không. – ZyX