Пользователь
0,0
рейтинг
14 сентября 2012 в 13:12

Разработка → Какая команда в консоли отнимает у вас больше всего времени?

Go*
У меня — 'cd'.

Хожу по папкам часто и начал замечать, что даже автодополнение не спасает. Тогда я начал искать возможные способы упрощенной навигации в консоли.

Но должны же быть решения!



В моей любимой оболочке zsh есть такая возможность — «разворачивание» путей по нажатию : например, "/u/in/sy" -> "/usr/include/sys/"

В остальных оболочках можно приноровиться и использовать $CDPATH или pushd/popd, но лично мне это до сих пор кажется неудобным.

А еще есть пара утилиток для ускоренной навигации. Самая известная из них, пожалуй, autojump. Она следит в каких папках пользователь проводит больше всего времени и позволяет указывать только фрагмент пути к папке. Например "incl" приведет вас в "/usr/include", если вы там часто бываете.

Autojump вдохновила другого разработчика на создание утилиты "z". "Z" использует в качестве критерия для перехода т.н. "frecency" - комбинацию частоты посещений папки (frequency) и времени последнего перехода туда (recency).

Обе утилиты хороши по-своему, и я так бы и пользовался autojump или z, однако что-то мне не давало покоя. А недавно я услышал одну фразу:

If the product is used as a tool, its interface should be as unintelligent as
possible. Stupid is predictable; predictable is learnable; learnable is usable.


И тут я понял что самое время придумать свой велосипед. Не-intelligent. Тупой и удобный.

The power of 2



Итак, велосипед называется "2", и он, как и autojump или z, позволяет быстро перейти в нужную папку указывая лишь часть пути.

Состоит "2" из крохотного приложения на языке Go, которое занимается выбором нужной папки, и shell-скрипта, который интегрирует эту утилитку в ваш шелл (bash/zsh).

Разумеется, чтобы определить в какую папку перейти нам понадобится база папок. В отличие от autojump, я не хотел бы учитывать сколько времени провел пользователь в той или иной папке. Да и вообще, все что нужно помнить - это в каких папках пользователь побывал хотя бы раз.

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

В autojump/z использовалась шелл-функция precmd(), которая вызывается всякий раз перед вызовом команды. Нам же подойдет вариант попроще.

Для zsh - это будет функция chpwd(), которая вызывается всякий раз при смене рабочего каталога:

chpwd() {
	$TWO add .
}


Для bash все несколько хитрее:

// делаем функцию с именем cd, теперь она будет вызываться
// вместо команды 'cd'
cd() {
	// внутри функции осуществляем смену папки с помощью встроенной 'cd'
	builtin cd $@
	// и добавляем текущую папку в базу
	$TWO add .
}


Итак, теперь о самой утилите "2". В шелл-скриптах путь к утилите фигурирует под названием $TWO. Если вызвать её с командой "add", то все указанные в качестве параметров папки будут добавлены в базу (если не были добавлены туда ранее).

Если вызвать её с командой "go", то она найдет наиболее подходящую папку по заданным подсказкам и выведет полный путь к папке в stdout. Тогда функция в шелл-скрипте может получить этот путь и выполнить переход в нужную папку. В этой же функции по-особому обрабатываем переход без аргументов (переход в домашнюю папку), и переход по абсолютному пути:

