nnn(Terminal file manager)を使ってみる


nnnとは

https://github.com/jarun/nnn

  • ターミナル上で動作するファイルマネージャー

GIF

良い点

  • 軽量で高速な動作を保つために機能をプラグインとして外出しして拡張できる設計になってます
    • プラグインはシェルスクリプトなどで簡単に記述できます
  • キーバインドはviライクです
  • tmuxを利用してる状態の画像表示も問題ないです
    • ターミナルはkittyを利用しています

インストール

  • Ubuntu
    • $ sudo apt install nnn
  • Arch Linux
    • $ sudo pacman -S nnn
  • MacOS
    • $ brew install nnn
$ nnn -V
4.4

プレビューの設定

  • https://github.com/jarun/nnn/wiki/Live-previews
  • テキストファイルの中身、画像、ディレクトリ構造などを表示します
  • 下記のいずれかの環境が必要です。私はtmuxを利用しています
    • tmux
    • kitty with allow_remote_control and listen_on set in kitty.conf
    • QuickLook on WSL
    • Windows Terminal

画像のプレビューの依存関係をインストール

Linux

  • ueberzugをインストール
  • pip
    • $ pip install ueberzug
  • パッケージマネージャー(Arch Linux)
    • $ sudo pacman -S ueberzug

MacOS(iTerm)

  • viuをインストール
  • $ brew install viu
  • 手元にMacがなく動作確認が出来てないです

preview-tuiプラグインの利用

  • プラグインのインストール
    • $ curl -Ls https://raw.githubusercontent.com/jarun/nnn/master/plugins/getplugs | sh
  • Alt-pでpreview-tuiが動くように指定
    • $ export NNN_PLUG='p:preview-tui'
  • aオプションを付けて実行
    • $ nnn -a
  • Alt-pを押すことでプレビュー開始
  • 予め、Alt-pを押した状態で起動することもできます
    • $ nnn -aP p

ファイルを開くプログラムの設定

  • 環境変数NNN_OPENERで指定できます
  • nukeプラグインで画像、動画、PDFなどファイルに合わせたプログラムを実行できます
    • $ export NNN_OPENER="${XDG_CONFIG_HOME}/nnn/plugins/nuke"
  • cオプションを付けて実行
    • GUIとして実行するかCLIとして実行するか選択できるのですが、nukeはCLIで実行することを求めているのでオプションを加えます
    • $ nnn -caP p
  • ファイルはEnterを押すことで開けます

プログラムを柔軟に設定したい

  • nukeプラグインでは実行するプログラムが予め決められているので使い勝手が悪いです
  • プラグインは非常に簡単に自分で定義できるので、自作のプラグインを用意します
  • 下記は第1引数に渡されるファイル名の拡張子をもとに実行するプログラムを振り分ける小さなシェルスクリプトです
#!/usr/bin/env bash

set -euCo pipefail

case ${1##*.} in
  'txt'|'md'|'sh'|'go'|'py'|'yaml'|'json' )
    ${EDITOR:-vi} $1
  ;;
  'jpg'|'png' )
    feh $1 &> /dev/null
  ;;
  'mp4' )
    vlc $1 &> /dev/null
  ;;
  * )
    google-chrome-stable $1 &> /dev/null
  ;;
esac
  • このシェルスクリプトを適当な場所に配置し、pathを環境変数NNN_OPENERに渡して完了です
    • $ export NNN_OPENER="${DOTFILES}/bin/nnn_opener.sh"
  • これで実行するプログラムを自由に設定することができるようになりました
    • $ nnn -caP p

その他の情報

さいごに

  • 6年ほどrangerを利用していて移行するつもりはなかったのですが、とてもシンプルで使い勝手が良かったので暫く触ってみようと思います