Как разработчик, мой вопрос производительности номер один: как мне быстро получить свою команду?

Я пробовал разные решения на протяжении многих лет. Большинство из них — просто разные способы делать заметки. Обратный поиск (ctrl + r) из оболочки также помогает, когда мне нужно повторять команды снова и снова в течение короткого промежутка времени.

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

Для заметок часто контент находится внутри приложения, такого как Evernote, которым я когда-то пользовался. Самая большая проблема с заметками в том, что я не могу найти их из командной строки. Мне нужно переключиться с iTerm на приложение для заметок, скопировать команду и вернуться в iTerm. Это раздражает.

Для обратного поиска с дополнительными инструментами, такими как fzf, он действительно может быть очень мощным. Если вы также используете zsh, это, вероятно, решит 90% проблемы. Тем не менее, я упрямый человек. Я не использую zsh, потому что zsh иногда тормозит при открытии нового сеанса терминала в macOS. Кроме того, рабочие серверы используют bash. Для меня самая большая проблема с обратным поиском заключается в том, что у него нет команд, которые я запускаю только на рабочем сервере (или любом удаленном сервере, если на то пошло).

В конце концов я написал g, чтобы решить свою проблему.

gэто сценарий оболочки. Название происходит от команды grep. То, что он делает, просто. Он ищет текстовый файл, в котором я выгружаю всевозможные команды и даже фрагменты кода. Его исходный код размещен ниже. А пока позвольте мне привести несколько примеров того, как это работает.

$ g git | wc -l # show how many git commands I saved
27
$ g git log # show commands that match "git" and "log"
git log --pretty=full -u -L 1,1:/path/to/some/file
git log --pretty=format:"%ad %h by %an, %s" --date=iso | sort -r | less
$ g date epoch # show date commands related to unix epoch
date +%s # unix epoch in seconds
date +%s%N | cut -b1-13 # unix epoch in milliseconds
gdate -d @1361234760.790 # get human date from epoch (in seconds)

Вы можете видеть, что некоторые из команд довольно неясны и их почти невозможно запомнить. С g эти непонятные команды становятся на расстоянии кончиков пальцев. И старая добрая копипаста подойдет.

Идея g проста: она объединяет несколько команд grep для поиска, и каждая команда grep берет одно слово из входных аргументов. Источником команд grep является вышеупомянутый текстовый файл ($HOME/.me/g/commands.txt), в котором я сохраняю команды и фрагменты кода. У меня также есть этот псевдоним для быстрого редактирования файла: alias vicmd='vi ~/.me/g/commands.txt'.

Ниже приведен исходный код g на Gist.

Это легко попробовать.

  1. Скопируйте исходный код и сохраните его (надеюсь, вы сохраните имя g).
  2. Убедитесь, что он исполняемый и находится в вашем $PATH.
  3. Создайте файл $HOME/.me/g/commands.txt и добавьте туда содержимое.
  4. Начните использовать его.

И я надеюсь, что это сделает вас более продуктивным.