「Ranger」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
1行目: 1行目:
 
{{DISPLAYTITLE:ranger}}
 
{{DISPLAYTITLE:ranger}}
 
[[Category:ファイルマネージャ]]
 
[[Category:ファイルマネージャ]]
[[ar:ranger]]
+
[[ar:Ranger]]
[[en:ranger]]
+
[[en:Ranger]]
 
[[fr:ranger]]
 
[[fr:ranger]]
[[zh-CN:ranger]]
+
[[zh-CN:Ranger]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|Midnight Commander}}
 
{{Related|Midnight Commander}}
15行目: 15行目:
 
== インストール ==
 
== インストール ==
   
{{Pkg|ranger}} は[[公式リポジトリ]]から[[インストール]]できます。開発版を使いたい場合は [[AUR]] から {{AUR|ranger-git}} をインストールしてください。{{ic|scope.sh}} によるファイルプレビューの使用など、任意の依存パッケージは ranger-git の [https://aur.archlinux.org/packages/ra/ranger-git/PKGBUILD PKGBUILD] に説明があります。
+
{{Pkg|ranger}} は[[公式リポジトリ]]から[[インストール]]できます。開発版を使いたい場合は [[AUR]] から {{AUR|ranger-git}} をインストールしてください。{{ic|scope.sh}} によるファイルプレビューの使用など、任意の依存パッケージは ranger-git の [https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=ranger-git PKGBUILD] に説明があります。
   
 
== 使用方法 ==
 
== 使用方法 ==
46行目: 46行目:
 
* {{ic|rifle.conf}} - 特定のファイルを起動した時に使われるアプリケーション
 
* {{ic|rifle.conf}} - 特定のファイルを起動した時に使われるアプリケーション
   
  +
デフォルトファイルもロードされるので {{ic|rc.conf}} にはデフォルトファイルとの差異部分だけを記述します。{{ic|commands.py}} には、ファイル全体をインクルードしない場合、一番最初に以下の行を記述します:
{{ic|rc.conf}} only needs to include changes from the default file as both are loaded. For {{ic|commands.py}}, if you do not include the whole file, put this line at the top:
 
   
 
from ranger.api.commands import *
 
from ranger.api.commands import *
   
To add a keybind that moves files to a created directory {{ic|~/.Trash/}} with {{ic|DD}}, add to {{ic|~/.config/ranger/rc.conf}}:
+
作成したディレクトリ {{ic|~/.Trash/}} {{ic|DD}} でファイルを移動するキーバインドを追加するには、{{ic|~/.config/ranger/rc.conf}} に以下を追記します:
   
map DD shell mv -t /home/''user''/.Trash %s
+
map DD shell mv -t /home/${USER}/.Trash %s
   
See [http://ranger.nongnu.org/ranger.1.html man ranger] for general configuration.
+
設定に関する詳細は [http://ranger.nongnu.org/ranger.1.html man ranger] を見て下さい。
   
 
=== コマンドの定義 ===
 
=== コマンドの定義 ===
75行目: 75行目:
 
{{Warning|{{ic|[^.]}} is an essential part of the above command. Without it, all files and directories of the form {{ic|..*}} will be deleted, wiping out everything in your home directory.}}
 
{{Warning|{{ic|[^.]}} is an essential part of the above command. Without it, all files and directories of the form {{ic|..*}} will be deleted, wiping out everything in your home directory.}}
   
=== Colorscheme ===
+
=== カラースキーム ===
   
{{ic|.config/ranger/colorschemes}} に {{ic|colorschemes}} サブフォルダを作成してください:
+
{{ic|~/.config/ranger}} に {{ic|colorschemes}} サブフォルダを作成してください:
   
mkdir .config/ranger/colorschemes
+
$ mkdir ~/.config/ranger/colorschemes
   
then copy your new {{ic|''newscheme''.py}} into that folder. Alter the default color scheme in the {{ic|.config/ranger/rc.conf}} file:
+
それから新しい {{ic|''newscheme''.py}} を上記のフォルダにコピーします。{{ic|~/.config/ranger/rc.conf}} ファイルからデフォルトカラースキームを変更してください:
   
 
set colorscheme ''newscheme''
 
set colorscheme ''newscheme''
87行目: 87行目:
 
=== ファイルの関連付け ===
 
=== ファイルの関連付け ===
   
  +
{{ic|~/.config/ranger/rifle.conf}} を編集してください。先の行が早く実行されるので、ファイルの先頭に追記するようにしてください。例えば、tex ファイルを {{Pkg|kile}} で開くには以下のエントリを記述します:
Modify {{ic|~/.config/ranger/rifle.conf}}. As the beginning lines are executed first, you should put modifications at the top of the file. For example, the following entry will open a tex file with {{Pkg|kile}}:
 
   
 
ext tex = kile "$@"
 
ext tex = kile "$@"
   
  +
{{Pkg|xdg-utils}} で全てのファイルを開くようにするには:
To open all files with {{Pkg|xdg-utils}}:
 
   
 
has xdg-open, flag f = xdg-open "$1"
 
has xdg-open, flag f = xdg-open "$1"
101行目: 101行目:
 
These commands use {{Pkg|atool}} to perform archive operations.
 
These commands use {{Pkg|atool}} to perform archive operations.
   
==== Archive extraction ====
+
==== アーカイブの解凍 ====
   
 
The following command implements archive extraction by copying (yy) one or more archive files and then executing {{ic|:extracthere}} on the desired directory.
 
The following command implements archive extraction by copying (yy) one or more archive files and then executing {{ic|:extracthere}} on the desired directory.
112行目: 112行目:
 
def execute(self):
 
def execute(self):
 
""" Extract copied files to current directory """
 
""" Extract copied files to current directory """
copied_files = tuple(self.fm.env.copy)
+
copied_files = tuple(self.fm.copy_buffer)
   
 
if not copied_files:
 
if not copied_files:
118行目: 118行目:
   
 
def refresh(_):
 
def refresh(_):
cwd = self.fm.env.get_directory(original_path)
+
cwd = self.fm.get_directory(original_path)
 
cwd.load_content()
 
cwd.load_content()
   
 
one_file = copied_files[0]
 
one_file = copied_files[0]
cwd = self.fm.env.cwd
+
cwd = self.fm.thisdir
 
original_path = cwd.path
 
original_path = cwd.path
 
au_flags = ['-X', cwd.path]
 
au_flags = ['-X', cwd.path]
128行目: 128行目:
 
au_flags += ['-e']
 
au_flags += ['-e']
   
self.fm.env.copy.clear()
+
self.fm.copy_buffer.clear()
self.fm.env.cut = False
+
self.fm.cut_buffer = False
 
if len(copied_files) == 1:
 
if len(copied_files) == 1:
 
descr = "extracting: " + os.path.basename(one_file.path)
 
descr = "extracting: " + os.path.basename(one_file.path)
152行目: 152行目:
 
def execute(self):
 
def execute(self):
 
""" Compress marked files to current directory """
 
""" Compress marked files to current directory """
cwd = self.fm.env.cwd
+
cwd = self.fm.thisdir
 
marked_files = cwd.get_selection()
 
marked_files = cwd.get_selection()
   
159行目: 159行目:
   
 
def refresh(_):
 
def refresh(_):
cwd = self.fm.env.get_directory(original_path)
+
cwd = self.fm.get_directory(original_path)
 
cwd.load_content()
 
cwd.load_content()
   
177行目: 177行目:
   
 
extension = ['.zip', '.tar.gz', '.rar', '.7z']
 
extension = ['.zip', '.tar.gz', '.rar', '.7z']
return ['compress ' + os.path.basename(self.fm.env.cwd.path) + ext for ext in extension]
+
return ['compress ' + os.path.basename(self.fm.thisdir.path) + ext for ext in extension]
 
</nowiki>}}
 
</nowiki>}}
   
 
=== 外付けドライブ ===
 