_2go() {
	local path
	[ $# -eq 0 ] && cd && return

	if [ $# -eq 1 -a -d $1 ]; then
		$TWO add $1
		cd $1
		return
	fi
	path=$($TWO go $@)
	[ -z "$path" ] && echo "No matches for '$@'" || builtin cd $path
}
alias 2='_2go'


Есть еще третий режим - "shell", но о нем чуть ниже.

Сама база папок представляет собой обычный текстовый файл $HOME/.2paths, в котором каждая строка - это путь к папке.
Чтение и запись такого файла - задача тривиальная, останавливаться на этом не будем.

Теперь пара слов об алгоритме поиска пути по подсказкам.

Критерий поиска папки



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

Однако, что делать если подходят несколько папок?

Когда выполняется поиск утилита запоминает позиции (смещения) подсказок в строке. Сумма этих позиций и определяет своего рода абсолютный вес пути, например для запроса "2 u in":

/usr/include
 ^   ^^
 1 + 5 = 6
/usr/include/wine
         ^    ^^
         10 + 15 = 25


Таким образом, будет выбран путь, у которого подсказки встречаются ближе к правой части. Просто скромный опыт использования autojump/z показал, что в качестве подсказок обычно используешь название (или часть названия) самой последней папки в пути, т.е. под "2 us" подразумеваешь обычно какой-нибудь "/home/serge/src/usb-driver", а не "/usr/include/linux".

Затем вычисляем относительный вес папки, т.е. делим абсолютный вес на длину строки, чтобы папки с разной длиной пути имели равные шансы. Относительные веса в примере выше будут 6/12 = 0.5 и 25/17 = 1.47 соответственно.

Если же относительные веса папок оказываются одинаковыми, то предпочтение отдается более короткому пути (потому что длинный путь обычно можно дополнительно уточнить еще парой подсказок, а короткий - нет).

Может звучит немного запутанно, но в целом - указывайте конец пути, а если не уверены, то пару букв из имен папок верхнего уровня.

А если все равно не уверены?



А есть способ еще проще - интерактивный режим. Идея такова. Вы вводите буквы, которые, как вам кажется, намекают на нужную папку, а на экране видите наиболее подходящий под эту подсказку путь. Нажатие на
 приводит вас в эту папку.
Например, я ввел "trikob" и перейду в "/home/serge/src/trikita/obsqr", если нажму :



Интерактивный режим включается в zsh с помощью <Ctrl-2>, а в bash с помощью <Alt-2>.

Да, я хочу это попробовать!



Исходники открыты и лежат на https://bitbucket.org/zserge/2

Это все еще очень ранняя версия, с багами, порой непродуманным поведением и почти без документации. Так что если что - не стесняйтесь, спрашивайте, советуйте, предлагайте!

Итак, для того чтобы все скомпилировать, сделайте примерно следующие шаги (да, компилятор Go должен быть установлен заранее):

$ hg clone https://bitbucket.org/zserge/2 $ cd 2 $ go build $ sudo cp 2 /usr/local/bin $ sudo mkdir /usr/local/share/2 $ sudo cp zshrc /usr/local/share/2/zshrc $ sudo cp bashrc /usr/local/share/2/bashrc


Если же компилятора Go у вас нет, то возьмите готовые бинарники для 32-битных и 64-битных архитектур. Архивы просто распакуйте в корень файловой системы.

После того как вы установите 2, bashrc и zshrc в нужные места останется только прописать их в вашем шелле. Для этого добавьте последней строкой в конфиге шелла ($HOME/.bashrc или $HOME/.zshrc):

. /usr/local/share/2/bashrc # или zshrc, если ваш шелл - zsh


Этого должно быть достаточно. Перезапустите шелл (откройте новый терминал), и походите немного по папкам (с помощью cd, mc или 2 с указанием полных путей). Это должно создать вашу базу папок в $HOME/.2paths.

И вот теперь вы можете использовать "2" на всю катушку. Легких вам переходов!
Сергей Зайцев @zserge
карма
88,2
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (77)

  • +1
    Интересная идея. Вообще меня тоже часто посещает мысль, что cd самая частая команда, причем порой хочется список «фаворитов», например, каждый день перед началом работы, я запускаю томкат, идут в рабочую папку проекта. Чтобы это не вбивать листаю хистори команд. Бывает команд в хистори очень много с момента последнего использования — листать приходится долго. Хотелось бы что нибудь вроде 2 fav path_to_fav id_fav, с последующим вызовом однозначным 2 id_fav.
    • +2
      alias id_fav «cd path_to_fav»
      и вызывайте как id_fav.
      • +7
        alias id_fav=«cd path_to_fav» конечно же.
    • 0
      Возможно я Вас не совсем правильно понимаю, но в случае с «2» сценарий должен быть примерно:

      $ 2 tomcat

      $ 2 fav (при условии что path_to_fav заканчивается на fav, и вы там хотя бы раз уже побывали)


      Хотя была у меня тоже и идея «тэгов», т.е. некоторым папкам дать теги и при переходе указывать имя тэга вместо пути к папке. Это спасёт, если у многих папок очень похожие по названиям пути.
      • 0
        Ну не совсем, если использовать 2 tomcat, то будет выполнен поиск как вы описали выше в статье. Чтобы избежать поиска, а просто обратится к списку тегированных команд, в моем, понимании нужна какая то дополнительная субкоманда. я в своем примере использовал субкоманду fav, что конечно не подходит, т.к. запросто мы может искать в рамках обычного функционала что нибудь с 'fav' в пути, это просто как пример.
        • 0
          Но в чем проблема поиска «2 tomcat»? Поиск-то выполняется не по всему дереву папок, а только по базе посещенных. Папок в которых вы бываете на самом деле не так и много (у меня около двух сотен всего выходит), так что поиск не многим дольше поиска по тегам.
          • 0
            Дык фишка не в том чтобы время поиска сократить. А что бы по определенной команде поиска вообще не было, сбегали, глянули: тег соответствует такой папке, не выполняем поиск сразу в нее переходим. Хотя я с вами соглашусь, можно подобрать такую поисковую фразу, чтобы однозначно определялась указанная папка, без вариантов. Тогда «тег» будет поисковой фразой, только задать мы его произвольно не сможем, а будем брать исходя из путей на диске.
            • +1
              Фух. Наконец-то мы кажется друг друга поняли :) Кстати, у меня на практике поисковые фразы — это первые 2..4 буквы имени папки с проектом.
              Я с вами согласен, идентифицировать папку не по ее имени, а по произвольному слову-тегу — было бы круто (хотя как вариант — симлинк с именем тега? хотя, костыльно как-то все равно)
              Но здесь как и у алиасов (я ниже писал) — надо не забыть задать тег до того как начнет надоедать бегать в эту папку. Вот 2/autojump/z это решают. Я, к примеру, всегда забывал про алиасы, и часто было уже поздно — проект завершен, папка особо не нужна, а я все время так и ходил туда с помощью cd.
              • 0
                Ну сила привычки дело большое)
    • +2
      Интересно — это несомненно! Хотя лично я cd пользуюсь крайне редко, мне сподручнее сидеть в ~ и вызывать всё полными путями. Так я всегда по истории легко отслежу с каким именно файлом я работал. Собственно для поиска «когдатой» команды с путём я использую Ctrl+R. А для подстановки только сто использованного Alt+.
      Сама идея мне нравится и думаю, что мне хватит того, что zsh умеет разворачивать короткие пути, больше года сижу с ним и не знал этого, а ведь это сократит число нажатий на раза в 4, а то и более.
      • 0
        Небольшая поправка: там в последнем предложении «нажатий на <tab>», просто tab сожрался как тэг…
    • 0
      в баше есть ctl-r, ищет команду в истории. Очень удобно, особенно когда команды длинные.
      • 0
        Удобно, но я например специально отключаю добавление «cd» в историю, т.к. их слишком много, и это затрудняет поиск других более долгих и забываемых команд (типа упомянутого ниже find).
  • 0
    Я надеюсь они не собирают папки в базу происходит make проекта, например?
    • 0
      Хороший вопрос :) Проверил, если cd вызывается из make — то в базу он не добавляется. Думаю у make свой шелл. Хотя и cd из скриптов на шелле тоже не добавляет в базу.
      • 0
        А еще определенно надо бы в перспективе добавить список папок которые нужно игнорировать и не добавлять в базу (например папок внутри /tmp, который лежит у меня в tmpfs и толку от их запоминания крайне мало).
      • +1
        Думаю у make свой шелл.

        Естественно (было бы интересно, если бы make как-то изворачивался использовать родительский шелл), только это не причина. У make свой не интерактивный шелл, в котором .bashrc (и подобные конфиги для других оболочек) не парсится.
  • 0
    Пользуясь случаем, хочу спросить есть ли выход из cd .. cd .. cd.. под bash? Неужели только алисаы? zsh, к сожалению, не везде поставить.
    • 0
      А что Вы имеете в виду? А то я zsh не пользовался, смотрю на комментарий и без понятия, что за выход такой (попытки в zsh тоже ни к чему не привели).
      • 0
        В zsh из коробки такой автокомплит работает
        • +1
          Какой автокомплит? Я вот до сих пор не понял, что вы пытаетесь сказать? Может быть об этом:
          alias ..="cd .." alias ...="cd ../.." alias ....="cd ../../.."
          ?
  • +3
    Я не кошерный линуксоид, когда мне нужно перейти по сложному длинному пути, я использую mc и ctr+o. Понял, что это получается быстрее любых автоподстановок :)
    • +2
      Я тоже долго по инерции запускал mc, но недавно до меня дошло, что автоподстановки все-таки быстрее. Наверное счастье наступило после установки zsh и oh-my-zsh.

      Ну вот типичный для меня сценарий: открываю терминал, текущая директория ~/, надо перейти в директорию с логами апача, например. В mc в лучшем случае надо открыть хотлист и найти там эту директорию, тыкнув несколько раз стрелку вниз. В худшем (если нужной директории нет в хотлисте), я там сначала делал cd /, потом три раза Ctrl+S + одна-две буквы от названия каждой директории + Enter, короче просто куча нажатий кнопок. И чаще всего все происходит именно по худшему сценарию, т.к. длинный хотлист — тоже неудобно. И вот теперь тоже самое в zsh: я просто набираю g/a, нажимаю стрелку вверх и вуаля в истории сразу находится команда cd /var/log/apache2/, которой я пользовался неделю или две назад. И даже если директории в истории нет, с табом получается быстрее, чем с Ctrl+S.
  • +3
    Я себе просто сделал миллион алиасов
    • +1
      Здесь многие упоминают алиасы как решение. Я не против алиасов, но их основной минус (мое личное имхо) — их надо прописать до того как вы поняли что ходите в какую-то папку часто. А вот у меня так никогда не получалось:
      Я создал папку проекта. Неделю скажем блуждаю в ее окресностях пока активно работаю над проектом, а через время — она уже не так мне нужна. Естественно, алиас я забыл прописать поначалу, и перед каждым «cd» думаю — ладно, щас перейду так, а потом алиас сделаю :)
      В случае с 2/autojump/z — этой проблемы нет. Надо перейти в папку? Переходи, пиши короткое имя и все. Т.е. как только ты почувствовал что долго писать путь — не пиши его, пиши сокращенный. Не надо гадать заранее — нужен тебе будет короткий алиас или нет.
      Есть например папки в которых я бываю пару раз в неделю. Алиасы я бы в жизни на них не делал. А с помощью 2/autojump/z — перехожу быстро и не задумываясь. Пусть это и мало времени экономит, но все же приятно.
  • 0
    Какое сложное описание проблемы, для решения которой придуманы алиасы.
    • 0
      Я предпочитаю комбинировать два подхода
      1. alias cdprj="cd prj"
      2. ln -s prj ~/
      

  • +2
    Не кидайте помидорами, может это не unixway, но если достало писать cd, поставбте mc ;)
  • +3
    Использую Ctrl+R для поиска команд в истории.
    И mc для быстрой навигации, очень помогает directory hot list. Который вызывается по Ctrl + \
  • 0
    build.cmd
  • +2
    emerge у меня больше всего времени отнимает =)
    • 0
      надеюсь он отнимает не сколько ваше, сколько процессорное время :)
  • +3
    А у меня больше всего времени занимаешь вспоминание команды для распаковки архива tar xvjf foo.tar.bz2 =)
    • 0
      Рекоммендую oh-my-zsh с плагином extract, с ним можно просто писать x foo.whatever.archive.format — очень удобно.
      • +1
        Согласен! И мне кажется zsh + oh-my-zsh достойны отдельного поста ;)
    • +1
      А разве просто $ tar xf archive_name не справится?
      • 0
        Сорри, кликнул мимо плюса. Сам всегда использую tar xf
    • +3
      я запомнил где-то подсмотренное tar extract zat files.
      • +1
        скорее tar extract verbose .gz file
    • +1
      В свежих версиях можно так
      tar xaf archive.ext
      угадает формат по расширению
  • 0
    Почему-то не клонирует репозитарий.
    • 0
      Ой. Была опечатка в имени хоста. Проверьте пожалуйста еще раз — hg clone bitbucket.org/zserge/2
      • 0
        И снова ой. Парсер съел https: hg clone https://bitbucket.org/zserge/2
        • 0
          Спасибо!
  • 0
    1. xiki, xiki.org, см. презентацию тут: www.youtube.com/watch?v=bUR_eUVcABg&feature=player_embedded Сам пока не пользовал
    2. самая долгая команда — find. Ненавижу
  • +1
    а я вот таким еще пользуюсь. Просто и удобно:

    lex@exile > which tag
    tag () {
    alias $1=«cd $PWD»
    }
  • –3
    файловыми менеджерами пользоваться не пробовали? издревле ходит легенда что они сделаны именно для этого…
    • +3
      допустим я нахожусь в /usr/inclide/lib32 и мне нужно перейти в ~/code/git/my-project/java/src/main/kirillov. Как именно файл менеджер поможет мне в этом?
      • –1
        Закладка на git и несколько кликов мышью, или по первым буквам(строку ввода адреса вроде не отбирали, а она неплохо подсказывает) В том же mc можно алиасами(создание тегов выше, удобно)
  • 0
    Если я чувствую, что вбивать придётся долгий путь (например длиннее чем cd ../config/locales/), причём именно вбивать (т.е. автодополнение не спасёт из-за того, что много каталогов/файлов с таким же началом в именах), то я нажимаю Ctrl+O — и меня уже ждёт мой излюбленный Midnight Commander. Так что я немного не понимаю к чему такие ухищрения.
    • +1
      Почему вы думаете, что автодополнение не спасает если много файлов с одинаковыми префиксами?

      Ну например, дошли вы до директории, где куча директорий/файлов с именами вида long_long_name1, long_long_name2 и т.д. Набираете lo, жмете tab и получаете long_long_name в командной строке, нажимаете еще раз tab и видите все варианты с таким началом, вбиваете нужное окончание и идете дальше.

      Совершенно нет никакой необходимости все полностью вбивать.
  • +6
    2. Отличное антипоисковое название для проекта. :-)
  • +2
    А у меня самая часто используемая команда — это ack
    Есть прекрасная утилита huffshell, которая анализирует историю команд и советует какие алиасы создать, исходя из частоты использования.
    Причем она учитывает всякие ключи при вызове, т.е. она предлагает 'ack' -> 'a', 'ack -i' -> 'ai' и т.д.
    • 0
      # install the gem (sudo is optional)
      sudo gem install huffshell
      
      # need to be able to access this from the gem
      alias > ~/.aliases.cache
      
      # open up a new terminal to access new gem supplied binaries
      huffshell
      
      # Optional cleanup
      rm ~/.aliases.cache
  • 0
    Любая команда, в которой надо вводить что-то своё. Всякий там mkdir, ping и так далее. Потому что напишешь половину имени, тыкаешь по привычке tab и понимаешь, что из твоего мозга компьютер вынимать остаток слова пока не умеет. Не понимает, гад, что «mkdir порн» надо развернуть до «mkdir порнуха\ с\ азиатками».
  • +1
    Интересная штука. Я для длинных путей, по которым часто хожу использовал C^r и искал по истории, но это не сильно удобно. Надо будет собрать :)
    Я так понимаю оно работает только в интерактивном шелле и в скриптах ничего в базу не добавляется? Если нет, то это фичреквест :)
    • 0
      Спасибо :)
      Да, пути добавляются только в интерактивном шелле. Насчет добавления в базу всех путей куда лазят шел-скприты — чуть выше был такая же антифича-реквест, и я не уверен что можно такое вообще сделать. Неинтерактивные шеллы вроде не читают bashrc/zshrc, а стало быть и подменить cd() нельзя. И, кстати, а зачем?

      Разве в шебанге писать не "#!/bin/sh", а "#!/bin/bash -i"
      Интересно, задачки с шелом всегда приводят к извращенным решениям? :)
      • +1
        О, это хорошо, дома соберу на посмотреть.

        Может и не всегда, но отпечаток свой накладывают :)
  • +3
    Не помню, где взял, но есть такая штука для альясов:
    # 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
    Хм, а никто так и не упомянул про CDPATH. Печально.
    • 0
      Про CDPATH я не забыл, когда-то его пробовал тоже: "… В остальных оболочках можно приноровиться и использовать $CDPATH или pushd/popd..."
  • –5
    apt-get install mc
  • +1
    Алгоритм — судя по его описанию — очень похож на тот, что внутри «саджеста» маковского QuickSilver.
  • +1
    Я использую cv.
    Есть ещё $CDPATH, но мне он кажется небезопасным.
    В принципе, в zsh очень неплохо сделаны саджесты, но всё никак на него не перейду. Да и на серверах его часто нет, не хочется перепривыкать.
  • 0
    Пользуюсь вменяемым терминалом с кучей шорткатов, cd почти не использую, так как все нужные пути забиндил, от системы к системе они редко отличаются.
    /home/
    /etc/
    /usr/local/etc/
    /var/log/
    Еще штук 5 специфических для своей разметки.
    Мой рабочий терминал выглядит так:

    Несколько вкладок, каждое окно можно поделить как вертикально, так и горизонтально по шорткату, встроенное автодополнение, закладки, заметки, история копипаста. Часто работаю на разных серверах и тащить туда гору скриптов и программ нет возможности. Самые долгие команды, те которыми редко пользуюсь, вспоминаешь, тупишь, открываешь man.
  • 0
    на мой взгляд, проблема высосана из пальца, я правда не админ, но Linux на работе имею дело каждый день, мне для удобной работы хватает несколько вкладок терминала
  • –2
    Идея хорошая, но боюсь. Остаться с недоработающей cd — это ад, ужас и погибель. Особенно если баг неочевидный.
    • +1
      Может я вас не совсем понимаю, но что может ухудшить работу cd?
      • –2
        Представьте себе, что в этой штуке ошибка (например, в районе cd() в переопределении). И проявляется она иногда. И глупо. Например, идёте в /usr/bin, а попадаете в /usr/local/bin. Или идёте в /var/log/, оказываетесь в /var/cache.

        В спокойных условиях можно подивиться и отладить. А если речь про боевую систему? Тратить время и отвлекаться на неё в условиях «что-то не так с более важным»?

        Это как раскладка клавиатуры. Посадить человека за дворака (с бухты-барахты) — работать сможет. Но очень непродуктивно (речь про «внезапно»).
        • +2
          Что за бред?
  • 0
    На мой взгляд, нужен просто список (модальный) с нормальным поиском.

    В двухпанельных файл-менеджерах уже есть просто список-история посещенных папок.
    Что под виндой в Total / Far, что в mc под никсами, но с поиском везде одинаково плохо.

    Значит надо просто улучшить поиск в этих списках, и все.

    Для Far это уже сделано — проблему решает плагин AltHistory, там можно удобно искать в истории с wildcard и проч. плюшками.

    Т.е. я в Far+AltHistory жму:

    Alt+F12 (ессно можно назначить любой аккорд)
    py*pa (подходящие папки фильтруются в списке по ходу — можно смотреть и корректировать фильтр)
    Enter (а можно было нажать что-нить еще и скопировать путь, перейти в родительскую папку от выбранной, и т.д.

    И я уже в «C:\Python27\Lib\site-packages\».
    • 0
      Для Far поиск в истории уже сто лет как делает сам Far. «Alt+F12 Ctrl+Alt+F». А если нужен поиск с wildcard — ставите Far3bis (или Far2bis) и так «Alt+F12 Ctrl+Alt+F Ctrl+Alt+M»
  • +3
    >Какая команда в консоли отнимает у вас больше всего времени?
    Вводим команду:
    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
    Ось относительно новая=) и этим обусловлено такое мало кол-во команд.
    • 0
      О, спасибо, узнал свои команды:
      186 sudo
      55 ping
      41 ssh
      38 ls
      33 mc
      28 cd
      27 nslookup
      22 ps
      22 curl
      20 ifconfig
    • 0
      У меня в хистори с 10кратным преимуществом ssh и его алиасы, оторвавшийся от ближайших конкурентов в виде ping, mcedit, cd. т.е. все эти радости оболочки следовало бы прописывать на сотню хостов, а это не всегда можно позволить.
  • +1
    о, коллега подсказал:

    env LANG=C mc

    :D
  • 0
    Я долго не мог найти инструмента для закладок в шелле, все найденные решения меня не очень устраивали: все равно неудобно. А потом нашлась очень классная и универсальная штука: fzf, он позволяет не только быстро искать файлы, но и фильтровать произвольные текстовые данные. Поэтому появилась простая идея: почему бы не держать просто файл со списком директорий-закладок, и fuzzy-фильтровать его. Вот как это выглядит: image

    Я просто пишу «cdg» (от «cd global»), печатаю 3-4 буквы из нужной закладки (или перемещаюсь вверх-вниз по списку), и жму Enter. Очень быстро и удобно, пользуюсь больше года, очень доволен.

    Подробная статья: Fuzzy bookmarks for your shell

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.