Perché Terminal inserisce automaticamente il mio comando dopo aver incollato il testo?


9

Questo succede se uso ctrl + shift + v o incolla dal menu di scelta rapida.

Come faccio a fermare questo comportamento?


Sono necessarie ulteriori spiegazioni per comprendere la tua domanda
SHW,

Forse ConEmu su Windows fa quello che vuoi: quando provi a incollare qualcosa che contiene nuove righe, ti avviserà prima di procedere. È un po 'un bel tocco. Forse c'è un emulatore di terminale Linux che ha questa funzione?
Brandin,

4
Scommetto che copi il finale "\ n" (carattere di nuova riga, non vedrai sul tuo testo ma è presente se hai un'interruzione di riga) quando copi il tuo testo, che emulerà una pressione sul tasto INVIO, quindi eseguendo il comando.
Herbert,

Possibile duplicato di questo - unix.stackexchange.com/questions/202732/… Non sapevo della "pasta tra parentesi" menzionata in quella domanda. Di solito uso un editor di testo in combinazione con il terminale e quindi copia / incolla attentamente le parti che desidero nel terminale.
Brandin,

Risposte:


6

Non copiare più righe di testo, per incollare. Posso quasi garantire che stai semplicemente copiando l'ultima parte della linea. Se fai triplo clic per copiare quella riga di codice che stai incollando, otterrai la nuova riga alla fine della riga. Se vuoi essere sicuro, questo è davvero il problema, quindi copia l'intera riga, tranne l'ultima lettera / cifra, e vedi se incollare include anche una nuova riga.


Questo è successo solo quando ho copiato più righe di codice. Ora capisco perché.
LostSoul,

7

Il testo che stai incollando include una nuova riga finale. Quando si incolla una nuova riga, la shell in esecuzione nel terminale lo vede come una pressione Enter, quindi esegue il comando.

L'operazione incolla viene eseguita dall'emulatore di terminale; passa il testo incollato all'applicazione in esecuzione nel terminale, allo stesso modo in cui passa il testo digitato dall'utente. Vedi Come funzionano l'input da tastiera e l'output di testo? per ulteriori informazioni su come funziona l'input. L'applicazione (qui, la shell) non ha modo di distinguere tra sequenze di tasti e un'operazione incolla.

Oggi molti emulatori di terminali supportano la pasta tra parentesi . Nella modalità incolla tra parentesi, l'applicazione può distinguere un'operazione di incolla dai tasti. L'incolla tra parentesi è utile solo se l'applicazione fa qualcosa di diverso con il testo incollato, quindi è abilitata dal supporto delle applicazioni, non è qualcosa che è configurato dall'utente dell'emulatore di terminale.

Zsh 5.1 (che è uscito poche settimane fa, quindi non è ancora disponibile nella maggior parte delle distribuzioni) aggiunge il supporto per la modalità incolla tra parentesi. Quando si incolla il testo, viene appena inserito nella riga di comando e è possibile modificarlo prima di premere Enterper eseguire la riga di comando.

Gli utenti di oh-my-zsh possono utilizzare il plugin safe-paste anche nelle versioni precedenti di zsh.

Un'altra cosa che puoi fare in zsh è far sì che inserisca la selezione come stringa, con virgolette (sotto forma di barre rovesciate prima di ogni carattere speciale della shell come gli spazi). Digitare `xsel`per ottenere la selezione principale (selezione automatica del mouse) o `xsel -b`per ottenere il contenuto degli appunti (testo copiato con Ctrl+ C), quindi premere Tab.

Se hai una versione zsh precedente e vuoi inserire il contenuto degli appunti senza virgolette, puoi definire una funzione che inserisce la selezione.

function zle_insert_x_selection {
  LBUFFER+=$(xsel ${NUMERIC+-b} -o </dev/null)
}
zle -N zle_insert_x_selection
bindkey '\e\C-v' zle_insert_x_selection

Con questo nel tuo .zshrc, puoi premere Ctrl+ Alt+ Vper inserire la selezione principale, o Ctrl+ U Ctrl+ Alt+ Vper inserire il contenuto degli appunti. Vengono inseriti prima del cursore, invariati tranne che con la nuova riga finale. Vedi Condividere gli appunti tra bash e X11 per qualcosa di simile in bash.


7

Se stai usando bash come shell, puoi premere Ctrl-X Ctrl-Eper visualizzare un editor (definito da $ VISUAL o $ EDITOR, ad esempio vio forse nano).

È quindi possibile incollare i comandi esattamente come se si stesse modificando un file. Verranno eseguiti se salvi ed esci. O annullato se si esce senza salvare.


Questo metodo non funziona per me.
LostSoul

3

Per incollare più righe su un prompt dei comandi, apri le virgolette singole o doppie prima di incollarle.

$ echo 'paste
...
... '

Quindi è possibile premere Invio per ripetere. Quando si preme la freccia verso l'alto, tutte le linee incollate saranno su una linea modificabile.

Funziona finché non c'è una sola citazione nel testo che incolli.


1

In una finestra dell'editor di testo, utilizzare le seguenti scorciatoie per copiare il testo senza \ n (l'avanzamento riga):

  • Shift+ Home, Ctrl+ Insert- copia parte della riga prima del cursore.
  • Shift+ End, Ctrl+ Insert- copia parte della riga dopo il cursore.
  • Home, Shift+ End, Ctrl+ Insert- copia tutta la riga senza \ n.

In una finestra del browser o un'altra cosa in cui il testo non è modificabile, utilizzare una delle due tecniche:

  • Copia prima in un editor di testo (preferito, poiché ti dà la possibilità di modificare i comandi).
  • Seleziona solo il testo sulla riga (senza estendere la zona di selezione oltre l'ultimo carattere), quindi Ctrl+ Inserte incollalo in una finestra del terminale.

Come appare una selezione corretta (senza \ n):

ls -al

Come appare una selezione errata (con \ n):

ls -al
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.