rangerのインストール方法と初期設定
ターミナル上で動作するファイルマネージャ。
初期設定が必要だがファイルマネージャ機能以外にもグラフィカルなディレクトリ移動も搭載している。
また選択しているファイルに応じてプレビューする機能なども搭載。
インストール方法
ranger
そのものと、依存パッケージをインストールと初期設定
sudo apt install -y ranger w3m lynx highlight atool mediainfo xpdf caca-utils
ranger --copy-config=all
※pipパッケージとしても提供されているので管理者でない場合はpip
コマンドでインストール。
pip install ranger-fm
ranger --copy-config=all
ranger
コマンドでファイルマネージャ画面を起動することができる。
終了はq
キーを押下することで可能。
ディレクトリ移動機能
~/.bashrc
に以下を書き込むことでCtrl
+ o
でranger
を起動し、更にq
キーで終了時に現在表示しているディレクトリに自動的に移動することができる。
また、sfiht + s
でranger
を起動した状態でシェルを起動(サブシェル)することができる($ (in ranger)
と表示される)。
# ranger settings
# Compatible with ranger 1.5.3 through 1.7.*
#
# Change the prompt when you open a shell from inside ranger
#
# Add this line to your .bashrc for it to work.
[ -n "$RANGER_LEVEL" ] && PS1="$PS1"'(in ranger) '
# ranger_cd
ranger_cd() {
temp_file="$(mktemp -t "ranger_cd.XXXXXXXXXX")"
ranger --choosedir="$temp_file" -- "${@:-$PWD}"
if chosen_dir="$(cat -- "$temp_file")" && [ -n "$chosen_dir" ] && [ "$chosen_dir" != "$PWD" ]; then
cd -- "$chosen_dir"
fi
rm -f -- "$temp_file"
}
# This binds Ctrl-O to ranger_cd:
if which ranger >& /dev/null && [[ -t 1 ]]; then
bind '"\C-o":"ranger_cd\C-m"'
fi
pluginの導入
以下で公式で展開されているpluginを導入できる。
git clone https://github.com/ranger/ranger.git
mkdir ~/.config/ranger/plugins
cp ./ranger/examples/plugin_file_filter.py ~/.config/ranger/plugins
cp ./ranger/examples/plugin_hello_world.py ~/.config/ranger/plugins
cp -r ./ranger/ranger/colorschemes ~/.config/ranger
カスタマイズ
以下を実行することで見栄えを変更することができる(自分用)。
sed -i 's/set show_hidden false/set show_hidden true/' ~/.config/ranger/rc.conf
sed -i 's/set draw_borders none/set draw_borders both/' ~/.config/ranger/rc.conf
sed -i 's/set preview_directories true/set preview_directories false/' ~/.config/ranger/rc.conf
sed -i 's/set line_numbers false/set line_numbers true/' ~/.config/ranger/rc.conf
sed -i 's/set dirname_in_tabs false/set dirname_in_tabs true/' ~/.config/ranger/rc.conf
sed -i 's/set one_indexed false/set one_indexed true/' ~/.config/ranger/rc.conf
# sed -i 's/set colorscheme default/set colorscheme solarized/' ~/.config/ranger/rc.conf
以下のように見栄えが変わる。
- 隠しファイルを表示
- 境界線の表示
- サブディレクトリのプレビューを非表示
- ファイルに行番号を表示
- タブ表示時にタブに現在のディレクトリを表示
- 行番号を1から開始
- コメントアウト:
ranger
のテーマをsolarized
に変更。
他にdefault
,jungle
,snow
が選択可能
2023/08/03現在、solarized
はエラーが出て使えなくなっている模様。
他にも設定できる項目が非常に多いので詳細についてはreference
に記載しているリンクを参照。
コマンドの追加
~/.config/ranger/commands.py
に追記することでranger起動時に
使用可能なコマンドを追加することができる。
圧縮コマンドの追加
以下で圧縮コマンドの実装方法が展開されている。
追加用ヒアドキュメント
cat >> ~/.config/ranger/commands.py << EOF
from ranger.core.loader import CommandLoader
class compress(Command):
def execute(self):
""" Compress marked files to current directory """
cwd = self.fm.thisdir
marked_files = cwd.get_selection()
if not marked_files:
return
def refresh(_):
cwd = self.fm.get_directory(original_path)
cwd.load_content()
original_path = cwd.path
parts = self.line.split()
au_flags = parts[1:]
descr = "compressing files in: " + os.path.basename(parts[1])
obj = CommandLoader(args=['apack'] + au_flags + \
[os.path.relpath(f.path, cwd.path) for f in marked_files], descr=descr, read=True)
obj.signal_bind('after', refresh)
self.fm.loader.add(obj)
def tab(self, tabnum):
""" Complete with current folder name """
extension = ['.zip', '.tar.gz', '.rar', '.7z']
return ['compress ' + os.path.basename(self.fm.thisdir.path) + ext for ext in extension]
EOF
例えば圧縮したいファイルを選択した状態で:
-> compress hoge.zip
のように入力すれば
hoge.zip
で保存される。
fzfの統合
設定後に:
-> fzf_select
で現在のディレクトリ配下のファイルを再帰的に検索することができる。
fzfのインストール方法についてはこちらを参照。
追加用ヒアドキュメント
cat >> ~/.config/ranger/commands.py << EOF
class fzf_select(Command):
"""
:fzf_select
Find a file using fzf.
With a prefix argument to select only directories.
See: https://github.com/junegunn/fzf
"""
def execute(self):
import subprocess
import os
from ranger.ext.get_executables import get_executables
if 'fzf' not in get_executables():
self.fm.notify('Could not find fzf in the PATH.', bad=True)
return
fd = None
if 'fdfind' in get_executables():
fd = 'fdfind'
elif 'fd' in get_executables():
fd = 'fd'
if fd is not None:
hidden = ('--hidden' if self.fm.settings.show_hidden else '')
exclude = "--no-ignore-vcs --exclude '.git' --exclude '*.py[co]' --exclude '__pycache__'"
only_directories = ('--type directory' if self.quantifier else '')
fzf_default_command = '{} --follow {} {} {} --color=always'.format(
fd, hidden, exclude, only_directories
)
else:
hidden = ('-false' if self.fm.settings.show_hidden else r"-path '*/\.*' -prune")
exclude = r"\( -name '\.git' -o -name '*.py[co]' -o -fstype 'dev' -o -fstype 'proc' \) -prune"
only_directories = ('-type d' if self.quantifier else '')
fzf_default_command = 'find -L . -mindepth 1 {} -o {} -o {} -print | cut -b3-'.format(
hidden, exclude, only_directories
)
env = os.environ.copy()
env['FZF_DEFAULT_COMMAND'] = fzf_default_command
env['FZF_DEFAULT_OPTS'] = '--height=40% --layout=reverse --ansi --preview="{}"'.format('''
(
batcat --color=always {} ||
bat --color=always {} ||
cat {} ||
tree -ahpCL 3 -I '.git' -I '*.py[co]' -I '__pycache__' {}
) 2>/dev/null | head -n 100
''')
fzf = self.fm.execute_command('fzf --no-multi', env=env,
universal_newlines=True, stdout=subprocess.PIPE)
stdout, _ = fzf.communicate()
if fzf.returncode == 0:
selected = os.path.abspath(stdout.strip())
if os.path.isdir(selected):
self.fm.cd(selected)
else:
self.fm.select_file(selected)
EOF
以下でキーバインドも追加
echo 'map <A-f> fzf_select' >> ~/.config/ranger/rc.conf
Alt
+ f
で起動可能
よく使うコマンド
アクション | コマンド | 備考 |
---|---|---|
ファイルのリネーム | ファイルを選択した状態でF2 or a
|
リネーム後はEnterで確定 |
実行権限を付与 | ファイルを選択した状態で+ -> x
|
|
新規ファイルの作成 |
: -> edit
|
|
圧縮ファイルの解凍 | 圧縮ファイルを選択した状態で1 (数字の1) -> l (アルファベットのL) |
zip, tar.gzを解凍できることを確認 |
miller かmultipane の切り替え |
~ |
multipane は各タブを水平分割開くことができる |
新規タブを開く, 作成したタブに移動 |
alt + 数字
|
アクティブなタブを閉じたい場合はq を押下 |
Discussion