2009-04-17 35 views
88

Estoy tratando de alejarme del uso del mouse tanto como puedo (solo un proyecto favorito). Sé que en la terminal puedes hacer ck para cortar una línea y cu para pegar esa línea en la misma terminal, pero estoy buscando algo donde pueda copiar una línea en la terminal en el portapapeles de gnomes para poder pegarlo en decir un navegador o somesuch.Cómo copiar y pegar desde el terminal con el teclado?

Sé que si uso el mouse para resaltar el texto, puedo presionar shift-insert para pegar ese texto, lo cual es genial, pero ahora solo quiero poder hacerlo sin el mouse. Algo así como el resaltado c-space en emacs (pero incluso eso no se copia en el portapapeles gnome).

Gracias

Algunos más aclaraciones, que tienen varios terminales diferentes abierta, y en muchos de los que han ssh'ed en varias máquinas remotas donde los servicios públicos como xclip/XSEL no son tan útiles.

Respuesta

73

Dicho here, los comandos predeterminados para copiar y pegar GNOME son CTRL - SHIFT - C y CTRL - SHIFT - V.

Edición: He encontrado una useful blog post que le permite activar terminal de copiar/pegar para CTRL - C y CTRL - V en GNOME.

+20

c-shift-c no funciona ya que todavía tiene que usar el mouse para resaltar el texto y reasignar cualquier cosa a ctrl-c es totalmente inaceptable ya que ctrl-c es teclado interupt – Silfheed

+0

Nota: El enlace es de una publicación en 2007 , y es lo mismo que la respuesta de @ Dan a continuación. –

+1

¡Y a partir de ahora, esta funcionalidad no funciona! –

0

¿Puedo sugerir RatPoison como administrador de su ventana? Como su nombre indica, no necesitas un mouse en absoluto. No estoy seguro de cómo maneja el portapapeles, ya que solo lo he usado por diversión. Puede depender del programa de terminal que estés usando.

6

Para interactuar con el portapapeles X11 desde la línea de comandos, consulte this question.


Tal vez una vía lateral a lo que pide, pero para la interacción ventana de terminal que puede recomendar screen, en el que utiliza las teclas para copiar y pegar (desde un búfer de desplazamiento de búsqueda!). La operación copiar y pegar solo está entre ventanas controladas por pantalla, como describió con la ventana de terminal y c-u & c-k, pero puede volcar fácilmente a/tmp/screen-xchange y luego usar xclip para copiar al portapapeles X11.

+0

hey, xclip es muy genial y está más cerca, pero aún está lejos, ya que solo funciona en mi máquina local. Tengo varios terminales sshd en diferentes máquinas al mismo tiempo y simplemente estoy tratando de copiar cualquier texto que esté en el terminal al portapapeles gnome con el teclado. Enfriar encontrar tho, gracias – Silfheed

+2

Puede ejecutar sus sesiones ssh toda la pantalla interior, e incluso abrir la misma sesión de pantalla en múltiples terminales. Hago esto todo el tiempo ... entonces simplemente^A [...^M para seleccionar en una ventana, y^A] para pegar en otra. – ephemient

2

Durante mucho tiempo también estaba tratando de resolverlo, usando vt100.translations.

Tomado de http://www.fifi.org/doc/xterm/xterm.faq.html#future_work:

"XTerm*vt100.translations:  #override \n\ 
    <Key>Insert:   string(\001) \n\ 
    Shift <Key>Up:   scroll-back(1,lines) \n\ 
    Shift <Key>Down:  scroll-forw(1,lines) \n\ 
    Shift <Key>Right:  string(0x1b) string("f") \n\ 
    Shift <Key>Left:  string(0x1b) string("b") \n\ 
    Shift <Key>Delete:  string(0x1b) string(0x08) \n\ 
    Shift <Key>Tab:   string(0x1b) string("*") \n\ 
    <Key>0x1000FF0D:  scroll-back(1,page) \n\ 
    <Key>0x1000FF0E:  scroll-forw(1,page) \n\ 
    <Key>0x1000FF09:  string(\010) \n\ 
    <Key>0x1000FF0A:  string(\005) \n\ 
    <Key>BackSpace:   string(0xff) \n\ 
    <Key>Select:   select-start() \n\ 
      <Btn1Motion>:   select-extend() \n\ 
    <Key>0x1000FF02:  select-end(PRIMARY,CUT_BUFFER0) \n\ 
    Meta <Key>0x1000FF02: select-end(CLIPBOARD) \n\ 
    <Key>0x1000FF04:  insert-selection(PRIMARY,CUT_BUFFER0) \n\ 
    Meta <Key>0x1000FF04: insert-selection(CLIPBOARD) \n\ 
    <Key>F1:    string(0x1b) string("OP") 

sin éxito

bien si hemos establecido alguna clave para seleccionar-inicio de fin de seleccionar ..extend pero la forma de llevar el cursor a su.

gnu la pantalla puede ser la solución, pero no estará correctamente en zsh, y no podemos traer cortar texto en Xclipboard.

2

