Пиши код в терминале, как настоящий хакер

0
4861
views

Перевод статьи Калеба Тейлора «How to code like a Hacker in the terminal».

Как по-хакерски писать код в терминале

Вы хакер. Терминал – ваш дом родной. Вы знаете, что каждое нажатие клавиш имеет значение. Если что-то эффективно менее чем на 100%, то вы готовы проводить часы, подбирая правильный инструмент, который сохранит вам секунды. Потому что дело всегда того стоит.

Матрица
Source: Pablo Stanley via Twitter

Но не отвлекает ли вас от работы этот постоянный поиск новых и лучших способов работать? Кто-то может с этим согласиться, но вы – вряд ли. Никакая работа не стоит того чтобы ею заниматься, если после вы не сможете прочесть коллегам лекцию о том, как вам удалось сделать это так эффективно (ну, эффективно – это не считая времени на настройку всего).

Инструменты/функционал из списка ниже должны быть известны любому хорошему хакеру.

Оболочка (zsh)

Обычный разработчик: Оболочка это оболочка. Вообще не важно, какую использовать.

Вы, хакер: Командная оболочка это сердце моей работы. Моя страсть к эффективности и функционалу не знает границ. Моя оболочка должна быть достойна настоящего хакера.

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

Она имеет массу особенностей:

  • Автоматическое исправление команд, введенных с ошибками.
  • Совместимость с bash.
  • Лучшее дополнение cd с помощью <tab>.
  • Раскрытие пути: cd /u/c/c/j + <tab> =cd /user/caleb/code/jarvis
  • И многое другое.

Она также поставляется с отличным фреймворком для управления вашей zsh-конфигурацией: Oh My Zsh. Он включает больше 200 плагинов и больше 140 тем, с помощью которых можно добавить в ваш терминал разнообразные прекрасные функции. Маленький пример:

git – тысячи aliases и полезных функций для git.

tmux — alias и настройки для интеграции zsh с tmux.

node – добавляет команду node-docs для открытия документации сайта.

osx – несколько утилит для работы с OSX.

web-search – поиск в интернете из командной строки.

auto-suggestions – быстрые, ненавязчивые предложения команд, возникающие по мере ввода. Основываются на вашей истории команд.

Полный список плагинов можно посмотреть здесь.

Управление сессиями (tmux)

Обычный разработчик: Окей, я открыл мои файлы проекта lame_project_1. Но мне также нужно работать над boring_project_2. Также мне нужно подключиться к серверу по ssh и посмотреть логи. Подозреваю, что у меня будет бардак в терминале со всеми этими файлами/вкладками из разных проектов и в конечном итоге я потеряю над ними контроль и буду вынужден закрыть терминал и начать сначала.

Вы, хакер: я работаю над несколькими проектами одновременно, так что мне нужен инструмент, чтобы все организовать. Он должен работать на разных платформах, давать мне возможность организовывать рабочее пространство и обладать другими функциями, увеличивающими продуктивность.

Вы знаете, что разработка может стать беспорядочной. Порой приходится работать над несколькими проектами одновременно. Вот почему вам нужен tmux.

Он позволяет создавать сессии. Каждая сессия может быть кастомизирована под ваши нужды. Чтобы было легче переключаться, сессиям можно давать имена. Также их можно сохранять, чтобы в случае закрытия терминала можно было восстановить. Плюс, в этом инструменте есть собственная строка состояния, где отображаются вещи вроде времени, даты, использования CPU и пр. А если вы не знаете, сколько CPU у вас используется на данный момент, то какой же вы хакер?

Программа tmux

В tmux даже есть менеджер плагинов и масса прекрасных плагинов и функций, которые поднимут ваш хакинг на новый уровень.

Супер-хакерский совет: используйте tmux с fzf с помощью прекрасных скриптов для быстрого создания / удаления файлов и перемещения по ним.

Поиск (ripgrep)

Обычный разработчик: Где я определил эту константу? Я знаю, что она где-то здесь. Попытаюсь найти с помощью grep. А какие аргументы задать? Загуглю. Вот черт, теперь оно ищет по моей папке node_modules. Хуже не бывает.

Вы, хакер: Когда я что-нибудь ищу, поиск должен быть молниеносно быстрым. Также в инструменте поиска должны быть тонкие настройки, заданные по умолчанию, чтобы игнорировать бинарные и скрытые файлы.

