Thực thi tập lệnh bash từ vim


21

Tôi sử dụng vim cho bash scripting. điều đôi khi là tôi không muốn tạo một tệp mới, làm cho nó có thể thực thi được, thực thi nó và sau đó loại bỏ nó. Tôi có nghĩa là các kịch bản sẽ được sử dụng chỉ một lần.

Ví dụ, tôi mở vim và gõ này:

#!/bin/bash

ll | while read line
do
    echo $line
done

Tôi không lưu tập tin này, tôi chỉ sử dụng vim để đơn giản hóa bash-scripting. Tôi biết tôi có thể thực thi một lệnh bash thông qua !trong vim. Nhưng những gì về việc thực hiện tất cả mọi thứ trong bộ đệm?


4
Bạn biết bạn có thể chỉnh sửa dòng lệnh hiện tại trong Vim <C-x><C-e>và thực hiện nó trên ghi, phải không?
romainl

Nếu bạn chạy bash với tùy chọn này set -o vi, bạn có thể nhấn Esc-vđể chỉnh sửa dòng lệnh trong vi. Sau đó Esc-:wqđể thực thi.
roblogic

Câu trả lời:


35

Tôi đã viết một câu trả lời khá rộng rãi về vấn đề này trên stack-overflow . Ý tưởng cơ bản là vì lệnh write là về việc viết không lưu , bạn có thể viết văn bản trong bộ đệm của mình vào một chương trình bên ngoài, chẳng hạn như python hoặc bash. Trong trường hợp của bạn, bạn sẽ muốn làm một cái gì đó như:

:w !bash

hoặc là

:w !sh

Các lệnh này theo nghĩa đen chỉ cần viết văn bản trong bộ đệm của bạn trực tiếp vào chương trình bạn chỉ định !, rất tiện lợi vì sau đó bạn không cần phải lưu tệp. Tất nhiên, bạn cũng có thể làm một cái gì đó như:

:w | !bash %

lưu tập tin của bạn và sau đó chạy nó dưới dạng tập lệnh bash. Bạn có thể chọn bất cứ ai có ý nghĩa hơn đối với bạn.


Có cách nào để cung cấp tùy chọn một đối số theo cách này? Tôi đã thử :w !bash -a testnhưng nhận được "không thể thực thi tệp nhị phân"
St.Antario

@ St.Antario Hmm. Tôi chắc chắn phải có một số cách, nhưng bash của tôi khá gỉ (tôi chủ yếu sử dụng các cửa sổ). Khi tôi thử điều đó trong cygwin với một testtệp trống , nó sẽ chạy tốt cho tôi. Lệnh phải làm là gì và nên testchứa gì?
DJMcMayhem

Trường hợp thực tế của tôi khá phức tạp, vì vậy hãy để nó chỉ in ra đối số được truyền vào. BTW, ý bạn là gì test ? testchỉ là một đối số để -a.
St.Antario

1
@ St.Antario Ồ, tôi hiểu rồi. Tôi nghĩ rằng nó testđược cho là một tập tin. Tôi không thực sự chắc chắn phải làm gì. Nếu bạn đang thử một cái gì đó phức tạp, tốt hơn là chỉ lưu nó trong một tệp. Có thể đáng để hỏi như một câu hỏi riêng biệt để bạn có thể cung cấp thêm chi tiết. Đó có lẽ cũng là một câu hỏi tốt cho Unix và Linux
DJMcMayhem

4

Kịch bản: bạn đang làm việc trong bash shell. Trước tiên, hãy đảm bảo chế độ chỉnh sửa cục bộ là vi:

$ set -o vi

Bây giờ, khi bạn thấy mình làm việc với một lệnh dài như sau, hãy nhấn Esc+ v.

$ fjhwfq this is my long command

Điều này sẽ tải lệnh của bạn vào một viphiên tạm thời . Bây giờ bạn có thể chỉnh sửa nó theo ý muốn và thậm chí thêm một lệnh khác ...

fjhwfq some long command
ls -l

Khi bạn chỉnh sửa xong, hãy gõ Esc :wqvà (các) lệnh sẽ được thực thi, ví dụ:

$ fjhwfq some long command
fjhwfq some long command
bash: fjhwfq: command not found
ls -l
total 44
-rw-r--r-- 1 ropata Domain Users 24073 Nov 10 14:17 _viminfo
drwxr-xr-x 1 ropata Domain Users     0 Jul 15 13:57 bin/
-rw-r--r-- 1 ropata Domain Users   956 Nov  7 10:43 custom_env

3
có thể không hoạt động nếu bạn có macbook mới mà không có Escchìa khóa;)
roblogic

1
MacBook mới không có Escchìa khóa!? Làm thế nào họ có thể sử dụng Vim sau đó?
Hubro

1
Bây giờ tôi đã thử nó, macbook mới touchbar thingy không hiển thị một Escchìa khóa khi chạy Vim trong một thiết bị đầu cuối.
roblogic
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.