Saya ingin sedikit meningkatkan alur kerja saya dengan Bash, dan saya sadar saya sering ingin mengeksekusi perintah yang sama ke executable yang berbeda.
Beberapa contoh:
Git (di mana saya ingin dengan cepat mengubah kata kedua):
git diff foo/bar.c
git checkout foo/bar.c
Cat / rm (di mana hanya kata pertama yang harus diubah):
cat foo/is/a/very/long/path/to/bar.c
rm foo/is/a/very/long/path/to/bar.c
Saya tahu saya dapat menekan Ctrl+ alalu Deluntuk menghapus kata pertama, tetapi saya bertanya-tanya apakah ada cara yang lebih cepat untuk melakukannya.
Jawaban:
!$
memperluas kata terakhir dari perintah Anda sebelumnya.Jadi Anda bisa melakukan:
atau:
Contoh Anda kebetulan hanya mengulangi kata terakhir, jadi
!$
berfungsi dengan baik. Jika Anda benar-benar memiliki banyak argumen yang ingin Anda ulangi, dan Anda hanya ingin mengubah kata pertama, Anda bisa menggunakan!*
, yang meluas ke semua kata dari perintah sebelumnya kecuali zeroth.Lihat bagian "EKSPANSI SEJARAH" dari
bash
halaman manual. Ada banyak fleksibilitas di sana.sumber
!$
Anda tidak memiliki kontrol visual penuh dari garis yang Anda jalankan . Ini terkadang bisa berbahaya. Khususnya jika Anda mengalami kesalahan cetak. Dibutuhkan darihistory
apa yang berkembang. Jadi jika Anda menulis perintah terakhir dengan spasi kosong di awal, mungkin perintah ini tidak akan selesai dalam sejarah. Ketika Anda akan menjalankan perintah baru Anda dengan!$
shell tidak akan mengambil parameter dari baris perintah terakhir yang diketik tetapi hanya dari yang terakhir dari sejarah. Di sini sama lebih banyak kata.#
atauecho
jadi saya bisa lihat itu dan itu masuk ke sejarah sehingga saya bisa mendapatkannya kembali dan menjalankannya lagi tanpa awalan penonaktifan.Ctrl+ auntuk pergi ke awal baris, lalu Alt+ duntuk menghapus kata pertama.
sumber
Meta+D
hanya valid jikaemacs
diaktifkan (melaluiset -o emacs
atau secara default). Ini tidak akan berfungsi dalam editor -mode yang lebih rendah atau jikaemacs
dinonaktifkan.C-a
danM-d
jauh lebih cepat untuk mengetik jika tangan Anda sudah dalam posisi mengetik.cat
dan bandingkan apa yang Anda dapatkan saat menekan Home (di^[[H
sini) dan saat menekan Ctrl + a (^A
).Saya tidak yakin apakah itu benar-benar akan lebih cepat atau tidak, tetapi lihat artikel ini, khususnya poin # .3:
sumber
Alt+.
Jika Anda hanya perlu mengulangi bagian terakhir dari salah satu perintah sebelumnya, Anda dapat menggunakan Alt+ .yang akan menempelkan argumen terakhir yang diambil dari baris terakhir dari sejarah.
Jika ditekan lebih dari satu kali akan menggantikan apa yang baru saja disisipkan dengan argumen terakhir dari baris sebelumnya ...
Misal jika 2 perintah terakhir adalah:
Dalam shell saya menulis
rm
dan saya tekan Alt+ .maka akan muncul:jika saya menekan lagi Alt+ .itu akan muncul sebagai gantinya
dan seterusnya...
sumber
bash
. BTW Anda yakin menggunakan bash sebagai shell ?≥
Selain jawaban @jjlin, Anda mungkin tertarik dengan kiat-kiat berikut:
$_
berisi argumen terakhir dari baris perintah sebelumnyaUntuk lebih lanjut tentang ini, lihat bagian "Nama Perintah Readline" dari halaman
bash
manual.misalnya:
sumber
n
kata-kata pertama dalam perintah, dengann = 1
dalam contoh pertama dann = 2
yang kedua. Jawaban jjlin menunjukkan cara menghapus kata pertama (dan dengan menerapkan kembali cara pintas, hapus hinggan
kata - kata). Jawaban Anda mencantumkan beberapa pintasan Bash (yang memang bermanfaat), tetapi tidak ada yang efisien untuk menghapusn
kata-kata pertama .$_
parameter mungkin akan berfungsi jika hanya ada satu argumen (yaitu jika din = m - 1
manam
jumlah total argumen). Sisa dari cara pintas tidak relevan dengan pertanyaan sekalipun.Jika Anda mahir dalam vi, Anda dapat mengaktifkan vi binding di bash (kebanyakan shell?) Dengan menggunakan perintah
set -o vi
. Kemudian, Anda dapat menggunakan tombol vi normal untuk mengedit perintah Anda. Pada contoh pertama Anda, Anda bisa ^wcwmenghapus "diff", lalu mengubahnya menjadi checkout.Mungkin tidak ada gunanya mempelajari vi keybindings hanya dengan mengedit baris perintah, tetapi jika Anda sudah mengetahuinya, itu adalah pendorong produktivitas yang rapi.
sumber
set -o vi
juga cara saya hidup! Saya bahkan melakukan ini di bash saya meminta juga.bindkey -v
untuk zsh.Esc
0
c
w
Ada banyak cara untuk menguliti kucing ini!
Untuk mengganti string tertentu,
^old^new^extra
akan mengambil perintah Anda sebelumnya, gantiold
dengannew
, dan tambahkanextra
. Anda dapat berhenti sedini mungkin; mis.^old
akan menggantiold
dengan string kosong dan menambahkan string kosong (pada dasarnya menghapusold
dan tidak melakukan apa-apa lagi).Varian yang sangat berguna dari ini:
Untuk mengganti kata tertentu, Anda dapat menggunakan
!m:n-p
untuk merujuk katan
- kata melaluip
perintahm
(gunakan angka negatif untuk menghitung mundur dari perintah saat ini). Anda bisa menghilangkan-p
bagian untuk merujuk ke satu kata, dan menghilangkan:m-p
bagian untuk merujuk ke seluruh perintah. Bentuk khusus!!
untuk!-1
,!$
untuk kata terakhir dari perintah sebelumnya, dan!*
untuk argumen (semuanya kecuali kata0
) dari perintah sebelumnya cukup berguna.Saya sering menggunakan keduanya; zsh sangat baik di sini, karena tab tab akan memperluas barang rahasia untuk memastikan Anda melakukannya dengan benar.
Ada juga banyak cara untuk melakukan ini dengan pengeditan baris. Bacalah tentang keybindings shell Anda.
sumber
Sebagian besar program terminal mendukung ...
<Up-Arrow>
seperlunya untuk menampilkan kembali salah satu baris perintah sebelumnya dari riwayat.<Down-Arrow>
seperlunya untuk bergerak maju melalui daftar riwayat.<Left-Arrow>
seperlunya untuk memindahkan kursor ke akhir kata kedua.<Backspace>
seperlunya untuk menghapus kata kedua.<Right-Arrow>
/<Left-Arrow>
jika perlu untuk memposisikan lebih banyak perubahan.<RETURN>
untuk menjalankan perintahJika baris perintah yang Anda inginkan bukan yang terbaru, lakukan pencarian balik-i-
<Ctrl-r>
seperti yang dijelaskan dalam pertanyaan ...Apakah ada cara menggunakan ctrl-r setelah mengetikkan bagian dari perintah di bash?
Kemudian edit melalui tombol panah sesuai kebutuhan.
sumber
Apa yang saya lakukan (Ubuntu / bash):
1)
Arrow up
hei untuk mengembalikan perintah sebelumnya2)
Home
kunci untuk kembali ke awal3) Ubah perintah sesuai kebutuhan.
Idiot-proof dan sangat berguna untuk perintah multi-line.
sumber