abbr - fish の省略形(abbreviation)を管理する

書式

abbr --add NAME [--position command | anywhere] [-r | --regex PATTERN] [-c | --command COMMAND]
                [--set-cursor[=MARKER]] ([-f | --function FUNCTION] | EXPANSION)
abbr --erase [ [-c | --command COMMAND]... ] NAME ...
abbr --rename [ [-c | --command COMMAND]... ] OLD_WORD NEW_WORD
abbr [--show] [--color WHEN]
abbr --list
abbr --query NAME ...

説明

abbr は省略形(abbreviation)を管理します。省略形とは、入力時により長いフレーズに置き換えられるユーザー定義の単語のことです。

注釈

省略形が使用されるのは、直接入力されたコマンドのみです。スクリプト内では省略形は展開されません。

例えば、よく実行する git checkout のようなコマンドを gco と省略できます。 gco と入力して spaceenter を押すと、コマンドライン上に完全なテキスト git checkout が表示されます。省略形のように見える単語を展開させたくない場合は、デフォルトの ctrl-space バインドを使用することで、展開せずにスペースを挿入できます。

省略形は、リテラルな(そのままの)単語に一致させることも、正規表現によるパターンに一致させることもできます。省略形が単語に一致すると、その単語は「展開(expansion)」と呼ばれる新しいテキストに置き換えられます。この展開後のテキストは固定のフレーズにすることも、fish 関数を介して動的に生成することも可能です。展開はスペースまたは Enter キーを押した後に実行されます。

これらの機能を組み合わせることで、正規表現で特定のトークンを認識し、展開用の関数でそれを解釈するというカスタム構文を作成することも可能です。詳細は Examples セクションを参照してください。

バージョン 3.6.0 で変更: 以前のバージョンではユニバーサル変数に省略形を保存できましたが、現在は不可能です。既存の変数は引き続きインポートされ、 abbr --erase を実行するとそれらの変数も削除されます。現在は、単に abbr --add コマンドを config.fish に追加することをお勧めします。 abbr を実行すると、次のような出力が表示されます。

> abbr
abbr -a -- foo bar # imported from a universal variable, see `help abbr`

その場合は、 # コメントより前の部分をコピーして config.fish に保存してください。その後、 abbr --erase を実行してユニバーサル変数を削除できます。

> abbr >> ~/.config/fish/config.fish
> abbr --erase (abbr --list)

または、次のようにして別の 設定ファイル に保存しておくこともできます。

> abbr > ~/.config/fish/conf.d/myabbrs.fish

これにより、すべての省略形が "myabbrs.fish" に保存されます。ファイル全体を上書きするため、重複が残ったり、削除したはずの省略形が復活したりすることはありません。もちろん、関数については別途保存する必要があります。詳細は funcsave を参照してください。

"add" サブコマンド

abbr [-a | --add] NAME [--position command | anywhere] [-r | --regex PATTERN]
     [-c | --command COMMAND] [--set-cursor[=MARKER]] ([-f | --function FUNCTION] | EXPANSION)

abbr --add は新しい省略形を作成します。他のオプションを指定しない場合、文字列 NAMEEXPANSION (展開後のフレーズ)に置き換えられます。

--position command を指定すると、その省略形はコマンドの位置にあるときのみ展開され、他のコマンドの引数であるときは展開されません。 --position anywhere を指定すると、コマンドライン上のどこにあっても展開されます。デフォルトは command です。

--command COMMAND を指定すると、その省略形は指定された COMMAND の引数として使用された場合のみ展開されます。複数の --command を併用でき、その場合は各コマンドに対して展開が有効になります。 COMMAND が空の場合は、コマンドが入力されていない状態でのみ展開されます。 --command を使用すると --position anywhere が暗黙的に指定され、 --position command は使用できなくなります。異なる COMMAND を指定する場合でも、省略形の NAME は一意(ユニーク)である必要があります。同じ単語を複数のコマンドで異なる内容に展開したい場合は、 --regex の使用を検討してください。

--regex を指定すると、省略形はリテラルな NAME ではなく、 PATTERN で指定された正規表現を使用してマッチングを行います。パターンは PCRE2 構文として解釈され、トークン全体に一致する必要があります。複数の省略形が同じトークンに一致した場合は、最後に追加された省略形が使用されます。

--set-cursor=MARKER を指定すると、展開後のテキスト内で最初に出現する MARKER の位置にカーソルが移動します。 MARKER 自体は削除されます。 MARKER は省略可能(単に --set-cursor と記述)で、その場合のデフォルトは % です。

-f FUNCTION--function FUNCTION を指定すると、 FUNCTION はリテラルな置換テキストではなく、fish 関数の名前として扱われます。省略形が一致すると、一致したトークンを引数としてその関数が呼び出されます。関数の終了ステータスが 0(成功)の場合、トークンは関数の出力に置き換えられます。そうでない場合、トークンは変更されません。このとき EXPANSION を別途指定することはできません。

abbr --add gco git checkout

gcogit checkout に置き換える新しい省略形を追加します。

abbr -a --position anywhere -- -C --color

-C--color に置き換える新しい省略形を追加します。 -- を置くことで、 -C がオプションではなく省略形の名前として扱われるようになります。

abbr -a L --position anywhere --set-cursor "% | less"

L| less に置き換える新しい省略形を追加し、カーソルをパイプの前に配置します。

function last_history_item
    echo $history[1]
end
abbr -a !! --position anywhere --function last_history_item

まず、最後に入力されたコマンドを出力する関数 last_history_item を作成します。次に、 !! をこの関数の呼び出し結果に置き換える省略形を追加します。これらを組み合わせることで、bash の !! 履歴展開機能と同様の動作になります。

function vim_edit
    echo vim $argv
end
abbr -a vim_edit_texts --position command --regex ".+\.txt" --function vim_edit

まず、引数の前に vim を付加する関数 vim_edit を作成します。次に、 .txt で終わるコマンドにマッチし、そのコマンドをこの関数の呼び出し結果で置き換える省略形を追加します。これにより、zsh の「サフィックス・エイリアス」機能のように、テキストファイルをコマンドとして「実行」して vim で開くことができます。

abbr 4DIRS --set-cursor=! "$(string join \n -- 'for dir in */' 'cd $dir' '!' 'cd ..' 'end')"

「4DIRS」という省略形を作成し、複数行のループ「テンプレート」に展開します。このテンプレートは各ディレクトリに入ってから抜ける構造です。カーソルは各ディレクトリで実行するコマンドを入力できる位置( ! があった場所)に配置され、 ! 自体は削除されます。

abbr --command git co checkout

「git」の引数としての「co」を「checkout」に変換します。複数のコマンドを指定することも可能で、 --command={git,hg} とすれば git と hg の両方で「co」が「checkout」に展開されます。

その他のサブコマンド

abbr --rename [ [-c | --command COMMAND]... ] OLD_NAME NEW_NAME

省略形の名前を OLD_NAME から NEW_NAME に変更します。コマンド固有の省略形の場合、どの省略形を変更するかを特定するために --command オプションを指定する必要があります。

abbr [-s | --show]

インポートおよびエクスポートに適した形式ですべての省略形を表示します

abbr [-l | --list]

すべての省略形の名前を表示します

abbr [-e | --erase] [ [-c | --command COMMAND]... ] NAME ...

指定された名前の省略形を削除します。コマンド固有の省略形の場合、どの省略形を削除するかを特定するために --command オプションを指定する必要があります。

abbr -q or --query [NAME...]

指定された NAME のいずれかが省略形であれば 0 (真) を返します。

abbr -h or --help

abbr コマンドのヘルプを表示します。