Как скопировать и вставить с терминала с клавиатуры?

Я пытаюсь уйти от использования мыши настолько, насколько могу (только проект для домашних животных). Я знаю, что в терминале вы можете сделать ck, чтобы сократить строку и cu, чтобы вставить эту строку обратно в тот же терминал, но я ищу что-то, где я могу скопировать строку в терминале в буфер обмена gnomes, чтобы я мог вставить ее скажем, браузера или чего-то подобного.

Я знаю, что если я использую мышь, чтобы выделить текст, я могу нажать shift-insert, чтобы вставить этот текст, и это здорово, но теперь я просто хочу, чтобы это можно было сделать без мыши. Что-то вроде подсветки c-space в emacs (но даже это не копирует в буфер обмена gnome).

Спасибо

Еще несколько пояснений, у меня открыто несколько разных терминалов, и многие из них я нахожу в разных удаленных машинах, где утилиты, такие как xclip/xsel, не так полезны.

Ответ 1

Указанный здесь, команды по умолчанию для копирования и вставки GNOME: CTRL - SHIFT - C и CTRL - SHIFT -. V

Изменить: я нашел полезный пост в блоге, который позволяет вам разрешать копирование/вставку терминала на CTRL - C и CTRL - V в GNOME.

Ответ 2

Shift + Вставить для вставки. Я думаю, это то, что вам нужно, но я не знаю, как копировать с терминала.

Ответ 3

Для взаимодействия с буфером обмена X11 из командной строки см. этот вопрос.


Может быть, боковая дорожка к тому, что вы просите, но для взаимодействия с терминальным окном я могу порекомендовать screen, где вы используете ключи для копировать и вставлять (из буфера с прокруткой для поиска!). Операция копирования и вставки выполняется только между экранами, управляемыми экраном, как описано с оконечным окном и cu и ck, но вы можете легко сбрасывать на /tmp/screen -xchange, а затем использовать xclip для копирования в буфер обмена X11.

Ответ 4

Это легко! Просто запустите две команды, и вы сможете скопировать и вставить с помощью Ctrl+C Ctrl+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"

Счастливое копирование в скобки!

Ответ 5

Я пробовал использовать hlovdal и использовал GNU screen и xclip. Результатом стал простой script:

cat /tmp/screen-exchange | xclip

который я настроил на C-a e в .screenrc:

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

то я просто вхожу в режим копирования/прокрутки на экране с помощью C-a [ mark/select с помощью > и копирует в основной выбор с помощью C-a e. Возможно, это не самая плавная последовательность комбинаций, но это лучшее, что я получил до сих пор.

Ответ 6

Вы можете запустить оболочку внутри Emacs, затем вы можете выбрать и скопировать в буфер обмена, как обычно это делаете в Emacs.

Что касается "запуска оболочки внутри Emacs", существует несколько опций: M-x shell, M-x eshell и различные элементы term/eterm/ansi-term (режимы) (эти "* term" должно быть лучше для псевдографических проклятий и т.д.)

Что касается меня лично, пытаясь держаться подальше от мыши, я стараюсь использовать eshell в первую очередь (обычно мне не нужны программы curses), emacs-w3m для веб-браузера, просто Emacs в основном для всего остального, и ratpoison в качестве диспетчера окон.

Ответ 7

В течение долгого времени я также пытался его отсортировать, используя vt100.translations.

Взято из 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")

нет успеха

ОК, если мы установили некоторый ключ для select-start select-end..extend но как привозить курсор.

экран gnu может быть решением, но он не будет корректно в zsh, и мы не сможем вырезать текст в Xclipboard.

Ответ 8

Я знаю, если ваша программа оболочки bash или tcsh, она использует библиотеку readline для редактирования строки, поэтому функция Control-K обрабатывается readline и хранится в буфере "kill-ring" внутри вашей программы оболочки, Невозможно украсть содержимое kill-ring из вашей оболочки (если только ваша оболочка не имеет определенных функций, запрограммированных в нее, чтобы разрешить это), однако вы можете повторно настроить Control-K для выполнения некоторых других действий, настроив .inputrc файл в вашем домашнем каталоге. Таким образом, вы можете настроить его для выполнения макроса, например, вывод текста "xclip -in\n", а затем сброс содержимого "кольца-убийцы" на выход вместе с действием "Control-D" для завершения текста. Это в основном объясняется в man файле readline.

Я никогда не пробовал ничего подобного раньше, поэтому я не знаю, будет ли это работать или нет, но этот маршрут я бы попробовал первым.

Ответ 9

Могу ли я предложить RatPoison как ваш оконный менеджер? Как следует из названия, вам не нужна мышь вообще. Я не уверен, как он обрабатывает буфер обмена, хотя я использовал его только для удовольствия. Это может зависеть от того, какую терминальную программу вы используете.

Ответ 10

Это супер-неуклюжий взлом, но он работает для копирования последней строки вывода из последней команды запуска в терминале, используя только клавиатуру (и python script), и она может работать поверх ssh.

Вот как вы его используете.

  • В gnome-терминале (или подобном) Alt + E, A. Это для выбора всех.
  • Если вы находитесь в ssh, откройте другой терминал на своей локальной машине.
  • Запустите прикрепленный script, который я вызываю на моем компьютере.

Затем у вас есть одна строка текста без новой строки в вашем буфере обмена gtk. script работает с помощью буфера обмена выбора x из выбора всего текста терминала и размещения третьей-последней строки в буфере обмена gtk. Этот script можно изменить, чтобы выбрать различные части выбора x, которые будут соответствовать различным частям текстового буфера терминала. Однако это еще долгий путь от интерактивного курсора: (

Было бы здорово, если бы поддержка gnome-terminal интегрировала поддержку выбора с клавиатуры.

В этом примере помещается "/usr/bin/gcc" в буфер обмена gtk (не забудьте выбрать "Все до запуска последней линии" ):

$ which gcc
/usr/bin/gcc
$ lastline

Здесь script я call 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()