Комментарии 77
Интересная идея. Вообще меня тоже часто посещает мысль, что cd самая частая команда, причем порой хочется список «фаворитов», например, каждый день перед началом работы, я запускаю томкат, идут в рабочую папку проекта. Чтобы это не вбивать листаю хистори команд. Бывает команд в хистори очень много с момента последнего использования — листать приходится долго. Хотелось бы что нибудь вроде 2 fav path_to_fav id_fav, с последующим вызовом однозначным 2 id_fav.
+1
alias id_fav «cd path_to_fav»
и вызывайте как id_fav.
и вызывайте как id_fav.
+2
Возможно я Вас не совсем правильно понимаю, но в случае с «2» сценарий должен быть примерно:
$ 2 tomcat
…
$ 2 fav (при условии что path_to_fav заканчивается на fav, и вы там хотя бы раз уже побывали)
…
Хотя была у меня тоже и идея «тэгов», т.е. некоторым папкам дать теги и при переходе указывать имя тэга вместо пути к папке. Это спасёт, если у многих папок очень похожие по названиям пути.
$ 2 tomcat
…
$ 2 fav (при условии что path_to_fav заканчивается на fav, и вы там хотя бы раз уже побывали)
…
Хотя была у меня тоже и идея «тэгов», т.е. некоторым папкам дать теги и при переходе указывать имя тэга вместо пути к папке. Это спасёт, если у многих папок очень похожие по названиям пути.
0
Ну не совсем, если использовать 2 tomcat, то будет выполнен поиск как вы описали выше в статье. Чтобы избежать поиска, а просто обратится к списку тегированных команд, в моем, понимании нужна какая то дополнительная субкоманда. я в своем примере использовал субкоманду fav, что конечно не подходит, т.к. запросто мы может искать в рамках обычного функционала что нибудь с 'fav' в пути, это просто как пример.
0
Но в чем проблема поиска «2 tomcat»? Поиск-то выполняется не по всему дереву папок, а только по базе посещенных. Папок в которых вы бываете на самом деле не так и много (у меня около двух сотен всего выходит), так что поиск не многим дольше поиска по тегам.
0
Дык фишка не в том чтобы время поиска сократить. А что бы по определенной команде поиска вообще не было, сбегали, глянули: тег соответствует такой папке, не выполняем поиск сразу в нее переходим. Хотя я с вами соглашусь, можно подобрать такую поисковую фразу, чтобы однозначно определялась указанная папка, без вариантов. Тогда «тег» будет поисковой фразой, только задать мы его произвольно не сможем, а будем брать исходя из путей на диске.
0
Фух. Наконец-то мы кажется друг друга поняли :) Кстати, у меня на практике поисковые фразы — это первые 2..4 буквы имени папки с проектом.
Я с вами согласен, идентифицировать папку не по ее имени, а по произвольному слову-тегу — было бы круто (хотя как вариант — симлинк с именем тега? хотя, костыльно как-то все равно)
Но здесь как и у алиасов (я ниже писал) — надо не забыть задать тег до того как начнет надоедать бегать в эту папку. Вот 2/autojump/z это решают. Я, к примеру, всегда забывал про алиасы, и часто было уже поздно — проект завершен, папка особо не нужна, а я все время так и ходил туда с помощью cd.
Я с вами согласен, идентифицировать папку не по ее имени, а по произвольному слову-тегу — было бы круто (хотя как вариант — симлинк с именем тега? хотя, костыльно как-то все равно)
Но здесь как и у алиасов (я ниже писал) — надо не забыть задать тег до того как начнет надоедать бегать в эту папку. Вот 2/autojump/z это решают. Я, к примеру, всегда забывал про алиасы, и часто было уже поздно — проект завершен, папка особо не нужна, а я все время так и ходил туда с помощью cd.
+1
Интересно — это несомненно! Хотя лично я cd пользуюсь крайне редко, мне сподручнее сидеть в ~ и вызывать всё полными путями. Так я всегда по истории легко отслежу с каким именно файлом я работал. Собственно для поиска «когдатой» команды с путём я использую Ctrl+R. А для подстановки только сто использованного Alt+.
Сама идея мне нравится и думаю, что мне хватит того, что zsh умеет разворачивать короткие пути, больше года сижу с ним и не знал этого, а ведь это сократит число нажатий на раза в 4, а то и более.
Сама идея мне нравится и думаю, что мне хватит того, что zsh умеет разворачивать короткие пути, больше года сижу с ним и не знал этого, а ведь это сократит число нажатий на раза в 4, а то и более.
+2
НЛО прилетело и опубликовало эту надпись здесь
Я надеюсь они не собирают папки в базу происходит make проекта, например?
0
Хороший вопрос :) Проверил, если cd вызывается из make — то в базу он не добавляется. Думаю у make свой шелл. Хотя и cd из скриптов на шелле тоже не добавляет в базу.
0
А еще определенно надо бы в перспективе добавить список папок которые нужно игнорировать и не добавлять в базу (например папок внутри /tmp, который лежит у меня в tmpfs и толку от их запоминания крайне мало).
0
Думаю у make свой шелл.
Естественно (было бы интересно, если бы make как-то изворачивался использовать родительский шелл), только это не причина. У make свой не интерактивный шелл, в котором .bashrc (и подобные конфиги для других оболочек) не парсится.
+1
Пользуясь случаем, хочу спросить есть ли выход из
cd .. cd .. cd..
под bash? Неужели только алисаы? zsh, к сожалению, не везде поставить.0
А что Вы имеете в виду? А то я zsh не пользовался, смотрю на комментарий и без понятия, что за выход такой (попытки в zsh тоже ни к чему не привели).
0
Я не кошерный линуксоид, когда мне нужно перейти по сложному длинному пути, я использую mc и ctr+o. Понял, что это получается быстрее любых автоподстановок :)
+3
Я тоже долго по инерции запускал mc, но недавно до меня дошло, что автоподстановки все-таки быстрее. Наверное счастье наступило после установки zsh и oh-my-zsh.
Ну вот типичный для меня сценарий: открываю терминал, текущая директория ~/, надо перейти в директорию с логами апача, например. В mc в лучшем случае надо открыть хотлист и найти там эту директорию, тыкнув несколько раз стрелку вниз. В худшем (если нужной директории нет в хотлисте), я там сначала делал cd /, потом три раза Ctrl+S + одна-две буквы от названия каждой директории + Enter, короче просто куча нажатий кнопок. И чаще всего все происходит именно по худшему сценарию, т.к. длинный хотлист — тоже неудобно. И вот теперь тоже самое в zsh: я просто набираю g/a, нажимаю стрелку вверх и вуаля в истории сразу находится команда cd /var/log/apache2/, которой я пользовался неделю или две назад. И даже если директории в истории нет, с табом получается быстрее, чем с Ctrl+S.
Ну вот типичный для меня сценарий: открываю терминал, текущая директория ~/, надо перейти в директорию с логами апача, например. В mc в лучшем случае надо открыть хотлист и найти там эту директорию, тыкнув несколько раз стрелку вниз. В худшем (если нужной директории нет в хотлисте), я там сначала делал cd /, потом три раза Ctrl+S + одна-две буквы от названия каждой директории + Enter, короче просто куча нажатий кнопок. И чаще всего все происходит именно по худшему сценарию, т.к. длинный хотлист — тоже неудобно. И вот теперь тоже самое в zsh: я просто набираю g/a, нажимаю стрелку вверх и вуаля в истории сразу находится команда cd /var/log/apache2/, которой я пользовался неделю или две назад. И даже если директории в истории нет, с табом получается быстрее, чем с Ctrl+S.
+2
Я себе просто сделал миллион алиасов
+3
Здесь многие упоминают алиасы как решение. Я не против алиасов, но их основной минус (мое личное имхо) — их надо прописать до того как вы поняли что ходите в какую-то папку часто. А вот у меня так никогда не получалось:
Я создал папку проекта. Неделю скажем блуждаю в ее окресностях пока активно работаю над проектом, а через время — она уже не так мне нужна. Естественно, алиас я забыл прописать поначалу, и перед каждым «cd» думаю — ладно, щас перейду так, а потом алиас сделаю :)
В случае с 2/autojump/z — этой проблемы нет. Надо перейти в папку? Переходи, пиши короткое имя и все. Т.е. как только ты почувствовал что долго писать путь — не пиши его, пиши сокращенный. Не надо гадать заранее — нужен тебе будет короткий алиас или нет.
Есть например папки в которых я бываю пару раз в неделю. Алиасы я бы в жизни на них не делал. А с помощью 2/autojump/z — перехожу быстро и не задумываясь. Пусть это и мало времени экономит, но все же приятно.
Я создал папку проекта. Неделю скажем блуждаю в ее окресностях пока активно работаю над проектом, а через время — она уже не так мне нужна. Естественно, алиас я забыл прописать поначалу, и перед каждым «cd» думаю — ладно, щас перейду так, а потом алиас сделаю :)
В случае с 2/autojump/z — этой проблемы нет. Надо перейти в папку? Переходи, пиши короткое имя и все. Т.е. как только ты почувствовал что долго писать путь — не пиши его, пиши сокращенный. Не надо гадать заранее — нужен тебе будет короткий алиас или нет.
Есть например папки в которых я бываю пару раз в неделю. Алиасы я бы в жизни на них не делал. А с помощью 2/autojump/z — перехожу быстро и не задумываясь. Пусть это и мало времени экономит, но все же приятно.
+1
Какое сложное описание проблемы, для решения которой придуманы алиасы.
0
Не кидайте помидорами, может это не unixway, но если достало писать cd, поставбте mc ;)
+2
Использую Ctrl+R для поиска команд в истории.
И mc для быстрой навигации, очень помогает directory hot list. Который вызывается по Ctrl + \
И mc для быстрой навигации, очень помогает directory hot list. Который вызывается по Ctrl + \
+3
build.cmd
0
emerge у меня больше всего времени отнимает =)
+2
А у меня больше всего времени занимаешь вспоминание команды для распаковки архива tar xvjf foo.tar.bz2 =)
+3
Рекоммендую oh-my-zsh с плагином extract, с ним можно просто писать x foo.whatever.archive.format — очень удобно.
0
А разве просто $ tar xf archive_name не справится?
+1
я запомнил где-то подсмотренное tar extract zat files.
+3
В свежих версиях можно так
tar xaf archive.ext
угадает формат по расширению
tar xaf archive.ext
угадает формат по расширению
+1
Почему-то не клонирует репозитарий.
0
Ой. Была опечатка в имени хоста. Проверьте пожалуйста еще раз — hg clone bitbucket.org/zserge/2
0
1. xiki, xiki.org, см. презентацию тут: www.youtube.com/watch?v=bUR_eUVcABg&feature=player_embedded Сам пока не пользовал
2. самая долгая команда — find. Ненавижу
2. самая долгая команда — find. Ненавижу
0
а я вот таким еще пользуюсь. Просто и удобно:
lex@exile > which tag
tag () {
alias $1=«cd $PWD»
}
lex@exile > which tag
tag () {
alias $1=«cd $PWD»
}
+1
файловыми менеджерами пользоваться не пробовали? издревле ходит легенда что они сделаны именно для этого…
-3
допустим я нахожусь в /usr/inclide/lib32 и мне нужно перейти в ~/code/git/my-project/java/src/main/kirillov. Как именно файл менеджер поможет мне в этом?
+3
Если я чувствую, что вбивать придётся долгий путь (например длиннее чем cd ../config/locales/), причём именно вбивать (т.е. автодополнение не спасёт из-за того, что много каталогов/файлов с таким же началом в именах), то я нажимаю Ctrl+O — и меня уже ждёт мой излюбленный Midnight Commander. Так что я немного не понимаю к чему такие ухищрения.
0
Почему вы думаете, что автодополнение не спасает если много файлов с одинаковыми префиксами?
Ну например, дошли вы до директории, где куча директорий/файлов с именами вида long_long_name1, long_long_name2 и т.д. Набираете lo, жмете tab и получаете long_long_name в командной строке, нажимаете еще раз tab и видите все варианты с таким началом, вбиваете нужное окончание и идете дальше.
Совершенно нет никакой необходимости все полностью вбивать.
Ну например, дошли вы до директории, где куча директорий/файлов с именами вида long_long_name1, long_long_name2 и т.д. Набираете lo, жмете tab и получаете long_long_name в командной строке, нажимаете еще раз tab и видите все варианты с таким началом, вбиваете нужное окончание и идете дальше.
Совершенно нет никакой необходимости все полностью вбивать.
+1
2. Отличное антипоисковое название для проекта. :-)
+6
А у меня самая часто используемая команда — это ack
Есть прекрасная утилита huffshell, которая анализирует историю команд и советует какие алиасы создать, исходя из частоты использования.
Причем она учитывает всякие ключи при вызове, т.е. она предлагает 'ack' -> 'a', 'ack -i' -> 'ai' и т.д.
Есть прекрасная утилита huffshell, которая анализирует историю команд и советует какие алиасы создать, исходя из частоты использования.
Причем она учитывает всякие ключи при вызове, т.е. она предлагает 'ack' -> 'a', 'ack -i' -> 'ai' и т.д.
+2
Любая команда, в которой надо вводить что-то своё. Всякий там mkdir, ping и так далее. Потому что напишешь половину имени, тыкаешь по привычке tab и понимаешь, что из твоего мозга компьютер вынимать остаток слова пока не умеет. Не понимает, гад, что «mkdir порн» надо развернуть до «mkdir порнуха\ с\ азиатками».
0
Интересная штука. Я для длинных путей, по которым часто хожу использовал C^r и искал по истории, но это не сильно удобно. Надо будет собрать :)
Я так понимаю оно работает только в интерактивном шелле и в скриптах ничего в базу не добавляется? Если нет, то это фичреквест :)
Я так понимаю оно работает только в интерактивном шелле и в скриптах ничего в базу не добавляется? Если нет, то это фичреквест :)
+1
Спасибо :)
Да, пути добавляются только в интерактивном шелле. Насчет добавления в базу всех путей куда лазят шел-скприты — чуть выше был такая же антифича-реквест, и я не уверен что можно такое вообще сделать. Неинтерактивные шеллы вроде не читают bashrc/zshrc, а стало быть и подменить cd() нельзя. И, кстати, а зачем?
Разве в шебанге писать не "#!/bin/sh", а "#!/bin/bash -i"
Интересно, задачки с шелом всегда приводят к извращенным решениям? :)
Да, пути добавляются только в интерактивном шелле. Насчет добавления в базу всех путей куда лазят шел-скприты — чуть выше был такая же антифича-реквест, и я не уверен что можно такое вообще сделать. Неинтерактивные шеллы вроде не читают bashrc/zshrc, а стало быть и подменить cd() нельзя. И, кстати, а зачем?
Разве в шебанге писать не "#!/bin/sh", а "#!/bin/bash -i"
Интересно, задачки с шелом всегда приводят к извращенным решениям? :)
0
Не помню, где взял, но есть такая штука для альясов:
# Bash Directory Bookmarks
alias m1='alias g1="cd `pwd`"'
alias m2='alias g2="cd `pwd`"'
alias m3='alias g3="cd `pwd`"'
alias m4='alias g4="cd `pwd`"'
alias m5='alias g5="cd `pwd`"'
alias m6='alias g6="cd `pwd`"'
alias m7='alias g7="cd `pwd`"'
alias m8='alias g8="cd `pwd`"'
alias m9='alias g9="cd `pwd`"'
alias mdump='alias|grep -e "alias g[0-9]"|grep -v "alias m" > ~/.bookmarks'
alias ah='(echo;alias | grep "g[0-9]" | grep -v "m[0-9]" | cut -d" " -f "2,3"| sed "s/=/ /" | sed "s/cd //";echo)'
+3
apt-get install mc
-5
Алгоритм — судя по его описанию — очень похож на тот, что внутри «саджеста» маковского QuickSilver.
+1
Я использую cv.
Есть ещё $CDPATH, но мне он кажется небезопасным.
В принципе, в zsh очень неплохо сделаны саджесты, но всё никак на него не перейду. Да и на серверах его часто нет, не хочется перепривыкать.
Есть ещё $CDPATH, но мне он кажется небезопасным.
В принципе, в zsh очень неплохо сделаны саджесты, но всё никак на него не перейду. Да и на серверах его часто нет, не хочется перепривыкать.
+1
Пользуюсь вменяемым терминалом с кучей шорткатов, cd почти не использую, так как все нужные пути забиндил, от системы к системе они редко отличаются.
/home/
/etc/
/usr/local/etc/
/var/log/
Еще штук 5 специфических для своей разметки.
Мой рабочий терминал выглядит так:
![](https://habrastorage.org/r/w1560/storage2/a7c/6f0/69b/a7c6f069b6747c3c06c04aa5f787556b.png)
Несколько вкладок, каждое окно можно поделить как вертикально, так и горизонтально по шорткату, встроенное автодополнение, закладки, заметки, история копипаста. Часто работаю на разных серверах и тащить туда гору скриптов и программ нет возможности. Самые долгие команды, те которыми редко пользуюсь, вспоминаешь, тупишь, открываешь man.
/home/
/etc/
/usr/local/etc/
/var/log/
Еще штук 5 специфических для своей разметки.
Мой рабочий терминал выглядит так:
![](https://habrastorage.org/storage2/a7c/6f0/69b/a7c6f069b6747c3c06c04aa5f787556b.png)
Несколько вкладок, каждое окно можно поделить как вертикально, так и горизонтально по шорткату, встроенное автодополнение, закладки, заметки, история копипаста. Часто работаю на разных серверах и тащить туда гору скриптов и программ нет возможности. Самые долгие команды, те которыми редко пользуюсь, вспоминаешь, тупишь, открываешь man.
0
на мой взгляд, проблема высосана из пальца, я правда не админ, но Linux на работе имею дело каждый день, мне для удобной работы хватает несколько вкладок терминала
0
Идея хорошая, но боюсь. Остаться с недоработающей cd — это ад, ужас и погибель. Особенно если баг неочевидный.
-2
Может я вас не совсем понимаю, но что может ухудшить работу cd?
+1
Представьте себе, что в этой штуке ошибка (например, в районе cd() в переопределении). И проявляется она иногда. И глупо. Например, идёте в /usr/bin, а попадаете в /usr/local/bin. Или идёте в /var/log/, оказываетесь в /var/cache.
В спокойных условиях можно подивиться и отладить. А если речь про боевую систему? Тратить время и отвлекаться на неё в условиях «что-то не так с более важным»?
Это как раскладка клавиатуры. Посадить человека за дворака (с бухты-барахты) — работать сможет. Но очень непродуктивно (речь про «внезапно»).
В спокойных условиях можно подивиться и отладить. А если речь про боевую систему? Тратить время и отвлекаться на неё в условиях «что-то не так с более важным»?
Это как раскладка клавиатуры. Посадить человека за дворака (с бухты-барахты) — работать сможет. Но очень непродуктивно (речь про «внезапно»).
-2
На мой взгляд, нужен просто список (модальный) с нормальным поиском.
В двухпанельных файл-менеджерах уже есть просто список-история посещенных папок.
Что под виндой в Total / Far, что в mc под никсами, но с поиском везде одинаково плохо.
Значит надо просто улучшить поиск в этих списках, и все.
Для Far это уже сделано — проблему решает плагин AltHistory, там можно удобно искать в истории с wildcard и проч. плюшками.
Т.е. я в Far+AltHistory жму:
Alt+F12 (ессно можно назначить любой аккорд)
py*pa (подходящие папки фильтруются в списке по ходу — можно смотреть и корректировать фильтр)
Enter (а можно было нажать что-нить еще и скопировать путь, перейти в родительскую папку от выбранной, и т.д.
И я уже в «C:\Python27\Lib\site-packages\».
В двухпанельных файл-менеджерах уже есть просто список-история посещенных папок.
Что под виндой в Total / Far, что в mc под никсами, но с поиском везде одинаково плохо.
Значит надо просто улучшить поиск в этих списках, и все.
Для Far это уже сделано — проблему решает плагин AltHistory, там можно удобно искать в истории с wildcard и проч. плюшками.
Т.е. я в Far+AltHistory жму:
Alt+F12 (ессно можно назначить любой аккорд)
py*pa (подходящие папки фильтруются в списке по ходу — можно смотреть и корректировать фильтр)
Enter (а можно было нажать что-нить еще и скопировать путь, перейти в родительскую папку от выбранной, и т.д.
И я уже в «C:\Python27\Lib\site-packages\».
0
>Какая команда в консоли отнимает у вас больше всего времени?
Вводим команду:
и получаем 10 наиболее часто используемых нами команд.
Например у меня:
181 cd
142 git
68 djangor
49 pip
48 workon
30 make
29 python
28 sudo
27 django
26 node
Ось относительно новая=) и этим обусловлено такое мало кол-во команд.
Вводим команду:
history | awk '{a[$2]++ } END{for(i in a){print a[i] " " i}}'|sort -rn |head -n 10
и получаем 10 наиболее часто используемых нами команд.
Например у меня:
181 cd
142 git
68 djangor
49 pip
48 workon
30 make
29 python
28 sudo
27 django
26 node
Ось относительно новая=) и этим обусловлено такое мало кол-во команд.
+3
о, коллега подсказал:
env LANG=C mc
:D
env LANG=C mc
:D
+1
Я долго не мог найти инструмента для закладок в шелле, все найденные решения меня не очень устраивали: все равно неудобно. А потом нашлась очень классная и универсальная штука: fzf, он позволяет не только быстро искать файлы, но и фильтровать произвольные текстовые данные. Поэтому появилась простая идея: почему бы не держать просто файл со списком директорий-закладок, и fuzzy-фильтровать его. Вот как это выглядит: ![image](https://habrastorage.org/getpro/habr/comment_images/ff8/b31/758/ff8b3175871896b9ccaab237b3ba604b.gif)
Я просто пишу «cdg» (от «cd global»), печатаю 3-4 буквы из нужной закладки (или перемещаюсь вверх-вниз по списку), и жму Enter. Очень быстро и удобно, пользуюсь больше года, очень доволен.
Подробная статья: Fuzzy bookmarks for your shell
![image](https://habrastorage.org/getpro/habr/comment_images/ff8/b31/758/ff8b3175871896b9ccaab237b3ba604b.gif)
Я просто пишу «cdg» (от «cd global»), печатаю 3-4 буквы из нужной закладки (или перемещаюсь вверх-вниз по списку), и жму Enter. Очень быстро и удобно, пользуюсь больше года, очень доволен.
Подробная статья: Fuzzy bookmarks for your shell
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Какая команда в консоли отнимает у вас больше всего времени?