🧚

naviのインストール方法と初期設定方法

に公開

所謂チートシートに記述したチートをfzfを使ってインタラクティブに検索できるツール。
Rustで開発されており、Linux, MacOS, Windowsどのプラットフォームでも利用可能(Windowsについては一部利用できない機能もあるので注意)。
以降ではUbuntu, Windowsでの導入方法についてまとめる。
fzfのインストールや設定方法についてはこちらの記事を参照。


Ubuntuでのインストール方法

aptでインストールではできないので、公式Githubのreleasesページからバイナリをダウンロード。
余談だが、Githubのreleasesページで提供されているバイナリはeget(zyedidia/eget)を使うことで、実行環境に応じて適切なバイナリをダウンロードしてくれるのでインストールが楽。
egetを使用してインストールする場合は以下のように実行すればよい

# システムにインストール
sudo eget denisidoro/navi --to /usr/local/bin

# ユーザーにインストール
mkdir -p ~/.local/bin
eget denisidoro/navi --to ~/.local/bin
echo 'export PATH=${PATH}:~/.local/bin' >> ~/.bashrc
source ~/.bashrc

セットアップ(Ubuntu)

~/.config/navi/config.yamlの作成

naviの設定ファイルを作成する。
記述方法については公式Githubのcustomizationを参照。
筆者は以下のように記述。

~/.config/navi/config.yaml
style:
  tag:
    color: blue
    width_percentage: 10
    min_width: 10
  comment:
    color: yellow
    width_percentage: 30
    min_width: 20
  snippet:
    color: white
    width_percentage: 60
    min_width: 30

finder:
  command: fzf
  overrides: --prompt='CHEAT COMMAND> ' --border-label ' WELLCOME NAVI CHEAT SHEETS! ' --height 50% --input-label ' Input '
  overrides_var: --prompt='> ' --border-label ' [VAR SELECT MODE] ' --height 100% --input-label ' Input '

設定内容は以下の通り

  • tag
    • チートシート内で定義できる検索用のタグ
    • color: 文字を青色で表示
    • width_percentage: 表示の割合を10%
    • min_width: 表示する最小文字数を10文字に設定
  • comment
    • 各チートに記述したコメント
    • color: 文字を黄色で表示
    • width_percentage: 表示の割合を30%
    • min_width: 表示する最小文字数を20文字に設定
  • snippet
    • チートシートに記述したチート
    • color: 文字を白色で表示
    • width_percentage: 表示の割合を60%
    • min_width: 表示する最小文字数を30文字に設定
  • finder
    • command: チート検索時にfzfを使って検索
    • overrides: 検索時に使うfzfのオプション

チートシートの配置

~/.local/share/navi/cheats配下がデフォルトのチートシートファイルの配置場所となる。
チートシートについては公式GithubのBrowsing through cheatsheet repositoriesに記載のnavi repo browseコマンドで上記のパスにいくつかのチートシートがダウンロード可能。
自作する際のサンプルコードとしていくつかダウンロードしておくことを推奨。
例えば、denisidoro/cheatsを選択してダウンロードした場合は前述の設定ファイルを作成したうえでnaviコマンド実行すると以下のように表示される。

上記の状態から、文字列を入力することで目当てのチートを簡単にインクリメンタルサーチして選択することができる。

注意点として表示されている文字列の末尾が...になって省略されている場合は、
その省略部分に該当する文字列で検索してもヒットしないので注意。

上の画像は設定ファイルを変更してチート部分の表示を狭くしたときのチート表示。
この状態で最上部のLogcatのチートをtimeで検索しようとすると末尾のeが非表示となっているので検索にヒットしなくなる(timまでの入力ならOK)。

ウィジェット機能について

naviコマンドで明示的にnaviを呼び出す以外にも公式GithubのNavi widgetsを参考に~/.bashrceval "$(navi widget bash)"を記述することでctrl + gnavi起動コマンドに割り当てることができる。

なお、naviコマンドでの起動とウィジェットを介しての起動では微妙に挙動が異なるので注意。
前者はチートを選択した時点で即時にコマンドが実行されるが、後者はコマンドライン上に挿入される動作となる。
コマンドを確認してから実行したい場合はウィジェットを介しての実行が望ましい。


Windowsでのインストール方法

Installation of naviを参考にインストール。
Chocolateyを使う方法とバイナリでのインストール方法が提供されている、筆者はバイナリでインストール方法を選択。

余談だが、Githubのreleasesページで提供されているバイナリはeget(zyedidia/eget)を使うことで、実行環境に応じて適切なバイナリをダウンロードしてくれるのでセットアップが楽。
egetでのインストール方法については本記事のUbuntuでのインストール方法の項を参照
PATHが通っている環境に実行ファイルを配置すればnaviコマンドで使用可能となる。

セットアップ(Windows)

