Làm thế nào để chạy lệnh Vim từ shell?


12

Đây có thể là một câu hỏi ngớ ngẩn, nhưng hãy chịu đựng tôi.

Tôi đang tự động hóa một số công việc thông thường tôi làm khi thiết lập môi trường làm việc mới và muốn tự động hóa lệnh Vim :BundleInstall(để cài đặt tất cả các plugin Vim của tôi).

Có thể chạy cái này từ vỏ?

Ngoài ra, có thể có kịch bản chạy Vim, thực thi :BundleInstall, đợi cho đến khi nó hoàn thành và thoát?

Cảm ơn.

Câu trả lời:


14

Từ vim(1)trang người đàn ông:

+ {lệnh}

-c {lệnh}

{lệnh} sẽ được thực thi sau khi tệp đầu tiên được đọc. {lệnh} được hiểu là lệnh Ex. Nếu {lệnh} chứa khoảng trắng, nó phải được đặt trong dấu ngoặc kép (điều này phụ thuộc vào trình bao được sử dụng). Ví dụ: Vim "+ set si" main.c

Lưu ý: Bạn có thể sử dụng tối đa 10 lệnh "+" hoặc "-c".


3
Cảm ơn! Tôi biết tôi cảm thấy ngớ ngẩn ...: - / Phục vụ tôi ngay vì không đọc kỹ trang này. Tôi đã kết thúc bằng cách sử dụng vim +BundleInstall +qall!.
imiric

3

Bạn có thể thực hiện lệnh của bạn như thế này:

vim -E -c BundleInstall -c q

sẽ tránh mở cửa sổ Vim trong thiết bị đầu cuối của bạn.

Lưu ý: Câu trả lời đầu tiên của tôi bao gồm -stùy chọn mà tôi cần cho một ứng dụng khác nhưng không chính xác ở đây vì nó ngăn chặn phần lớn sự thâm nhập của Vim, bao gồm cả việc cung cấp plugin xác định BundleInstalllệnh.


1
Cảm ơn, nhưng vì một số lý do, nó sẽ không làm việc cho tôi.
imiric

1
Bây giờ tôi thấy tại sao. Tôi quên rằng điều đó -skhông chỉ ức chế một số thông điệp nhất định - nó còn ức chế sự thâm nhập - vì vậy định nghĩa của BundleInstall không có nguồn gốc. Một cách để khắc phục đó là thêm một tùy chọn như thế này trước cái đầu tiên -c: --cmd 'runtime plugin/bundle.vim'. Chỉnh sửa tên tập tin cho phù hợp. Xem :help -s-ex.
garyjohn

2

Mặc dù công thức cụ thể của vim ở trên là cách phù hợp để làm điều đó, bạn luôn có thể sử dụng một cách tiếp cận tổng quát hơn như tự động khai thác .


0

Đối với các tình huống mà vim cần tải đầy đủ như thể bạn đã khởi động thủ công, điều này hoạt động:

vim -c "autocmd! CursorHold * <commands to run>"

Ví dụ: tôi muốn chuyển hướng đầu ra của :maptệp từ trình bao, nhưng tôi muốn chụp ánh xạ mà vim- air tạo ra chỉ sau khi nó hiển thị dòng tab của nó (dòng ở trên cùng hiển thị tất cả các tên đệm mở.) Bởi vì nó dường như làm điều này không đồng bộ, chỉ đơn giản là chạy -cchuyển hướng đến một tệp không cho nó thời gian để tạo ánh xạ. Có thể có một cách tốt hơn, nhưng điều này hiệu quả với tôi, đặc biệt là vì tôi đã updatetimeđặt thành 100(0,1 giây), điều này ảnh hưởng đến thời gian cho đến khi CursorHoldsự kiện diễn ra. Theo mặc định, vim đặt nó thành 4 giây.

vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.