Выбор текста в Terminal.app с помощью клавиатуры в OS X

Вопрос или проблема

Мне нравится копировать вещи из терминала, но я не люблю перемещаться к мыши. Как выбрать текст в Terminal.app с помощью клавиатуры?

Например, находясь в Terminal, может хотеться переместиться к определенной точке на строке и затем выделить часть текста с помощью клавиш со стрелками влево и вправо, которую затем можно будет вырезать или копировать. Это возможно?

Если вы хотите скопировать вывод команды, вы можете использовать pbcopy. Чтобы получить конкретный вывод, используйте grep.

Например, чтобы скопировать весь вывод netstat -an:

netstat -an | pbcopy

Чтобы скопировать только вывод открытых портов (прослушивающих):

netstat -an | grep LISTEN | pbcopy

Сам Terminal.app не имеет способа использовать клавиатуру для выбора текста, но используя терминальный мультиплексор, такой как screen или tmux, вы можете сделать это в режиме “копирования”. Screen установлен по умолчанию в OS X, а tmux можно установить через сторонние инструменты, такие как Homebrew или Macports. В man-странице для обеих программ описан режим копирования и как выбрать текст для копирования в буфер обмена. В man-странице screen можно найти больше информации о навигации в режиме копирования в разделе CUSTOMIZATION под copy. Вот выдержка:

   copy

   Введите режим копирования/прокрутки. Это позволяет вам копировать текст из
   текущего окна и его истории в буфер для вставки. В этом режиме активен
   редактор, похожий на `full screen editor`:
   Клавиши движения:
     h, j, k, l перемещают курсор по строкам или столбцам.
     0, ^ и $ перемещают к самому левому столбцу, к первому или последнему
       небелому символу в строке.
     H, M и L перемещают курсор к самому левому столбцу верхней, центрированной
       или нижней строки окна.
     + и - перемещают на одну строку вверх и вниз.
     G перемещает к указанной абсолютной строке (по умолчанию: конец буфера).
     | перемещает к указанному абсолютному столбцу.
     w, b, e перемещают курсор слово за словом.
     B, E перемещают курсор на WORD за WORD (как в vi).
     C-u и C-d прокручивают экран вверх/вниз на указанное количество строк,
       сохраняя положение курсора. (По умолчанию: половина экрана).
     C-b и C-f прокручивают экран вверх/вниз на полный экран.
     g перемещает к началу буфера.
     % перескакивает к указанному проценту буфера.

Это все еще не взаимодействует с буфером обмена системы, поэтому вам придется как-то скопировать вывод, возможно, вызвав содержимое буфера вставки в pbcopy. Пример рабочего процесса:

(C-a [ – это “удерживайте control, нажмите A, а затем нажмите [“, то же самое для ]. смотрите man-страницу screen.)

  1. Запустите screen и работайте там.
  2. Войдите в режим копирования: C-a [
  3. Навигируйте, используя привязки клавиш vi (или настройте использование привязок emacs согласно man-странице).
  4. Начните выделение текста, нажав пробел.
  5. Нажмите enter, чтобы скопировать выделение в буфер вставки. Это выйдет из режима копирования.
  6. Вставьте буфер с помощью C-a ]

    echo ‘C-a ]’ | pbcopy

(не набирайте C-a ], используйте привязку клавиш, как описано выше, используйте кавычки, где это необходимо)

Выбранный текст должен быть в системном буфере обмена, и вы можете вставить его в другое окно. Например, следующее:

   paste [registers [dest_reg]]

   Запишите  (конкатенированные)  содержимое  указанных регистров в
   очередь stdin текущего окна. Регистры . рассматриваются как буфер вставки.
   Если параметр не указан, пользователю предлагается ввести один
   регистр для вставки.  Буфер вставки может быть заполнен командами
   copy, history и readbuf. Другие регистры могут быть заполнены
   командами register, readreg и paste.  Если paste вызывается с
   вторым аргументом, содержимое указанных регистров вставляется в
   именованный регистр назначения, а не в окно. Если . используется в качестве
   второго аргумента, отображающийся буфер вставки будет являться местом назначения.
   Обратите внимание, что "paste" использует широкий спектр ресурсов:
   Всякий раз, когда задан второй аргумент, текущее окно не требуется.
   Когда спецификация источника содержит только регистры (не буфер вставки),
   то текущее отображение (привязанное к терминалу) не требуется, так как регистры
   являются глобальным ресурсом. Буфер вставки существует один раз для каждого пользователя.

Это было из ман-страницы screen после выполнения вышеописанного :).

