CLIファイルマネージャrangerの基本設定

以前に[Linux - コマンドラインで動かすファイルマネージャrangerの設定 - Qiita](http://qiita.com/ssh0/items/fe85da119c93333ba34e)というエントリを書いたのですが、後日もっと詳しく使い方の説明が欲しいとのお言葉をいただいたので、基本的な設定の仕方をまとめておこうと思います。rangerの基本的な使い方に関しては、上のリンクか、インストールしてヘルプを読んでみてください。

**筆者の環境:**

- OS: Ubuntu trusty x86_64
- Kernel: 3.13.0-85-lowlatency
- DE: GNOME
- WM: XMonad
- Terminal: urxvt

```shell-session
$ ranger --version
ranger-master 1.7.2

Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2]
```

# rangerって何？

![screen_001.png](https://qiita-image-store.s3.amazonaws.com/0/54869/6260f1bf-21dc-e177-e8f6-8d7b4d493961.png)

端末の中で起動してファイルの移動、コピー削除、リネームはもちろんのことですが、プレビュー表示させたり、プログラムを指定して開いたり、様々な機能を持った1画面ファイルマネージャです。マウスでの操作もできますが、このファイルマネージャの特徴は、コマンドラインで動作することの利点を活かしたキーボードによる高速な動作です。また、端末で動きながらも、画像のプレビューなどの機能にも対応しており、ファイル名だけでは分かりにくいファイルの操作も簡単にできるようになります。

**参考リンク:**

>1. [hut/ranger](https://github.com/hut/ranger)
>2. [Google画像検索"ranger+cli"](https://www.google.co.jp/search?hl=ja&>site=imghp&tbm=isch&source=hp&q=ranger+cli&oq=ranger+cli)
>3. [CLI + Vi キーバインディングなファイル・マネージャ Ranger の使い方](http://netbuffalo.doorblog.jp/archives/4952231.html)
>4. [CUIで動くファイルマネージャー「ranger」をインストールする | 覺書 -- Linux初心者による日々の覺書 --](http://memorandum4me.blog.fc2.com/blog-entry-28.html)

また、[3](http://netbuffalo.doorblog.jp/archives/4952231.html)の記事の最後の方で、動画のサムネイルは表示できないようだと書かれてありますが、バージョン1.7からは必要な外部プログラムをインストールすれば動画のサムネイル表示もできるようになっています。aptやhomebrewなどでインストールすると最新版ではないことが多いので、pipを使うか、GitHubからソースをクローンしてきて、インストールしてみてください。


# 設定ファイルの準備

インストールの仕方は、以前書いた上のエントリを参照してもらうとして、ただインストールしただけでは、このアプリケーションの本来の力を発揮できません。まずするべきことは、設定ファイルを準備することです。

```shell-session

$ ranger --copy-config=all
```

と実行します。こうすることで、デフォルトの設定が書かれた設定ファイルのひな形が`~/.config/ranger`にコピーされ、このディレクトリ内の設定ファイルを変更することで、自分好みにカスタマイズすることができます。これらのファイルが作成されていることが分かったら、とりあえず中身を読んでみると、何が設定できるかが分かると思います。



<table>
<thead>
<tr class="header">
<th align="left">ファイル名</th>
<th align="left">設定内容</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">rc.conf</td>
<td align="left">ranger起動時に設定されるオプション、コマンドの設定</td>
</tr>
<tr class="even">
<td align="left">rifle.conf</td>
<td align="left">ファイル起動時に使用するアプリケーションの設定</td>
</tr>
<tr class="odd">
<td align="left">scope.sh</td>
<td align="left">ファイルのプレビュー表示の設定</td>
</tr>
</tbody>
</table>

# rc.confを設定する

このファイルの内容は、rangerの起動時に読まれます。プレビュー表示をするか、隠しファイルやファイル情報の表示・非表示、カラースキームの指定などオプションの設定と、キーバインディングの指定を行うことができます。詳しい設定項目の詳細は

```shell-session
man ranger
```

として**SETTINGS**のセクションを参考にしてください。rangerを立ち上げた状態で、`:`と入力すると、コマンドモードに入り、様々なコマンドを実行することができますが、ここで例えば

```
:set draw_borders true
```

のようにすれば、わざわざ設定ファイルに書いて再読み込みしなくても設定を試すことができます(TABキーで補完もされます)。なので、manページと設定ファイルとrangerをそれぞれ開きながら、気になったところだけ設定ファイルを変更していけば、簡単に使いやすい環境になると思います。

## 画像のプレビュー表示

![screen_002.png](https://qiita-image-store.s3.amazonaws.com/0/54869/254c0df1-8fa1-fe75-63ee-738962048fdb.png)

画像のプレビュー表示をさせるためには

```
set preview_images true
```

としてください。端末内で画像を表示することができるウェブブラウザw3mをインストールしていて、w3mimgpreviewというコマンドが実行できる状態になっている必要があります。

また、Macで[iTerm2](https://www.iterm2.com/)を使っている人は

```
set preview_images_method w3m
```

の項で、w3mの部分をiterm2に変更してください。iTerm2のイメージプレビュー機能がサポートされている必要があります。homebrewなどで入るiTerm2はver2.1.1なのですが、インライン画像表示機能はNightly Builds ver.、つまりGitHubに上がっている開発版を使う必要があります。

- [Downloads - iTerm2 - Mac OS Terminal Replacement](https://www.iterm2.com/downloads.html)

また、rangerがiTerm2に対応したのはver1.7からなので、これもGitHubからクローンしてきて自前でビルドする必要があります。といってもインストールは簡単で、

```shell-session
git clone https://github.com/hut/ranger.git
cd ranger
sudo make install 
```

でインストールできます。

一応自分のrc.confもリンクを貼っておくので参考にしてみてください。但し、現在筆者のrangerは最新にしていることが多いので、それ以前にはなかったオプションが追加されており、以前のバージョンで動かそうとするとエラーメッセージが出るかもしれません。

- [dotfiles/rc.conf at master · ssh0/dotfiles](https://github.com/ssh0/dotfiles/blob/master/ranger/rc.conf)

# rifle.confを設定して、ファイルを開くアプリケーションを設定する

これは、必ずやっておく必要があるでしょう。rifle.confの中では、あるファイルタイプのファイルを選択して開くときに、どのアプリケーションで優先的に開くかを設定することができます。普通にEnterキーや`l`キーでファイルを開くときは最も優先度の高いアプリケーションでファイルが開かれ、`r`キーを押せば、可能な開き方がすべて表示され、その番号を入力してEnterキーを押せば、プログラムを指定して開くことができます。

![screen_002.png](https://qiita-image-store.s3.amazonaws.com/0/54869/a1fcd593-051d-2f86-64fd-e0d72ec46a28.png)
(pdfファイルを好きなアプリケーションで開くことができる)

rifle.confの最初の方のコメントにも書いてあるように、すべての行は

```
<condition1>, <condition2>, ... = command
```

の形式で書かれており、この`<condition>`に合致したとき右辺のコマンドが実行されます。どのような条件があるかは、設定ファイルのコメントを読んでもらうか、実際に設定ファイル内に書かれている他の設定を見てみてください。

例えばrifle.confの中の"Misc"というセクションに、

```
#-------------------------------------------
# Misc
#-------------------------------------------
# Define the "editor" for text files as first action
mime ^text,  label editor = $EDITOR -- "$@"
mime ^text,  label pager  = "$PAGER" -- "$@"

```

のように書いてあります。条件は、この場合`mine ^text`、つまりmineタイプが正規表現`^text`に一致するという条件にあう時、`$EDITOR -- "$@"`、つまり環境変数`$EDITOR`で指定したエディタで開くというコマンドを行います。`$@`は選択されたファイルすべてが引数に代入されることを意味しています。

その他に`label`を指定しておけば、rangerの中で`r`キーを押したときに番号以外にこのラベルでもアプリケーションを選択することができます。また、`flag`を指定することで、現在の端末で直接コマンドとして実行するのではなく、バックグラウンドで実行(`flag f`)したり、別の端末を開いて実行(`flag t`)したり、root権限をつけて実行(`flag r`)させることができます。

また、ファイル実行の優先度は、この設定ファイル内の上から順に優先度が高くなっているので、デフォルトで起動するアプリケーションを変えたいだけで、その起動の設定が既に書かれているのであれば、他の設定よりファイルの上に位置するように並べ替えてあげるだけで大丈夫です。特にhtmlの開き方なんかは、マイナーなブラウザを入れているとそれで開くように設定されているので、注意が必要です。

参考に

- [dotfiles/rifle.conf at master · ssh0/dotfiles](https://github.com/ssh0/dotfiles/blob/master/ranger/rifle.conf)

# scope.shでプレビュー表示の設定

scope.shに指定する方法でプレビュー表示を行わせたい場合には、rc.confで

```
set use_preview_script true
```

としてください。

さて、プレビュー機能は外部のコマンドを用いて実現しているので、これらのパッケージが入っていないとプレビュー表示はできません。

scope.shの中では

```
try <command> && { dump | ... }
```

のような形で書かれた部分が多くありますが、この`<command>`を提供しているパッケージを調べてインストールすれば、プレビュー表示ができるようになります。先ほどの[4](http://memorandum4me.blog.fc2.com/blog-entry-28.html)には、aptでのパッケージ名が書かれてありましたので、参考にしてみてください。

バージョン1.7以降で使えるようになった動画のサムネイル表示ですが、ffmpegthumbnailerというコマンドが必要です。

```
sudo apt-get install ffmpegthumbnailer
```

で入ります。

![screen_003.png](https://qiita-image-store.s3.amazonaws.com/0/54869/cdf2b37c-d008-b464-42a9-da8ff8b27f21.png)

あるファイルタイプではプレビュー表示をしないようにするためには、設定ファイルの該当箇所をコメントアウトするだけで大丈夫です。img2txtでアスキーアートにするのもかっこいいとは思いますが、いかんせん重くなるので個人的には使いません。

htmlのプレビューとpdfのプレビュー、highlightを使ってテキストファイルの中身をシンタックスハイライト付きで表示する機能は、最高に便利だと思います。何度でも言いますがバージョン1.7からは動画もプレビュー表示できるようになったので(しかも画像はキャッシュされているので軽いです)、さらに使いやすくなってます。ちなみに、`i`キーを押せば画面いっぱいを使って表示させることができますし、`zp`キーでプレビューの表示・非表示をトグルすることができます。

## 画像のプレビュー表示に関する注意

rc.confの該当箇所にも書いてあるように、xtermとurxvtでtmuxを使用しない時にしか画像のプレビューは保証されていないので、tmuxと併用するときには注意が必要です(たまに表示されなかったり、別のウィンドウまで画像が残ったり、他のペインに侵食したり…)

自分の場合、tmuxの一つのウィンドウにはranger一つだけが配置されるようにすれば、この問題は気にならなくなりました。同じセッション内に複数rangerが起動している場合などは、画像が表示されないようです。ここらへんは要調査ですし、早くtmux内でもうまく表示されるようになればいいなぁと思うところです。


またurxvtなどを使っていて、画像がうまく表示されない場合、`~/.Xdefaults`で`URxvt*.depth`の項目をコメントアウトしてください。

```
! For showing img in ranger with w3mimgdisplay, disable this
! URxvt*.depth:               32
```

**参考:**
>[w3m/ranger images don't work on urxvt / Applications & Desktop Environments / Arch Linux Forums](https://bbs.archlinux.org/viewtopic.php?id=184478)

それから、枠が非表示のときは問題が起こることが多いそうなので、なんだかうまく画像が配置されていない時は、

```
set draw_borders true
```

してみてください。

**参考:**
>[Artifacts in image preview / ranger - ArchWiki](https://wiki.archlinux.org/index.php/Ranger#Artifacts_in_image_preview)

筆者のscope.sh(特に変更されていません)

- [dotfiles/scope.sh at master · ssh0/dotfiles](https://github.com/ssh0/dotfiles/blob/master/ranger/scope.sh)

# まとめ

さて、これくらいで基本的な設定は終わりかと思います。後は、以前の記事にもあげたように、サブシェルの入れ子の中に入らないようにする設定や`q`で抜けたディレクトリにautocdする設定を書いたり、rifle.confに自分でコマンドを登録していったりすれば、さらに使い勝手をよくすることができると思います。これを機にコマンドラインの良さがいろんな人に伝わればいいなぁ。