Что: e65ae41a70c60a603fa6cfd2b42d4ca681e7b937 Когда: 2021-04-22 16:21:40+03:00 ------------------------------------------------------------------------ Темы: tip zsh ------------------------------------------------------------------------ Более быстрое перемещение по директориям https://mhoffman.github.io/2015/05/21/how-to-navigate-directories-with-the-shell.html Всегда люблю читать про всякие хаки и мелочи кто как использует свой компьютер. Ведь каждая мелочь может приносить огромный вклад в КПД. alias ..="cd .." alias ...="cd ../.." alias ....="cd ../../.." Вот этот способ перемещения я не одобряю. Точнее так: я себе сделал нажатие F2 как выполнение cd .. с выводом текущей директории: cddotdot() { cd .. pwd zle reset-prompt } zle -N cddotdot bindkey "" cddotdot И мне кажется это сильно эффективнее и удобнее: одно нажатие и я уже перешёл на директорию выше и сразу же ещё и увидел путь где я нахожусь. Ведь не всегда можно точно сосчитать 5-или-6 точек надо набрать? А тут лишнюю точку и enter -- уже в любом случае на два нажатия больше. Одно но: в моём F2 случае у меня история перемещений каждый переход будет запоминать, но мне это не доставляет проблем. Использование: !$ -- ну это must-have-нейший must-have. Просто невероятно как часто оно используется и повышает КПД. Я каждый день и какие-нибудь !:1 использую, для подстановки не последнего аргумента. Но с этим уже посложнее, ибо последний всегда виден, а остальные надо ещё глазами оценить где находятся и какой у них порядковый номер. Конкретно про $CDPATH не знаю, но позволяет ли он перейти в foo/bar, когда только "foo" присутствует в $CDPATH? В zsh можно использовать hash -d для создания буквально алиасов, относительно которых можно перемещаться и в поддиректории и они же отображаются в путях. 086c1e54e6fb5c52b0185ef30af61fac28056033 shopt -s cdspell -- всякие штуки связанные с исправлением опечаток я отключил давно и точно не могу никому советовать. Достаточно пару раз чтобы коррекция отработала не совсем как ожидаешь, при этом уже жахнув по Enter-у, чтобы пожалеть о ней. Опасная штука. Хотя лет 20 назад мне нравилась по началу эта фишка из tcsh. pushd/popd -- самая главная фича которая мне нужна от shell-а интерактивного. Точнее autopushd фича. Самая главная причина почему я не признаю bash удобным интерактивным shell-ом это отсутствие auto pushd. Мне нужно чтобы *все* cd интерактивные по сути работали как pushd. Ведь pushd дольше набирать. Но нельзя просто так сделать alias cd=pushd, потому что... не помню уже почему, но много каких-то тонкостей возникало и всё равно это не было полноценным (казалось бы и простым) autopushd аналогом zsh. Вместо набора popd я у себя нажимаю F4: pushdquiet() { popd zle reset-prompt } zle -N pushdquiet bindkey "" pushdquiet Одно нажатие и я возвращаюсь назад, отображая куда я перешёл. Даже если F2 мне замусорит историю одиночными переходами по одной директории наверх, то я быстро нажимая F4 смогу дойти до куда нужно, видя прогресс воочию. lln/lf подход я не пробовал. Мне кажется он мне не нужен был, из-за, опять же zsh, дополнения путей по частям. Если мне выведется "foo bar baz blablabla directory", то мне достаточно ввести "cd bazdir". Но желание использовать или вывод или какое-то состояние (git-а) тоже есть и я недавно стал довольно часто использовать fzf связку с tmux popup-ами. Причём когда я только игрался и ещё не дошёл до осознания удобства fzf, то мои первые шаги тоже были из серии указать порядковый номер в выводе какой-то команды. 77ede978e9c24bc8e68ee4e900b9dc5bf94b29f6 7aceadbbd5387d9e62cb3fc54d6a89d5903f71b1 8b3d925396280a38f03ccf542cb95c60927c3e6d А ещё я стараюсь использовать zsh возможности по glob-у. Как в хорошо сформулированном вопросе уже содержится половина ответа, то и в хорошо указанной для компьютера команде содержится идеальный конечный результат. Например не нужно выводить список файлов по свежести и потом думать как бы открыть из этого списка файл. Нужно так компьютеру и сказать: открой мне самый свежий файл из такого glob-а с такой-то сортировкой: a706ddd8826b001990c7488a128862ace64924e3 Поиск в истории по началу введённой команды -- ну это опять же самое базовое что всегда стоит настраивать. Даже не представляю как можно бы было жить в shell без этого, когда вверх/вниз не учитывают уже введённый текст. Сейчас у меня ещё более мудрёный поиск: * просто стрелочки ищут по истории учитывая уже введённый текст * при этом отдельным цветом мне высвечивается элемент истории который был бы найден: cd9d77af5b164a6abb194187a06ebb34aecf9ebc autosuggestion штука -- сверх ценнейшая! * и если я использую shift-стрелочки, то у меня включается самописный some-kind-of-fish-substring-search, где запускается поиск по истории с regexp-ом где между каждыми уже введёнными словами вставляется ".*" регулярка. "u suck" предложит мне "mutt -f =suckless" Ещё когда-то описывал свой prompt: 2d06525ce8bc48be93376479ca8a0a639c6789eb Вроде ничего не поменялось с того времени и я жутко им доволен всем: показ времени выполнения и кода возврата предыдущей команды -- очень удобно. Причём время исполнения я добавлял даже во времена когда использовал bash. ------------------------------------------------------------------------ оставить комментарий: mailto:comment@blog.stargrave.org?subject=Re:%20%D0%91%D0%BE%D0%BB%D0%B5%D0%B5%20%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%20%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D1%8F%D0%BC%20%28e65ae41a70c60a603fa6cfd2b42d4ca681e7b937%29 ------------------------------------------------------------------------ Сгенерирован: SGBlog 0.34.0