Por que o Terminal está inserindo meu comando automaticamente após colar o texto?

9

Isso acontece se eu usar ctrl + shift + v ou colar no menu do botão direito.

Como faço para parar esse comportamento?

Alma perdida
fonte
É necessário obter mais explicações para entender sua pergunta #
209
Talvez o ConEmu no Windows faça o que você deseja - quando você tenta colar algo que contém novas linhas, ele avisa antes de prosseguir. É um toque agradável. Talvez haja um emulador de terminal Linux com esse recurso?
Brandin
4
Aposto que você copiou o "\ n" à direita (caractere de nova linha, você não verá no seu texto, mas ele estará presente se houver uma quebra de linha) quando você copiar seu texto, que simulará uma pressão na tecla ENTER, executando assim o comando.
Herbert
Possível duplicata disso - unix.stackexchange.com/questions/202732/… Eu não sabia sobre a "pasta entre colchetes" mencionada nessa pergunta. Normalmente, uso um editor de texto em combinação com o terminal e, em seguida, copio / colo cuidadosamente as partes que desejo no terminal.
Brandin

Respostas:

6

Não copie várias linhas de texto para colar. Eu quase posso garantir que você está simplesmente copiando a última parte da linha. Se você clicar três vezes para copiar a linha de código que está colando, estará recebendo a nova linha no final da linha. Se você quiser ter certeza, esse é realmente o problema, copie a linha inteira, exceto a última letra / dígito, e veja se colar também inclui uma nova linha.

WormFood
fonte
Isso só aconteceu quando copiei várias linhas de código. Agora eu entendo o porquê.
precisa saber é o seguinte
7

O texto que você está colando inclui uma nova linha à direita. Quando você cola uma nova linha, o shell em execução no terminal vê isso como pressionado e Enter, portanto, executa o comando.

A operação de colagem é realizada pelo emulador de terminal; passa o texto colado para o aplicativo em execução no terminal, da mesma maneira que passa o texto digitado pelo usuário. Consulte Como funcionam a entrada do teclado e a saída de texto? para obter mais informações sobre como a entrada funciona. O aplicativo (aqui, o shell) não tem como distinguir entre pressionamentos de tecla e uma operação de colar.

Atualmente, muitos emuladores de terminal suportam pasta entre colchetes . No modo de colar entre colchetes, o aplicativo pode distinguir uma operação de colar das teclas digitadas. A pasta entre parênteses é útil apenas se o aplicativo fizer algo diferente com o texto colado, por isso é ativado pelo suporte a aplicativos, não é algo configurado pelo usuário do emulador de terminal.

O Zsh 5.1 (lançado algumas semanas atrás, portanto ainda não está disponível na maioria das distribuições) adiciona suporte ao modo de colagem entre colchetes. Ao colar o texto, ele é inserido na linha de comando e você pode editá-lo antes de pressionar Enterpara executar a linha de comando.

Os usuários do oh-my-zsh podem usar o plugin de colagem segura, mesmo nas versões anteriores do zsh.

Outra coisa que você pode fazer no zsh é fazê-lo inserir a seleção como uma string, com aspas (na forma de barras invertidas antes de cada caractere especial do shell, como espaço em branco). Digite `xsel`para obter a seleção principal (seleção automática do mouse) ou `xsel -b`para obter o conteúdo da área de transferência (texto copiado com Ctrl+ C) e pressione Tab.

Se você possui uma versão zsh mais antiga e deseja inserir o conteúdo da área de transferência sem citar, é possível definir uma função que insere a seleção.

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

Com isso .zshrc, você pode pressionar Ctrl+ Alt+ Vpara inserir a seleção principal ou Ctrl+ U Ctrl+ Alt+ Vpara inserir o conteúdo da área de transferência. Eles são inseridos antes do cursor, inalterados, exceto sem nova linha à direita. Consulte Compartilhar a área de transferência entre o bash e o X11 para obter algo semelhante no bash.

Gilles 'SO- parar de ser mau'
fonte
7

Se você estiver usando o bash como seu shell, poderá pressionar Ctrl-X Ctrl-Epara abrir um editor (definido por $ VISUAL ou $ EDITOR, por exemplo, viou talvez nano).

Você pode colar seus comandos exatamente como faria se estivesse editando um arquivo. Eles serão executados se você salvar e sair. Ou cancelado se você sair sem salvar.

cas
fonte
Este método não funciona para mim.
LostSoul
3

Para colar várias linhas no prompt de comando, abra aspas simples ou duplas antes de colar.

$ echo 'paste
...
... '

Então você pode pressionar return para repeti-lo. Quando você seta para cima, todas as linhas que você colou estarão em uma linha editável.

Isso funciona desde que não haja uma citação no texto que você cola.

Peter Cordes
fonte
1

Em uma janela do editor de texto, use os seguintes atalhos para copiar texto sem \ n (o avanço de linha):

  • Shift+ Home, Ctrl+ Insert- copia parte da linha antes do cursor.
  • Shift+ End, Ctrl+ Insert- copia parte da linha após o cursor.
  • Home, Shift+ End, Ctrl+ Insert- copia toda a linha sem \ n.

Em uma janela do navegador ou outra coisa em que o texto não é editável, use uma das duas técnicas:

  • Copie primeiro para um editor de texto (de preferência, pois permite editar comandos).
  • Selecione apenas o texto na linha (sem estender a zona de seleção para a direita além do último caractere), depois Ctrl+ Inserte cole em uma janela do terminal.

Como é a seleção correta (sem \ n):

ls -al

Como é uma seleção incorreta (com \ n):

ls -al
Incnis Mrsi
fonte