DEV Community

Yusuke Hasegawa
Yusuke Hasegawa

Posted on • Originally published at Medium on

ターミナルがダサいとモテない。NeoVimのNVIM_APPNAMEを使ってAstroNvimとNvChadを切り替える。

NeoVimのPreconfigured Configrationを切り替えたいと思ったことはありませんか?


Photo by Markus Spiske on Unsplash

NeoVimAstroNvimNvChadを切り替えたいと思ったことはありませんか?

NeoVimPreconfigured Configrationってこんなにあるんです。

Awesome NeoVimみるとわかります。

GitHub - rockerBOO/awesome-neovim: Collections of awesome neovim plugins.

普通ありますよね?(普通はないか・・・🤣)

いや普通はないけど、たまにちょっと他のが気になることはある!😆

v0.9からNVIM_APPNAMEでXDG_CONFIG_HOME配下のDirectory名を切り替えられるのを知らなかった・・・

Starting

神過ぎて、まったく別のことをやってたのに完全に脱線して組み込みました🤣

.bashrcにFunctionを組み込む

以下のような形にしました。

if command -v nvim &> /dev/null; then
  # NVIM_APPNAME
  if [! -f ${XDG_STATE_HOME}/nvim_appname]; then
    echo astronvim > ${XDG_STATE_HOME}/nvim_appname
  fi
  if [-f ${XDG_STATE_HOME}/nvim_appname]; then
    declare -x NVIM_APPNAME=$(cat ${XDG_STATE_HOME}/nvim_appname)
  fi

  nvim_appnames=(
      nvim
      astronvim
      nvchad
      lunarvim
    )
    function nvim_appname() {
      switch_nvim_appname=$(gum choose --select-if-one --header "current NVIM_APPNAME: ${NVIM_APPNAME}" ${nvim_appnames[@]})
      if [-n "${switch_nvim_appname}"]; then
        echo ${switch_nvim_appname} > ${XDG_STATE_HOME}/nvim_appname
        export NVIM_APPNAME=$(cat ${XDG_STATE_HOME}/nvim_appname)
        echo "switch NVIM_APPNAME: ${switch_nvim_appname}"
      fi
      echo "output NVIM_APPNAME: ${NVIM_APPNAME}"
    }

  function vi(){
    #nvim -c "LetItSnow" "$@"
    nvim "$@"
  }
  function vim(){
    nvim "$@"
  }
fi
Enter fullscreen mode Exit fullscreen mode

ここではgumを使ってます。

GitHub - charmbracelet/gum: A tool for glamorous shell scripts 🎀

これは去年のクリスマスの名残です😂

#nvim -c "LetItSnow" "$@"
Enter fullscreen mode Exit fullscreen mode

ざっくり流れを説明すると

  1. NVIM_APPNAMEをSetする
  2. gumの有無を確認して、NVIM_APPNAMEのstatefile(${XDG_STATE_HOME}/nvim_appname)とそのswitcher functionを組み込む

NVIM_APPNAMEをSetする

  1. ${XDG_STATE_HOME}にnvim_appnameがあるかを確認
  2. なければ決め打ちでastronvimで出力
  3. あればNVIM_APPNAMEに読み込み
  # NVIM_APPNAME
  if [! -f ${XDG_STATE_HOME}/nvim_appname]; then
    echo astronvim > ${XDG_STATE_HOME}/nvim_appname
  fi
  if [-f ${XDG_STATE_HOME}/nvim_appname]; then
    declare -x NVIM_APPNAME=$(cat ${XDG_STATE_HOME}/nvim_appname)
  fi
Enter fullscreen mode Exit fullscreen mode

gumの有無を確認して、NVIM_APPNAMEのstatefile(${XDG_STATE_HOME}/nvim_appname)とそのswitcher functionを組み込む

  if command -v gum &> /dev/null; then
    nvim_appnames=(
      nvim
      astronvim
      nvchad
      lunarvim
    )
    function nvim_appname() {
      switch_nvim_appname=$(gum choose --select-if-one --header "current NVIM_APPNAME: ${NVIM_APPNAME}" ${nvim_appnames[@]})
      if [-n "${switch_nvim_appname}"]; then
        echo ${switch_nvim_appname} > ${XDG_STATE_HOME}/nvim_appname
        export NVIM_APPNAME=$(cat ${XDG_STATE_HOME}/nvim_appname)
        echo "switch NVIM_APPNAME: ${switch_nvim_appname}"
      fi
      echo "output NVIM_APPNAME: ${NVIM_APPNAME}"
    }
  fi
Enter fullscreen mode Exit fullscreen mode

ここでgumを使ってます。

  1. nvim_appnamesの配列を用意(ここにNeoVimのPreconfigured Configrationの名前を列挙)
  2. chooseで select-if-one optionでswitch_nvim_appnameに変数として読み込ませる
  3. ${XDG_STATE_HOME}/nvim_appnameを上書き
  4. 改めてNVIM_APPNAMEをexport

Function: nvim_appname

nvim_appname
Enter fullscreen mode Exit fullscreen mode

選択できて、これで実際に切り替わります。

これで

AstroNvimでも

NvChadでも

CyberVimでも

LunarVimでも

なんでもあり🤣

Top comments (0)