Bagaimana saya bisa mengingat perintah histori bernomor untuk diedit?

17

Saya sering mencari perubahan dengan history | grep 'string'

Saya mendapatkan daftar perintah dalam histori saya, bersama dengan nomor baris histori), mis

history | grep 'git'

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

Sekarang saya dapat mengingat dan menjalankan perintah dalam sekali jalan !nnn, misalnya:

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

Pertanyaan saya adalah: Bagaimana saya bisa mengingat perintah sejarah bernomor dan tetap pada baris perintah untuk mengedit dan tidak langsung mengeksekusi 'sebagaimana adanya', seperti itu !, sehingga saya dapat mengubah beberapa hal peform presing return?

Michael Durrant
sumber

Jawaban:

12

Sejak itu saya mengadopsi pendekatan lain untuk ini - menggunakan ![line-number]:p

Ini mencetak pernyataan dan menambahkannya ke histori tetapi tidak benar-benar menjalankannya. Saya kemudian melakukan panah dan mengubahnya sesuai keinginan.

Saya menggabungkan ini dengan hgalias saya ( alias hg='history | grep ') untuk mengingat perintah sejarah berdasarkan beberapa teks.

Contoh:

$ 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

Saya menggunakan ini sebagai tambahan ctrl- r(membalikkan pencarian sejarah) karena kadang-kadang saya lebih suka melihat daftar langsung semua kemungkinan untuk string yang diberikan daripada hanya output pada 1 baris yang ctrl- rmenunjukkan. Setelah itu hg [string]saya akan lakukan ![line-number]search_stringseperti pada gambar di hg checkoutatas.

Michael Durrant
sumber
8

Jika Anda mengatur histverify opsi , mis

shopt -s histverify

maka semua penggantian riwayat dibawa untuk diedit alih-alih dieksekusi segera. Anda kemudian perlu menekan Enterdua kali alih-alih sekali setelah mengetik !755untuk menjalankan perintah.

Anda dapat mendorong teks sewenang-wenang ke daftar riwayat dengan history -s. Gabungkan ini dengan fc -nluntuk mendaftar entri sejarah tertentu.

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

lalu tekan Upuntuk mengingat apa yang sekarang menjadi entri riwayat terbaru.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
6

Anda dapat mencari kembali melalui sejarah menggunakan Ctrl+ R. Jika entri histori lama gunakan mouse (bukan keyboard, yang menghentikan pencarian) untuk menyalin dan menempel bagian dari perintah untuk mengedit kembali.

Saat @rijsg berkomentar, Anda dapat menggunakan panah (kiri dan kanan) atau tombol yang setara untuk menghentikan pencarian dan mulai mengedit.

Zelda
sumber
2
Setiap tombol panah atau perintah yang setara ( Ctrl-amisalnya) akan menghentikan pencarian meninggalkan entri sejarah saat ini di prompt perintah, tanpa menjalankannya. Ini mungkin atau mungkin tidak cukup, tergantung pada apa yang diinginkan @Michael.
njsg
2

Jika Anda mengonfigurasi file .bashrc Anda untuk menggunakan editor vi pada baris perintah, itu akan membuat pengeditan baris perintah menjadi jauh lebih kompleks.

Pertama, setelah "set -o vi" diaktifkan, Anda cukup menekan "<esc> k" , lalu terus tekan "k" untuk membuka file histori seolah-olah, jika Anda melewati entri, gunakan "j" untuk turun .

CATATAN: saat menggunakan vi, ada dua mode: perintah dan edit untuk masuk ke mode perintah tekan ESCAPE KEY ONCE, kemudian a, A, i, I, I, dll untuk menyisipkan.

Pad kursor sederhana di vi: kiri = h, turun = j, atas = k, kanan = l http://linuxmeister.net/vi/vi-Summary.jpg

Saya telah menambahkan semua entri yang diperlukan untuk membuat pekerjaan ini di: http://linuxmeister.net/Notes/bashrc-simple.html

Jadi, berdasarkan informasi yang sangat membantu di atas, saya dapat menggunakan "histori" dan MENGHAPUS garis dari "histori", TANPA mengeksekusinya. (TERIMA KASIH ATAS POSTING ITU!)

jika shopt terdaftar dan histverify "off" a! akan EXECUTE segera,

jika Anda telah menambahkan ke .bashrc Anda, atau mengetik: shopt -s histverify , maka a! memungkinkan pengeditan, misalnya:

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

ketika saya menekan 5 perintah berikut muncul, tetapi TIDAK mengeksekusi

### jika histverify adalah "on".

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

Ingat bahwa Linus dan Richard menciptakan alat Linux dan GNU untuk mengambil keuntungan dari UNIX. Editor vi (dibuat oleh Bill Joy) adalah salah satu alat terbaik untuk dikuasai karena pada setiap distribusi UNIX dan Linux.

Semua editor baris perintah lainnya perlu dimuat dan memerlukan perangkat lunak tambahan. Menggunakan GUI di Linux (selain Firefox, Thunderbird, dan OpenOffice) seperti menderek Diesel 4x4 Anda dengan VW Beetle 1968 ... itu akan berhasil, tetapi tentu saja itu tidak masuk akal.

Ingat apa yang dikatakan Kernigan tentang GUI, "apa yang Anda lihat adalah yang Anda dapatkan".

LinuxMeister
sumber
-1
echo !number

lalu tekan panah atas, hapus kata echodan edit sisanya; tekan enter untuk menjalankan.

Andrzej
sumber