=== 外付けドライブ ===
   
  +
外付けドライブは [[udev]] や [[udisks]] で自動的にマウントさせることができます。{{ic|gm}} (go, media) を押すことで {{ic|/media}} にマウントされたドライブに簡単にアクセスできます。
External drives can be automatically mounted with [[udev]] or [[udisks]]. Drives mounted under {{ic|/media}} can be easily accessed by pressing {{ic|gm}} (go, media).
 
   
=== 画像のマウント ===
+
=== イメージのマウント ===
   
  +
以下のコマンドではイメージのマウントに [[CDemu]] を使用し、仮想ドライブを特定の場所 (この例では '/media/virtualrom') にマウントするために [[autofs]] などのシステムを利用します。マウントパスはあなたの設定に合わせて変更するようにしてください。
The following command assumes you are using [[cdemu]] as your image mounter and some kind of system like [[autofs]] which mounts the virtual drive to a specified location ('/media/virtualrom' in this case). '''Do not forget to change mountpath to reflect your system settings'''.
 
   
  +
ranger から cdemud 仮想ドライブにイメージをマウントするには、イメージファイルを選択してコンソールに ':mount' と入力します。実際のマウントには設定によって多少時間がかかるので、カスタムローダーを使ってマウントディレクトリがマウントされるまで待機してからタブ 9 で裏で開くようにします。
To mount an image (or images) to a cdemud virtual drive from ranger you select the image files and then type ':mount' on the console. The mounting may actually take some time depending on your setup (in mine it may take as long as one minute) so the command uses a custom loader that waits until the mount directory is mounted and then opens it on the background in tab 9.
 
   
 
