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 関係を始め様々なご報告をいただきました。