Sé si tu shell es bash o tcsh, usa readline library para editar líneas, por lo que la función Control-K es manejada por readline y se almacena en un buffer "kill-ring" dentro de tu shell. Es imposible robar el contenido del kill-ring de tu caparazón (a menos que tu caparazón tenga una funcionalidad específica programada que lo permita); sin embargo, puedes volver a configurar el Control-K para realizar otra acción configurando el .inputrc archivo en su directorio de inicio. Así que podría configurarlo para realizar una macro, por ejemplo, sacando el texto "xclip -in \ n" y luego volcando el contenido del kill-ring a la salida junto con una acción "Control-D" para terminar el texto. Esto se explica principalmente en la página de manual de readline.

Nunca he probado algo así antes, así que no sé si funcionaría o no, pero esa es la ruta que probaría primero.

0

Esto es un hack superclunky, pero funciona para copiar la última línea de salida del último comando de ejecución en un terminal utilizando solo el teclado (y un script de python), y puede funcionar a través de ssh.

Así es como lo usa.

  1. En gnome-terminal (o similar), Alt + E, A. Esto es para Seleccionar todo.
  2. Si está en ssh, abra un terminal diferente en su máquina local.
  3. Ejecute el script adjunto, que llamo lastline en mi máquina.

Luego tiene una línea de texto sin nueva línea en su portapapeles gtk. La secuencia de comandos funciona utilizando el portapapeles de selección x para seleccionar todo el texto de la terminal y poner la penúltima línea de la misma en el portapapeles gtk. Este script se puede modificar para seleccionar diferentes partes de la selección x, que corresponderían a diferentes partes del buffer de texto del terminal. Sin embargo, sigue siendo muy lejos de un cursor interactivo :(

Sería genial si gnome-terminal de soporte integrado de selección controlado por el teclado.

Este ejemplo pone "/ usr/bin/gcc" en el GTK portapapeles (recuerde Seleccionar todo antes de ejecutar lastline):

$ which gcc 
/usr/bin/gcc 
$ lastline 

Aquí es el guión que yo llamo lastline:

#!/usr/bin/env python 

import sys, subprocess 
import optparse 
__version__ = "0.1" 

def main(): 
    try: 
     process = subprocess.Popen(["xsel"], stdout=subprocess.PIPE) 
    except OSError: 
     sys.exit("you must install xsel") 
    (stdout, _) = process.communicate() 

    lines = stdout.split("\n") 
    if len(lines) < 3: 
     text = "" 
    else: 
     text = lines[-3] 

    import gtk 
    clipboard = gtk.clipboard_get() 
    clipboard.set_text(text) 
    clipboard.store() 

if __name__ == "__main__": 
    parser = optparse.OptionParser(version=__version__) 
    (options, args) = parser.parse_args() 
    main() 
5

probé lo que sugiere hlovdal y usó GNU screen y xclip. El resultado fue un simple script:

cat /tmp/screen-exchange | xclip

que he configurado para C-a e en .screenrc:

bind e exec !!! $HOME/bin/screen-exchange-to-primary

entonces simplemente entrar en el modo de desplazamiento hacia atrás copiar/en pantalla con C-a [ marca/seleccionar con > y copie a la selección principal con C-a e. Quizás no sea la secuencia más suave de combinaciones, pero es lo mejor que tengo hasta ahora.

3

Puede ejecutar el shell dentro de Emacs, luego puede seleccionar y copiar en el portapapeles como lo haría normalmente en Emacs.

En cuanto a "utilizando el shell dentro de Emacs", hay varias opciones: M-x shell, M-x eshell, y varios term/eterm/ansi-term cosas basado en (modos) (estos "* término" debe ser mejor para maldiciones pseudográfica etc.)

en cuanto a mí, personalmente, tratando de mantener lejos del ratón, trato de usar eshell principalmente (no necesito maldiciones aplicaciones por lo general), emacs-w3m para navegar por la web, simplemente Emacs sobre todo para todo lo demás, y ratpoison como el administrador de ventanas

6

¡Es fácil! ¡Simplemente ejecute dos comandos y podrá copiar y pegar con Ctrl+CCtrl+V!

gconftool-2 -t str -s /apps/gnome-terminal/keybindings/copy "<Control>c" 
gconftool-2 -t str -s /apps/gnome-terminal/keybindings/paste "<Control>v" 

Happy copy-pasting!

+1

¡Esto no funciona para mí! :-( –

+6

Te voto para ocupar mi lugar en el cielo. ¡Gracias! –

+36

Esta es una idea horrible; Ctrl + C y Ctrl + V tienen significados especiales e importantes para las aplicaciones de la terminal. – Rob

7

Mayús + Insertar para pegar. Creo que es lo que necesitas, pero no sé cómo copiar desde la terminal.

+9

Esto era exactamente lo que él ya sabía y no quería hacer. – bfncs

+1

Creo que al operador no le importaba tanto usar shift + insert pero didn ' Quiero tener que usar el mouse para seleccionar (resaltar) el texto que se va a copiar y pegar. – mchid

Cuestiones relacionadas