{{bc|<nowiki>
 
{{bc|<nowiki>
220行目: 220行目:
 
class mount(Command):
 
class mount(Command):
 
def execute(self):
 
def execute(self):
selected_files = self.fm.env.cwd.get_selection()
+
selected_files = self.fm.thisdir.get_selection()
   
 
if not selected_files:
 
if not selected_files:
242行目: 242行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
=== 現在のフォルダを新しいタブで開く ===
=== New tab in current folder ===
 
   
 
You may have noticed there are two shortcuts for opening a new tab in home ({{ic|g}}{{ic|n}} and {{ic|Ctrl+n}}). Let us rebind {{ic|Ctrl+n}}:
 
You may have noticed there are two shortcuts for opening a new tab in home ({{ic|g}}{{ic|n}} and {{ic|Ctrl+n}}). Let us rebind {{ic|Ctrl+n}}:
253行目: 253行目:
 
==== パスの同期 ====
 
==== パスの同期 ====
   
''ranger'' はシェル[[en2:Bash/Functions|関数]] {{ic|/usr/share/doc/ranger/examples/bash_automatic_cd.sh}} を提供しています。{{ic|ranger}} ではなく {{ic|ranger-cd}} を実行すると、最後に閲覧したフォルダに自動的に ''cd'' されます。
+
''ranger'' はシェル[[Bash/Functions|関数]] {{ic|/usr/share/doc/ranger/examples/bash_automatic_cd.sh}} を提供しています。{{ic|ranger}} ではなく {{ic|ranger-cd}} を実行すると、最後に閲覧したフォルダに自動的に ''cd'' されます。
   
 
グラフィカルランチャーから ranger を起動した場合 ({{ic|$TERMCMD -e ranger}} など、TERMCMD は X ターミナル)、{{ic|ranger-cd}} は使えません。実行可能属性を付与したスクリプトを作成して:
 
グラフィカルランチャーから ranger を起動した場合 ({{ic|$TERMCMD -e ranger}} など、TERMCMD は X ターミナル)、{{ic|ranger-cd}} は使えません。実行可能属性を付与したスクリプトを作成して:
295行目: 295行目:
 
}}
 
}}
   
