Come posso eliminare la stringa "default" (utilizzata l'ultima volta) in alcune funzioni di emacs?


12

Ho il seguente problema: quando uso 'Cx rt' (string-rectangle), mi viene richiesto di inserire una stringa, per sostituire il rettangolo selezionato. Diciamo che scrivo ";;" (per commentare il rettangolo). Funziona bene, ma la prossima volta che chiamo la stessa funzione e non voglio sostituirla con niente (stringa vuota), non posso farlo, perché c'è "default" stringa ";;" che ho usato in precedenza, e se ho appena premuto invio il comando utilizzerà quel ";;" stringa anziché vuota. Come posso impostarlo su stringa vuota?

Problema simile che ho avuto con alcune funzioni di ricerca / sostituzione. Fondamentalmente, quando ricorda l'ultima stringa che ho usato e lo imposta come predefinito, come posso invece "inserire" una stringa vuota?

MODIFICARE :

Kill-rectangle, menzionato da YoungFrog risolve il problema specifico, ma avevo in mente un'altra cosa: in pratica, in quale funzione emacs ricorda l'ultimo valore che hai inserito e lo usa come "predefinito" quando premi semplicemente Invio, dovresti essere in grado di cancellare quel "valore predefinito" a qualsiasi valore predefinito reale prima di utilizzare la funzione. Ecco un altro esempio:

In modalità diretta, se 'Mx rgrep' ti chiede 3 ingressi:

1) Cosa cercare: qualunque cosa tu inserisca qui, verrà usata come impostazione predefinita la prossima volta che usi rgrep. Come qualcuno ha sottolineato, non ha senso cercare stringhe vuote, quindi deselezionare questo valore "predefinito" non è mai necessario.

2) Successivamente verrà chiesto in quali file cercare. Il suo vero valore predefinito è "tutti" i file. Se inserisco * .txt e la ricerca, la prossima volta che utilizzo rgrep, * .txt verrà utilizzato come "predefinito". Ora desidero cancellare questo "default" * .txt e tornare al suo default originale, "all", proprio come volevo cancellare ";;" "default" nella funzione string-rectangle è la stringa vuota predefinita di default.

Naturalmente, questo problema specifico per tutti i file potrebbe probabilmente essere risolto digitando *? Ma questo problema generale rimane potentemente con altri comandi che ricordano l'ultimo valore usato.

3) Chiederà successivamente la directory di base, nessun problema qui.

Quindi, per come la vedo io, ogni volta che emacs cerca di aiutarmi ricordando il mio ultimo valore usato in qualche comando (che trovo molto utile la maggior parte delle volte) ci dovrebbe essere un modo per cancellare quel valore usato come se non lo avessi mai usato comando prima.

PS Sono ancora nuovo su emacs e forse la funzionalità di cui ho bisogno non è necessaria, dato che c'è sempre qualche soluzione?


1
Credo che sia difficile, perché nella maggior parte dei casi la lettura e lo scambio del valore predefinito per la stringa vuota non avvengono nella stessa funzione. In questo caso specifico delete-rectangleè un'opzione.
politza,

Se si intende inserire spazi nel rettangolo selezionato, è possibile utilizzare clear rectangle.
Kaushal Modi,

Se vuoi semplicemente bloccare commenti / commenti, perché non utilizzarli comment-dwim? Anche l'immissione di una stringa "vuota" per la ricerca non avrebbe senso, ma è possibile inserire una stringa vuota per la parte di sostituzione. Sono curioso di vedere altri esempi in cui un utente potrebbe aver bisogno di inserire una stringa vuota.
Kaushal Modi,

3
Ho appena esaminato rapidamente la tua descrizione, ma sembra che potrebbe esserci un problema con la progettazione del comando string-rectangle. Ogni volta che una stringa vuota ha senso come possibile input, dovrebbe esserci un modo per immetterla, distinto dall'accettare un valore predefinito. Guarda attentamente il documento per il comando (e il suo codice sorgente, se ti senti a tuo agio con quello), per vedere se in effetti c'è un difetto di progettazione qui. Se pensate che ci sia, quindi si prega di segnalarlo: M-x report-emacs-bug.
Estratto il

Perché 2), puoi letteralmente entrare all, che è leggermente diverso da *: corrisponde .*anche.
npostavs,

Risposte:


3

Non usare C-x r t( string-rectangle), usa C-x r k( kill-rectangle) invece.


1
Ho solo risposto all'esempio specifico dato perché l'IMO nel caso generale (la domanda nel titolo) non ammette una risposta (generale). Tuttavia, voglio menzionare che C-j(invece di RET) potrebbe aiutare in alcuni casi, ad esempio ido-mode.
YoungFrog,

3

In generale, ciò che desideri non può essere raggiunto. Questo perché diverse utility e modalità in Emacs memorizzano la cronologia di completamento della lettura in variabili diverse, non in una posizione. È possibile impostare manualmente le variabili della cronologia su nil(ad C-x r tesempio (setq string-rectangle-history nil)), ma non si ridimensiona. Inoltre, non è facile scoprire i nomi delle variabili della cronologia senza leggere il codice.

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.