在鱼配置中添加缩写

Dan*_*ter 9 shell fish

我想使用fish shell的缩写功能,特别是对于已知的bash变量!!或常见git命令的别名。我知道可以像以下代码段一样添加缩写:

abbr -a gco git checkout

我也知道此设置保存在位于 的文件中.config/fish/fishd.host,但该文件还表示不应编辑它,因为更改可能会丢失(因为该文件是自动生成的)。

所以我的问题是如何在配置文件中添加这个缩写,因为我想把我的点文件放在一个 git 存储库中。如果我在单独的机器上使用这些点文件,我不想abbr再次执行所有这些命令。

MJV*_*MJV 11

抱歉,我不确定我是否明白你在问什么。但是,如果您的问题是如何abbr在启动时设置定义(以及在您可以存储在存储库中并在机器之间共享的文件中),您应该使用与Bash 中~/.config/fish/config.fishFish 等效的文件.bashrc

由于缩写存储在全局/通用变量中,因此无需在每次打开终端窗口时重置它们,因此您可以在该配置文件中放置一个保护措施以防止每次都重置它们(稍微加快速度),如此处所述:https : //github.com/fish-shell/fish-shell/issues/1976#issuecomment-168698602

编辑(2019 年 4 月):

在 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'
Run Code Online (Sandbox Code Playgroud)


Dan*_*ter 0

我再次尝试钓鱼,找到了现在对我有用的解决方案。Fish 文档中也以这种方式进行了描述。

他们只是建议重置并一次又一次地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
Run Code Online (Sandbox Code Playgroud)

它实际上与MJV 建议的类似,但没有缓存的缺点。代价可能是启动速度有点慢,但我会密切关注这一点。我将使用该变体,因为文档中也提到了它。