Apa ini "(arg: 1)" muncul di terminal / tty setelah saya menekan kombinasi tombol?

21

Di terminal virtual saya (tidak sengaja) menekan Win+ 1dan mendapat baris baru yang terdiri dari

(arg: 1)

Selama saya terus Winditekan, semua angka yang saya tekan bisa ditambahkan ke angka dalam tanda kurung, misalnya Windan 1+ 4hasil (arg:14).

Ketika saya (setelah melepaskan Win) tekan tombol apa saja, karakter itu dicetak sebanyak angka yang dibaca dan (arg: ...)ekspresi diganti oleh prompt standar.

Adakah yang tahu apa yang terjadi di sini?

Guntbert
sumber

Jawaban:

24

Itu argumen digit , fitur perpustakaan readline dibangun ke dalam bash:

digit-argument (M-0, M-1, ..., M--)
    Add  this digit to the argument already accumulating, or start a
    new argument. M-- starts a negative argument.

Fitur ini memudahkan untuk menambah atau menghapus teks di baris perintah yang saat ini diedit. Katakanlah Anda ingin menulis echo gggg:

  1. Masukkan echodiikuti oleh ruang
  2. Tekan tombol Meta (yang mungkin Win, Altdan / atau Escuntuk Anda) dan ketik4g

Tetapi seberapa sering Anda perlu mengetikkan satu huruf berkali-kali sehingga hal ini tidak menghemat apa pun? Fitur ini terutama dirancang untuk perintah readline , lihat bab 8.2.1–8.2.3 dari Manual Referensi ("C" yang berarti Ctrl, "M" yang berarti Meta).

Anda dapat mundur satu kata dengan Meta dan B, tetapi bagaimana jika Anda ingin mundur beberapa kata sekaligus? Anda dapat menahan Altdan menekan Bbeberapa kali, atau menggunakan argumen digit:

  1. Ada kesalahan ketik pada baris perintah Anda lima kata kembali:

    $ echo one two tree four five six seven
  2. Tekan tombol Meta, ketik 5dan tekan Meta dan B. Et violà:

    $ echo one two ree four five six seven
  3. Perbaiki kesalahan ketik dan tekan Enteruntuk menembak atau Endatau Ctrl+ Euntuk pindah ke akhir baris lagi.

Anda dapat menghapus satu kata dengan menekan Meta dan Backspace, tetapi bagaimana jika Anda ingin menghapus beberapa kata sekaligus?

  1. Anda lupa satu kata di baris perintah Anda:

    $ echo one two four five six seven
  2. Tekan tombol Meta, ketik 4dan tekan Meta dan Backspace.

    $ echo one two 
  3. Ketikkan kata yang hilang diikuti spasi dan tekan Ctrl+ Yuntuk menempelkan apa yang baru saja dihapus. Et violà:

    $ echo one two three four five six seven

Anda benar, Anda juga bisa pindah ke sana karena baru saja menjelaskan tanpa menghapus apa pun. Kami menggunakan Linux, selalu ada beberapa cara untuk melakukan hal yang sama.

Dan apa itu "argumen negatif"? Itu melakukan hal yang sama, tetapi dalam arah yang berlawanan, jadi Meta -2Meta Backspacemenghapus dua kata berikutnya dari baris perintah. "Tapi orang bisa menggunakan Meta 1Meta Duntuk melakukan hal yang sama!" Senang Anda mendapatkannya, selamat datang di baris perintah Anda.

Bacaan lebih lanjut:

pencuci mulut
sumber
Versi bash apa ini? Terlihat sangat berguna. Diberi +1
Sergiy Kolodyazhnyy
di WSL ituEsc
αғsнιη
1
Wow! Saya senang telah memberi Anda bujukan untuk jawaban yang luar biasa ini !!
guntbert
Tidak ada yang harus "diakui", sering kali ketika kita berbicara tentang hal-hal yang kita sudah tahu kita ('saya') cenderung tidak melakukan penelitian lagi. Penelitian Anda membuat jawaban ini sangat komprehensif - termasuk sumber.
guntbert
1
Apa yang rapi adalah argumen digit berfungsi, mutatis mutandis , dalam mode edit vi-like ( set -o vi), juga.
Geremia