Alternatively, you can make use of your shell history file if it has any. For instance, you could do this for [[zsh#Dirstack|zsh]]:
+
Alternatively, you can make use of your shell history file if it has any. For instance, you could do this for [[zsh#ディレクトリスタック|zsh]]:
   
 
{{hc|shellcd|<nowiki>
 
{{hc|shellcd|<nowiki>

2015年10月11日 (日) 19:59時点における版

関連記事

ranger は Python で書かれているテキストベースのファイルマネージャです。ディレクトリは3つのカラムに分けて表示されます。キーストロークやブックマーク、マウスやコマンド履歴を使ってディレクトリを移動することができます。選択したファイルは自動的にプレビューが表示されディレクトリは中身が表示されます。

ranger の特徴: vi スタイルのキーバインド、ブックマーク、選択、タグ、タブ、コマンド履歴、シンボリックリンクを作成可能、複数あるコンソールモード、タスク表示。ranger のコマンドやキーバインドはカスタマイズすることができ、外部スクリプトを呼び出すこともできます。よく似たファイルマネージャに Vifm があり、2つのペインと vi スタイルのキーバインドを使用しますが、機能の数はやや劣ります。

インストール

ranger公式リポジトリからインストールできます。開発版を使いたい場合は AUR から ranger-gitAUR をインストールしてください。scope.sh によるファイルプレビューの使用など、任意の依存パッケージは ranger-git の PKGBUILD に説明があります。

使用方法

ranger を起動するには、まずターミナルを起動して、そこから ranger を実行してください。

キー コマンド
? マニュアルを開く
1? キーバインドを表示
2? コマンドを表示
3? 設定を表示
l, Enter ファイルを起動

設定

起動後、ranger~/.config/ranger ディレクトリを作成します。デフォルト設定をこのディレクトリにコピーしたいときは次のコマンドを実行してください:

ranger --copy-config=all
  • rc.conf - スタートアップコマンドとキーバインド
  • commands.py - : で起動するコマンド
  • rifle.conf - 特定のファイルを起動した時に使われるアプリケーション

デフォルトファイルもロードされるので rc.conf にはデフォルトファイルとの差異部分だけを記述します。commands.py には、ファイル全体をインクルードしない場合、一番最初に以下の行を記述します:

from ranger.api.commands import *

作成したディレクトリ ~/.Trash/DD でファイルを移動するキーバインドを追加するには、~/.config/ranger/rc.conf に以下を追記します:

map DD shell mv -t /home/${USER}/.Trash %s

設定に関する詳細は man ranger を見て下さい。

コマンドの定義

Continuing the above example, add the following entry to ~/.config/ranger/commands.py to empty the trash directory ~/.Trash.

class empty(Command):
    """:empty

    Empties the trash directory ~/.Trash
    """

    def execute(self):
        self.fm.run("rm -rf /home/myname/.Trash/{*,.[^.]*}")

To use it, type :empty and Enter with tab completion as desired.

警告: [^.] is an essential part of the above command. Without it, all files and directories of the form ..* will be deleted, wiping out everything in your home directory.

カラースキーム

~/.config/rangercolorschemes サブフォルダを作成してください:

$ mkdir ~/.config/ranger/colorschemes

それから新しい newscheme.py を上記のフォルダにコピーします。~/.config/ranger/rc.conf ファイルからデフォルトカラースキームを変更してください:

set colorscheme newscheme

ファイルの関連付け

~/.config/ranger/rifle.conf を編集してください。先の行が早く実行されるので、ファイルの先頭に追記するようにしてください。例えば、tex ファイルを kile で開くには以下のエントリを記述します:

ext tex = kile "$@"

xdg-utils で全てのファイルを開くようにするには:

has xdg-open, flag f = xdg-open "$1"

Tips and tricks

圧縮ファイル

These commands use atool to perform archive operations.

アーカイブの解凍

The following command implements archive extraction by copying (yy) one or more archive files and then executing :extracthere on the desired directory.

import os
from ranger.core.loader import CommandLoader

class extracthere(Command):
    def execute(self):
        """ Extract copied files to current directory """
        copied_files = tuple(self.fm.copy_buffer)

        if not copied_files:
            return

        def refresh(_):
            cwd = self.fm.get_directory(original_path)
            cwd.load_content()

        one_file = copied_files[0]
        cwd = self.fm.thisdir
        original_path = cwd.path
        au_flags = ['-X', cwd.path]
        au_flags += self.line.split()[1:]
        au_flags += ['-e']

        self.fm.copy_buffer.clear()
        self.fm.cut_buffer = False
        if len(copied_files) == 1:
            descr = "extracting: " + os.path.basename(one_file.path)
        else:
            descr = "extracting files from: " + os.path.basename(one_file.dirname)
        obj = CommandLoader(args=['aunpack'] + au_flags \
                + [f.path for f in copied_files], descr=descr)

        obj.signal_bind('after', refresh)
        self.fm.loader.add(obj)

圧縮

The following command allows the user to compress several files on the current directory by marking them and then calling :compress package name. It supports name suggestions by getting the basename of the current directory and appending several possibilities for the extension. You need to have atool installed. Otherwise you will see an error message when you create the archive.

import os
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)

        obj.signal_bind('after', refresh)
        self.fm.loader.add(obj)

    def tab(self):
        """ 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]

外付けドライブ

外付けドライブは udevudisks で自動的にマウントさせることができます。gm (go, media) を押すことで /media にマウントされたドライブに簡単にアクセスできます。

イメージのマウント

以下のコマンドではイメージのマウントに CDemu を使用し、仮想ドライブを特定の場所 (この例では '/media/virtualrom') にマウントするために autofs などのシステムを利用します。マウントパスはあなたの設定に合わせて変更するようにしてください。

ranger から cdemud 仮想ドライブにイメージをマウントするには、イメージファイルを選択してコンソールに ':mount' と入力します。実際のマウントには設定によって多少時間がかかるので、カスタムローダーを使ってマウントディレクトリがマウントされるまで待機してからタブ 9 で裏で開くようにします。

import os, time
from ranger.core.loader import Loadable
from ranger.ext.signals import SignalDispatcher
from ranger.ext.shell_escape import *

class MountLoader(Loadable, SignalDispatcher):
    """
    Wait until a directory is mounted
    """
    def __init__(self, path):
        SignalDispatcher.__init__(self)
        descr = "Waiting for dir '" + path + "' to be mounted"
        Loadable.__init__(self, self.generate(), descr)
        self.path = path

    def generate(self):
        available = False
        while not available:
            try:
                if os.path.ismount(self.path):
                    available = True
            except:
                pass
            yield
            time.sleep(0.03)
        self.signal_emit('after')

class mount(Command):
    def execute(self):
        selected_files = self.fm.thisdir.get_selection()

        if not selected_files:
            return

        space = ' '
        self.fm.execute_command("cdemu -b system unload 0")
        self.fm.execute_command("cdemu -b system load 0 " + \
                space.join([shell_escape(f.path) for f in selected_files]))
 
        mountpath = "/media/virtualrom/"

        def mount_finished(path):
            currenttab = self.fm.current_tab
            self.fm.tab_open(9, mountpath)
            self.fm.tab_open(currenttab)

        obj = MountLoader(mountpath)
        obj.signal_bind('after', mount_finished)
        self.fm.loader.add(obj)

現在のフォルダを新しいタブで開く

You may have noticed there are two shortcuts for opening a new tab in home (gn and Ctrl+n). Let us rebind Ctrl+n:

rc.conf
map <c-n>  eval fm.tab_new('%d')

シェルの小技

パスの同期

ranger はシェル関数 /usr/share/doc/ranger/examples/bash_automatic_cd.sh を提供しています。ranger ではなく ranger-cd を実行すると、最後に閲覧したフォルダに自動的に cd されます。

グラフィカルランチャーから ranger を起動した場合 ($TERMCMD -e ranger など、TERMCMD は X ターミナル)、ranger-cd は使えません。実行可能属性を付与したスクリプトを作成して:

ranger-launcher.sh
#!/bin/sh
export RANGERCD=true
$TERMCMD

シェルの設定のできるだけ最後に以下を追加してください:

.shellrc
$RANGERCD && unset RANGERCD && ranger-cd

This will launch ranger-cd only if the RANGERCD variable is set. It is important to unset this variable again, otherwise launching a subshell from this terminal will automatically relaunch ranger.

ranger からシェルを起動

With the previous method you can switch to a shell in last browsed path simply by leaving ranger. However you may not want to quit ranger for several reasons (numerous opened tabs, copy in progress, etc.). You can start a shell from ranger (S by default) without losing your ranger session. Unfortunately, the shell will not switch to the current folder automatically. Again, this can be solved with an executable script:

shellcd
#!/bin/sh
export AUTOCD="$(realpath "$1")"

$SHELL

and - as before - add this to at the very end of your shell configuration:

shellrc
cd "$AUTOCD"

Now you can change your shell binding for ranger:

rc.conf
map S shell shellcd %d

Alternatively, you can make use of your shell history file if it has any. For instance, you could do this for zsh:

shellcd
## Prepend argument to zsh dirstack.
BUF="$(realpath "$1")
$(grep -v "$(realpath "$1")" "$ZDIRS")"
echo "$BUF" > "$ZDIRS"

zsh

Change ZDIRS for your dirstack.

ranger が現在のシェルで動いていない場合にのみ ranger の新しいインスタンスを起動

シェルのスタートアップファイルに以下を記述してください:

rg() {
    if [ -z "$RANGER_LEVEL" ]
    then
        ranger
    else
        exit
    fi
}

Execute rg to start or restore ranger.

トラブルシューティング

画像のプレビューでブロックノイズ

カラムのボーダーをなくすと画像プレビューでストライプが見えることがあります [1]~/.config/ranger/rc.conf に以下を設定:

set draw_borders true

参照