Когда пишут про Linux, все обычно упоминают бесплатность, стабильность, быстроту, но меня привлекало не только это. Почему люди ставят WSL или CygWin или Git for Windows. В них во всех есть coreutils, а также сама командная строка. А в чём прикол работать в командной строке:
- Использовать Vim и Emacs для работы с текстом
- Уменьшить visual distraction, когда все шрифты и цвета унифицированы
- Использовать другие удобные инструменты командной строки
- Выполнять большинство действий с клавиатуры, без помощи мыши, что существенно быстрее
- Бонусом уменьшается потребление ресурсов
С терминалом можно зайти настолько далеко, что часть вещей я вынес в следующую статью, которая будет скорее про эксперименты, но в целом можно копать в сторону списков приложений в командной строке, например. Также интересный момент в том, что много приложений, которые могут работать в командной строке, встроены в Emacs, и к некоторым из них мы вернёмся как раз в экспериментах. Но начать обустройство командной строки надо с менеджера терминальных сессий, мы ведь будем запускать несколько приложений в командной строке одновременно.
Менеджер сессий в терминале
Задачу запуска нескольких программ в терминале можно решить несколькими способами:
- Запускать программы в фоновом режиме, добавив в конце &
- Отправлять программу в спящий режим, нажав Ctrl+Z, и возвращать обратно командной fg
- Использовать вкладки терминала, что мне не очень понравилось, поскольку занимает место на экране
- Использовать менеджеры сессий типа tmux, которые скорее заточены на разделение экрана на части; что мне не очень актуально, потому что я не использую большой внешний монитор, а работаю за обычным экраном ноута
- Использовать старый добрый screen
Screen – это абсолютно адская штука в плане функциональности, он заточен на работу на удалённых серверах. Например, вы запускаете несколько процессов на сервере, у вас обрывается соединение: процессы продолжaт работать, а к сессии можно подключиться заново. Но также он умеет запускать несколько сессий на удалённом или локальном компьютере, переключаться между ними.
Просто приведу здесь свой .screenrc, который делает несколько вещей:
- Выводит статусную строку, чтобы привыкнуть к тому, в каком окне находишься
- Меняет стандартное сочетание клавиш, с которого начинаются любые команды, с Ctrl+A на Ctrl+]
- Запускает в первой сессии emacs, а во второй обычный shell
escape ^]] # Ctrl+] для команд screen
startup_message off
hardstatus alwayslastline "%{= bR}[%{= bY}%H%{= bR}]%{= bY} %n%{= bR}:%{= bY}%t %{= bw}%W %=%{= br}[%{= bY}%h%{= bR}]"
term screen-256color
screen -t emacs 1 emacs-nox
screen -t shell 2 bash
select 1
bind c screen 1 # window numbering starts at 1 not 0
bind 0 select 10
Чтобы начать использовать, достаточно ввести в терминале screen. Чтобы получить помощь – Ctrl+] и потом ?. Но это не всё, мы же можем запускать screen сразу при открытии gnome-termnial (или другого терминала). Для этого заходим в параметры терминала, в gnome-terminal это профиль и закладка Command, ставим флаг, чтобы запускать команду при старте и вводим screen. Кроме этого, у меня gnome-terminal добавлен в Startup applications (это можно сделать в том же Gnome Tweaks), поэтому при загрузке происходит следующее:
- Открывается терминал
- В терминале запускается screen
- В screen открывается две сессии, одна из них emacs (в котором, кстати, можно сохранять сессии)
Это уже экономит некоторое количество времени. Да, кстати, в случае gnome-terminal можно копировать в общесистемный буфер обмена по Ctrl+Shift+C и вставлять в терминал из общего буфера обмена по Ctrl+Shift+V. Эти сочетания настраиваются, но это минимум для выживания в командной строке.
Vim и Emacs
Есть люди, которые спорят про то, что лучше; я пока использую оба редактора для разных сценариев:
- Emacs скорее как среду запуска приложений внутри него
- Vim для набора больших текстов, таких как записи в этот блог
Чтобы сделать Vim удобнее, достаточно установить плагин типа lightline, что добавит статусную строку, она же индикатор режима. Есть разные способы установки, по ссылке всё описано. И о том, как в 2 шага перейти на Vim из IDE, видео здесь. Ну и можно взять какой-нибудь cheat sheet, такой или для печати и периодически посматривать в него.
Emacs привлёк меня org-mode, в нём можно вести записи и список задач. Пользуюсь достаточно долго, мне нравится, хотя недавно узнал, что есть аналогичная штука для vim – vimwiki. Org-mode – это как dropbox paper, только локально. Что хочется видеть:
- заголовки
- скрытые ссылки
- переход по ссылкам
- создавать задачи
- отмечать задачи как выполненные
Это всё есть, как и многое другое.
При этом Emacs можно использовать, если грубо, тремя разными путями:
- Установить голый Emacs
- Doom Emacs
- Spacemacs
Лично я для себя выбрал второй вариант, поскольку он быстрый, простой и прозрачный. Но для работы с русским логично поставить авто-переключалку на русский при вводе команд, это делается добавлением в packages.el:
(package! reverse-im)
А в config.el:
(use-package reverse-im
:config
(reverse-im-activate "russian-computer"))
Дальше уже выбираем в init.el нужные пакеты, обновляем doom-emacs. Кстати, для этого просто сделал alias в .bashrc:
alias doom-update="~/.emacs.d/bin/doom sync"
Другие инструменты
Например, можно уменьшить размер PDF
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
- Можно работать в python prompt с pandas, и для этого не обязательно ставить Jupyter Notebook
- Можно подключаться к базам данных типа mysql
- Работать с git
- Создать архив в bz2:
tar jcf <название архива>.tbz <каталог>
- Подключаться к другим компьютерам по ssh
- Делать поиск внутри текстовых файлов с помощью fgrep
- Смотреть нагрузку на систему и процессы с помощью top / htop
- Переносить данные между облачными хранилищами с помощью rclone
- Ну и конечно работать с установкой программ с помощью apt / dnf, rpm / dpkg, snap / flatpak
Это только то, что использовал последнее время. В заключение этой части хочу заметить, что не всегда путь к этим конфигурациям был простым, поэтому помогало то, что я мог экспериментировать на домашнем компе, а потом закинуть конфиги на рабочий комп. Ведь конфиги – это обычные текстовые файлы, при этом понятно, какие.
Комментарии