Теперь, учитывая все вышесказанное, и вы действительно упоминаете Terminal.app, новая функция iTerm2 версии 0.20.20101102, которая находится на этапе альфа-тестирования, дает следующее:

  • Выбор без мыши: Часто ли вы копируете и вставляете текст в пределах одного окна? Теперь вы можете делать это, не используя мышь. Откройте панель поиска с помощью cmd-f и найдите текст, который хотите скопировать. Когда часть текста будет найдена, используйте клавишу tab, чтобы увеличить выделение вправо на целое слово, и shift-tab, чтобы уменьшить его влево до предыдущей границы слова. Он автоматически копируется в буфер обмена, или вы можете использовать opt-Enter, чтобы сразу вставить выделение.

Хотя это альфа-версия, я использую ее для всей своей работы в Terminal уже около полутора месяцев, и она довольно стабильна.

Домашняя страница iTerm2

Если вы хотите скопировать команды, которые вы вводили на командной строке Bash, вы можете использовать функции редактирования строк readline в Bash:

Вот пример в (по умолчанию) режиме emacs:

  • Нажмите Ctrlr и введите часть команды, которую вы хотите вспомнить из истории
  • Нажмите Ctrlu, чтобы вырезать (убить) эту строку в буфер для убийства
  • Нажмите Ctrly, чтобы вставить (вытянуть) буфер для убийства в командную строку (вы можете нажать это несколько раз, чтобы получить повторяющиеся копии)

Существует множество возможностей, включая влияние на части строки или конкретные слова и т.д.

Смотрите man bash в разделе “Readline” и man readline для получения дополнительной информации.

Ответ или решение

Для удобной работы в Terminal.app на macOS и выполнения операций копирования текста с помощью клавиатуры, у пользователей есть несколько подходов, позволяющих избежать использования мыши. Ниже я опишу, как можно выбрать текст и скопировать его в буфер обмена, применяя различные методы и инструменты.

Использование стандартных возможностей Terminal.app

К сожалению, Terminal.app в своей стандартной конфигурации не предлагает возможности выбора текста исключительно с помощью клавиатуры. Однако, можно использовать сочетания клавиш для выполнения операций копирования и вставки. Сначала вы можете использовать клавишу Cmd (⌘) для выделения текста с помощью мыши или вызвать команды, которые автоматически копируют вывод в буфер обмена.

Примечание:

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

Пример:

netstat -an | pbcopy

Этот способ отлично подходит для копирования всей информации, но не подходит для выборочного копирования определенных линий текста.

Использование screen или tmux

Для более мощной работы с текстом в терминале рекомендуется использовать терминальные мультиплексоры, такие как screen или tmux, которые поддерживают режим "копирования".

Пример работы в screen:

  1. Запустите screen и выполните нужные действия.
  2. Войдите в режим копирования с помощью комбинации Ctrl-a [ (удерживайте Ctrl и нажмите a, затем [).
  3. Перемещайтесь по тексту с помощью клавиш (например, h, j, k, l для перемещения по строкам или w, b, e для перемещения по словам).
  4. Выделите текст с помощью пробела и затем нажмите Enter, чтобы скопировать выделенный текст в буфер обмена.
  5. Чтобы вставить текст обратно, используйте Ctrl-a ].

Этот метод требует небольшой практики, но значительно ускоряет работу без использования мыши.

Использование iTerm2

Если вы хотите ещё более продвинутый функционал, обратите внимание на iTerm2 – альтернативный эмулятор терминала для macOS, который имеет множество функций, включая "мультимодальный выбор" текста.

Пример без мыши в iTerm2:

  1. Откройте панель поиска с помощью Cmd-f.
  2. Введите текст для поиска; совпадения будут выделены.
  3. Используйте Tab для увеличения выделенного текста вправо или Shift-Tab для уменьшения выделения влево. Все автоматически копируется в буфер обмена.

Использование возможностей Bash

Еще один способ – это использование возможностей редактирования строк Bash. Если вам нужно скопировать команды из истории:

  1. Нажмите Ctrl-r и введите часть команды, чтобы найти её в истории.
  2. После нахождения команды вы можете использовать Ctrl-u, чтобы вырезать текст в буфер обмена и Ctrl-y, чтобы вставить его обратно.

Таким образом, используя приведённые методы и инструменты, вы можете значительно упростить процесс копирования и вставки в Terminal.app на macOS без необходимости перехода к мыши. Убедитесь, что освоили каждый из этих способов, чтобы выбрать наиболее подходящий для вашего рабочего процесса.

Оцените материал
Добавить комментарий

Капча загружается...