Làm thế nào tôi có thể nhớ lại một lệnh lịch sử được đánh số để chỉnh sửa?


17

Tôi thường xuyên tìm kiếm các thay đổi với history | grep 'string'

Tôi nhận được một danh sách các lệnh trong lịch sử của tôi, cùng với số dòng lịch sử), vd

history | grep 'git'

  755  git status
 1535  git push origin master
 1570  git merge origin/one-146
 1667  git reset --hard origin/master

Bây giờ tôi có thể nhớ lại và thực hiện một lệnh trong một lần !nnn, ví dụ:

!755
git status
# On branch master
nothing to commit, working directory clean

Câu hỏi của tôi là: Làm thế nào tôi có thể nhớ lại một lệnh lịch sử được đánh số và ở lại dòng lệnh để chỉnh sửa và không thực thi nó ngay lập tức 'như vậy', theo cách đó !, để tôi có thể thay đổi một vài điều trong quá trình trả về?

Câu trả lời:


12

Kể từ khi tôi áp dụng một cách tiếp cận khác - sử dụng ![line-number]:p

Điều này in ra tuyên bố và thêm nó vào lịch sử nhưng không thực sự thực hiện nó. Sau đó tôi làm mũi tên lên và thay đổi nó như mong muốn.

Tôi kết hợp điều này với hgbí danh của tôi ( alias hg='history | grep ') để gọi lại các lệnh lịch sử dựa trên một số văn bản.

Thí dụ:

$ hg checkout

17140   git checkout README.rdoc
17143   git checkout master
17201   git checkout README.rdoc
17204   git checkout master
17923   git checkout .bashrc
18151   git checkout v311

Tôi sử dụng điều này ngoài ctrl- r(tìm kiếm lịch sử ngược) bởi vì đôi khi tôi thích xem danh sách ngay lập tức tất cả các khả năng cho một chuỗi nhất định thay vì chỉ đầu ra trên 1 dòng ctrl- rhiển thị. Sau đó hg [string]tôi sẽ làm ![line-number]search_stringnhư trong hg checkouthình trên.


8

Nếu bạn đặt histverify tùy chọn , ví dụ:

shopt -s histverify

sau đó tất cả các thay thế lịch sử được đưa lên để chỉnh sửa thay vì được thực hiện ngay lập tức. Sau đó, bạn sẽ cần nhấn Enterhai lần thay vì một lần sau khi gõ !755để thực thi lệnh.

Bạn có thể đẩy văn bản tùy ý vào danh sách lịch sử với history -s. Kết hợp điều này với fc -nlđể liệt kê một mục lịch sử cụ thể.

history -s "$(fc -nl 755 755)"

sau đó nhấn Upđể nhớ lại những gì bây giờ là mục lịch sử mới nhất.


6

Bạn có thể tìm kiếm lại trong lịch sử bằng cách sử dụng Ctrl+ R. Nếu mục lịch sử dài, hãy sử dụng chuột (không phải bàn phím, dừng tìm kiếm) để sao chép và dán một phần của lệnh để chỉnh sửa lại.

Như @rijsg đã nhận xét, sau đó bạn có thể sử dụng mũi tên (trái và phải) hoặc các phím tương đương để dừng tìm kiếm và bắt đầu chỉnh sửa.


2
Bất kỳ phím mũi tên hoặc lệnh tương đương ( Ctrl-aví dụ) sẽ dừng tìm kiếm để lại mục lịch sử hiện tại trong dấu nhắc lệnh, mà không thực hiện nó. Điều này có thể hoặc không đủ, tùy thuộc vào những gì @Michael muốn.
njsg

2

Nếu bạn định cấu hình tệp .bashrc của mình để sử dụng trình soạn thảo vi tại dòng lệnh, nó sẽ khiến việc chỉnh sửa dòng lệnh trở nên ít phức tạp hơn.

Lần đầu tiên, khi "set -o vi" được bật, bạn chỉ cần nhấn "<esc> k" , sau đó tiếp tục nhấn "k" để đi lên tệp lịch sử, nếu bạn đi qua một mục, hãy sử dụng "j" đi xuống .

LƯU Ý: khi sử dụng vi, có hai chế độ: lệnh và chỉnh sửa để vào chế độ lệnh, nhấn phím ESCAPE KEY ONCE, sau đó a, A, i, I, v.v. để chèn.

Bàn phím con trỏ đơn giản trong vi: left = h, down = j, up = k, right = l http://linuxmeister.net/vi/vi-Summary.jpg

Tôi đã thêm tất cả các mục cần thiết để thực hiện công việc này tại: http://linuxmeister.net/Notes/bashrc-simple.html

Vì vậy, dựa trên các thông tin rất hữu ích ở trên, tôi đã có thể sử dụng "lịch sử" và NHẬN một dòng từ "lịch sử", mà KHÔNG thực hiện nó. (CẢM ƠN BẠN ĐÃ ĐĂNG BÀI ĐÓ!)

nếu shopt được liệt kê và histverify là "tắt" a! sẽ EXECUTE ngay lập tức,

nếu bạn đã thêm vào .bashrc hoặc gõ: shopt -s histverify , thì a! cho phép chỉnh sửa, ví dụ:

history
    1  more .bashrc
    2  history
    3  shopt
    4  . ./.bashrc
    5  shopt | grep hist
    6  history
    7  alias
    8  history
    9  shopt
   10  history

->! 5

Khi tôi nhấn! 5 lệnh sau xuất hiện, nhưng KHÔNG thực thi

### nếu histverify là "bật".

shopt | grep hist
cmdhist         on
histappend      on
histreedit      off
histverify      on
lithist         off

Hãy nhớ rằng Linus và Richard đã tạo ra các công cụ Linux và GNU để tận dụng UNIX. Trình soạn thảo vi (được tạo bởi Bill Joy) là một trong những công cụ tốt nhất để làm chủ vì nó nằm trên MỌI bản phân phối UNIX và Linux.

Tất cả các trình soạn thảo dòng lệnh khác cần được tải và yêu cầu phần mềm bổ sung. Sử dụng GUI trong Linux (không phải Firefox, Thunderbird và OpenOffice) giống như kéo chiếc Diesel 4x4 của bạn với chiếc VW Beetle năm 1968 ... nó sẽ hoạt động, nhưng chắc chắn nó không có ý nghĩa gì.

Hãy nhớ những gì Kernigan nói về GUI, "những gì bạn thấy là tất cả những gì bạn nhận được".


-1
echo !number

sau đó nhấn mũi tên lên, xóa từ echovà chỉnh sửa phần còn lại; nhấn enter để thực thi.

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.