Вы знаете, что поиск по проекту выполняется довольно часто. Он должен быть быстрым, чтобы не отнимать ваше время. Это подразумевает вещи вроде игнорирования всего, что игнорирует ваш файл .gitignore, а также пропуск бинарных и скрытых файлов. Вот почему вам нужен ripgrep. Это как grep на стероидах.

Говоря словами разработчика программы, «Используйте ripgrep, если вам нравится скорость, фильтрация по умолчанию, меньшее количество багов и поддержка Unicode».

Fuzzy Finding (fzf)

Обычный разработчик: Помнить расположение всех файлов моего проекта, безусловно, тяжело. Думаю, придется покопаться, пока найду нужный.

Вы, хакер: мне нужна возможность искать файлы с нечеткими условиями поиска. Чтобы я мог быстро найти искомое, введя имя файла или часть пути, или и то, и другое.

Вы знаете, что вам нужна возможность не печатать больше необходимого. Поэтому вы применяете fzf – fuzzy finder общего назначения для использования в командной строке. Он может осуществлять поиск по любому списку: по файлам, истории команд, процессам, именам хостов, закладкам, git commits и т.п.

Супер-хакерский совет: псевдонимы (aliases) это отличный способ создать сокращения, которые помогут вам извлечь пользу из функционала fzf. Например, если вы хотите найти файл, а затем открыть выбранное в вашем дефолтном редакторе, вы можете добавить в конфиг вашего zsh следующее:

# fo [FUZZY PATTERN] - Open the selected file with the default editor
#   - Bypass fuzzy finder if there's only one match (--select-1)
#   - Exit if there's no match (--exit-0)
fo() {
  local files
  IFS=$'\n' files=($(fzf-tmux --query="$1" --multi --select-1 --exit-0))
  [[ -n "$files" ]] && ${EDITOR:-vim} "${files[@]}"
}

fuzzy

На fzf wiki есть гораздо больше примеров.

Подсказки в терминале (Spaceship)

Обычный разработчик: да какая разница, как выглядят подсказки в терминале? В них все равно нет ничего полезного для меня. Я бы просто оставил их в дефолтном состоянии.

Вы, хакер: Я хочу, чтобы мои подсказки были восхитительными. Они должны учитывать контекст. Они должны давать мне полезную информацию и быть настраиваемыми. Также было бы хорошо, если бы они соотносились с пространством.

Вы знаете, что подсказки должны быть короткими, простыми и предоставлять информацию, имеющую отношение к делу. А также они должны поражать людей своей красотой. Вот почему вы используете spaceship-prompt. Он предоставляет git/mercurial интеграцию, индикатор заряда батареи, «умное» имя хоста и пользовательские данные, номера версий для разнообразных библиотек, потрясающие значки и многое другое.

Смена директорий (z)

Обычный разработчик: Мне нужно перейти в мой проект hacker, который находится внутри папки cool, которая лежит в папке personal, которая расположена в папке code, а уж та, в свою очередь, – в домашней директории.

cd ~/code/personal/cool/hacker

Вы, хакер: Мне нужно перейти в мой проект hacker.

z hacker

Обычные разработчики печатают весь путь к нужной директории. А вы хакер. Вы полагаетесь на z. После установки эта программа начинает изучать, какие директории вы посещаете. Затем вы можете передать ей регулярное выражение (или просто имя директории), чтобы перейти к наиболее вероятному кандидату.

Бонусные инструменты хакера

Следующие инструменты позволят вам вывести свою хакерскую игру на новый уровень.

1. wttr.in  – Есть только один правильный способ узнавать погоду.

Хакерский способ узнавать погоду.

2. Star Wars  – Классные люди любят «Звездные войны». Хакеры смотрят их в терминале. (о подобные интересных штуках, которые можно делать в терминале Linux, мы писали ранее).

3. haxor-news – Если вы не читаете Hacker News, то вы вообще хакер?

4. Spotify – Используя shpotify, вы можете проигрывать музыку прямо из терминала (только OSX). Или можно использовать mopidy для чего-нибудь кроссплатформенного.

Конечно, это далеко не исчерпывающий список. У вас есть собственные любимые инструменты, повышающие эффективность работы? Поделитесь в комментариях!



ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here