シンプルで多機能、カスタマイザブルな Linux TUI ファイルマネージャ
マウスでやる GUI のファイルマネージャ(ファイル管理ソフト)はマウスだけでほとんどの事ができるし、片手だけでできてしまうのもいい。けれどオブジェクトにマウスカーソルを合わせて、という操作そのものは、軽快で素早いということとはベクトルが違うのではなかろうか。
それに対しコンソール版のファイルマネージャ(TUI ファイルマネージャ)は、マウスで使うものではないからこその操作体系に加えて、小サイズゆえの軽さと起動時間の早さとがあいまって、軽快である。
それらのひとつ、 ranger は vim ライクなキーバインディングのファイラーソフトだ。
私はこの ranger をよく使っているけれど、使い込むうちに豊富な機能の使い方は整理しておくのがいいと思ったから、以下の通りに ranger を使うことのメモにした。
目次
rangerとは
TUI ファイラーと言えば Midnight Commander のような2画面構成のものを連想しやすいと思うが、 ranger はシンプルで独特な1画面・3列表示という画面構成だ。これは慣れると非常に扱いやすいのだが、新バージョンでは2画面ファイラーのような使い方も可能になった。
ほかにも、タブをいくつも切り替えながら使えたり、画像、動画、pdf、書庫などのプレビュアーとしても使え、ファイルタイプに応じてアプリを起動する独自のファイルランチャーをも備えている。また、設定次第では git のステータスを端的に表示するようなことまでできてしまう。
X window の端末エミュレータで動くわけだから GUI ファイラーなんていらなくなってしまうかもしれない。言い過ぎだろうか。
rangerのインストール
パッケージマネージャでのインストール
パッケージマネージャでインストールできれば依存関係も解決してくれるから、当たり前のように手間がかからなくっていい(もっとも、基本的な依存は Python と less だけのようだけれど)。
Arch Linux のバイナリリポジトリには community/ranger があり、最新バージョンの登録も早いから、これを利用する( 現在 1.9.1 ステーブル)。
$ sudo pacman -S ranger
また、 Ubuntu 16.04 LTS で試してみたところ、APTリポジトリに ranger はあるけれど、ちょっと古いバージョンの 1.7 が登録されてあった。もちろんそれでも便利に使えるのだけれど、Ver.1.8 より古いと最初に触れた2画面(多画面)ファイラーとしての機能とかが使えない。
ここはひとつ、次の要領で最新安定版をインストールして使うのがいいかと思われる。
pip またはマニュアルインストール
ranger は Python で実装されているからそれがないと始まらない。公式では Python 2.7 と Python 3.1〜3.4 上で動作確認がとられているもよう(私のところでは 3.5 と 3.6 でも大丈夫)。 Ubuntu 16.04 ではまだデフォルトが Python 2.7 のようだけれど、 ranger を使うにおいてはそれでも問題ない。
また、必須のページャーコマンドは Ubuntu を含め多くのディストロで less があたり前の様にインストールされていると思う。
そして ranger 本体だが、 http://ranger.nongnu.org/download.html の ranger-stable.tar.gz というのが最新ステーブルだ。
以下で2つの要領を示す。
- pip でインストール
昨今の Python 事情ではモジュール管理に pip を使うのがベターのよう。アンインストールするのも
pip uninstallですむのだし。まずはその pip が入っていなければそこから。Ubuntuでは以下のように。
$ type pip || sudo apt install python-pip
そして ranger 本体のインストール。下記のようにして公式ステーブルをダウンロード・インストールできる。現在()はバージョン 1.8.1 ステーブル である。
$ sudo pip install http://nongnu.org/ranger/ranger-stable.tar.gz
なお PyPI にも ranger-fm での登録があり、こちらはバージョン 1.9.0 ステーブルである。
$ sudo pip install ranger-fm
ちなみに PyPI の登録に ranger という名前があるが、それはファイルマネージャの ranger とは違う別のものなのであった。ちょっと紛らわしいことになっているもよう。
- pip を使わない
pip を使わずとも、 README のやり方に沿って以下のようにできる。
$ mkdir -p ~/Install && cd $_ $ wget -O - http://nongnu.org/ranger/ranger-stable.tar.gz | tar xzf - $ cd ./ranger-?.?.? $ sudo make install
もっとも、こうしてインストールした後で ranger をアンインストールしたいならば、解凍ディレクトリに作成された
install_log.txtをもとにファイルを削除しなければならない。
rangerをちょっと操作してみる
インストールできたんなら、さっそくいじってみればいい。
端末エミュレータで ranger コマンドを実行する。
$ ranger
ranger の画面はシンプルな3列構成で、言われる通りミニマリスティックな雰囲気。真ん中の列にカレントディレクトリが表示されて、その左は上位ディレクトリ、右はカレントのカーソルが指すディレクトリの内容、あるいはファイルのプレビューや情報が表示される。
キー操作は vim ライクなものだ。
h j k l で ← ↓ ↑ → 、 gg で最初にジャンプ、 G で最後にジャンプ。
テキストファイルにカーソルを合わせると右カラムに内容がプレビューされる。 i を押せば画面全体でプレビュー。もう一度 i でもどる。
ファイルとディレクトリのコピペは、 yy でコピー、あるいは dd で切り取って、 pp でペースト。 SPACE キーで複数を選択してからコピペしたりもできる。
検索するには / に続けて検索文字列を入力し ENTER でファイル名検索。その後で n を押せばその次の候補を検索するし、 N では逆方向に検索する。
タブ機能は、 gn で新規タブを作成すると右上にタブが番号で示される。 TAB キーを押すとタブを切り替えられる。
タブを2つ設けた状態で ~ を押すとタブ各々のカレントディレクトリが左右に並んで表示される。こうすると一方のタブ窓で yy してから TAB で他方の窓へ切り替えて pp でペースト、といった具合に2画面ファイラーのような使い方ができる。
ここでさらに gn を押してタブを増やせば3画面になるし、4画面も5画面もいける。ハイビジョン比率がありがたいマルチ画面機能なのであった。
もう一度 ~ を押せばもとの1画面3列のタイプにもどる。
q でタブを閉じる。最後のタブを閉じると ranger も終了する。また、タブをひとつずつ消さずとも Q を押せば一気にタブを閉じて ranger を終了できる。
ヘルプは ?m だ(man page を表示)。 ?k を押せば操作キー一覧が見られる。
rangerの使い方
rangerの操作モードは、起動後の標準画面(ブラウザ)、ページャ及びヘルプ表示、コマンドのコンソール、タスクビューの4つだ。
ブラウザ
- ブラウザの基本操作
rangerを起動すると現れる標準画面(ブラウザ)の主なキー操作は以下の通り。(※
C-コントロールキーを押しながら、S-シフトキー、M-オルトキー)操作キー 機能 他のキー jカーソル1行下 <down>kカーソル1行上 <up>h上層へ移動 <left>l開く <right>/<enter>Eエディタ( $EDITOR)で開くiページャで開く/プレビュー画像を大きく表示 rアプリを指定して開く H戻る L進む C-f1ページ下へスクロール C-b1ページ上へスクロール ggカーソルを最初の行へ移動 Gカーソルを最後の行へ移動 C-l画面を再描画 ~マルチペイン/シングルペイン切り替え gnタブ新規作成 C-ngtタブ切り替え <tab>/M-<right>gTタブ切り替え(逆方向) S-<tab>/M-<left>M-<番号>タブ番号指定切り替え(無ければその番号で作る) C-wタブを閉じる gcqタブを閉じる(最後のタブを閉じたらranger終了) ZZuq直前に閉じたタブを復活 Qrangerを終了(強制終了) ZQC-[キャンセル <esc>ranger は多機能なので、いきなり全てのキーボードコマンドを憶えるなんてできない。でも使ってみるとわかるが、
gやらzやらを押すとその次に押すべき文字の一覧が画面下方にポップアップするので、慣れないうちはいくらかの救けにはなるだろう。難しいことなんかないかもしれない。テキストファイル上で
l(あるいは<enter>またはE)を押すと環境変数$EDITORに定義されたエディタコマンドでオープンしてくれる。$EDITORはコンソールエディタを指定するための環境変数だ。定義するならvimやnanoが多いだろう(もちろん、emacs -nwだっていい)が、定義がなければ ranger のデフォルトではvimを使うようだ(1.7.0以降)。~キーを押すとシングルペインビューとマルチペインビューを切り替える。マルチペインというのは Ver.1.8 からの機能で、タブの内容を1画面に並べて表示するモード。タブが2つであれば MC のような2画面ファイラーのようになる。さらにタブを増やせば3画面、4画面ファイラー(?)というような使い方もできる。qを押すとタブを閉じ、最後のタブを閉じると ranger が終了する。沢山のタブを開いて作業することもあるだろうが、うっかりqを押して eww! となったときにはすかさずuqを押せば閉じたタブを復活させることができる。なおuではじまるキーコンボはキャンセルやアンドゥで使われる。 - 表示 / フィルタ
表示に関する主な機能は以下の通り。
キー 機能 他のキー R表示内容をリロード zh隠しファイルを表示する/しない C-hzfフィルタをかけて表示 MfFilename: ファイル名ファイルサイズMifileInfo: ファイル名文字コードやフォーマットなどファイル種別MmMtime: ファイル名タイムスタンプ(mtime)MsSizemtime: ファイル名サイズタイムスタンプ(mtime)MpPermissions: パーミッションユーザグループファイル名MtmetaTitle: year–titleauthors(./.metadata.json定義)デフォルトでの開始時はドットはじまりのファイルが表示されないが
zhで表示をトグルできる。フィルタ表示するには、
zfを押すと最下行に:filterと表示され入力が促されるので、フィルタしたい文字列を入力して<enter>。フィルタ状態にあるディレクトリでは最下行のステータス欄右寄りにf-'hogehoge'などと表示される。フィルタを解除するにはもう一度zf <enter>。Mのコンボは、真ん中の列(つまりカレント)の表示モードを切り替える。デフォルトの表示はMfにあたるようだ。またMtは:metaコマンドで定義したメタデータを表示する。音楽ファイルや本のファイルを、ファイル名を変更せずに整理できて便利だ。 - ソート
ソートは
oのコンボ。操作キー ( 正/逆)並べる順番 ob/oBbasename (ファイル名順) oe/oEextension (拡張子名順) ot/oTtype (type順) oa/oAatime (atime順) oc/oCctime (ctime順) om/oMmtime (mtime順) os/oSsize (サイズ順) on/oNnatural (ディレクトリエントリ順) ozrandom (ランダム?) orreverse (逆順にする) ソート逆順は2文字目を大文字にするのだけれど、後から
orを押したって同じ結果になる。それはつまり、oBはoborで代用できるっていうことだから、小指がつっぱらかってしまってShiftを押したくないなぁというときなんかにいい。ソートした時にディレクトリを優先するか否か、あるいは大文字を優先するか否かの切り替えは以下のキーで行える。
操作キー 並べる順番 zdディレクトリを先に並べて表示する/しない zs大文字を先に並べて表示する/しない - ジャンプ
軽快な操作感の ranger といえど、カーソルキーだけでディレクトリをたどるのは大変だ。
:cdというコマンドモード(後述)が使えるが、cdと打つだけでそのままコマンドモード:cdのプロンプトになるようになっている。つまり、
cd/etc<enter>と打てば/etcへ移動するし、cd~<enter>とやればホームディレクトリへ、その位置でcd.config<enter>などと相対指定もできる。操作キー 機能 他のキー cd<dir>cd <dir> :cd <dir>ghホームディレクトリへジャンプ g//grgd/devge/etcgm/mediagM/mntgo/optgs/srvgu/usrgv/var''直前のディレクトリへジャンプ ``glカレントディレクトリのリンクを辿る gLカーソル対象ファイルのリンクを辿る fインクリメンタルサーチ また、主要なディレクトリへの移動には専用のキーが
gのコンボに設けられており、キーストローク数が少なくてすむ。直前のディレクトリへのジャンプは
''(シングルクォートキーを2回)。glとgLはシンボリックリンクのターゲットへジャンプする。地味に便利なこの機能はそれぞれ、glはcd $(readlink -f .)、gLはcd $(dirname $(readlink -f <file>))と同じことのように考えられる。インクリメンタルサーチは
fに続けて検索したい文字列を入力していくと、カレントのディレクトリ上に候補を見つけた時点でそこへジャンプする。 - ファイル名検索
カレントディレクトリ内でファイル名の検索ができる。
/を押すと、最下行のコンソールに:searchと入力された状態でコマンドモードになるので、続けて文字列を入力し<enter>で順方向に検索。nやNで再検索する。操作キー 機能 /ファイル検索(文字列入力) n順方向に検索 N逆方向に検索 - ブックマーク
ブックマークを扱うことができ、よく使うディレクトリを設定しておいて素早くジャンプできる。
操作キー 機能 ( <key>: 任意の1文字)m<key><key>にブックマークする'<key><key>のブックマークにジャンプum<key><key>のブクマを削除する扱い方は less と似た要領で、マークしたいディレクトリを表示してから
mと任意の1文字を押せばブックマーク登録できる。呼び出したい時は'の後に登録に使った1文字を入力する。ブックマークは
~/.config/ranger/bookmarksに保存されるから、rangerを終了しても憶えていてくれる。なお
'と`(バッククォート)は同じと man page に書かれてあるから、押しやすい方を使ったらいい。 - コピペと選択
キル&ヤンクまたはヤンク&ペーストなどとも言うが、膾炙した表現ではコピー&ペースト、すなわち「コピペ」だ。対象を切り取る(カット)かあるいは複写(コピー)を取り込んでバッファ(これもキルリングとかレジスタとも言うが)に保持しておき、必要な時に取り出して再利用することである。
ともかく、 ranger のそれも一般的な概念の範疇を出ずに多機能を実現しており、 vim のオペレーションになぞらえてあるから判りやすい。
まずはコピペコマンドのプリフィクスだが、
dのコンボがカット、yがコピー、pがペーストで、uはキャンセルとなる。基本的には
dd/yyで カット / コピー してバッファへ取り込んでおき、目的のディレクトリへ移動してからppでペーストする。 vim のように数値との組み合わせが可能で、例えば2dd(2yy)とするとカーソル位置から下へ2行分をdd(yy)することになる。またggやGと組み合わせて、dgg(ygg)でカーソルから最初の行まで、dG(yG)で同じく最後の行までをカット(コピー)できる。操作キー カット/コピー機能 他のキー dd対象をカット状態にする dr対象のカット状態をリセット yy対象をコピー状態にする yr対象のコピー状態をリセット udカット/コピー状態を全てキャンセル uy操作キー ペースト機能 ppペースト (同名ファイルがあれば別名でペースト) poペースト (同名ファイルに上書き) plシンボリックリンクを作成 pLシンボリックリンクを作成 (相対リンク) phlハードリンクファイルを作成 phtディレクトリツリーごとハードリンクファイルを作成 ranger のコピペアクションが起こるのはペーストを行ったとき。
ddを押した時点では何も起きないけれどppでペーストを指示した時にはじめて、もとのファイルのカットとカレントへの貼り付けが一連のアクションとして実行される、ということである。表の中で「対象の切り取り状態」などと表現してあるのはそのためだ。別の言い様なら、ddもyyもバッファへ取り込むのは同じだがカットフラグかコピーフラグの違いがある、とでも表現できるだろうか。いったん
dd(あるいはyy)を押してからやっぱりやめよう、となった場合は「カット状態(コピー状態)」をリセットしなければならない。その場合は再び対象のファイルの上で今度はdr(yr)を押す。あるいは、後述するマルチプル機能でも利用するudを押せば対象にかかわらずカット/コピー状態をキャンセルできる。ペーストについては、同名ファイルが存在するディレクトリで
ppすると、上書きを回避するようファイル名末尾に_や_1などと付け加えたものをペーストしてくれる。しかし上書きしちゃったほうがいい場合もあるだろう。そんなときはpoで上書きペーストしてやる。それと、普通のペーストだけでなく、シンボリックリンクファイルをペーストしてくれる機能がある。
plで絶対パスのリンクを、pLでは相対パスのリンクを作成してくれる。phlでハードリンクファイルをペーストすることもできる。ちょっと変わった便利機能として、ファイルを含むディレクトリをコピーしてから他のディレクトリへ行きphtを押すと、もとのディレクトリツリーを再現した中へハードリンクファイルを作成してくれる。リンク作成でちょっと注意したい点がある。
ddした後にplするともとのファイルはそのままにシンボリックリンクが作られるが、切り取り状態はキャンセルされていないので、それを忘れてうっかりppするとたいへんだ。ハードリンクのphlでも同様である。ここらへん、ちょっとわかりにくいところでもある。あやまってファイルをポトッと落とすまえにudでカット状態をキャンセルしておく。あるいは、リンク作成時にはあらかじめddでなくyyを使うようにしておくと、少なくとも紛失という自体は避けられるかも知れない。また、複数のファイルやディレクトリを選んでおいてから、カット / コピー することもできる。ファイルを選択するには
<space>を使い、vで選択状態が反転する(何も選択されていない場合は全てを選択することとなる)。V(大文字)を押すと選択モードになり、カーソル移動で選択範囲を広げる。再びV(またはjk以外のキー)で範囲を確定する。さながら vim のビジュアルモードのようだ。選択したファイルは黄色い太字になって視覚に訴える。操作キー 選択機能 <space>ファイル選択 vすべて選択 または 選択対象を反転 V範囲選択モード uv選択解除 <space>による選択はコピペだけでなく、他の機能とも複合的に使われる。なお、この方法では1つのディレクトリ内での複数ファイルのコピペ操作は可能だが、別々のディレクトリに存在するものを複数選択してコピペすることはできない。それには以下のマルチプルなコピペ機能を使う。
- コピペ(マルチプル)
dd/yyはその都度バッファの確保と取り込みを行うため、常にカレントディレクトリにのみ有効ということになる。つまり、他のディレクトリへ一時にまとめてペーストできるのはもとの1ディレクトリ内の分だけということだ。しかし
da/yaを使うと複数のディレクトリの内容を同時に選んでおき、目的のディレクトリにまとめて移動とか複写、といったトリッキーな使い方が可能になる。操作キー カット/コピー機能 他のキー daカット状態にしてバッファへ追加 dtカットモードに切り替え yaコピー状態にしてバッファへ追加 ytコピーモードに切り替え udカット/コピー状態を全てキャンセル uyda/yaはカット/コピー時にバッファを再確保せずに追加する機能だ。これは<space>で選択したものに対しても有効である。キャンセルはudで行う。「カットフラグかコピーフラグの違い」などという表現で前述したが、バッファに取り込まれたひとつひとつのファイルにそのようなフラグを立てているのではなく、ペーストの直前にどっちのモードが有効であるかによってカットかコピーかが決定されるようだ。
例えば、複数のファイルを
yaでコピー状態にしていきながら、途中でdaを押すとカット状態のモードに切り替わり、直後のppでは、それまでバッファに追加してきたものはすべてカットされるということになる。なお、dt/ytにはモードをそれぞれ カットモード/コピーモード へ変更する機能があてられている。最初はとっつきにくい機能だが上手く使うと、複数のディレクトリからランダムにファイルを集めたいときなどは実にスピーディに行えるので重宝する。 CLI だけではなかなかこうはいかないだろう。
ただし、うっかりやっちゃう度も高い機能ではあるので、慎重に操作したほうがいいだろう。マルチプルな操作の前には必ず
udキーを押してから開始する、といったことがミスの予防につながると思う。 - ファイル名のコピペ
xselコマンドが使える環境では以下のコマンドが有効になり、ファイル名のコピペができるようになる。操作キー 機能 ypフルパス名をコピーする ynファイル名をコピーする ydディレクトリ名をコピーする あらかじめ名前をコピーしたいファイルの上で
ypなどとやって、コンソールでShift+Insertなどでペーストしたりする。 - リネーム / ディレクトリ作成 / 削除
検索やフィルタなどもそうだったが、これらのコマンドは最下行に表示されるコンソールでコマンドを実行する。コマンド入力までをキーコマンドにしてあり、コンソール入力に続けて
<enter>で実行される(コマンドとコンソールについてはその項を参照のこと)。操作キー コマンド ( _: カーソル)機能 他のキー a:rename <name>_.<ext>リネーム / 拡張子の前にカーソル A:rename <name>.<ext>_リネーム / ファイル名末尾にカーソル I:rename _<name>.<ext>リネーム / ファイル名先頭にカーソル cw:renameリネーム / ファイル名なし <f7>:mkdirディレクトリ作成 dD:delete削除 <del>/<f8>リネームコマンドの
a、A、I、cwは、 vim の編集機能に意味合いを似せている。削除は、対象が複数の場合は確認してくる。
- ファイルアクセス権の編集(chmod)
chmod は数値指定とシンボル指定の両タイプが扱える。
数値指定は数値の後に
=でいい。つまり、コマンドラインでchmod 755 <file>とやっている事は、 変更したいファイルにカーソルをあわせて755=と入力するだけででいい。非常に楽だ。スペースキーで複数選択してやってもいい。操作キー 機能 <num>=chmod 数値指定 シンボル指定は、付与が
+で削除が-、何れかを最初に押して続くコンボで権限の内容を指定する。chmodコマンドの引数で使うシンボルと同じなので直感的かと思う。このキーコマンドの数は48あり、そのまま表にすると分かりにくいので下記のように表してみた。
キーA 他のキー +u (所有者) に権限付与 +u+gg (グループ) に権限付与 +oo (他のユーザ) に権限付与 +aa (全て) に権限付与 -u (所有者) から権限削除 -u-gg (グループ) から権限削除 -oo (他のユーザ) から権限削除 -aa (全て) から権限削除 キーB r読み込み権限 w書き込み権限 x実行権限 X何れか実行権限ありなら追加/削除 sセットID tスティッキービット 上の表のキーAに続けて下の表のキーBを組み合わせて実行する。例えば、所有者に実行権限を付与するにはコマンドラインで
chmod u+x <file>とやるけれど、 ranger では+ux(あるいは+x)とする。chmod g+xなら+gx、chmod o-xなら-oxという具合。もっとも、こんな表を憶えなくとも
+か-を押したところで画面下にガイドがポップアップするから、それをみながら操作すればいい。 - ディレクトリ使用量の表示
操作キー 機能 dcディレクトリ内の総サイズを算出 duduコマンドdcは対象ディレクトリの総量を算出して表示する。これは<space>で複数のディレクトリを選択して行っても機能する。また、ディレクトリ内の使用量を調べたい時に使う
duコマンドだが、ranger ではその名の通りにduと入力すればカレントディレクトリ内の各ディレクトリの使用量をページャで表示してくれる。 - タグ
ファイルにタグ付けできる。
タグは全て1文字で、ファイル名の左に表示される。目印にしてもいいし、マクロで
%tとして使ったりもする。操作キー 機能 tタグ *をつける/はずす"<tag>タグ <tag>をつける/はずす (<tag>: 任意の1文字)utタグをはずす tでデフォルトのタグ(*)をつける。任意のタグをつけるには"につづけて任意の1文字を入力する。例えば"mとすればmというタグがファイル名の左に表示される。何れも、同じタグのついたファイルではタグをはずし、そうでなければタグ付けする。
だから、複数選択してからタグ付けキーを押すと、同名タグは反転することになる。
同じディレクトリ内のタグ設定されたいくつかのファイルを全て解除したいときは、
vutとすればいい。なお、タグ情報は
~/.config/ranger/taggedに保存されており、 ranger を終了しても憶えていてくれる。 - サブシェルとコマンド
操作キー 機能 S現在のディレクトリでサブシェルを起動 :コマンド Sを押すと表示中のディレクトリでサブシェルを起動してくれる。コマンドラインで処理したい時に使う。exitコマンドで戻る。サブシェルでは ranger をさらに起動でき、またさらにサブシェルを起動してまた ranger を、というようにネストして実行可能だ。 ranger はディレクトリ移動が便利なものだからいくつもネストしてしまって、気付いたら終了させるまで延々と exit … なんてことになる。これを避けるための工夫があるので、後述する。
また、コロン
:(セミコロン;でもいい)で vim のようにコマンドが使える。例えば:q <enter>でタブを閉じるなど。「コマンドとコンソール」の項を参照のこと。 - タスクビューとログ表示
操作キー 機能 wタスクビュー Wログ表示 タスクビューではrangerのバックグラウンドタスクが一覧され、タスクの停止などが行える。タスクビューの項を参照のこと。
ログ画面では、画面最下行に現れたメッセージを一覧でみられる。
- ヘルプ
?(あるいは<f1>)を押すと最下行にヘルプメニューが表示される。操作キー 機能 他のキー ?mマニュアル (man page) を表示 <f1>m?kキーバインディング一覧を表示 <f1>k?cコマンド一覧を表示 <f1>c?sセッティング内容を表示 <f1>sgRRANGERDIR (rangerがあるところ)へジャンプする g?ドキュメントディレクトリ( /usr/share/doc/ranger)へジャンプするヘルプ画面の操作はページャの項を参照のこと。
g?でrangerのドキュメントを収めたディレクトリへジャンプしてくれる。ここにはちょっとこった使い方のヒントがあったり、お宝箱のようだ。
コマンドとコンソール
ブラウザで : を押すと vim のようにコマンドモードになり、最下行のコマンドコンソールに入力が促される。
コンソール入力中のキーバインドは以下の通り、 readline ライクなもの。
| 操作キー | 機能 | 他のキー |
|---|---|---|
C-f |
カーソルを右へ | <right> |
C-b |
カーソルを左へ | <left> |
C-n |
履歴を辿る | <down> |
C-p |
履歴を遡る | <up> |
C-a |
カーソルを行頭へ | |
C-e |
カーソルを行末へ | |
C-d |
Delete(カーソル位置の文字を削除) | <delete> |
C-h |
Backspace(カーソル直前の文字を削除) | <backspace> |
C-m |
実行 | <enter> |
C-c |
コンソールを閉じる |
例えば :q <enter> でタブ終了、 :help <enter> でヘルプといった具合。
キーバインドされていない機能もコマンドモードで呼び出せる。
コマンド一覧は ?c で見ることができる。
なお、セミコロン ; でも コロン : 同様になる。 US-ASCII キーボードなんかで Shift が面倒だからリマップ、という必要はない。
ページャ
タスクビュー
ブラウザで w を押すとタスクビュー画面になる。
ranger で行うバックグラウンドタスクがこの画面に一覧表示される。
| 操作キー | 機能 | 他のキー |
|---|---|---|
j |
カーソルを1行下 | <Down> |
k |
カーソルを1行上 | <Up> |
C-f |
下へページスクロール | f / <space> |
C-b |
上へページスクロール | b |
C-l |
画面を再描画 | |
J |
タスクを1行下げる | <Pagedown> |
K |
タスクを1行上げる | <Pageup> |
dd |
タスクを中止する | <delete> |
g |
最初へ | <home> |
G |
最後へ | <end> |
q |
タスクビューを終了 | w / <Esc> |
J と K でタスクの順番を変えられる。また dd でそのタスクを終了させる。
大きいサイズのファイルコピーをとりやめたいなどは、ここで行う。
rangerのカスタマイズ
カスタマイズの準備
カスタマイズは ~/.config/ranger 下に置いた設定ファイルに書いて行う。ゼロから書くのは大変なので、起動オプションの --copy-config=all でデフォルト設定されたファイルを作成し、これを書き換えるようにする。
$ ranger --copy-config=all creating: /home/jeneolla/.config/ranger/rifle.conf creating: /home/jeneolla/.config/ranger/commands.py creating: /home/jeneolla/.config/ranger/commands_full.py creating: /home/jeneolla/.config/ranger/rc.conf creating: /home/jeneolla/.config/ranger/scope.sh
rangerの設定は rc.conf に書く。また、ファイルランチャーとしての機能は rifle.conf に設定する。
scope.sh は ranger のプレビュー機能を実現するシェルスクリプトで、これがあれば後は必要なアプリをインストールするだけでプレビュー出来るようになる(後述)。
なお、ファイルが既に存在する場合は上書きをしない。試しにやってみた(以下は rc.conf のみ指定してみたもの)。
$ ranger --copy-config=rc already exists: /home/jeneolla/.config/ranger/rc.conf
プレビュー
テキストファイルについてはそのままでもプレビューされるようになっているでしょう。これに加えて、必要な外部コマンドを揃えれば書庫ファイルやPDFファイル、メディアファイルの情報が右のカラムに表示されるようになる。また、テキストのソースコードを色付きで見やすくプレビューすることも可能となる。
- ファイル情報のプレビュー
以下が各種ファイルの情報プレビューに利用できる外部コマンド。
コマンド 機能 highlight ソースコードを色分け表示 lynx / elinks htmlプレビュー atool 圧縮書庫管理 pdftotext PDFプレビュー mediainfo 動画やオーディオファイルの情報 atool は圧縮書庫の管理ツールで、圧縮形式それぞれのネイティブツールを必要とする。ドキュメントでは以下のアーカイブツールのインストールを求めている。
bzip2/cpio/gzip/lha/lzma/lzop/p7zip/tar/ace/rar/zipなので、これらもインストールしてしまう。
Arch Linux では以下をインストール。
$ sudo pacman -S highlight lynx elinks poppler mediainfo $ sudo pacman -S atool bzip2 cpio gzip lhasa xz lzop p7zip tar unace unrar zip unzip
Ubuntuでのインストールは以下。16.04で試した。
$ sudo apt install highlight lynx elinks poppler-utils mediainfo $ sudo apt install atool bzip2 cpio gzip lhasa lzma lzop p7zip tar unace unrar zip unzip
これでソースコードは色付きで、書庫やPDFなどは中身のリストや情報がプレビューされるようになる。
ほかに、transmission-cli があれば torrent ファイルをプレビューできるようになるようだ。
- 画像のプレビュー
画像をプレビューするには w3m が必要となる。
まずはインストール。
$ sudo pacman -S w3m
$ sudo apt install w3m-img
次に
~/.config/ranger/rc.confをエディタで開いてset preview_imagesがfalseになっているところをtrueにする。# Use one of the supported image preview protocols set preview_images true
また、枠線を表示しない設定だとプレビュー画像の一部が縞になってうまく表示されないので、枠線を表示するように設定する。
set draw_bordersのfalseをtrueにする。# Draw borders around columns? set draw_borders true
これで画像ファイルのプレビュー表示が可能になったはず。
なお、わたしのところでは枠線表示で不具合を回避できているけれど、現状ではまだいまひとつ不具合が発生するケースがあるようで、端末エミュレータを透過表示に設定しているとうまく表示されないとか、あるいは tmux では表示が乱れやすい、 GNU Screen なら大丈夫だったよ、などといったことが言われているもよう。
- 動画のプレビュー
mediainfo によって動画の情報を表示するようにしたけれど、 ffmpegthumbnailer をインストールして
scope.shに手を加えるとプレビューに動画のサムネールを表示できるようになる。まずは ffmpegthumbnailer (長い名前)をインストールする。
## Ubuntu $ sudo pacman -S ffmpegthumbnailer
## Arch Linux $ sudo apt install ffmpegthumbnailer
次に、
~/.config/ranger/scope.shを開くと、# Image preview for videos, disabled by default: # video/*) # ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;;
となっているところがある。コメントの下の2行をアンコメントしてあげる。
# Image preview for videos, disabled by default: video/*) ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;;これで動画のサムネールがプレビューされるようになる。
動画ファイルにカーソルをのせると、ちょっと考えてから画像を表示してくれる。サムネールはキャッシュされるので、2回めからは即座に表示されるようになる。
※ ranger Ver.1.7.1 で確認。
カラーテーマを変更する
ranger にはあらかじめ4種類のカラーテーマが用意されてあって、設定ファイルに記述して取り替える。すなわち、 ~/.config/ranger/rc.conf の colorscheme の値を default 、 jungle 、 snow 、 solarized の何れかに書き換える。
以下それらのスクリーンショッツ(但私は端末エミュレータの配色を gruvbox にしてるんでちょっと色褪せた感じになっているとはおもうけれど)。
ranger で fasd を使う
ranger のカレントディレクトリ変更はカーソル移動、履歴/ブックマークジャンプ( H / L / '' / '<key> )、あるいは :cd コマンドで行う。それらは cd コマンドの代替かつ延長的機能として必要十分と考えられるけれど、 fasd のようなジャンプツールをお使いの向きには ranger でのこの事がちょっと物足りないかもしれない。
fasd は frecency スコアの履歴からファイルやディレクトリの候補を選ぶタイプのオートジャンプツール。 frecency っていうのは frequency と recency にちなんだ造語で、その名の通り訪問回数や新しさなどによってスコアをつけながら履歴をとるアルゴリズムのことらしい。
まあそういう細かいことはともかく、fasd でのディレクトリジャンプは非常に有用なもんで、素早い、簡単、直感的という3つが揃ったありがたい実装なのだ。そうなもんだから依存度も高いことで、だったらこれを ranger でも使えたらさぞかし便利だろうかと、私も思う。
ranger には Python スクリプトでコマンドを追加する機能があって、ユーザによる拡張がワリと容易に実現できる。
コマンドは ~/.config/ranger/commands.py に記述して追加する。うえでさっき --copy-config で作成した commands.py を覗いてみると、例としてコマンドひとつ分の class がテンプレートのごとく書かれてあって記述要領もそこに注釈されている。同様にその後ろへ class を追記していけばいい。
さて、 GitHub の ranger Wiki には 追加のコマンド集(パイソンスクリプツ) が載っかってて、その中に fasd の利用を実現するのも収載されてある。その中から以下に fasd の分を抜粋させてもらった。
# fasd command with ranger # ranger Wiki : https://github.com/ranger/ranger/wiki/Commands # fasd : https://github.com/clvv/fasd class fasd(Command): """ :fasd Jump to directory using fasd """ def execute(self): import subprocess arg = self.rest(1) if arg: directory = subprocess.check_output(["fasd", "-d"]+arg.split(), universal_newlines=True).strip() self.fm.cd(directory)
これを commands.py に追記して、ranger を起動して、
:fasd doc
などと入力して Enter 。いつもコマンドラインで使っている fasd のディレクトリジャンプが ranger コンソールでできる。
しかしコロンとスペース合わせて6文字も入力するのはまどろっこしいので、キーバインドに手を加えてもっと楽にしたい。私は、どうも e が空いてるようなので ~/.config/ranger/rc.conf へ以下の一行を追記した
map e console fasd%space
これで e を打つとコンソールが :fasd コマンドでプロンプトになる(これは大変便利だと思う!)。
ranger のちょっとした不都合を解消する
rangerの多重起動を避ける
ranger はディレクトリの移動が便利なのでつい、サブシェルを起動した状態でさらに ranger を実行し、またさらにサブシェルでまたまた、という風にやってしまう事が多い。そうやってネストしていった後では何度も exit して戻る羽目に陥る。それはそれで大変なので、そうならないような工夫をする。
ranger() { [ -n "$RANGER_LEVEL" ] && exit || command ranger "$@"; }
このファンクションは ranger を起動すると定義される $RANGER_LEVEL をみて、ネストしそうになったら exit するに止めてネストを避けるもの(参考: ArchWiki )。
これで ranger はネストしなくなるものの、他のコマンドについてはその限りでないから、以下のようにしてプロンプトに ranger 下のサブシェルである旨を表示し、注意を促すようにする。
[ -n "$RANGER_LEVEL" ] && PS1="(RANGER) $PS1"
これは g? でジャンプした先 /usr/share/doc/ranger の examples ディレクトリに置いてある bash_subshell_notice.sh を参考にした。ここにはほかにも便利なものがあるので活用したい。
less の設定と不都合回避
ranger は一部機能を less に依存しているからその使用環境いかんによっては往々にしてうまくないことになる。ここでは less が参照する環境変数 LESS について触れる。
例えば ranger の du コマンドの結果表示が一瞬で終わってしまって見られず、役に立たないといったことが起こりうる。設定フレームワークの Prezto を利用中の zsh 上でこの不都合があった。それは zprofile 中に書かれた LESS 定義に -F オプションが含まれていたことによる。
lessの -F オプションは表示結果が1ページに収まるときに less 自身を終了させる。表示結果が1ページを超えないならば ranger 上ではページャコマンド終了と同時にブラウザ画面に戻るから、表示が一瞬で終わってしまうことになる。
また -X オプションは画面クリアを行わないようにするが、これが定義されていると ranger では前の表示内容が残ってしまって、やはりよろしくない(稀に役立つこともあるけど仕様外のことと思う)。
これらのオプションをセットすることが不具合というのではないけれど、 ranger を使ううえでは困ってしまう。
さしあたって、不都合なオプションを一時的に無効にするのがよろしいかと思う。 less の各オプションを無効化するには + 記号を足せばいいから、 LESS="$LESS -+F -+X" ranger といったようなコマンドで ranger を起動すればいい。
シェルのrcファイルへまとめて記述
また、私は ranger と打つのはまどろっこしい気がして rng と短くしたいと思った。
以上の事をまとめて以下のようにした。
ranger() { [ -n "$RANGER_LEVEL" ] && exit || LESS="$LESS -+F -+X" command ranger "$@"; } [ -n "$RANGER_LEVEL" ] && PS1="(RANGER) $PS1" alias rng='ranger'
bashrc や zshrc などに追記しておく。
Sources and Revisions
- Official
- Community
- Other references
- Revisions
- コマンドモードとchmodやduなどの説明を追加。
- インストールを少し詳細に
- インストールを詳細に / 不都合解消を書き換えた(bashで動かなかった…)
- 追加コマンドfasd
- コピペ機能改訂、マルチプルコピペ追記など
