Seleccionar texto en el terminal sin usar el mouse

68

Estoy a punto de presionar enter para ejecutar un comando en la terminal, pero antes de hacerlo, quiero copiar el comando al portapapeles sin usar el mouse.

¿Cómo?

Si estás en otro lugar que no sea la terminal, Ctrl+ lo Homehace.

¿Hay alguna manera de seleccionar arbitrariamente un texto como ese en el terminal?

EDITADO:

  • supongamos que usar otros programas como screenno es una buena alternativa
  • el texto se debe pegar fuera del terminal, por lo que Ctrl+ yy secuencias similares tampoco lo resuelven
Strapakowsky
fuente
1
¿Te refieres a Ctrl-Shift-Home?
Caracol mecánico
Shift-Home copia al comienzo de la línea. Ctrl-Shift-Home copia al comienzo de la página.
Strapakowsky
Shift-Home y Ctrl-Shift-Home hacen lo mismo por mí (saltar al principio de la terminal) y ninguno de ellos parece copiar nada para que sea pegado por Ctrl-Y o Ctrl-Shift-V (ni seleccionar). Pero funciona en el editor de texto, no copiando, solo seleccionando. Usando OpenSUSE Leap 15 en Virtual Box. Todos los demás enlaces de teclas mencionados en las respuestas funcionan.
Brambor

Respuestas:

16

Enlace siguiente atajo:

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

Ahora, después de usar Crtl+, Psu línea se copiará en el portapapeles. Puedes pegarlo en la terminal usando:

xsel

Y en cualquier aplicación X usando el botón central del mouse o Shift+ Insert.

Nykakin
fuente
Quiero evitar usar el mouse. ¿Es posible pegarlo con ctrl + shift + v en lugar del botón central del mouse?
MrGigu
@MrGigu, esto usa un portapapeles diferente (ver aquí ). Necesita usar otro atajo. Por defecto debería ser Shift + Insert (ver aquí )
Nykakin
¡Oh, gracias, shift + insert funciona! No sabía que podía pegar con este comando.
MrGigu
¿Alguna explicación de lo que realmente está pasando aquí?
Alexander
O use xsel -bpara usar el portapapeles estándar, es decir, el que usa Ctrl + V / Ctrl + Shift + V. También vale la pena señalar que este método falla en los comandos de varias líneas.
wjandrea
27

Si está utilizando uno de los shells que comprende las teclas emacs (bash, csh, etc.), puede copiar el comando actual de la siguiente manera:

  1. control-A te llevará al comienzo de la línea.

  2. control-K matará toda la línea que acaba de ingresar.

  3. control-Y tirará el texto hacia atrás.

Luego, puede control-Ytirar del texto hacia atrás para insertar el texto nuevamente como entrada al editor de línea de comandos del shell.

Vea man bashy luego, cuando aparezca, escriba /emacsseguido de un par de n's (siguiente) para avanzar a la sección READLINE.

AncianoAyuda
fuente
Lo sabía pero quiero pegar fuera de la terminal. Editado para aclaraciones.
Strapakowsky
3
control-Upuede cortar el comando desde el final directamente
vstepaniuk
1
El segundo comando cambió mi vida.
Krishna
10

Lo más cercano que puedo pensar es Ctrl+ u, Ctrl+ y
Esto eliminaría del cursor al comienzo de la línea, luego pegaría desde el búfer de línea de lectura. Sin embargo, esto no es exactamente lo mismo que el portapapeles, pero podría pegar dentro del shell, si eso es lo que necesita.

recatado
fuente
Lo sabía pero quiero pegar fuera de la terminal. Editado para aclaraciones.
Strapakowsky
8

Hay un programa llamado pantalla. Crea un sistema de ventanas de texto que le permite cambiar entre varias instancias. Pero también le permite seleccionar texto.

sudo apt-get install screen

Ese comando lo instala.

Luego escribe screen

Utiliza ctr-a para iniciar la secuencia de comandos. Luego presione esc y su cursor se moverá en cualquier dirección. Presione enter para comenzar la selección de texto, muévase al punto final, presione enter nuevamente. Eso se copiará al búfer.

Luego ctr-a y luego} pegarán

Más detalles sobre otros comandos aquí http://www.kuro5hin.org/story/2004/3/9/16838/14935

Meer Borg
fuente
Buena sugerencia, pero no me gusta screenpor diferentes razones, así que asume un terminal Ubuntu habitual. Edité mi pregunta para aclaración.
Strapakowsky
1
Esto debe ser marcado como la respuesta correcta en mi humilde opinión.
eddiewould
2

Si está dentro de vim, puede seleccionar visualmente una o más líneas con Shift+ vy luego usar un enlace, por ejemplo yy, para canalizar la selección a xclip .

Agregue el enlace a su vimrc:

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

Esto requiere que se instale xclip , está en el repositorio de aptitudes de Debian / Ubuntu.

xclipalmacena stdin, con la -selection clipboardopción también empuja stdin al portapapeles del sistema.

Por lo tanto, también puede usarlo xclipde manera genérica desde el terminal, por ejemplo, para copiar un archivo completo en el portapapeles del sistema:

cat myfile | xclip -selection clipboard

Si opcionalmente también puede crear un alias, como:

alias cb="xclip -selection clipboard" 
Kris
fuente