---
title: "ターミナルがダサいとモテない。NeoVimのNVIM_APPNAMEを使ってAstroNvimとNvChadを切り替える。 | grasys blog"
url: "https://blog.grasys.io/post/yusukeh/terminal-neovim-appname"
description: "NeoVimのPreconfigured Configrationを切り替えたいと思ったことはありませんか？ Photo by Markus Spiske on Unsplash NeoVimでAstroNvimとNvChadを切り替えたいと思ったことはありませんか？ NeoVimのPreconfigured Configrationってこんなにあるんです。 Awesome NeoVimみるとわかります。 GitHub rockerBO…"
---

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

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[yusukeh](/authors/yusukeh/)
-   公開日：2025年5月14日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#シリーズ: ターミナル環境](/tags/シリーズ-ターミナル環境/)[#Neovim](/tags/neovim/)[#AstroNvim](/tags/astronvim/)[#NvChad](/tags/nvchad/)

![ターミナルがダサいとモテない。NeoVimのNVIM\_APPNAMEを使ってAstroNvimとNvChadを切り替える。](/_astro/ogp.CHm2lvwE_ZpFWyh.webp)

Photo by [Markus Spiske](https://unsplash.com/@markusspiske?utm_source=medium&utm_medium=referral) on [Unsplash](https://unsplash.com/?utm_source=medium&utm_medium=referral)

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

[NeoVim](https://neovim.io/)で[AstroNvim](https://astronvim.com/)と[NvChad](https://nvchad.com/)を切り替えたいと思ったことはありませんか？

[NeoVim](https://neovim.io/)の[Preconfigured Configration](https://github.com/rockerBOO/awesome-neovim?tab=readme-ov-file#preconfigured-configuration)ってこんなにあるんです。  
[Awesome NeoVim](https://github.com/rockerBOO/awesome-neovim)みるとわかります。

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

### Collections of awesome neovim plugins. Contribute to rockerBOO/awesome-neovim development by creating an account on…

github.com

普通ありますよね？（普通はないか・・・🤣）  
いや普通はないけど、たまにちょっと他のが気になることはある！😆

v0.9から[NVIM\_APPNAME](https://neovim.io/doc/user/starting.html#_nvim_appname)でXDG\_CONFIG\_HOME配下のDirectory名を切り替えられるのを知らなかった・・・

## Starting

### Neovim user documentation

neovim.io

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

## .bashrcにFunctionを組み込む

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

Plain textcontent\_copy

```
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
```

ここでは[gum](https://github.com/charmbracelet/gum)を使ってます。

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

### A tool for glamorous shell scripts 🎀. Contribute to charmbracelet/gum development by creating an account on GitHub.

github.com

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

Plain textcontent\_copy

```
#nvim -c "LetItSnow" "$@"
```

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

1.  NVIM\_APPNAMEをSetする
2.  [gum](https://github.com/charmbracelet/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に読み込み

Plain textcontent\_copy

```
  # 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
```

### gumの有無を確認して、NVIM\_APPNAMEのstatefile（${XDG\_STATE\_HOME}/nvim\_appname）とそのswitcher functionを組み込む

Plain textcontent\_copy

```
  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
```

ここで[gum](https://github.com/charmbracelet/gum)を使ってます。

1.  nvim\_appnamesの配列を用意（ここに[NeoVim](https://neovim.io/)のPreconfigured Configrationの名前を列挙）
2.  chooseで select-if-one optionでswitch\_nvim\_appnameに変数として読み込ませる
3.  ${XDG\_STATE\_HOME}/nvim\_appnameを上書き
4.  改めてNVIM\_APPNAMEをexport

## Function: nvim\_appname

Plain textcontent\_copy

```
nvim_appname
```

![nvim\_appname関数で利用するNeovim設定を選択する画面](/_astro/image-02.B9DMXL1J_1hQ8V3.webp)

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

これで

[AstroNvim](https://astronvim.com/)でも

[NvChad](https://nvchad.com/)でも

[CyberVim](https://github.com/pgosar/CyberNvim)でも

[LunarVim](https://github.com/LunarVim/LunarVim)でも

なんでもあり🤣

ターミナル環境について他の記事も書いているので、よろしければこちらもご覧ください！  
[『ターミナルがダサいとモテない』シリーズ一覧](https://blog.grasys.io/tags/series-terminal-update)

転載：[ターミナルがダサいとモテない。NeoVimのNVIM\_APPNAMEを使ってAstroNvimとNvChadを切り替える。](https://medium.com/@yusuke_h/%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%81%8C%E3%83%80%E3%82%B5%E3%81%84%E3%81%A8%E3%83%A2%E3%83%86%E3%81%AA%E3%81%84-neovim%E3%81%AEnvim-appname%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6astronvim%E3%81%A8nvchad%E3%82%92%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B-50a5efd8d29f)

この記事は [Medium（@yusuke\_h）](https://medium.com/@yusuke_h) からの転載です。

## この記事を書いた人

[![](/_astro/yusukeh.BvUd2yKE_1mQ6Fp.webp)](/authors/yusukeh/)

### [yusukeh](/authors/yusukeh/)

Fly high. Think deep. Move fast. Go far.🦅

-   [X](https://x.com/yusukeh "X")
-   [GitHub](https://github.com/yusukeh "GitHub")
-   [Medium](https://medium.com/@yusukeh "Medium")
-   [Facebook](https://www.facebook.com/yusuke.exzm "Facebook")
-   [Instagram](https://www.instagram.com/yusukehasegawa/ "Instagram")
-   [LinkedIn](https://www.linkedin.com/in/hasegawa-yusuke-091b4164/ "LinkedIn")

[プロフィールと記事一覧](/authors/yusukeh/)