7

Я хотел бы использовать функцию сокращений раковины рыбы, особенно для известной переменной bash !! или псевдонимы для общих команд git. Я знаю, что сокращения могут быть добавлены как в следующем фрагменте:

abbr -a gco git checkout

Я также знаю, что этот параметр сохраняется в файле, расположенном по адресу .config/fish/fishd.host , но этот файл также говорит, что его не следует редактировать, поскольку изменения могут быть потеряны (поскольку файл генерируется автоматически).

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

4 ответа4

11

Извините, я не уверен, что понимаю, что вы спрашиваете. Но если ваш вопрос заключается в том, как задать определения abbr при запуске (и в файле, который вы можете сохранить в репозитории и обмениваться между компьютерами), вам следует использовать файл ~/.config/fish/config.fish который является эквивалентом Fish в .bashrc в Баш.

Поскольку аббревиатуры хранятся в глобальных / универсальных переменных, их не нужно сбрасывать каждый раз, когда вы открываете окно терминала, так что вы можете поместить в этот файл конфигурации защиту, чтобы не сбрасывать их каждый раз (немного ускоряя процесс), как объяснено здесь:https://github.com/fish-shell/fish-shell/issues/1976#issuecomment-168698602

Например, мой config.fish выглядит так (для команд Git):

if not set -q abbrs_initialized
  set -U abbrs_initialized
  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 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 gpl 'git pull'
  abbr gr 'git remote'
  abbr gs 'git status'
  abbr gst 'git stash'

  echo 'Done'
end
1

Исправлено это! В итоге я просто превратил вывод abbr -s в скрипт Fish. Итак вкратце:

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.

0

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

Если вы хотите, чтобы эта конфигурация была доступна в других полях и синхронизировала их с вашими точечными файлами, я рекомендую вместо этого создать функцию как gco.fish и т.д. Для каждой аббревиатуры.

  • gco.fish

    function gco
        command git checkout $argv
    end
    

Функции лениво загружаются в fish и всегда будут работать лучше, чем запуск abbr (который также не встроен в fish, а является обычной функцией с определением type abbr) для каждой аббревиатуры в вашем config.fish .

0

Я снова попробовал рыбу и нашел решение, которое работает для меня сейчас. Это также описано в документации по рыбе.

Они просто предлагают сбросить 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, но без недостатка, что он кешируется. Компромисс, вероятно, заключается в том, что запуск немного медленнее, но я буду следить за этим. Я собираюсь с этим вариантом, так как он также упоминается в документации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .