Cos'è questo "(arg: 1)" che appare nel terminale / tty dopo aver premuto una combinazione di tasti?


21

In un terminale virtuale ho (accidentalmente) premuto Win+ 1e ottenuto una nuova linea composta da

(arg: 1)

Fintanto che continuo a Winpremere, tutti i numeri che premo vengono aggiunti al numero tra parentesi, ad es. WinE 1+ 4rendimenti (arg:14).

Quando I (dopo aver rilasciato Win) premo un tasto qualsiasi, quel carattere viene stampato tutte le volte che il numero legge e l' (arg: ...)espressione viene sostituita dal prompt standard.

Qualcuno sa cosa succede qui?

Risposte:


24

Questo è un argomento numerico , una funzionalità della libreria readline integrata in 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.

Questa funzione semplifica l'aggiunta o l'eliminazione di testo nella riga di comando attualmente modificata. Diciamo che vuoi scrivere echo gggg:

  1. Inserisci echoseguito da spazio
  2. Premi il tasto Meta (che può essere Win, Alte / o Escper te) e digita4g

Ma quante volte devi scrivere una sola lettera così tante volte che questo ti salverebbe qualcosa? La funzione è progettata principalmente per i comandi readline , vedere i capitoli 8.2.1–8.2.3 del Manuale di riferimento ("C" significa Ctrl, "M" significa Meta).

Puoi tornare indietro di una parola con Meta e B, ma cosa accadrebbe se volessi tornare indietro di più parole contemporaneamente? Puoi tenere premuto Alte premere Bpiù volte oppure utilizzare l'argomento digit:

  1. Sulla riga di comando è presente un refuso di cinque parole:

    $ echo one two tree four five six seven
  2. Premere il tasto Meta, digitare 5e premere Meta e B. Et violà:

    $ echo one two ree four five six seven
  3. Correggi l'errore di battitura e premi Enterper sparare o Endo Ctrl+ Eper spostarti di nuovo alla fine della linea.

È possibile eliminare una sola parola premendo Meta e Backspace, ma cosa succede se si desidera eliminare più parole contemporaneamente?

  1. Hai dimenticato una parola nella riga di comando:

    $ echo one two four five six seven
  2. Premere il tasto Meta, digitare 4e premere Meta e Backspace.

    $ echo one two 
  3. Digita la parola mancante seguita da spazio e premi Ctrl+ Yper incollare ciò che è stato appena eliminato. Et violà:

    $ echo one two three four five six seven

Hai ragione, avresti potuto anche spostarti lì come appena spiegato senza eliminare nulla. Siamo su Linux, ci sono sempre diversi modi per fare la stessa cosa.

E qual è un "argomento negativo"? Fa lo stesso, ma nella direzione opposta, quindi Meta -2Meta Backspacecancella le due parole successive della riga di comando. "Ma uno potrebbe usare Meta 1Meta Dper fare la stessa cosa!" Sono contento che tu l'abbia ricevuto, benvenuto nella tua riga di comando.

Ulteriori letture:


In quale versione bash è uscito questo? Sembra davvero utile. + 1ED.
Sergiy Kolodyazhnyy,

su WSL èEsc
αғsнιη il

1
Wow! Sono felice di averti dato l'incoraggiamento per una risposta così grande !!
Guntbert,

Non c'è niente da "ammettere", spesso quando parliamo di cose che sappiamo già che noi ('io') tendiamo a non fare più la ricerca. La tua ricerca rende questa risposta così completa - comprese le fonti.
Guntbert,

1
Ciò che è pulito è che l'argomento digit funziona, mutatis mutandis , anche in modalità di editing simile a vi ( set -o vi).
Geremia,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.