"Закладки" для bash


24

Навігація кількома шарами вкладених каталогів часто є болем. У Firefox це легко, оскільки вони мають закладки. Тож, що я хотів би зробити для закладок у файлі, це набрати:

$ go --add classes "repo/www/public/util/classes"

Потім, щоб перейти до цього каталогу, я введу:

$ go classes

Раніше я використовував символічні посилання, щоб досягти чогось подібного, але не хочу захаращувати свій домашній каталог. Є багато інших функцій, які можуть виявитись корисними. Наприклад, я хотів би мати можливість почати набирати текст, go clа потім натиснути вкладку до автозаповнення. Іноді у мене перевіряється кілька копій сховища, і тому програмі було б корисно дозволити мені створювати декілька контекстів і встановлювати закладку відносно базового каталогу контексту.

Отже, перед тим, як я разом почав спільно використовувати власний набір сценаріїв, чи є щось подібне?



4
Якщо ви продовжуєте порівнювати bash з firefox, хтось зробить приголомшливий бар для bash :(
hhaamu

Відповіді:


12

Я занадто довго шукав інструмент для розмітки оболонок, і я не задоволений жодним із знайдених рішень.

Однак врешті-решт я натрапив на чудовий універсальний інструмент: нечіткий шукач командного рядка .

Це перш за все дозволяє "нечітко знаходити" файли (перевірити багату анімацію gif за посиланням вище), але також дозволяє подавати до неї довільні текстові дані та фільтрувати ці дані. Отже, ідея ярликів проста: все, що нам потрібно, це підтримувати файл із шляхами (які є ярликами) та нечітко відфільтрувати цей файл. Ось як це виглядає: ми набираємо cdgкоманду (від "cd global", якщо вам подобається), отримуємо список наших закладок, вибираємо потрібну за кілька натискань клавіш і натискаємо Enter. Робочий каталог змінено на вибраний елемент:

cdg

Це надзвичайно швидко і зручно: зазвичай я просто набираю 3-4 букви потрібного предмета, а всі інші вже відфільтровані. Крім того, ми, звичайно, можемо переходити по списку за допомогою клавіш зі стрілками або за допомогою Ctrl+j/ Ctrl+k.

Детальна стаття про це рішення ярликів / закладок знаходиться тут: Нечіткі ярлики для вашої оболонки .


19

Я думаю, ти шукаєш щось на кшталт автоперетворювача . Вам потрібно трохи обмінятись, щоб розробити набір "ключових ваг", які співвідносяться з кількістю часу, проведеного в заданому каталозі. Тоді, якщо припустити, що ти багато часу провів у режимі «класів», ти можеш стрибати туди безпосередньо, набравши текст

j cl

Ви можете переглянути свої "ключові ваги" за допомогою

jumpstat

Нещодавно я знайшов трохи складніший, але цікавий та пов’язаний із цим інструмент під назвою f: github.com/clvv/f
tcdyl

14

Як згадує saeedn, псевдоніми є хорошим механізмом. Баш оболонка також має вбудований механізм , щоб перейти прямо на місці: CDPATH. Встановіть його як PATH, але він використовується cdзамість пошуку програм.

$ CDPATH=:~/repo/www/public/util
$ cd classes
/home/casebash/repo/www/public/util/classes

На сторінці сторінки:

   CDPATH The search path for the cd command.  This is  a  colon-separated
          list  of  directories  in  which the shell looks for destination
          directories specified by the cd  command.   A  sample  value  is
          ".:~:/usr".

Сам я поєднав це з каталогом, який посилається на те, куди я б хотів піти:

$ mkdir ~/cdshortcut
$ ln -s ~/repo/www/public/util/classes ~/cdshortcut/classes
$ CDPATH=:~/cdshortcut
/home/casebash/cdshortcut/classes

Це має недолік, що каталог не зовсім правильний, але його можна виправити за допомогою cd -Pабо налаштування set -P.


CDPATH цікавий, але, напевно, варто використовувати окрему команду go, щоб поведінка завжди була передбачуваною
Casebash

1
+1 для встановлення -P. Деякі з моїх посилань зводили мене з розуму, бо я не міг згадати, куди вони насправді пішли, і не пам’ятав команди, яка показує цю інформацію.
Джо

@Joe, я б додав, alias C='cd -P .'а не set -P, оскільки для системних посилань я не заперечую, щоб бути в каталозі symlink.
Wildcard

@Wildcard - цікаво - ви можете навести приклад, коли це має для вас значення? Я просто побіг help cdі досі не розумію, що робить варіант -P.
Джо

@Joemkdir test; ln -s test linktotest; cd linktotest; pwd; cd -P .; pwd
Wildcard

9

Ви можете комбінувати наявні історії та функції пошуку Bash. Натисніть, Ctrl-Rщоб почати поступовий зворотний пошук, а потім почніть вводити частину шляху, який, швидше за все, буде унікальним.

Ви можете продовжувати вводити літери до тих пір, поки не повернетеся до останньої cdкоманди, що містить цей каталог, або ви можете натиснути Ctrl-Rще раз, щоб перейти назад в історію до наступної новітньої команди, що відповідає тому, що ви ввели раніше.

Я роблю це постійно.

Власне, я роблю це на крок далі. Як тільки я починаю відкривати послідовності команд стоять тримати в історії , але не варто передання скрипта, я починаю зчеплення їх з &&і ;комбінаторами , так що я можу зворотний пошук підрядка цього один довгі команди, хіт Enterі запустити всю послідовність в один раз.

Наприклад, ось як я будую та запускаю одну зі своїх програм під час розробки:

$ ( cd .. ; make install ) && ./start_my_program

Я роблю це з каталогу встановлення, який знаходиться внизу джерела каталогів верхнього рівня. Загортаючи cd, будуючи та встановлюючи частину в підкольору, я гарантую, що незалежно від того, що відбувається під час цього процесу, я повернусь до своєї нормальної оболонки, нічого не змінилося. Тільки якщо це вдасться (&&), я запускаю побудовану та встановлену програму. Я можу знайти це в моїй історії лише Ctrl-Rтоді sta, будучи все, що мені зазвичай потрібно, щоб однозначно знайти цю командну послідовність.

Ще один приклад того, як я це використовую, - це послідовність, яка входить в створення RPM для цієї ж програми. Більшість виснажливих робіт знаходиться в скриптах оболонки, але все ж є кілька команд, які, як правило, мені доведеться набрати, щоб виконати всю роботу зі створення та розгортання вбудованих RPM, які мені зараз рідко доводиться повторно вводити, тому що Bash зберігає це в історії для мене.

Поєднайте все це з export HISTSIZE=bignumі, shopt histappendі ви щойно побудували слонтову командну пам'ять.

Ще одне рішення, яке я зашифрував один раз, - це моя відповідь на інше тут питання . Можливо, він повинен бути призначений для ваших цілей, і він обробляє лише cdкоманди, тоді як параметр пошуку історії працює скрізь і для кожної команди.


6

Я сам використовую aliasдля скорочення довгих шляхів, які часто відвідую. Ви можете помістити набір aliases у свій bashrc, щоб баш міг запам’ятовувати їх щоразу, коли ви входили в систему. І на щастя, bash додає псевдоніми для автоматичного завершення.

Я б написав щось подібне для вашого випадку: alias go-classes="cd ~/repo/www/public/util/classes"


6

Можливо, ви шукаєте базові знаки (на github).
З ПРОЧИТАННЯ:

Bashmarks - це сценарій оболонки, який дозволяє зберігати та переходити до загальновживаних каталогів. Тепер підтримується завершення вкладки.


4

Це жодним чином не повне і нерозумне, а лише проект. Якщо ви додасте наступне у вашій ~/.bashrcкоманді, ви отримаєте три команди для додавання закладок видалення та списку каталогів (які ґрунтуються на псевдонімах оболонки, тому ви також отримуєте автоматичне завершення).

BMFILE=~/.bash.bookmarks
[ -f "$BMFILE" ] && . "$BMFILE"

bmadd() {
    local abm
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    abm="alias $bm='cd \"$(pwd)\"'"

    if grep -q " $bm=" "$BMFILE"; then
        echo "Overwriting existing bookmark $bm"
        bmdel "$bm"
    fi
    echo "$abm" >> "$BMFILE"
    eval "$abm"
    #source "$BMFILE"
}

bmdel() {
    local bms
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    #sed -i.bak "/ $bm=/d" "$BMFILE"
    bms=$(grep -v " $bm=" "$BMFILE")
    echo "$bms" > "$BMFILE"
    unalias "$bm" 2> /dev/null
}

bmlist() {
    sed 's/alias \(.*\)=.cd "\(.*\)".$/\1\t\2/' "$BMFILE" | sort
}

Використання досить просте. bmaddз аргументом додає псевдонім, названий після аргументу. Цей псевдонім просто створює компакт-диск до каталогу, в який він був встановлений. Без аргументу він використовує поточне ім’я dir як ім'я псевдоніма. Аналогічним чином bmdelвидаляє псевдонім, якщо він існує, і bmlistперераховує поточні закладки.

напр

u@h:~ $ cd /usr/share/doc
u@h:/usr/share/doc $ bmadd
u@h:/usr/share/doc $ cd /usr/local/share/
u@h:/usr/local/share $ bmadd lshare
u@h:/usr/local/share $ cd
u@h:~ $ bmlist
doc     /usr/share/doc
lshare  /usr/local/share
u@h:~ $ doc
u@h:/usr/share/doc $ bmdel lshare
u@h:/usr/share/doc $ bmlist
doc     /usr/share/doc
u@h:/usr/share/doc $

4

Я натрапив на ту саму потребу деякий час тому і вирішив скласти пару сценаріїв, щоб допомогти мені зробити закладку абсолютних / відносних шляхів і відобразити їх на коротші імена, які я легко запам’ятаю.

Сценарій дуже простий у використанні, і він просто створить функцію з коротким ім'ям, яке ви надаєте як псевдонім до каталогу, в який ви хочете перейти. Все, що вам потрібно зробити, це просто ввести це коротке ім’я, і воно перенесе вас до каталогу, що додав закладки.

Ось посилання на джерело сценарію закладок. До речі, я назвав його Закладником.

Використання

Після встановлення це досить тривіально у використанні.

Щоб позначити каталог:

$ mark /this/is/a/very/very/looooong/path mydir

Щоб перейти до позначеного посібника:

$ mydir

Щоб побачити, що позначено:

$ marks
bin     -> /Users/khafaji/bin
eBooks  -> /Users/khafaji/eBooks

Щоб видалити маркований каталог:

$ umark myDir

Для подальших прикладів, інструкцій з установки тощо див. Дуже детальну документацію .


3

cdargs - найкращий інструмент для закладки в каталозі.

Для прикладів використання див. Закладки для відео команд cd на YouTube.

Приклад використання

cdargs- це графічний інтерфейс ncurses, щоб ви могли візуально переміщатися в оболонці. Після встановлення ви налаштовуєте її в задану оболонку шляхом пошуку сценарію оболонки:

$ source /etc/profile.d/cdargs.sh

Це дозволяє декілька функцій, які можна потім зателефонувати зі своєї оболонки.

Виклик GUI:

$ cv

Результат цього типу графічного інтерфейсу:

   [.       ]  /home/saml/tst/88040
 0 [path0   ]  /home/saml/tst/88040/path0
 1 [path1   ]  /home/saml/tst/88040/path1
 2 [path2   ]  /home/saml/tst/88040/path2

Ви можете використовувати клавіші зі стрілками для переміщення по списку вгору та вниз. Ліва стрілка ( ) піднімається на рівень дерева дерев каталогів, а права стрілка ( ) буде перетягуватися в каталог.

маркування каталогів:

Ви можете або використовувати cдля поточного каталогу, який ви перебуваєте, або можете aдодати каталог, який ви в даний час виділяєте курсором.

режими роботи:

cdargsв цьому відношенні мало схожий на vi / vim, де він має таке поняття про режими . Є 2 з них: перегляд (B) та лістинг (L). Ви можете бачити, в якому режимі ви перебуваєте через дисплей у нижній частині вашої оболонки.

Режим лістингу:

L: /home/saml/tst/88038

Режим перегляду:

B: /home/saml/tst/88038

Ви можете змінити свій режим, натиснувши клавішу вкладки ( TAB).

Це лише верхівка айсберга, перегляньте сторінку man ( man cdargs), а також вбудовану допомогу для отримання додаткової інформації.


2

Найкращим інструментом для цього є: wcd . Я перевірив багато інших інструментів, і цей використовується саме так, як ви просите, і він кращий у багатьох сенсах, ніж усі попередні рішення.


1

Інші відповіді чудові та конкретні. Ще один спосіб поглянути на це - використовувати макропроцесор клавіатури, який може робити майже все, що ви можете придумати.

Ознайомтеся з AutoKey. Він може підміняти фрази, такі як автокорекція текстового процесора або історія bash, а також може запускати скрипт python на гарячій клавіші, яку ви визначаєте, яка може робити майже все, а також надсилати натискання клавіш на ваш пристрій введення символів - так само, як якщо б ви їх ввели.

Єдиний "недолік", який він має (стосовно цього питання), - це те, що йому потрібен gui для запуску - gnome або kde. Інші відповіді не мають цієї вимоги.

https://code.google.com/p/autokey/

1

Існує ще одна альтернатива, яка називається z .

Він дізнається про кожну зміну каталогу:

$ cd /tmp/
$ pwd
/tmp
$ cd
$ pwd
/home/user

Потім ви можете перейти до цього каталогу пізніше за допомогою нечіткої відповідності:

$ z mp
$ pwd
/tmp

1

Apparix - це ще один інструмент, який робить це. Однією з його корисних особливостей є те, що ви можете переходити безпосередньо до підкаталогів позначки та заповнювати вкладки в цих підкаталогах.


0

Ще одне рішення, яке, я вважаю, є autojumpі zє fasd.

Він відслідковує, які каталоги ви відвідуєте, і z dir-nameперейде в каталог із іменем, dir-nameяке ви найчастіше використовуєте. Він також має деякі функції для часто використовуваних файлів.

Ви можете його клонувати з: https://github.com/clvv/fasd

Встановлення відбувається прямо, клон, зробіть інсталяцію, а потім модифікуйте .bashrc(або .zshrcтощо).


0

Вам потрібно додати псевдонім до вашого .bashrcабо .bash_profile.

## navigate to your home directory
$ cd ~
## list the contents of your home directory to see if you have `.bashrc` or `.bash_profile`
$ ls -a 
[`.bashrc` or `.bash_profile` should appear in the list]
## launch the text editor of your choice; I'll use vim here
## if no `~/.bashrc` or `~/.bash_profile`...
$ vim
## if, e.g., `~/.bash_profile` listed...
$ vim ~/.bash_profile

Тепер, скажімо, ви хочете отримати ярлик ~/Desktop/Coding/Projects, щоб викликати, який ви будете вводити goto_Projs. У файл, відкритий у текстовому редакторі, потрібно додати наступний рядок:

alias goto_Projs='cd ~/Desktop/Coding/Projects'

Тепер зробіть все, що ваш текстовий редактор захоче, щоб ви зберегли (до /User/<yourusername>/чи ~/звичайно) та вийшли, і коли повернеться запит оболонки, перейдіть

source ~/.bash_profile

Тепер ваш псевдонім має бути доступним для виклику, як описано вище.


0

Я використовую метод додавання коментаря в кінці команди, а потім викликаю ctrl Rдля зворотного пошуку коментаря. Це має такі переваги:

  • пошук команди природною мовою
  • будь-коли змінюйте коментар під час польоту та отримуйте останнє оновлення від ctrl R
  • використовуйте ctrl Rта tabна льоту, щоб зробити незначні зміни самої команди, тим самим зробивши коментар своєрідним ярликом до сімейства подібних команд
  • не потрібно встановлювати, встановлювати або зберігати книги :-)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.