Por que o Terminal está digitando automaticamente o meu comando depois de colar o texto?

8

Isso acontece se eu uso ctrl + shift + v ou cole no menu do botão direito do mouse.

Como faço para parar esse comportamento?

    
por LostSoul 19.09.2015 / 10:33

5 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, receberá 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 colando também inclui uma nova linha.

    
por 19.09.2015 / 11:37
5

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 pressionando Enter , então ele executa o comando.

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

Muitos emuladores de terminal nos dias de hoje suportam colar entre colchetes . No modo colar colado, o aplicativo pode distinguir uma operação de colar dos pressionamentos de tecla. Colar emparelhado só é útil se o aplicativo faz algo diferente com texto colado, por isso, é habilitado por aplicativos de suporte, não é algo que é configurado pelo usuário do emulador de terminal.

O Zsh 5.1 (lançado há algumas semanas, ainda não está disponível na maioria das distribuições) adiciona suporte para o modo de colar entre colchetes. Quando você cola texto, ele é apenas inserido na linha de comando, e você pode editá-lo antes de pressionar Enter para executar a linha de comando.

Os usuários do oh-my-zsh podem usar o plugin safe-paste mesmo em versões anteriores do zsh.

Outra coisa que você pode fazer no zsh é fazer com que ele insira 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 de mouse) ou 'xsel -b' para obter o conteúdo da área de transferência (texto copiado com Ctrl + C ) e pressione < kbd> Tab .

Se você tiver uma versão mais antiga do zsh e quiser inserir o conteúdo da área de transferência sem citar, poderá definir uma função que insira 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 isto no seu .zshrc , você pode pressionar Ctrl + Alt + V para inserir a seleção principal, ou Ctrl + U Ctrl + Alt + V para inserir o conteúdo da área de transferência. Eles são inseridos antes do cursor, inalterados, exceto sem nova linha. Veja Compartilhe a área de transferência entre o bash e X11 para algo semelhante em bash.

    
por 20.09.2015 / 02:07
5

Se você estiver usando o bash como shell, pressione Ctrl-X Ctrl-E para abrir um editor (definido por $ VISUAL ou $ EDITOR, por exemplo, vi ou 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.

    
por 20.09.2015 / 02:40
3

Para fazer uma colagem de várias linhas em um prompt de comando, abra aspas simples ou duplas antes de colar.

$ echo ' colar
...
... '

Depois, você pode pressionar voltar para ecoar. Quando você seta para cima, todas as linhas que você colou estarão em uma linha editável.

Isso funciona enquanto não houver uma única citação no texto que você colar.

    
por 19.09.2015 / 17:48
1

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

  • Shift + Início , Ctrl + Inserir - copia parte da linha antes do cursor.
  • Shift + End , Ctrl + Inserir - copia parte da linha após o cursor.
  • Início , Deslocamento + Fim , Ctrl + Inserir - 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 para um editor de texto primeiro (de preferência, como você tem a chance de editar comandos).
  • Selecione apenas o texto na linha (sem estender a zona de seleção para a direita além do último caractere), então Ctrl + Inserir e cole em uma janela de terminal.

Como parece uma seleção correta (sem \ n):

ls -al

Como parece uma seleção errada (com \ n):

ls -al
    
por 19.09.2015 / 17:20