上記の手順でnaviのコマンドがWindows上で使えるようにはなるが、Ubuntu環境と異なり、
いくつか追加で明示的に設定が必要な部分があるので、それらの設定方法について以下で述べる。

明示的に設定が必要となるため以下の手順で作成、なお配置場所に関してはUbuntuと同様の場所に配置する。

  1. %USERPROFILE%\.config\navi\config.yamlの作成
    1. 以下のコマンドでテンプレートファイルを作成
      navi info config-example > %USERPROFILE%\.config\navi\config.yaml
      
    2. 前述の手順で作成した設定ファイルを適宜編集(筆者は以下のように設定)
      style:
          tag:
          color: blue
          width_percentage: 20
          min_width: 20
          comment:
          color: yellow
          width_percentage: 30
          min_width: 30
          snippet:
          color: white
          width_percentage: 50
          min_width: 50
      
      finder:
          command: fzf
          overrides: --prompt='CHEAT COMMAND> ' --border-label ' WELLCOME NAVI CHEAT SHEETS! ' --height 50% --input-label ' Input '
          overrides_var: --prompt='AND SEARCH> ' --border-label ' [VAR SELECT MODE] ' --height 100% --input-label ' Input '
      
      shell:
          command: cmd
      
      各パラメータの概要については本記事のセットアップ(Ubuntu)の項に記載している。
      なお、WindowsでPowershellを使えない場合は上記のようにコマンドプロンプトを明示的に使用するためにcmdを設定しておく。
      Powershellの場合はpowershellを記述
    3. 上記の設定ファイルのパスを記述したNAVI_CONFIG環境変数を登録

チートシートファイルを格納するパスとして%USERPROFILE%\.local\share\navi\cheatsを記述したNAVI_PATH環境変数を登録。
チートシートについては公式GithubのBrowsing through cheatsheet repositoriesに記載のnavi repo browseコマンドで上記のパスにいくつかのチートシートがダウンロード可能。
自作する際のサンプルコードとしていくつかダウンロードしておくことを推奨。

ウィジェット機能について

Ubuntu環境ではウィジェット機能を導入することでctrl + gnaviを起動することができるが、Windowsのコマンドプロンプトでは現状対応していない。
Powershellの場合は公式Githubのnavi.plugin.ps1を導入すれば可能?(動作未確認)

コマンドプロンプトでもclinkを使っていれば、以下のようなluaスクリプトを%LOCALAPPDATA%\clink直下に格納すればウィジェット機能を再現可能
clinkについてはこちらの記事を参照

%LOCALAPPDATA%\clink\navi.lua
function navi_widget(rl_buffer)
    local r = io.popen("navi --print")
    if not r then
        rl_buffer:ding()
        return
    end

    local str = r:read('*all')
    str = str and str:gsub('[\r\n]', '') or ''
    r:close()

    -- If something was selected, insert it.
    if #str > 0 then
        rl_buffer:beginundogroup()
        rl_buffer:remove(0, -1)
        rl_buffer:insert(str)
        rl_buffer:endundogroup()
    end

    rl_buffer:refreshline()
end

%USERPROFILE%\.inputrcに以下を追記

"\C-g": "luafunc:navi_widget" # navi_widget

なお、naviコマンドでの起動とウィジェットを介しての起動では微妙に挙動が異なるので注意。
前者はチートを選択した時点で即時にコマンドが実行されるが、後者はコマンドライン上に挿入される動作となる。
コマンドを確認してから実行したい場合はウィジェットを介しての実行が望ましい。


変数について

naviのチートシートはチート内に変数を設定し、fzfと組み合わせて対話的にその変数値を設定することができる。
例えば、以下のような対象ファイルのgit logを確認するチートを記述したチートシートを作成したとする。

% git

$ file: fd --type f -H --- --column 1 --header "ファイルを選択してください." --preview 'fzf-preview.sh {}' --bind 'focus:transform-header:file --brief {}'

# file scopoe log
git log -p -- <file>

fdコマンドは単にディレクトリ配下のファイルを出力するために使っているだけなので他のコマンドでも代用可

お試し用にnaviのgitをクローンして、その配下でnaviを起動

git clone https://github.com/denisidoro/navi.git
cd navi
navi # or ctrl + g

作成したチートを選択

チート選択後に以下のように現在のディレクトリ配下のファイルが表示される。

チート選択後に以下のようにfzfでインクリメンタルサーチしてファイルを選択。

上記の手順を完了すると、git log -p -- README.mdが自動的に実行される(ウィジェットからの起動の場合はコマンドライン上にコマンドが出力される)

このようにただチートコマンドを実行するだけでなく、動的に値を変更してチートコマンドを作成・実行できるのがnaviの長所。
チートシートの具体的な書き方については公式GithubのThe syntax of a Navi cheatsheetを参照。


reference

Discussion