rangerの設定 rifle.confの書き方
rangerはTUIファイラ。
rifle.conf
rifle
はランチャ。どのファイルをどの外部アプリで起動するかを決定する。rifle.conf
はrifle
設定ファイル。
構文
~/.config/ranger/rifle.conf
の先頭コメントを参照。
# Syntax: # <condition1> , <condition2> , ... = command
=
より前は条件。=
より後は実行コマンド。条件に一致したときにコマンドを実行する。
これに従って以下を読み取ってみる。
mime ^text, label editor = ${VISUAL:-${EDITOR}} -- "$@"
条件 | 意味 |
---|---|
mime ^text |
MIME(ファイル種別)がtext で始まるファイルのとき(正規表現で^ は行頭を表す) |
label editor |
rangerコマンドE で実行したとき |
コマンド | 意味 |
---|---|
${VISUAL:-${EDITOR}} -- "$@" |
Shellスクリプト。変数${VISUAL} (なければ${EDITOR} )に引数を渡す |
引数
コマンドはrangerから引数を受け取れる。すなわち選択ファイルのパスである。
シンタックス | 意味 |
---|---|
$1 〜$9 |
n番目に選択したファイルのフルパス |
$@ |
全ファイルのフルパス |
条件
表記 | 概要 |
---|---|
! |
以下条件式の先頭に付与することで否定式にする |
match <regexp> |
ファイルパスが指定した正規表現に一致する |
ext <regexp> |
拡張子が指定した正規表現に一致する |
mime <regexp> |
MIMEが指定した正規表現に一致する |
name <regexp> |
ファイル名basename が指定した正規表現に一致する |
path <regexp> |
絶対パスが指定した正規表現に一致する |
has <program> |
指定したプログラムが存在する($PATH配下。type コマンド?) |
env <variable> |
指定した環境変数が存在する(type コマンド?) |
file |
ファイルである |
directory |
ディレクトリである |
number <n> |
コマンドの数(?) |
terminal |
端末である(stdin , stderr , stdout が接続されている) |
X |
Xorgが実行されている($DISPLAY が空でない) |
副作用がある疑似条件は以下。
表記 | 概要 |
---|---|
flag <flag> |
プログラムの実行方法を変更する( |
label <label> |
コマンドにラベルを割当る。:open_with <label> , refile -p <label> で実行可能 |
else |
常に真(?) |
概要 | |
---|---|
f |
バックグラウンド実行する。setsid $command >& /dev/null & |
r |
root権限で実行する。sudo $command |
t |
新しい端末で実行する。$TERMCMD -e $command ($TERMCMD 未定義時は$TERM ) |
c |
複数ファイルをマークしても現在のファイルのみ実行する(※rangerでrifle使用時のみ使用可) |
~/.config/ranger/rifle.conf
に定義されていた<label>
はeditor
などがある。
shell変数 | ranger設定値 | bash起動時点 | |
---|---|---|---|
editor |
$EDITOR |
vim |
(none) |
pager |
$PAGER |
less |
(none) |
wallpaper |
(none) | (none) | (none) |
各
確認方法は以下。ranger上のコンソール(#
:shell -p
)とターミナル上で以下を実行する。
echo -e "${VISUAL}\n${EDITOR}\nsensible-editor" echo "${PAGER}" echo "${WALLPAPER}" echo "${VIEWER}"
ついでにtype
コマンドで確かめてみた。
$ type editor
editor は /usr/bin/editor です
/usr/bin/editor
は/etc/alternatives/editor
のリンクらしい。
$ ls -l /usr/bin/editor | grep 'editor' lrwxrwxrwx 1 root root 24 11月 13 22:04 /usr/bin/editor -> /etc/alternatives/editor
/etc/alternatives/editor
は/bin/nano
のリンク。
$ ls -l /etc/alternatives/editor | grep 'editor' lrwxrwxrwx 1 root root 9 11月 13 22:04 /etc/alternatives/editor -> /bin/nano
/bin/nano
は実行ファイル。TUI(CUI)テキストエディタ。
$ ls -l /bin/nano -rwxr-xr-x 1 root root 181780 1月 11 2017 /bin/nano
だがrangerではvimで起動する。よってrangerが使っているのはrifle.confで定義されているように${EDITOR}
である。alternativesの定義ではない。そして${EDITOR}
にvim
が設定されている。これはrangerが起動した後の処理でされている。どこかは特定できなかった。おそらく設定ファイルでは変更不可。
できれば自分でもラベルを新設したかった。値の設定も。
コマンド
コマンド | 概要 |
---|---|
ask |
:open_with コマンドが開く。起動アプリを指定して開く。 |
(他) | shellで実行できるコマンド |
条件, 条件, ... = コマンド
~/.config/ranger/rifle.conf
mime ^text, label editor = vim "$@"
たとえば上記なら次の意味となる。「MIMEがtext
から始まりrangerにてE
キーで起動したとき、vim "選択ファイルパス1 選択ファイルパス2 ..."
を実行する」
引数の項で書いたとおり$1
, $@
などが使える。これはrangerで選択したファイルパスである。また、以下の変数もranger内で定義されるらしい。
変数 | 値 |
---|---|
${EDITOR} |
vim |
${PAGER} |
less |
コマンド部分をもう少し複雑にしたいときもある。やはりshellの技術を使う。
方法 | 記述 |
---|---|
そのまま | ${EDITOR} "$1" |
外部ファイル化 | bash ~/a.sh "$@" |
複数行スクリプトを文字列で | bash -c "echo A && ~/a.sh' '$1" |
${VISUAL:-${EDITOR}}
${VISUAL:-${EDITOR}} -- "$@"
とは何か。
rifle.conf内に${VISUAL:-${EDITOR}}
の記述がある。これはshell構文の変数展開。変数${VISUAL}
を使う。なければ${EDITOR}
を使う。
Linuxの慣習? として変数VISUAL
, EDITOR
などにvim
などのテキストエディタコマンド名を入れることがある。つまりテキストエディタにファイルパスを渡して実行する。
ちなみにLinuxの中でもDebianはEDITOR
等が空である。代わりにsensible-editor
コマンドでその役割をするらしい。よって${VISUAL:-${EDITOR:-sensible-editor}}
のように変更するほうが動作する環境が増える。sensible-editor
で起動するエディタを決定するにはselect-editor
コマンドを使う。
-- "$@"
rifle.conf内で-- "$@"
という表記をよくみる。この--
が謎。
# mime ^text, label editor = ${VISUAL:-$EDITOR} -- "$@"
--
がないものもある。
ext pdf, has llpp, X, flag f = llpp "$@"
set --
というのがあり、空白文字を分割して位置引数としてセットできるらしい。それのことか?
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12
- python 2.7.13, pip 9.0.1
- python3 3.5.3, pip3 9.0.1
- ranger 1.9.2
$ uname -a Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux