Выделение текста в терминале без использования мыши

68

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

Как?

Если вы где-то, кроме терминала, Ctrl+ Homeделает это.

Есть ли способ произвольно выбрать такой текст в терминале?

Редакция:

  • Предположим, что использование других программ, как screenне является хорошей альтернативой
  • текст должен быть вставлен за пределы терминала, поэтому Ctrl+ yи подобные последовательности также не решают его
Strapakowsky
источник
1
Вы имеете в виду Ctrl-Shift-Home?
Механическая улитка
Shift-Home копирует в начало строки. Ctrl-Shift-Home копирует в начало страницы.
Страпаковски
Shift-Home и Ctrl-Shift-Home делают то же самое для меня (переход к началу терминала), и ни один из них, похоже, не копирует ничего, что должно быть приостановлено ни Ctrl-Y, ни Ctrl-Shift-V (ни select). Но он работает в текстовом редакторе, не копируя, а просто выбирая. Использование OpenSUSE Leap 15 в виртуальной коробке. Любая другая привязка клавиш, упомянутая в ответах, работает.
Брамбор

Ответы:

16

Привязать следующий ярлык:

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

Теперь после использования Crtl+ Pваша строка будет скопирована в буфер обмена. Вы можете вставить его в терминал, используя:

xsel

И в любом приложении X, используя среднюю кнопку мыши или Shift+ Insert.

Nykakin
источник
Я хочу избежать использования мыши. Можно ли вставить его с помощью Ctrl + Shift + V вместо средней кнопки мыши?
MrGigu
@MrGigu, здесь используется другой буфер обмена (см. Здесь ). Вам нужно использовать другой ярлык. По умолчанию это должен быть Shift + Insert (см. Здесь )
Nykakin
О, спасибо, сдвиг + вставка работает! не знал, что вы можете вставить с помощью этой команды.
MrGigu
Любое объяснение того, что на самом деле здесь происходит?
Александр
Или xsel -bиспользуйте стандартный буфер обмена, то есть тот, который использует Ctrl + V / Ctrl + Shift + V. Также стоит отметить, что этот метод не работает на многострочных командах.
wjandrea
27

Если вы используете одну из оболочек, которая понимает ключи emacs (bash, csh и т. Д.), То вы можете скопировать текущую команду:

  1. control-A приведет вас к началу строки.

  2. control-K убьет всю строку, которую вы только что вошли.

  3. control-Y вернет текст обратно.

Затем вы можете control-Yвернуть текст обратно, чтобы вставить текст обратно в качестве ввода в редактор командной строки оболочки.

Посмотрите, man bashа затем, когда он появится, введите, /emacsа затем пару n(далее), чтобы перейти к разделу READLINE.

ElderDelp
источник
Я знал это, но хочу вставить снаружи терминала. Отредактировано для уточнения.
Страпаковски
3
control-Uможет вырезать команду с конца ее напрямую
vstepaniuk
1
2-я команда изменила мою жизнь.
Кришна
10

Самое близкое, что я могу придумать, это Ctrl+ u, Ctrl+ y
Это приведет к удалению из курсора в начало строки и вставке из буфера readline. Хотя это не совсем то же самое, что и буфер обмена, но вы сможете вставить его в оболочку, если это то, что вам нужно.

скромный
источник
Я знал это, но хочу вставить снаружи терминала. Отредактировано для уточнения.
Страпаковски
8

Есть программа под названием screen. Он создает систему текстовых окон, которая позволяет переключаться между несколькими экземплярами. Но это также позволяет вам выбрать текст.

sudo apt-get install screen

Эта команда устанавливает его.

Затем введите screen

Вы используете ctr-a для запуска последовательности команд. Затем нажмите esc, и курсор переместится в любом направлении. Нажмите ввод, чтобы начать выделение текста, перейти к конечной точке, снова нажмите ввод. Это скопирует в буфер.

Тогда ctr-a, а затем} вставит

Подробнее о других командах здесь http://www.kuro5hin.org/story/2004/3/9/16838/14935

Меер Борг
источник
Хорошее предложение, но я не люблю screenпо разным причинам, поэтому предположим, что у вас обычный терминал Ubuntu. Отредактировал мой вопрос для уточнения.
Страпаковски
1
Это надо пометить как правильный ответ ИМХО.
eddiewould
2

Если вы находитесь внутри vim, вы можете визуально выбрать одну или несколько строк с помощью Shift+, vа затем использовать привязку, например yy, для передачи выделения в xclip .

Добавьте привязку к вашему vimrc:

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

Для этого требуется установить xclip , он находится в репозитории Debian / Ubuntu aptitude.

xclipсохраняет stdin, при этом -selection clipboardопция также помещает stdin в системный буфер обмена.

Таким образом, вы также можете использовать xclipобщий способ из терминала, например, чтобы скопировать весь файл в системный буфер обмена:

cat myfile | xclip -selection clipboard

Если вы также можете создать псевдоним, например:

alias cb="xclip -selection clipboard" 
Kris
источник
1

Термит Даниэля Микаэ "спортивный режим". Нажатие Ctrl + Shift + Пробел активирует его. У него есть vim-подобные привязки клавиш. v или V выберут визуальный режим la vim, y дернет, Esc выйдет из режима выбора.

Скопировано из https://stackoverflow.com/questions/1536757/selecting-text-in-terminal-without-using-the-mouse/29386401

Jakobovski
источник