2010-05-05 19 views
6

Tôi đang cố gắng tự động hóa tiêu đề nhận xét tệp. Tôi đang cố gắng tìm ra cách để chèn kết quả của lệnh uuidgen vào tiêu đề của tôi bằng cách sử dụng autocmd của vim.vim + C++: chèn một uuid vào một điều khoản bảo vệ

Bên trong tiêu đề, văn bản giữ chỗ là hiện tại, như thế này: dòng

#ifndef _UUID_ 
#define _UUID_ 

// Code goes here! 

#endif // _UUID_ 

Các autocmd để cư _UUID_ trong vimrc là:

autocmd bufnewfile *.h exe "1,$s/_UUID_/" . r!uuidgen ."/g" 

Vấn đề là sắp tới ở dưới r! uuidgen. Làm cách nào để chèn kết quả thực thi lệnh shell dưới dạng văn bản trong dòng autocmd? Hoặc trong một lệnh thay thế vi cho vấn đề đó?

Trả lời

5

Sử dụng hệ thống(), và đừng quên chomp kết quả ->matchstr(system('uuidgen'), "[^\n\r]*")

NB: Đối với các mẫu phức tạp hơn, bạn có thể sử dụng các giải pháp như mu-template. Ví dụ: trong c-header.template, bạn phải thay đổi giá trị s:guard thành cuộc gọi đến matchtr() + system().

+0

Làm việc, cảm ơn nhiều! Sẽ phải kiểm tra các mẫu của bạn đôi khi. –

1

dẫn dòng autocmd của tôi sau khi đề nghị Lục là, cho hậu thế vì lợi ích:

autocmd bufnewfile *.h exe "1,$g/_UUID_/s/_UUID_/" . matchstr(system('uuidgen'), "[^\n\r]*") 
+0

Một "% s/_UUID_" đơn giản là đủ. Tuy nhiên, tôi không chắc chắn về thứ tự mà trong đó một số autocommands được thực hiện. Đó là một trong những lý do tôi luôn luôn thích dựa vào các chức năng (hoặc ftplugins, hoặc vimrcs địa phương), nơi autocommands có liên quan. –

+0

@Luc Hermitte - vim-fu của tôi đang được cải thiện. Cảm ơn vì những lời khuyên. –

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