2013-02-02 26 views
9

tôi thấy mình thường muốn làm các lệnh đơn giản như:zsh: Mở rộng một cuộc tranh luận trước đó trong dòng lệnh hiện tại

cp /really/long/path/from/file.txt /really/long/path/to/file.txt

Mặc dù tôi đã sử dụng các phím tắt như !!!$ thường, nó sẽ được tốt đẹp để có thể tham chiếu đối số cuối cùng trong dòng lệnh hiện tại (và tùy chọn mở rộng nó để chỉnh sửa). Có cách nào để làm điều này trong zsh, hoặc một số thủ thuật tương đương khác để tiết kiệm thời gian?

Trả lời

21

Nói chung, bạn có thể tham khảo từ riêng lẻ trong dòng lệnh hiện tại sử dụng mở rộng lịch sử.

$ cp /really/long/path/from/file.txt !#:1:s/from/to 

hoặc

$ cp /really/long/path/from/file.txt !#:$:s/from/to 

Các !# là mở rộng lịch sử cho dòng lệnh gõ cho đến nay. :1 chỉ định đối số đầu tiên trong việc mở rộng đó (trong trường hợp này, đường dẫn tệp dài). :$ có thể được sử dụng để tham khảo đối số cuối cùng, độc lập với số lượng đối số đã được nhập cho đến thời điểm này. :s/from/to thực hiện thay thế văn bản trên từ đã chọn.

Đối với nhiệm vụ này, bạn cũng có thể sử dụng mở rộng cú đúp:

$ cp /really/long/path/{from,to}/file.txt 

(Lưu ý: cả hai được lấy từ bash, nhưng cũng làm việc trong zsh Có thể có zsh thủ đoạn -only khác rằng tôi. không biết.)

+0

Hoàn hảo, hai tính năng đó chính xác là những gì tôi đang tìm kiếm. Tôi nghĩ rằng việc mở rộng cú đúp có lẽ là cách thông minh hơn về nó, đặc biệt là vì tôi có thể quên '! #' Có nghĩa là dòng hiện tại – robbles

1

Bạn có thể nhấn Tab để mở rộng nội dung trên zsh. Ví dụ:

Nếu tôi làm lệnh này đầu tiên

% ls /etc 

Và trong dòng tiếp theo này tôi làm

% !!<Tab> 

Các !! sẽ được thay thế bằng

% ls /etc 

Vì vậy, tôi có thể chỉnh sửa theo cách tôi muốn. Điều này làm việc cho rất nhiều thứ như * và biến môi trường. Ví dụ khai thác các Tab chủ chốt sau khi $TERM, sẽ thay thế (mở rộng nó) với (ví dụ như trong trường hợp của tôi) xterm-256color

+0

Điều đó rất hữu ích - Tôi không biết bạn có thể mở rộng lịch sử trong dòng lệnh hiện tại. Bạn có biết có cách nào để "hoàn tác" một bản mở rộng không? – robbles

+1

không chắc chắn với các ràng buộc emacs, nhưng với bindings vi bạn nhấn 'esc' sau đó' u' để hoàn tác hành động cuối cùng. –

+0

Điều này có nghĩa là đối số đầu tiên trước đó có thể được mở rộng bằng '!!: 1' chỉ để rõ ràng :) – dezza

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