sistema_progs

Programas para customizar o meu entorno de traballo nos meus equipos persoais
Log | Files | Refs

README-ja_JP.md (41624B)


      1 [ Languages: [English](README.md) (英語) | **日本語** ]
      2 
      3 <h1 align="center"><ruby>ble.sh<rp> (</rp><rt>/blɛʃ/</rt><rp>)</rp></ruby> ―Bash Line Editor―</h1>
      4 <p align="center">
      5 [ <b>README</b> | <a href="https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A71-%E5%9F%BA%E6%9C%AC">説明書</a> |
      6 <a href="https://github.com/akinomyoga/ble.sh/wiki/%E8%B3%AA%E5%95%8F%E3%81%A8%E5%9B%9E%E7%AD%94">Q&A</a> |
      7 <a href="https://github.com/akinomyoga/blesh-contrib"><code>contrib</code></a> |
      8 <a href="https://github.com/akinomyoga/ble.sh/wiki/%E9%80%86%E5%BC%95%E3%81%8D%E3%83%AC%E3%82%B7%E3%83%94">逆引き</a> ]
      9 </p>
     10 
     11 `ble.sh` (*Bash Line Editor*) はピュア Bash スクリプトで書かれたコマンドラインエディタで、標準の GNU Readline を置き換える形で動作します。
     12 
     13 現在の開発バージョンは 0.4 です。
     14 このスクリプトは Bash 3.0 以降で利用できますが、速度・機能などの観点から 4.0 以降のリリース版 Bash でお使い頂くことがお薦めです。
     15 現時点では、文字コードとして `UTF-8` のみの対応です。
     16 このスクリプトは [**BSD License**](LICENSE.md) (3条項 BSD ライセンス) の下で提供されます。
     17 
     18 免責: ラインエディタ本体は **ピュア Bash** で書かれていますが、
     19 ユーザーコマンド実行時には TTY 設定の為に `stty` (POSIX) を呼び出します。
     20 他にも処理の高速化の為に、初期化・終了処理、
     21 巨大なデータの処理 (補完、貼り付けなど) の局面でPOSIX 標準コマンドを利用しています。
     22 
     23 呼称: `ble.sh` はお好きな様に読んでいただいて問題ありませんが、一番短いのは標記の /blɛʃ/ になりましょう。
     24 しかし個人的には脳裡で /biːɛliː/ または /biːɛliː dɑt ɛseɪtʃ/ と読んでいるものですから、標記の読み方は飽くまで参考と受け止めていただければ幸いです。
     25 
     26 ## 簡単設定
     27 
     28 `ble.sh` をお使いいただくには Bash 3.0 以上 (及び POSIX の基本的なコマンド) が必要です。
     29 <!-- 但し、macOS では附属の `/usr/bin/awk` (awk-32 以降) でマルチバイト文字セットの問題があるため、`gawk`, `nawk`, または `mawk` を別途インストールする必要があるかもしれません。 -->
     30 `ble.sh` を取得するには主に2つの方法があります: `git` を用いてソースを取得しビルドする方法と `curl` または `wget` を用いて nightly ビルドをダウンロードする方法です。
     31 詳細は、試用またはインストールに関しては [節1.1](#get-from-source) と [節1.2](#get-from-tarball) を、
     32 `~/.bashrc` の設定に関しては [節1.3](#set-up-bashrc) を御覧ください。
     33 
     34 <details open><summary><b><code>git</code> を用いてソースを取得し <code>ble.sh</code> を生成</b></summary>
     35 
     36 この方法では `git`, `make` (GNU make), 及び `gawk` が必要です。
     37 以下、GNU make が `gmake` として提供されているシステム (BSD など) では、`make` を `gmake` に置き換えて実行してください。
     38 
     39 ```bash
     40 # 簡単お試し (インストールせずにお試しいただけます)
     41 
     42 git clone --recursive --depth 1 --shallow-submodules https://github.com/akinomyoga/ble.sh.git
     43 make -C ble.sh
     44 source ble.sh/out/ble.sh
     45 
     46 # インストール & .bashrc 簡単設定 (動かない場合は節1.3を御参照下さい)
     47 
     48 git clone --recursive --depth 1 --shallow-submodules https://github.com/akinomyoga/ble.sh.git
     49 make -C ble.sh install PREFIX=~/.local
     50 echo 'source ~/.local/share/blesh/ble.sh' >> ~/.bashrc
     51 ```
     52 
     53 生成過程では、複数のBashスクリプトファイルを前処理・結合することで `ble.sh` を生成し、
     54 他の関連ファイルを正しく配置し、またソースコード中のコードコメントを削除してロードを最適化します。
     55 
     56 ※生成過程は、C/C++ のコンパイルも伴わずバイナリも生成しませんので、コンパイラを準備していただく必要はありません。
     57 </details>
     58 
     59 <details><summary><b><code>curl</code> を用いて nightly ビルドをダウンロード</b></summary>
     60 
     61 この方法では `curl`, `tar` (オプション `J` に対応), 及び `xz` (XZ Utils) が必要です。
     62 
     63 ```bash
     64 # 簡単お試し (インストールせずにお試しいただけます)
     65 
     66 curl -L https://github.com/akinomyoga/ble.sh/releases/download/nightly/ble-nightly.tar.xz | tar xJf -
     67 source ble-nightly/ble.sh
     68 
     69 # インストール & .bashrc 簡単設定 (動かない場合は節1.3を御参照下さい)
     70 
     71 curl -L https://github.com/akinomyoga/ble.sh/releases/download/nightly/ble-nightly.tar.xz | tar xJf -
     72 mkdir -p ~/.local/share/blesh
     73 mv -f ble-nightly/* ~/.local/share/blesh/
     74 rmdir ble-nightly
     75 echo 'source ~/.local/share/blesh/ble.sh' >> ~/.bashrc
     76 ```
     77 </details>
     78 
     79 <details><summary><b><code>wget</code> を用いて nightly ビルドをダウンロード</b></summary>
     80 
     81 この方法では `wget`, `tar` (オプション `J` に対応), 及び `xz` (XZ Utils) が必要です。
     82 
     83 ```bash
     84 # 簡単お試し (インストールせずにお試しいただけます)
     85 
     86 wget -O - https://github.com/akinomyoga/ble.sh/releases/download/nightly/ble-nightly.tar.xz | tar xJf -
     87 source ble-nightly/ble.sh
     88 
     89 # インストール & .bashrc 簡単設定 (動かない場合は節1.3を御参照下さい)
     90 
     91 wget -O - https://github.com/akinomyoga/ble.sh/releases/download/nightly/ble-nightly.tar.xz | tar xJf -
     92 mkdir -p ~/.local/share/blesh
     93 mv ble-nightly/* ~/.local/share/blesh/
     94 rmdir ble-nightly
     95 echo 'source ~/.local/share/blesh/ble.sh' >> ~/.bashrc
     96 ```
     97 </details>
     98 
     99 <details open><summary><b>パッケージ管理システムを通じてパッケージをインストール</b> (現在限られたパッケージのみ)</summary>
    100 
    101 この方法では対応するパッケージ管理ツールのみが必要です。
    102 
    103 - [AUR (Arch Linux)](https://github.com/akinomyoga/ble.sh/wiki/Manual-A1-Installation#user-content-AUR) `blesh-git` (devel), `blesh` (stable 0.3.4)
    104 - [NixOS (nixpkgs)](https://github.com/akinomyoga/ble.sh/wiki/Manual-A1-Installation#user-content-nixpkgs) `blesh` (devel)
    105 - [Guix](https://packages.guix.gnu.org/packages/blesh/0.4.0-devel2/) `blesh` (0.4.0-devel2)
    106 </details>
    107 
    108 <details open><summary><b>既存の <code>ble.sh</code> を更新</b></summary>
    109 
    110 ```bash
    111 # 更新 (ble.sh をロードした状態で)
    112 
    113 ble-update
    114 
    115 # 更新 (ble.sh 外部から)
    116 
    117 bash /path/to/ble.sh --update
    118 ```
    119 </details>
    120 
    121 <details><summary><b><code>ble.sh</code> のパッケージ作成</b></summary>
    122 
    123 `ble.sh` は単にシェルスクリプトの集合ですので環境に依存せずにお使いいただけます (いわゆる "`noarch`") ので、
    124 単にリリースページからビルド済みの tar ボールをダウンロードし中身を `/tmp/blesh-package/usr/local` など所定の位置に配置するだけで問題ありません。
    125 それでも何らかの理由により自前でビルドする必要がある場合には以下のコマンドをお使いください。
    126 ビルドの為には git リポジトリ (`.git`) が必要になることにご注意ください。
    127 
    128 ```bash
    129 # ビルド & パッケージ作成用コマンド
    130 
    131 git clone --recursive --depth 1 --shallow-submodules https://github.com/akinomyoga/ble.sh.git
    132 make -C ble.sh install DESTDIR=/tmp/blesh-package PREFIX=/usr/local
    133 ```
    134 
    135 パッケージ管理システムを用いたパッケージ更新方法を指定すると `ble-update` でそれが呼び出されます。
    136 更新方法を指定するにはスクリプトファイルを `${prefix}/share/blesh/lib/_package.bash` に配置します。
    137 スクリプトは次の様な変数と関数を定義します。但し `XXX` はパッケージ管理システムの名前に置き換えてください。
    138 
    139 ```bash
    140 # ${prefix}/share/blesh/lib/_package.bash
    141 
    142 _ble_base_package_type=XXX
    143 
    144 function ble/base/package:XXX/update {
    145   update-the-package-in-a-proper-way
    146   return 0
    147 }
    148 ```
    149 
    150 シェル関数がステータス 0 で終了した場合、更新が成功した事を表し `ble.sh` のリロードが自動的に行われます。
    151 シェル関数がステータス 6 で終了した場合、`ble.sh` のタイムスタンプが確認され、`ble.sh` が現セッションの開始時刻よりも新しい時に限りリロードが行われます。
    152 シェル関数がステータス 125 で終了した場合、`ble.sh` に組み込みの更新処理が試みられます。
    153 それ以外の場合には更新処理が中断されます。この場合、シェル関数が状況を説明するメッセージを出力するようにして下さい。
    154 具体例として `AUR` パッケージの [`_package.bash`](https://aur.archlinux.org/cgit/aur.git/tree/blesh-update.sh?h=blesh-git) も参考にしていただければ幸いです。
    155 </details>
    156 
    157 ## 機能概要
    158 
    159 - **構文着色**: `fish` や `zsh-syntax-highlighting` のような文法構造に従った着色を行います。
    160   `zsh-syntax-highlighting` のような単純な着色ではなく、構文の入れ子構造や複数のヒアドキュメントなども正しく解析して着色します。
    161   着色は[全て設定可能](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A72-%E6%8F%8F%E7%94%BB)です。
    162 - **補完増強**: [補完](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A77-%E8%A3%9C%E5%AE%8C)を大幅に増強します。
    163   **文法構造に応じた補完**、クォートやパラメータ展開を展開した上でのプログラム補完、**曖昧補完**に対応しています。
    164   また、候補をカーソルキーや <kbd>TAB</kbd>, <kbd>S-TAB</kbd> で選択できる
    165   [**メニュー補完**](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A77-%E8%A3%9C%E5%AE%8C#user-content-sec-menu-complete)、
    166   `fish` や `zsh-autosuggestions` のような
    167   [**自動補完**](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A77-%E8%A3%9C%E5%AE%8C#user-content-sec-auto-complete)
    168   (Bash 4.0 以上) の機能もあります。
    169   更に、従来 `peco` や `fzf` を呼び出さなければならなかった補完候補の絞り込みも
    170   [**メニュー絞り込み**](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A77-%E8%A3%9C%E5%AE%8C#user-content-sec-menu-filter)
    171   (Bash 4.0 以上) として自然な形で組み込んでいます。
    172   他に、[**動的略語展開**](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A77-%E8%A3%9C%E5%AE%8C#user-content-sec-dabbrev)
    173   や、[*zsh abbreviations*](https://unix.stackexchange.com/questions/6152/zsh-alias-expansion)・[`zsh-abbr`](https://github.com/olets/zsh-abbr) のような
    174   [**静的略語展開**](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A77-%E8%A3%9C%E5%AE%8C#user-content-sec-sabbrev)
    175   にも対応しています。
    176 - **Vim編集モード**: `set -o vi` による編集モードを増強します。
    177   挿入・ノーマルモードの他に(行・矩形)ビジュアルモード、置換モードなどの各種モードに対応しています。
    178   テキストオブジェクト・各種レジスタ・オペレータ・キーボードマクロなどにも対応しています。
    179   拡張として `vim-surround` も提供しています。
    180 - 他にも
    181   [**ステータス行**](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A74-%E7%B7%A8%E9%9B%86#user-content-bleopt-prompt_status_line),
    182   [**コマンド履歴共有**](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A74-%E7%B7%A8%E9%9B%86#user-content-bleopt-history_share),
    183   [**右プロンプト**](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A74-%E7%B7%A8%E9%9B%86#user-content-bleopt-prompt_rps1),
    184   [**過渡的プロンプト**](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A74-%E7%B7%A8%E9%9B%86#user-content-bleopt-prompt_ps1_transient),
    185   [**xterm タイトル**](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A74-%E7%B7%A8%E9%9B%86#user-content-bleopt-prompt_xterm_title),
    186   など様々な機能に対応しています。
    187 
    188 注意: `ble.sh` は、(プロンプト (`PS1`)、エイリアス、関数などを提供する) 典型的な Bash 設定集と異なります。
    189 `ble.sh` はより低層の基盤を提供するもので、ユーザは自分でプロンプトやエイリアスを設定する必要があります。
    190 勿論 [`bash-it`](https://github.com/Bash-it/bash-it) や [`oh-my-bash`](https://github.com/ohmybash/oh-my-bash) の様な他の Bash 設定と一緒に使っていただくことも可能です。
    191 
    192 > デモ
    193 >
    194 > ![ble.sh demo gif](https://github.com/akinomyoga/ble.sh/wiki/images/trial1.gif)
    195 
    196 ## 来し方行く末
    197 
    198 このプロジェクトは初めは `.bashrc` の片隅で行われた小さな実験からスタートしました。
    199 2013年5月に `zsh-syntax-highlighting` のとある記事に触発されたのがきっかけでした。
    200 初めは数百行のコードを書けば構文着色が簡単に実現できるのではないかと思って始めた実験ですが、
    201 すぐに行エディタを根本から書き直さなければ実現できないのではないかということが分かり、
    202 独立したファイルにコードを移動した後に `ble.sh` という名前を与えました。
    203 この名前は Zsh の行エディタ (*ZLE* (*Zsh Line Editor*)) を真似て、
    204 但しシェルで書かれているという事を意識して `.sh` という拡張子にしたように記憶しています。
    205 `ble.sh` の読み方について屡々訊かれるのですが、最初に書いたように特に定まった読み方はありません。
    206 最初の実験は2週間程コードを弄って原理的に行エディタを作れるという事を結論づけて終わりました。
    207 本格的な実装が始まったのは2015年2月の事で12月には公開しました。
    208 その時点で行エディタとしては普段遣いに堪える程度に完成していました。
    209 Vimモードの実装は2017年9月に始まり2018年3月に一先ず完成としました。
    210 続いて補完の拡張は2018年8月に始まり2019年2月には一通り完成しました。
    211 現在は漫然とメンテナンスしている所でいつになるかは分かりませんが、以下に挙げるような機能も加えたいと何となく考えています。
    212 
    213 - 2013-06 v0.0 -- 実験
    214 - 2015-12 v0.1 -- 構文着色 [[v0.1.15](https://github.com/akinomyoga/ble.sh/releases/tag/v0.1.15)]
    215 - 2018-03 v0.2 -- Vim モード [[v0.2.7](https://github.com/akinomyoga/ble.sh/releases/tag/v0.2.7)]
    216 - 2019-02 v0.3 -- 拡張補完 [[v0.3.4](https://github.com/akinomyoga/ble.sh/releases/tag/v0.3.4)]
    217 - 20xx-xx v0.4 (plan) -- プログラム着色 [[nightly build](https://github.com/akinomyoga/ble.sh/releases/tag/nightly)]
    218 - 20xx-xx v0.5 (plan) -- TUI設定画面
    219 - 20xx-xx v0.6 (plan) -- エラー診断?
    220 
    221 ## 制限
    222 
    223 `ble.sh` の実装形態から来る制限があります。
    224 ユーザー設定や他の Bash の枠組みとの干渉によって問題が起こる可能性があります。
    225 
    226 - `ble.sh` は、実行コストの都合、既定では前回のコマンドライン実行後の `PIPESTATUS` を設定しません。代わりに `BLE_PIPESTATUS` を参照することができます。
    227   もし本当に `PIPESTATUS` 経由でこれらの値を利用する必要がある場合には設定 `bleopt exec_restore_pipestatus=1` を使用して下さい。
    228 - `ble.sh` は一般的な変数名のシェル変数や環境変数 (`LC_*` など) がグローバルで読み込み専用変数になっていないことを想定します。
    229   Bash ではグローバル変数の読み込み専用属性は関数のローカルスコープに於いても制限を与えます。
    230   つまり、同名の異なるローカル変数さえ定義することができません。
    231   この問題は `ble.sh` 固有の制限ではなく、あらゆる Bash の枠組みがグローバルの読み込み専用変数に影響を受けます。
    232   一般的にグローバルスコープに読み込み変数を設定することはセキュリティ的な理由がない限りは非推奨と考えられています (参照 [[1]](https://lists.gnu.org/archive/html/bug-bash/2019-03/threads.html#00150), [[2]](https://lists.gnu.org/archive/html/bug-bash/2020-04/threads.html#00200), [[3]](https://mywiki.wooledge.org/BashProgramming?highlight=%28%22readonly%22%20flag,%20or%20an%20%22integer%22%20flag,%20but%20these%20are%20mostly%20useless,%20and%20serious%20scripts%20shouldn%27t%20be%20using%20them%29#Variables))。
    233   また、`ble.sh` はビルトインコマンド `readonly` をシェル関数で置き換え、グローバル変数を読み込み専用にするのをブロックします。
    234   例外として、全て大文字の変数 (`ble.sh` が内部使用するものを除く) および `_*` の形の変数 (`_ble_*` および `__ble_*` を除く) を読み込み専用にすることは可能です。
    235 - `ble.sh` は Bash のビルトインコマンド (`trap`, `readonly`, `bind`, `history`, `read`, `exit`) をシェル関数で上書きし、`ble.sh` と干渉しないようにその振る舞いを調整します。
    236   ユーザーまたは他の枠組みが元のビルトインを直接呼び出した場合、または `ble.sh` の定義したシェル関数を別のシェル関数で上書きした場合、正しい動作を保証できません。
    237 
    238 # 1 使い方
    239 
    240 ## 1.1 最新の git repository のソースから生成して試す (バージョン ble-0.4)<sup><a id="get-from-source" href="#get-from-source">†</a></sup>
    241 
    242 ### ble.sh 生成
    243 
    244 `ble.sh` を生成する為には `gawk` (GNU awk) と `gmake` (GNU make) が必要です。
    245 以下のコマンドで生成できます。
    246 GNU make が `gmake` という名前でインストールされている場合は、`make` の代わりに `gmake` として下さい。
    247 ```console
    248 $ git clone --recursive https://github.com/akinomyoga/ble.sh.git
    249 $ cd ble.sh
    250 $ make
    251 ```
    252 スクリプトファイル `ble.sh` がサブディレクトリ `ble.sh/out` 内に生成されます。
    253 
    254 ### 試用
    255 
    256 生成された `ble.sh` は `source` コマンドを用いてお試しいただけます。
    257 
    258 ```console
    259 $ source out/ble.sh
    260 ```
    261 
    262 ### インストール
    263 
    264 指定したディレクトリにインストールするには `make install` コマンドを使用します。
    265 
    266 ```bash
    267 # ~/.local/share/blesh にインストール
    268 make install
    269 
    270 # 指定したディレクトリにインストール
    271 make install INSDIR=/path/to/blesh
    272 
    273 # パッケージ作成用 (パッケージ管理者用)
    274 make install DESTDIR=/tmp/blesh-package PREFIX=/usr/local
    275 ```
    276 
    277 Make 変数 `DESTDIR` または `PREFIX` が指定されている時、`ble.sh` は `$DESTDIR/$PREFIX/share/blesh` にコピーされます。
    278 それ以外で Make 変数 `INSDIR` が指定されている時、直接 `$INSDIR` にインストールされます。
    279 更にそれ以外で環境変数 `$XDG_DATA_HOME` が指定されている時、`$XDG_DATA_HOME/blesh` にインストールされます。
    280 以上の変数が何れも指定されていない時の既定のインストール先は `~/.local/share/blesh` です。
    281 
    282 インストール時にコード中のコメントは自動で削除されますが、コメントを保持したい場合は `strip_comment=no` を `make` の引数に指定して下さい。
    283 
    284 `.bashrc` の設定に関しては[節1.3](#set-up-bashrc)を御覧ください。
    285 
    286 ## 1.2 GitHub Releases から tar をダウンロードして使う<sup><a id="get-from-tarball" href="#get-from-tarball">†</a></sup>
    287 
    288 ダウンロード・試用・インストールの方法については各リリースページの説明を御覧ください。
    289 現在、安定版は開発版に比べてかなり古いので様々な機能が欠けている事にご注意下さい。
    290 
    291 - 開発版 [v0.4.0-devel3](https://github.com/akinomyoga/ble.sh/releases/tag/v0.4.0-devel3) (2020-12), [nightly build](https://github.com/akinomyoga/ble.sh/releases/tag/nightly)
    292 - 安定版 [v0.3.4](https://github.com/akinomyoga/ble.sh/releases/tag/v0.3.4) (2019-02 fork) 拡張補完
    293 - 安定版 [v0.2.7](https://github.com/akinomyoga/ble.sh/releases/tag/v0.2.7) (2018-03 fork) Vim モード
    294 - 安定版 [v0.1.15](https://github.com/akinomyoga/ble.sh/releases/tag/v0.1.15) (2015-12 fork) 構文着色
    295 
    296 ## 1.3 `.bashrc` に設定する<sup><a id="set-up-bashrc" href="#set-up-bashrc">†</a></sup>
    297 
    298 対話シェルで常用する場合には `.bashrc` に設定を行います。
    299 単に `ble.sh` を `source` して頂くだけでも大抵の場合動作しますが、
    300 より確実に動作させる為には以下の様にコードを記述します。
    301 ```bash
    302 # bashrc
    303 
    304 # .bashrc の先頭近くに以下を追加して下さい。
    305 [[ $- == *i* ]] && source /path/to/blesh/ble.sh --noattach
    306 
    307 # 間に通常の bashrc の内容を既述します。
    308 
    309 # .bashrc の末端近くに以下を追加して下さい。
    310 [[ ${BLE_VERSION-} ]] && ble-attach
    311 ```
    312 
    313 `source /path/to/ble.sh` 及び `ble-attach` を呼び出す時は、
    314 標準ストリーム (`stdin`, `stdout`, `stderr`) が現在のセッションの制御端末とは別の物にリダイレクトされていない様にして下さい。
    315 `source /path/to/ble.sh` をシェル関数の中から実行するのは避けて下さい。
    316 この「より確実な設定」が必要になる詳細な条件については [Discussion #254 への回答 (英語)](https://github.com/akinomyoga/ble.sh/discussions/254#discussioncomment-4284757) で説明されています。
    317 
    318 ## 1.4 初期化スクリプト `~/.blerc` について
    319 
    320 ユーザー設定は初期化スクリプト `~/.blerc` (またはもし `~/.blerc` が見つからなければ `${XDG_CONFIG_HOME:-$HOME/.config}/blesh/init.sh`) に記述します。
    321 テンプレートとしてリポジトリの [`blerc.template`](https://github.com/akinomyoga/ble.sh/blob/master/blerc.template) というファイルを利用できます。
    322 初期化スクリプトは `ble.sh` ロード時に自動で読み込まれる Bash スクリプトなので、Bash で使えるコマンドを初期化スクリプトの中で利用できます。
    323 初期化スクリプトの位置を変更する場合には、`source ble.sh` 時に `--rcfile INITFILE` を指定します。以下に例を挙げます。
    324 
    325 ```bash
    326 # in bashrc
    327 
    328 # Example 1: ~/.blerc will be used by default
    329 [[ $- == *i* ]] && source /path/to/blesh/ble.sh --noattach
    330 
    331 # Example 2: /path/to/your/blerc will be used
    332 [[ $- == *i* ]] && source /path/to/blesh/ble.sh --noattach --rcfile /path/to/your/blerc
    333 ```
    334 
    335 ## 1.5 アップデート
    336 
    337 Git (`git'), GNU awk (`gawk`), 及び GNU make (`make`) が必要になります。
    338 `ble-0.3` 以上をお使いの場合は `ble.sh` をロードした状態で `ble-update` を実行して下さい。
    339 
    340 ```bash
    341 $ ble-update
    342 ```
    343 
    344 `ble-0.4` 以上をお使いの場合は `ble.sh` をロードしなくても以下のコマンドで更新可能です。
    345 
    346 ```bash
    347 $ bash /path/to/ble.sh --update
    348 ```
    349 
    350 それ以外の場合には、以下のように `git pull` で最新版を入手・インストールできます。
    351 
    352 ```bash
    353 cd ble.sh   # ※既に持っている git リポジトリに入る
    354 git pull
    355 git submodule update --recursive --remote
    356 make
    357 make INSDIR="$HOME/.local/share/blesh" install
    358 ```
    359 
    360 ## 1.6 アンインストール
    361 
    362 基本的に `ble.sh` ディレクトリとユーザの追加した設定を単に削除していただければ問題ありません。
    363 
    364 - 全ての `ble.sh` セッション (`ble.sh` をロードしている Bash 対話セッション) を終了します。
    365 - `.bashrc` に追加した行があれば削除します。
    366 - `blerc` 設定ファイル (`~/.blerc` または `~/.config/blesh/init.sh`) があれば削除します。
    367 - `ble.sh` をインストールしたディレクトリを削除します。
    368 - キャッシュディレクトリ `~/.cache/blesh` が生成されていればそれを削除します。
    369 - 状態ディレクトリ `~/.cache/blesh` が生成されていればそれを削除します。
    370 - 一時ディレクトリ `/tmp/blesh` が生成されていればそれを削除します。これは `/tmp` の内容が自動的にクリアされないシステムで必要です。
    371 
    372 # 2 基本設定
    373 
    374 ここでは `~/.blerc` に記述する基本的な設定を幾つか紹介します。
    375 [質問と回答](https://github.com/akinomyoga/ble.sh/wiki/%E8%B3%AA%E5%95%8F%E3%81%A8%E5%9B%9E%E7%AD%94)、
    376 [逆引きレシピ](https://github.com/akinomyoga/ble.sh/wiki/%E9%80%86%E5%BC%95%E3%81%8D%E3%83%AC%E3%82%B7%E3%83%94)、
    377 [`contrib` リポジトリ](https://github.com/akinomyoga/blesh-contrib/blob/master/README-ja.md) にも便利な設定があります。
    378 その他の全ての設定項目はテンプレート [`blerc.template`](https://github.com/akinomyoga/ble.sh/blob/master/blerc.template) に含まれています。
    379 詳細な説明に関しては[説明書](https://github.com/akinomyoga/ble.sh/wiki/%E7%9B%AE%E6%AC%A1)を参照して下さい。
    380 
    381 ## 2.1 Vim モード
    382 
    383 Vim モードについては [Wiki の説明ページ](https://github.com/akinomyoga/ble.sh/wiki/Vi-(Vim)-editing-mode) を御覧ください。
    384 
    385 ## 2.2 各機能の無効化
    386 
    387 よくお尋ね頂くご質問の一つにそれぞれの機能をどのように無効化すれば良いのかというものが御座います。
    388 各機能の無効化方法を以下にまとめます。
    389 
    390 ```bash
    391 # 構文着色を無効化
    392 bleopt highlight_syntax=
    393 
    394 # ファイル名に基づく構文着色を無効化
    395 bleopt highlight_filename=
    396 
    397 # 変数の種類に基づく構文着色の無効化
    398 bleopt highlight_variable=
    399 
    400 # 自動補完の無効化 (自動補完は Bash 4.0 以降にて既定で有効です)
    401 bleopt complete_auto_complete=
    402 # Tip: 代わりに自動補完の起動遅延をミリ秒単位でご指定いただくこともできます。
    403 bleopt complete_auto_delay=300
    404 
    405 # コマンド履歴に基づく自動補完の無効化
    406 bleopt complete_auto_history=
    407 
    408 # 曖昧補完の無効化
    409 bleopt complete_ambiguous=
    410 
    411 # TAB によるメニュー補完の無効化
    412 bleopt complete_menu_complete=
    413 
    414 # メニュー自動絞り込みの無効化 (Bash 4.0 以降にて既定で有効化されます)
    415 bleopt complete_menu_filter=
    416 
    417 # 行末マーカー "[ble: EOF]" の無効化
    418 bleopt prompt_eol_mark=''
    419 # Tip: 代わりに他の文字列をご指定頂くこともできます。
    420 bleopt prompt_eol_mark='⏎'
    421 
    422 # 終了ステータスマーカー "[ble: exit %d]" の無効化
    423 bleopt exec_errexit_mark=
    424 # Tip: 代わりに他の文字列をご指定頂くこともできます。
    425 bleopt exec_errexit_mark=$'\e[91m[error %d]\e[m'
    426 
    427 # コマンド実行時間マーカー "[ble: elapsed 1.203s (CPU 0.4%)]" の無効化
    428 bleopt exec_elapsed_mark=
    429 # Tip: 代わりに別の文字列をご指定いただくこともできます。
    430 bleopt exec_elapsed_mark=$'\e[94m[%ss (%s %%)]\e[m'
    431 # Tip: マーカーを表示する条件を変更することも可能です。
    432 bleopt exec_elapsed_enabled='sys+usr>=10*60*1000' # 例: 合計CPU時間が 10 分以上の時に表示
    433 ```
    434 
    435 ## 2.3 曖昧文字幅
    436 
    437 設定 `char_width_mode` を用いて、曖昧文字幅を持つ文字 (Unicode 参考特性 `East_Asian_Width` が `A` (Ambiguous) の文字) の幅を制御できます。
    438 現在は 4 つの選択肢 `emacs`, `west`, `east`, `auto` が用意されています。
    439 設定値 `emacs` を指定した場合、GNU Emacs における既定の文字幅と同じ物を使います。
    440 設定値 `west` を指定した場合、全ての曖昧文字幅を 1 (半角) と解釈します。
    441 設定値 `east` を指定した場合、全ての曖昧文字幅を 2 (全角) と解釈します。
    442 設定値 `auto` を指定した場合、`west` か `east` かを端末とのやり取りに基づいて自動判定します。
    443 既定値は `auto` です。この設定項目は、利用している端末の振る舞いに応じて適切に設定する必要があります。
    444 例えば `west` に設定する場合は以下の様にします:
    445 
    446 ```bash
    447 bleopt char_width_mode='west'
    448 ```
    449 
    450 ## 2.4 文字コード
    451 
    452 設定 `input_encoding` は入力の文字コードを制御するのに使います。現在 `UTF-8` と `C` のみに対応しています。
    453 設定値 `C` を指定した場合は、受信したバイト値が直接文字コードであると解釈されます。
    454 既定値は `UTF-8` です。`C` に設定を変更する場合には以下の様にします:
    455 
    456 ```bash
    457 bleopt input_encoding='C'
    458 ```
    459 
    460 ## 2.5 ベル
    461 
    462 設定 `edit_abell` と設定 `edit_vbell` は、編集関数 `bell` の振る舞いを制御します。
    463 `edit_abell` が非空白の文字列の場合、音による通知が有効になります (つまり、制御文字の `BEL` (0x07) が `stderr` に出力されます)。
    464 `edit_vbell` が非空白の文字列の場合、画面での通知が有効になります。既定では音による通知が有効で、画面での通知が無効になっています。
    465 
    466 設定 `vbell_default_message` は画面での通知で使用するメッセージ文字列を指定します。既定値は `' Wuff, -- Wuff!! '` です。
    467 設定 `vbell_duration` は画面での通知を表示する時間の長さを指定します。単位はミリ秒です。既定値は `2000` です。
    468 
    469 例えば、画面での通知は以下のように設定・有効化できます:
    470 ```bash
    471 bleopt edit_vbell=1 vbell_default_message=' BEL ' vbell_duration=3000
    472 ```
    473 
    474 もう一つの例として、音による通知は以下の様にして無効化できます。
    475 ```bash
    476 bleopt edit_abell=
    477 ```
    478 
    479 ## 2.6 着色の設定
    480 
    481 構文に従った着色で使用される、各文法要素の色と属性は `ble-face` シェル関数で設定します。
    482 既定の設定は以下のコードに対応します:
    483 ```bash
    484 # 編集に関連する着色の設定
    485 ble-face -s region                    bg=60,fg=white
    486 ble-face -s region_target             bg=153,fg=black
    487 ble-face -s region_match              bg=55,fg=white
    488 ble-face -s region_insert             fg=12,bg=252
    489 ble-face -s disabled                  fg=242
    490 ble-face -s overwrite_mode            fg=black,bg=51
    491 ble-face -s auto_complete             fg=238,bg=254
    492 ble-face -s menu_filter_fixed         bold
    493 ble-face -s menu_filter_input         fg=16,bg=229
    494 ble-face -s vbell                     reverse
    495 ble-face -s vbell_erase               bg=252
    496 ble-face -s vbell_flash               fg=green,reverse
    497 ble-face -s prompt_status_line        fg=231,bg=240
    498 
    499 # 構文着色の設定
    500 ble-face -s syntax_default            none
    501 ble-face -s syntax_command            fg=brown
    502 ble-face -s syntax_quoted             fg=green
    503 ble-face -s syntax_quotation          fg=green,bold
    504 ble-face -s syntax_escape             fg=magenta
    505 ble-face -s syntax_expr               fg=26
    506 ble-face -s syntax_error              bg=203,fg=231
    507 ble-face -s syntax_varname            fg=202
    508 ble-face -s syntax_delimiter          bold
    509 ble-face -s syntax_param_expansion    fg=purple
    510 ble-face -s syntax_history_expansion  bg=94,fg=231
    511 ble-face -s syntax_function_name      fg=92,bold
    512 ble-face -s syntax_comment            fg=242
    513 ble-face -s syntax_glob               fg=198,bold
    514 ble-face -s syntax_brace              fg=37,bold
    515 ble-face -s syntax_tilde              fg=navy,bold
    516 ble-face -s syntax_document           fg=94
    517 ble-face -s syntax_document_begin     fg=94,bold
    518 ble-face -s command_builtin_dot       fg=red,bold
    519 ble-face -s command_builtin           fg=red
    520 ble-face -s command_alias             fg=teal
    521 ble-face -s command_function          fg=92
    522 ble-face -s command_file              fg=green
    523 ble-face -s command_keyword           fg=blue
    524 ble-face -s command_jobs              fg=red
    525 ble-face -s command_directory         fg=26,underline
    526 ble-face -s filename_directory        underline,fg=26
    527 ble-face -s filename_directory_sticky underline,fg=white,bg=26
    528 ble-face -s filename_link             underline,fg=teal
    529 ble-face -s filename_orphan           underline,fg=teal,bg=224
    530 ble-face -s filename_executable       underline,fg=green
    531 ble-face -s filename_setuid           underline,fg=black,bg=220
    532 ble-face -s filename_setgid           underline,fg=black,bg=191
    533 ble-face -s filename_other            underline
    534 ble-face -s filename_socket           underline,fg=cyan,bg=black
    535 ble-face -s filename_pipe             underline,fg=lime,bg=black
    536 ble-face -s filename_character        underline,fg=white,bg=black
    537 ble-face -s filename_block            underline,fg=yellow,bg=black
    538 ble-face -s filename_warning          underline,fg=red
    539 ble-face -s filename_url              underline,fg=blue
    540 ble-face -s filename_ls_colors        underline
    541 ble-face -s varname_array             fg=orange,bold
    542 ble-face -s varname_empty             fg=31
    543 ble-face -s varname_export            fg=200,bold
    544 ble-face -s varname_expr              fg=92,bold
    545 ble-face -s varname_hash              fg=70,bold
    546 ble-face -s varname_number            fg=64
    547 ble-face -s varname_readonly          fg=200
    548 ble-face -s varname_transform         fg=29,bold
    549 ble-face -s varname_unset             fg=124
    550 ble-face -s argument_option           fg=teal
    551 ble-face -s argument_error            fg=black,bg=225
    552 ```
    553 
    554 現在の描画設定の一覧は以下のコマンドでも確認できます (`ble-face` を無引数で呼び出す)。
    555 ```console
    556 $ ble-face
    557 ```
    558 
    559 色コードはシェル関数 `ble-color-show` (`ble.sh` 内で定義) で確認できます。
    560 ```console
    561 $ ble-color-show
    562 ```
    563 
    564 ## 2.7 キーバインディング
    565 
    566 キーバインディングはシェル関数 `ble-bind` を使って変更できます。
    567 例えば <kbd>C-x h</kbd> を入力した時に "Hello, world!" と挿入させたければ以下のようにします。
    568 ```bash
    569 ble-bind -f 'C-x h' 'insert-string "Hello, world!"'
    570 ```
    571 
    572 上記の <kbd>C-x h</kbd> の様なキー表記については
    573 [マニュアル §3.1](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A73-%E3%82%AD%E3%83%BC%E3%83%90%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0#user-content-sec-kspecs) で詳細に説明されています。
    574 スペース・タブ・エンター・バックスペース・エスケープなどの特殊キーの表記については
    575 [マニュアル §3.1.1](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A73-%E3%82%AD%E3%83%BC%E3%83%90%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0#user-content-sec-kspecs-ret) で説明されています:
    576 スペースは <kbd>SP</kbd> と表現します。
    577 タブキーは端末によって <kbd>C-i</kbd> または <kbd>TAB</kbd> と表現します。
    578 エンター・リターンキーは端末によって <kbd>C-m</kbd> または <kbd>RET</kbd> と表現します。
    579 バックスペースは端末によって <kbd>C-?</kbd>, <kbd>DEL</kbd>, <kbd>C-h</kbd>, または <kbd>BS</kbd> 等様々な表現があります。
    580 <kbd>Ctrl+Return</kbd> や <kbd>Shift+Return</kbd> などの修飾された特殊キーの取り扱いについては
    581 [マニュアル §3.6.4](https://github.com/akinomyoga/ble.sh/wiki/%E8%AA%AC%E6%98%8E%E6%9B%B8-%C2%A73-%E3%82%AD%E3%83%BC%E3%83%90%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0#user-content-sec-modifyOtherKeys-manual) で説明されています。
    582 お使いの端末が `modifyOtherKeys` に対応していない場合、手動で各キーの組み合わせに対応するエスケープシーケンスを設定する必要があります。
    583 
    584 
    585 <kbd>M-c</kbd> を入力した時にコマンドを実行するには以下のようにします。
    586 
    587 ```bash
    588 ble-bind -c 'M-c' 'my-command'
    589 ```
    590 
    591 <kbd>C-r</kbd> を入力した時に、ユーザー定義編集関数 (Bash の `bind -x` で指定するのと同様の物) を実行するには以下のようにします。
    592 
    593 ```bash
    594 ble-bind -x 'C-r' 'my-edit-function'
    595 ```
    596 
    597 既存のキーバインディングは以下のコマンドで確認できます。
    598 ```console
    599 $ ble-bind -P
    600 ```
    601 
    602 以下のコマンドでキーバインディングに使える編集関数一覧を確認できます。
    603 ```console
    604 $ ble-bind -L
    605 ```
    606 
    607 一つのキーで複数の編集関数を呼び出したい場合は、以下の例の様に、
    608 `ble/widget/編集関数の名前` という名前のシェル関数を通して新しい編集関数を定義できます。
    609 既存の標準の編集関数と名前が重複しない様に、
    610 編集関数の名前は `ユーザー名/`, `my/`, `blerc/`, `dotfiles/` などで始める事が強く推奨されます。
    611 
    612 ```bash
    613 # C-t で複数の操作を行う例
    614 function ble/widget/my/example1 {
    615   ble/widget/beginning-of-logical-line
    616   ble/widget/insert-string 'echo $('
    617   ble/widget/end-of-logical-line
    618   ble/widget/insert-string ')'
    619 }
    620 ble-bind -f C-t my/example1
    621 ```
    622 
    623 ## 2.8 fzf との統合
    624 
    625 `fzf` を `ble.sh` と一緒にお使いいただく場合には、[`contrib/fzf` 統合機能](https://github.com/akinomyoga/blesh-contrib#pencil-fzf-integration) を用いて `fzf` を設定していただく必要があります。
    626 詳細についてはリンク先の説明を御覧ください。
    627 
    628 ```bash
    629 # blerc
    630 
    631 # 注意: fzf を bash_completion と組み合わせて使用する場合は、fzf-completion よ
    632 # りも先に bash_completion をロードしておく必要があります。
    633 source /etc/profile.d/bash_completion.sh
    634 
    635 ble-import -d integration/fzf-completion
    636 ble-import -d integration/fzf-key-bindings
    637 ```
    638 
    639 # 3 ヒント
    640 
    641 ## 3.1 複数行モード
    642 
    643 コマンドラインに改行が含まれている場合、複数行モード (MULTILINE モード) になります。
    644 
    645 <kbd>C-v C-j</kbd> または <kbd>C-q C-j</kbd> とすると改行をコマンドラインの一部として入力できます。
    646 複数行モードでは、<kbd>RET</kbd> (<kbd>C-m</kbd>) はコマンドの実行ではなく新しい改行の挿入になります。
    647 複数行モードでは、<kbd>C-j</kbd> を用いてコマンドを実行して下さい。
    648 
    649 `shopt -s cmdhist` が設定されているとき (既定)、もし <kbd>RET</kbd> (<kbd>C-m</kbd>) を押した時にコマンドラインが構文的に閉じていなければ、コマンドの実行ではなく改行の挿入を行います。
    650 
    651 ## 3.2 Vim モード
    652 
    653 `.bashrc` に `set -o vi` が設定されているとき、または `.inputrc` に `set editing-mode vi` が設定されているとき、vim モードが有効になります。
    654 Vim モードの詳細な設定については [Wiki のページ (英語)](https://github.com/akinomyoga/ble.sh/wiki/Vi-(Vim)-editing-mode) を御覧ください。
    655 
    656 ## 3.3 自動補完
    657 
    658 Bash 4.0 以降では自動補完が有効になり、予測候補が表示されます。
    659 候補を確定するには <kbd>S-RET</kbd> を入力します (編集文字列の末尾にいる時は <kbd>right</kbd>, <kbd>C-f</kbd> または <kbd>end</kbd> でも確定できます)。
    660 表示されている候補の初めの単語だけ部分的に確定する時は <kbd>M-f</kbd> または <kbd>M-right</kbd> を入力します。
    661 現在の候補で確定しそのままコマンドを実行する場合には <kbd>C-RET</kbd> (※お使いの端末が対応している時) を入力します。
    662 お使いの端末が対応していない時は [マニュアル §3.6.4](https://github.com/akinomyoga/ble.sh/wiki/Manual-%C2%A73-Key-Binding#user-content-sec-modifyOtherKeys-manual) を参照して下さい。
    663 
    664 
    665 ## 3.4 静的略語展開
    666 
    667 特定の単語を静的略語展開に登録することで好きな文字列に展開することができます。
    668 登録済み単語に一致する単語の直後で <kbd>SP</kbd> を入力した時に静的略語展開が起きます。
    669 例えば、以下の設定をしておくと `command L` まで入力した状態で <kbd>SP</kbd> を押した時に、コマンドラインが `command | less` に展開されます。
    670 
    671 ```bash
    672 # blerc
    673 ble-sabbrev L='| less'
    674 ```
    675 
    676 実際に実行したいコマンドに含まれる可能性の低い単語として、`\` で始まる単語を静的略語展開に登録することもお薦めです。
    677 
    678 ```bash
    679 # blerc
    680 ble-sabbrev '\L'='| less'
    681 ```
    682 
    683 # 4 謝辞
    684 
    685 GitHub の Issue/PR を通して多くの方からフィードバックを頂き、皆様に本当に感謝しております。
    686 特に以下の方には大きな寄与を受けたので言及させていただきます。
    687 
    688 - [`@cmplstofB`](https://github.com/cmplstofB) 様には vim モードの実装において初期よりテスト及び様々な提案をしていただきました。
    689 - [`@dylankb`](https://github.com/dylankb) 様には `fzf` との互換性や `ble.sh` 初期化に関連して様々な問題報告をいただきました。
    690 - [`@rux616`](https://github.com/rux616) 様には幾つかの問題報告および `.blerc` の既定パス解決のバグ修正をいただきました。
    691 - [`@timjrd`](https://github.com/timjrd) 様には補完の枠組みの高速化に関する PR をいただきました。
    692 - [`@3ximus`](https://github.com/3ximus) 様には広範囲に渡る様々な問題について報告いただきました。
    693 - [`@SuperSandro2000`](https://github.com/SuperSandro2000) 様には NixOS 関係を始め様々なご報告をいただきました。