Làm thế nào để gọi lại một lệnh trước đó (không thực hiện) để thay đổi nó?


14

Tôi không thể nhớ mẹo mà tôi có thể nhận lệnh cuối cùng mà không cần chạy nó:

giả sử tôi muốn có thể truy cập lệnh! 1255 khi nhấn phím mũi tên lên và sửa đổi lệnh. Vì vậy, mẹo để gọi lệnh, làm cho nó được hiển thị trong dòng lệnh nhưng không được thực thi và sau đó có thể truy cập thông qua phím mũi tên lên?

Tôi đã cố gắng đặt một tiếng vang, nhưng sau đó tôi có một tiếng vang trước lệnh, tôi không nhớ làm thế nào để làm điều đó một cách chính xác.


4
nếu tôi hiểu đúng yêu cầu của bạn, có lẽ chỉ cần thử một hậu tố ": p" như trong "! 1255: p"
Theophrastus

@Theophrastus vâng, chính xác, tôi đã quên điều này: phần p và dường như không thể có được các từ khóa phù hợp trong google để tìm nó ... Cảm ơn các bạn.
Arturas M

Câu trả lời:


21
!1255:p

Sẽ làm điều này

!là lịch sử nhớ lại
1255
:pin số dòng nhưng không thực hiện

Sau đó, bạn có thể sử dụng mũi tên lên để lấy lại lệnh trước đó (chưa được thực hiện) và bạn có thể thay đổi nó khi bạn cần.

Tôi thường kết hợp điều này với hg("Lịch sử Grep") - bí danh yêu thích của tôi.

$ alias hg  # Maybe use hgr instead if you are a Mercurial CLI user.
alias hg='history | tail -200 | grep -i'

Điều này tìm kiếm văn bản trên một dòng lịch sử gần đây, bất kể trường hợp nào và được sử dụng theo cách này:

Khi tôi muốn tìm kiếm các lệnh vi gần đây để chỉnh sửa một tệp nhất định và sau đó tôi muốn sử dụng lại một trong số chúng để chỉnh sửa cùng một tệp nhưng với phần mở rộng tệp khác.

$ hg variables
 6153  vi Variables/user-extensions.js 
 6176  vi Variables/user-extensions.js 
 6178  vi Variables/user-extensions.js 
 6190  vi Variables/user-extensions.js 
 6230  hg variables
$ # Notice the difference in case with V and v is ignored
$ !6190:p
vi Variables/user-extensions.js 
$ ["up-arrow"]
$ vi Variables/user-extensions.[now change .js to .html]

Tôi cũng xác định hga("Lịch sử Grep All") để tìm kiếm toàn bộ lịch sử của mình:

$ alias hga
alias hga='history | grep -i'

nhưng tôi không sử dụng nó nhiều vì lịch sử của tôi (cố ý) rất lớn và tôi nhận được quá nhiều đầu ra mà sau đó ảnh hưởng đến việc cuộn lại các trang thông qua trong thiết bị đầu cuối của tôi.


2
Lưu ý rằng đó hgcũng là CLI của Mercurial .
tôi

1
Lưu ý tốt. Thêm vào để trả lời.
Michael Durrant

12

Đánh Ctrl+ R(liên kết khóa tìm kiếm tăng dần của emacs khi @gnp chuyển động trong các nhận xét) trong thiết bị đầu cuối cho phép bạn tìm kiếm trong lịch sử cho một lệnh cụ thể. Lệnh sẽ được hiển thị và có thể được chỉnh sửa trước khi thực hiện. Bạn sẽ thấy một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

Nguồn


1
Cảm ơn! Không thực sự là câu trả lời trực tiếp cho câu hỏi của tôi, nhưng tôi không biết điều này và tôi thấy nó thực sự hữu ích. Cảm ơn rât nhiều!
Arturas M

1
Cũng đáng chú ý, Ctrl + R là tìm kiếm gia tăng ngược của emacs. Nhiều tổ hợp phím emacs hoạt động trên nhiều công cụ GNU: Ctrl + A, Ctrl + E, Ctrl + K, Ctrl + Y và các công cụ khác.
GnP

@gnp Cảm ơn thông tin, tôi không biết điều đó.
Hamza Abbad

Mất một thời gian dài để tôi cảm thấy thoải mái với ctrl-r sau khi học được hai điều quan trọng. 1. bỏ qua đầu ra như bạn đang gõ. 2. Hãy chắc chắn rằng bạn biết đủ để gõ đủ duy nhất cho lệnh bạn muốn
Michael Durrant

7

các fclệnh làm những gì bạn muốn

fc -l <number> sẽ liệt kê lịch sử lệnh xung quanh số đó

fc <number>sẽ mở mục nhập dòng lệnh đó trong vim(hoặc bất cứ điều gì trình soạn thảo mặc định của bạn là tôi cho rằng), vì vậy bạn có thể chỉnh sửa nó và khi :wqđó nó sẽ có sẵn cho bạn với mũi tên lên.


7

Trong bash Ctl+alt+ekhông mở rộng shell, do đó gõ !1255và sau đó nhấn tổ hợp này sẽ thay thế dòng hiện tại bằng nội dung của mục lịch sử 1255


đã không làm điều đó cho tôi trên Ubuntu
Michael Durrant

@MichaelDurrant, tôi mới thử vào ngày 14.04 (kubfox) và nó hoạt động với tôi. Nó được ghi lại man bashdưới dạng shell-expand-line. Có lẽ có một phím tắt được đặt cho gnome-terminal.
adonis

@adonis Tôi chưa bao giờ biết cái này, cảm ơn bạn rất nhiều, quả thực nó cũng làm những gì tôi yêu cầu. Và thực sự tôi có thể tìm thấy nhiều sử dụng hơn từ chức năng này. Tuyệt vời! Cảm ơn!
Arturas M

4

Bạn muốn sử dụng lệnh fc trong khi chỉ định danh sách thay vì thực thi (-l)

fc -ln -1
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.