Консольный "буфер обмена"

Всем хороши консольные инструменты, но при редактировании текста, конечно, не хватает привычного в GUI-окружении буфера обмена. И если работая на десктопе можно выкрутиться, открыв текст в каком-нибудь Notepad'е, то работая на удаленном хосте в режиме ssh приходится прибегать к маленьким хитростям.
Ну, во-первых, консольный редактор Vim буфер обмена прекрасно поддерживает. Можно даже выделять текст, только не курсором мыши, а стрелками клавиатуры, предварительно нажав клавишу v:



Это называется визуальный режим. Выйти из него можно нажав Esc.
Нажав заглавную V в Vim, можно включить построрчный визуальный режим и выделять целые строки стрелками «вверх» и «вниз».



По окончании выделения нужно нажать клавишу y (игрек). После этого выделенный фрагмент скопируется во внутренний буфер обмена Vim. Если нужно не скопировать, а вырезать фрагмент в буфер, то нужно нажать не y, а d. Кстати, двойное нажатие y или d приводит к копированию/вырезанию в буфер целой строки (под строкой в Vim понимается абзац, а не строка экрана).

Если в Vim открыто одновременно несколько файлов, то их фрагменты можно переносить через этот самый буфер из окна в окно. Переключение между редактируемыми файлами осуществляется командами Vim :n (следующий),: prev (предыдущий), :rew (перемотать к первому).

Но не всегда удается открыть нужные файлы в Vim одновременно. Иногда они лежат «за несколько километров» друг от друга, т.е. совершенно в разных каталогах файловой системы. На этот случай вот «пара приемчиков».

В простейшем случае, когда нужно перенести текстовую информацию из файла в файл и оба они лежат в одной и той же директории, можно выполнить

cat a.txt >> b.txt


Содержимое a.txt допишется в конец b.txt. Затем b.txt открывается в Vim'е и дописанный в конец фрагмент переносится куда надо вышеуказанным способом. Но поскольку речь идет о файлах в разных каталогах, то на помощь приходит Midnight Commander. Открываем в его панелях каталоги с нужными файлами, указываем копируемый, нажимаем F5, вручную вписываем в диалог результирующий файл, выбираем «Дописать в конец»:



Иногда, кстати, целесообразно нажать F6, а не F5, чтобы избавиться от промежуточного файла.

Что делать, если текстовой файл, из которого нужно взять информацию, слишком большой? Здесь на помощь приходит утилита grep:

cat a.txt | grep package >> b.txt


— в файл b.txt допишутся только те строки файла a.txt, в которых содержится слово package.

Если файлы «далеко» друг от друга, то можно задействовать промежуточный файл. В каталоге с файлом a.txt:

cat a.txt | grep package >> tmp.txt


Затем перекидываем с помощью Midnight Commander'а в b.txt как сказано выше.

Ну и, наконец, как «вырезать» строки с такой-то по такую-то из длинного файла для помещения в другой файл? Здесь помогает команда sed:

cat a.txt | sed -e '10,20!d' >> b.txt


— в конец файла b.txt дописываются строки с 10 по 20 файла a.txt.
  • +3
  • 05 февраля 2010, 17:22
  • yababay

Комментарии (2)

RSS свернуть / развернуть
+
0
Не забываем о том что команды можно выполнять в vim так:
:! cat a.txt
avatar

Sergei_T

  • 05 февраля 2010, 17:44
+
0
Спасибо! Скопировал на память!
avatar

Markony

  • 05 февраля 2010, 18:50

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.