Я использую zsh с плагинами oh-my-zsh для своей оболочки и со временем у меня накопилась довольно большая коллекция маленьких хитростей. Вот несколько.
CDPATH
Знаете ли вы, что вам не нужно запоминать все пути в вашей оболочке, хорошо, где был файл, который я редактировал? Вы можете сделать некоторые значения по умолчанию, чтобы при запуске cd он сначала просматривал эти пути, если только вы не укажете полный путь.
Вот как выглядит мой
CDPATH=/Users/pgautam/work:/Users/pgautam/go/src
Это означает, что я могу сделать следующее
go get github.com/GoogleCloudPlatform/golang-samples cd !$
Последний просто расширяет последний аргумент, поэтому я клонирую этот каталог и бум! Я там. Это экономит ввод ~/go/src/<whole path
. Одна из вещей, которые я заметил, это то, что некоторые скрипты bash дают сбой, если установлен CDPATH (или если каталоги конфликтуют), поэтому внутри этих скриптов я иногда добавляю unset CDPATH
, чтобы они запускались.
Перемещайтесь с помощью z
Что, если бы вам вообще ничего не нужно было запоминать, а только имя последнего каталога? Ну ты можешь. Я сопоставил z со скриптом z.sh, который хранит статистический список того, что вы ищете, и сразу переходите к нему. Скрипт установки здесь
z foo cd to most frecent dir matching foo z foo bar cd to most frecent dir matching foo, then bar z -r foo cd to highest ranked dir matching foo z -t foo cd to most recently accessed dir matching foo z -l foo list all dirs matching foo (by frequency)
fzf для нечеткого сопоставления команд и создания быстрых инструментов
Я узнал об этом инструменте под названием fzf — для нечеткого поиска несколько лет назад, и я использовал его для запросов и иногда для создания некоторых интерактивных инструментов. Я думаю, что README на этой странице прекрасно раскрывает множество расширенных функций, но я покажу вам некоторые из них, которыми я регулярно пользуюсь.
Вы хотите найти и выбрать несколько файлов
Вы можете быстро выполнить команду, например
JSONS=$(find . -name '*.json' | fzf)
и получите все файлы, которые вы хотите, которые заканчиваются на .json
, в переменную с именем $JSON
с тем, что вам нужно выбрать. Это полезно, если вы хотите выбрать что-то нетривиальное несколько раз, но придумать какое-то правило не так-то просто и не стоит тратить время. Вы можете поставить -print0
, если вы предоставляете другим командам или если ваши файлы содержат пробелы.
Подключение к Ctrl-R и Ctrl-T
Поэтому я использую Ctrl-R для просмотра моей истории. fzf спасает жизнь в поисках того, что я сделал несколько дней или недель назад. Ctrl-T сопоставляется с поиском fzf в каталоге. Чтобы не набирать find
каждый раз, когда нужно что-то быстро найти. Это может раздражать, если вы находитесь в репозитории git, поэтому у меня есть следующее.
export FZF_DEFAULT_COMMAND=’ (git ls-tree -r — name-only HEAD || find . -path “*/\.*” -prune -o -type f -print -o -type l -print | sed s/^..//) 2> /dev/null’
Это просто ускоряет поиск, выполняя поиск только в дереве git.
Однострочники Perl
Да, я до сих пор иногда использую perl — я все еще нахожу его чертовски проще и переносимее, чем bash, а регулярное выражение более интуитивно понятно и мощно, чем Python. Однако я не пишу большие программы на Perl. Есть более обширный и полный список, составленный Питером Круминсом по адресу http://www.catonmat.net/blog/perl-one-liners-explained-part-one/, я почти исключительно использую вещи из части VII для регулярных выражений Perl. но еще проще, это то, что я использую для сопоставления вещей, не соответствующих grep. Допустим, у вас есть файл с электронными письмами, и вы хотите выбрать их все (допустим, они не очень сложные. Анализировать электронную почту с помощью регулярных выражений очень сложно).
perl -lne 'print $1 if /([a-z0–9]+([a-z0–9.]+[a-z0–9])?\@[a-z0–9.-]+)/' possible-emails.txt
Я обычно использую более продвинутые и хорошо проверенные механизмы для такого рода работы, но в крайнем случае такой вкладыш должен подойти. Попробуйте использовать эту запись для possible-emails.txt
aafafafaf [email protected] afafa asfasfafa [email protected] eeqweqw adasda [email protected] ewewrwerw
Для получения более подробной информации по этому вопросу — ознакомьтесь с записью в блоге KSplice на ту же тему. https://blogs.oracle.com/ksplice/the-top-10-tricks-of-perl-one-liners
Я упоминаю об этом здесь — это то, что Perl, несмотря на то, что сейчас его сильно ненавидят разработчики, по-прежнему остается полезным инструментом в нужных местах.