Selecionando texto no terminal sem usar o mouse

68

Estou prestes a pressionar enter para executar um comando no terminal, mas antes de fazer isso, quero copiar o comando para a área de transferência sem usar o mouse.

Quão?

Se você estiver em outro lugar que não seja o terminal, Ctrl+ Homefaz.

Existe uma maneira de selecionar arbitrariamente um texto como esse no terminal?

EDITADO:

  • suponha que o uso de outros programas como esse screennão seja uma boa alternativa
  • o texto deve ser colado fora do terminal, para que Ctrl+ ye sequências semelhantes não o resolvam
Strapakowsky
fonte
11
Você quer dizer Ctrl-Shift-Home?
Caracol mecânico
Shift-Home copia para o início da linha. Ctrl-Shift-Home copia para o início da página.
Strapakowsky
Shift-Home e Ctrl-Shift-Home fazem o mesmo por mim (pule para o início do terminal) e nenhum deles parece copiar nada a ser colado por Ctrl-Y ou Ctrl-Shift-V (nem selecione). Mas funciona no editor de texto, não copiando, apenas selecionando. Usando o OpenSUSE Leap 15 na caixa virtual. Todas as outras associações de teclas mencionadas nas respostas funcionam.
Brambor

Respostas:

16

Vincule o seguinte atalho:

bind '"\C-p": "\C-e\C-u xsel <<"EOF"\n\C-y\nEOF\n\C-y"'

Agora, depois de usar Crtl+, Psua linha será copiada para a área de transferência. Você pode colá-lo no terminal usando:

xsel

E em qualquer aplicativo X usando o botão do meio do mouse ou Shift+ Insert.

Nykakin
fonte
Eu quero evitar o uso do mouse. É possível colá-lo com ctrl + shift + v em vez do botão do meio do mouse?
precisa saber é o seguinte
@ MrGigu, isso usa uma área de transferência diferente (veja aqui ). Você precisa usar outro atalho. Por padrão, ele deve ser Shift + Inserção (ver aqui )
Nykakin
Oh obrigado, shift + insert funciona! não sabia que você poderia colar com este comando.
precisa saber é o seguinte
Alguma explicação sobre o que realmente está acontecendo aqui?
Alexander
Ou use xsel -bpara usar a área de transferência padrão, ou seja, a que usa Ctrl + V / Ctrl + Shift + V. Também é importante notar que esse método falha em comandos de várias linhas.
Wjandrea
27

Se você estiver usando um dos shells que compreendem as chaves do emacs (bash, csh etc.), poderá copiar o comando atual:

  1. control-A levará você ao início da linha.

  2. control-K matará toda a linha que você acabou de inserir.

  3. control-Y puxará o texto de volta.

Depois, você pode control-Ypuxar o texto de volta para inseri-lo como entrada no editor de linha de comando do shell.

Veja man bashe, quando aparecer, digite /emacsseguido de alguns n(a seguir) para avançar para a seção READLINE.

ElderDelp
fonte
Eu sabia disso, mas quero colar fora do terminal. Editado para esclarecimentos.
31413 Strapakowsky
3
control-Upode cortar o comando a partir do final do mesmo directamente
vstepaniuk
11
O segundo comando mudou minha vida.
krishna
10

O mais próximo que consigo pensar é Ctrl+ u, Ctrl+ y
Isso excluiria do cursor até o início da linha e depois colaria no buffer da linha de leitura. Porém, isso não é exatamente o mesmo que a área de transferência, mas você poderá colar dentro do shell, se é isso que precisa.

recatado
fonte
Eu sabia disso, mas quero colar fora do terminal. Editado para esclarecimentos.
Strapakowsky
8

Existe um programa chamado tela. Ele cria um sistema de janelas com texto que permite alternar entre várias instâncias. Mas também permite que você selecione o texto.

sudo apt-get install screen

Esse comando o instala.

Então digite screen

Você usa ctr-a para iniciar a sequência de comandos. Em seguida, pressione esc e seu cursor se moverá em qualquer direção. Pressione Enter para iniciar a seleção de texto, vá para o ponto final e pressione Enter novamente. Isso será copiado para o buffer.

Então ctr-a e então} colará

Mais detalhes sobre outros comandos aqui http://www.kuro5hin.org/story/2004/3/9/16838/14935

Meer Borg
fonte
Boa sugestão, mas eu não gosto screenpor diferentes razões, então assuma o terminal Ubuntu normal. Editou minha pergunta para esclarecimento.
31413 Strapakowsky
11
Isso deve ser marcado como a resposta correta IMHO.
precisa saber é o seguinte
2

Se você estiver dentro do vim, poderá selecionar visualmente uma ou mais linhas com Shift+ ve usar uma encadernação, por exemplo yy, para canalizar a seleção para o xclip .

Adicione a ligação ao seu vimrc:

vnoremap yy :w !xclip -selection clipboard<CR><CR>

Isso requer a instalação do xclip , pois está no repositório Debian / Ubuntu aptitude.

xcliparmazena stdin, com a -selection clipboardopção também empurra stdin para a área de transferência do sistema.

Portanto, você também pode usar de xclipmaneira genérica a partir do terminal, por exemplo, para copiar um arquivo inteiro para a área de transferência do sistema:

cat myfile | xclip -selection clipboard

Se você também pode, opcionalmente, criar um alias, como:

alias cb="xclip -selection clipboard" 
Kris
fonte