Добавить сокращения в конфигурации рыбы
Я хотел бы использовать функцию сокращений раковины рыбы, особенно для известной переменной bash !!
или псевдонимы для общих команд git. Я знаю, что сокращения могут быть добавлены как в следующем фрагменте:
abbr -a gco git checkout
Я также знаю, что этот параметр сохраняется в файле, расположенном в .config/fish/fishd.host
, но в этом файле также говорится, что его не следует редактировать, поскольку изменения могут быть потеряны (поскольку файл создается автоматически).
Поэтому мой вопрос заключается в том, как добавить эти сокращения в конфигурационный файл, потому что я хочу поместить мои точечные файлы в репозиторий git. И если я использую эти точечные файлы на отдельной машине, я не хочу выполнять все эти abbr
команда снова.
7 ответов
Я снова попробовал рыбу и нашел решение, которое работает для меня сейчас. Это также описано в документации по рыбе.
Они просто предлагают сбросить fish_user_abbreviations
и позвонить каждому abbr
опять и опять. (Я даже не использовал if
в моем случае тоже хорошо работает)
if status --is-interactive
set -g fish_user_abbreviations
abbr --add first 'echo my first abbreviation'
abbr --add second 'echo my second abbreviation'
# etcetera
end
Это на самом деле похоже на то, что предлагал MJV, но без недостатка в том, что он кешируется. Компромисс, вероятно, заключается в том, что запуск немного медленнее, но я буду следить за этим. Я собираюсь с этим вариантом, так как он также упоминается в документации.
Извините, я не уверен, что понимаю, что вы спрашиваете. Но если ваш вопрос заключается в том, как установить abbr
определения при запуске (и в файле, который вы можете хранить в репозитории и обмениваться между компьютерами), вы должны использовать файл ~/.config/fish/config.fish
что эквивалентно Рыбе .bashrc
в Баш.
Поскольку аббревиатуры хранятся в глобальных / универсальных переменных, их не нужно сбрасывать каждый раз, когда вы открываете окно терминала, так что вы можете поместить в этот файл конфигурации защиту, чтобы не сбрасывать их каждый раз (немного ускоряя процесс), как объяснено здесь: https://github.com/fish-shell/fish-shell/issues/1976
Изменить (апрель 2019 г.):
После того, как Fish изменил способ хранения универсальных переменных в версии 3.0.0, защитные функции, по-видимому, не позволяют вносить изменения, внесенные в список abbr, также после открытия новых окон терминала или перезагрузки компьютера. Итак, я удалил эти строки из примера.
Например мой config.fish
выглядит так (для команд Git):
echo -n Setting abbreviations...
abbr g 'git'
abbr ga 'git add'
abbr gb 'git branch'
abbr gbl 'git blame'
abbr gc 'git commit -m'
abbr gca 'git commit --amend -m'
abbr gco 'git checkout'
abbr gcp 'git cherry-pick'
abbr gd 'git diff'
abbr gf 'git fetch'
abbr gl 'git log'
abbr gm 'git merge'
abbr gp 'git push'
abbr gpf 'git push --force-with-lease'
abbr gpl 'git pull'
abbr gr 'git remote'
abbr grb 'git rebase'
abbr gs 'git status'
abbr gst 'git stash'
echo 'Done'
Канонический способ инициализации универсальных сокращений Фиша заключается в созданииabbr.fish
файл в вашем~/.config/fish/conf.d
это делает инициализацию. В этом файле вы проверяете универсальную переменную на предмет того, были ли уже установлены ваши сокращения. Это установит их и переменную индикатора один раз, гарантируя, что вы не будете нести затраты при каждом вызове оболочки.
# ~/.config/fish/conf.d/abbr.fish
if not set -q MY_ABBR_SET
set -U MY_ABBR_SET true
abbr -a -- - 'cd -'
abbr -a la 'ls -la'
abbr -a ldot 'ls -ld .*'
abbr -a ll 'ls -lGFh'
abbr -a lsa 'ls -aGF'
abbr -a nv nvim
abbr -a tarls 'tar -tvf'
abbr -a untar 'tar -xv'
abbr -a zz exit
# git
abbr -a gad 'git add'
abbr -a gbn 'git rev-parse --abbrev-ref HEAD'
abbr -a gcl 'git clean'
abbr -a gco 'git checkout'
abbr -a gwhoami 'echo "user.name:" (git config user.name) && echo "user.email:" (git config user.email)'
# ... etc...
end
Если вы хотите изменить или добавить новые сокращения, просто измените файл abbr.fish, а затем сотрите переменную. При следующем вызове рыбы ваши сокращения будут установлены снова:
# erasing this will cause abbr.fish
# to setup your abbreviations again
set -e MY_ABBR_SET
Если вам нужно удалить все сокращения и начать все сначала, эта функция может помочь:
function abbr-erase-all --description 'Erase all your abbrs'
while true
read -l -P "This will erase all your abbreviations. You sure? [y/N] " confirm
switch $confirm
case Y y
break
case '' N n
return 1
end
end
for abbr_name in (abbr -l)
abbr -e $abbr_name
end
set -q MY_ABBR_SET && set -e MY_ABBR_SET
end
Исправлено это! То, что я в итоге сделал, это просто сделать вывод abbr -s
в сценарий Рыба. Итак вкратце:
abbr -s > abbr.fish
(edit abbr.fish, add the following line to the top:) #! /usr/bin/fish
chmod +x abbr.fish
И вы сделали!
Все, что вам нужно сделать, это просто запустить abbr.fish
на любой машине Fish вы хотите, чтобы ваши сокращения и Presto.
Аббревиатуры хранятся как универсальные переменные в рыбе, поэтому, на мой взгляд, они более удобны для интерактивного использования в качестве быстрого и грязного способа сохранения ваших любимых расширений.
Если вы хотите, чтобы эта конфигурация была доступна в других полях и синхронизировала их с вашими точечными файлами, я рекомендую создать функцию как gco.fish
и т. д. вместо каждой аббревиатуры.
gco.fish
function gco command git checkout $argv end
Функции лениво загружены в рыбу и всегда будут работать лучше, чем бег abbr
(который также не является встроенной рыбой, но является регулярной функцией с определением type abbr
) для каждой аббревиатуры в вашем config.fish
,
Теперь у команды есть-g/--global
возможность хранить сокращения глобально (внутри текущей оболочки), а не универсально, поэтому вы можете добавитьabbr
команды вашемуconfig.fish
:
abbr --global --add ga 'git add'
...
Чтобы восстановить функциональность версии до 3.6.0abbr
вы можете использовать эту команду:
echo source '$__fish_config_dir/abbreviations' >> ~/.config/fish/config.fish
function abbrsave
echo abbr -a -U -- $argv[1] (string join -- ' ' (string escape -- $argv[2..-1])) >> ~/.config/fish/abbreviations
end
funcsave abbrsave
abbrsave ps ps -o etime,stat,command ww
Затемps
расширится в новых оболочках
Но если вы хотите отредактировать или удалить аббревиатуру, вам придется отредактировать файл:~/.config/fish/abbreviations
Или используйте более хакерское решение, подобное этому (требуетсяmoreutils
):
function filterfile --argument file word
if test -n "$word"
grep -i "$word" "$file"
grep -iv "$word" "$file" | sponge "$file"
end
end
funcsave filterfile
function abbrsave
abbr -a -U -- $argv[1] (string escape -- $argv[2..-1])
filterfile ~/.config/fish/abbreviations "abbr -a -U -- $argv[1]"
echo abbr -a -U -- $argv[1] (string escape -- $argv[2..-1]) >> ~/.config/fish/abbreviations
end
funcsave abbrsave
При этом будет напечатано предыдущее определение сокращения, когда вы перезапишете его чем-то новым.
Но для более динамичных сокращений я бы последовал совету руководства и просто вписал их прямо вconfig.fish
:
function _abbr_zip
echo zip -qr (datestamp).zip
end
abbr -a zip --function _abbr_zip