以下の内容はhttps://ekutajp.hatenablog.com/entry/2026/02/16/134546より取得しました。


Noeovimの設定

体調はこのところ調子良さげです。日差しが強くなったから?今年の年末は朝散歩をしてみようかな。

さて、これまでプログラミング時には WSL2 上で vim を使用していたのですが、この度 neovim (nvim) に乗り換えました。 ちなみに文書を書くとき(このブログとか)は、emacs配列を使用しています。 でもプログラミングのときはvimがしっくり来るんですよね。

vimから移行したわけ

vimでlanguage serverを使ってtsxファイルを編集するとハングするという状態になったのがきっかけです。

最近react nativeというJavaScriptベースの開発フレームワークの勉強を始めて、 その構文チェックをするのにlanguage serverを使ったみたところ、 サンプルソースを見るだけでCPU 100%使用状態でハングする状態となったという経緯です。

素のvimにvim-lspとvim-lsp-settingsだけを入れた状態でも駄目で、vimユーザも少数派になったのかWeb検索してもヒットしない。 という訳で乗り換えることにしました。

ちなみにvscodeも試したのですが、プログラミングだけではなく、 設定ファイルの編集とかにも使うので統合環境は合わないかなと辞めておきました。

Neovimのインストールと設定

設定は結構右往左往してしまいましたが、最終的な手順は非常に簡単になりました。

linux用のバイナリが配られているのでそれを使用します。 WSL2でないとfuseが動作しないのでその場合はひと手間(neovim/INSTALL.md at master · neovim/neovim · GitHub)必要です。

$ curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.appimage
$ chmod u+x nvim-linux-x86_64.appimage
$ mv nvim-linux-x86_64.appimage ~/.local/bin/nvim

lazyvim の導入

プラグインなどのセットを一括でインストールしてくれる lazyvim を導入します。 ちょっとクセはありますが、language serverやtree sitter (インデントやシンタックスハイライト) などの設定が一発で完了します。

$ git clone https://github.com/LazyVim/starter ~/.config/nvim
$ rm -rf ~/.config/nvim/.git

HackGen Console NFフォントのインストール

lazyvimはNerdFontというフォントを前提としていて、これを使用しないと記号などがうまく表示できません。 そこで、HackGen Console NFフォントを使用します。 詳細はこちら(オレオレ Neovim 環境構築 with LazyVim #neovim - Qiita)。

github.com

サイトのreleaseからHackGen_NF_v2.10.0.zipをダウンロードして、 HackGenConsoleNF-Regular.ttfとHackGenConsoleNF-Bold.ttfをWindowsにインストール、 wslttyのフォントを HackGen Console NF にします。

このHackGenというフォントかなり見やすくて気に入りました。

曖昧幅文字への対処

lazyvimを使用するとset ambiwidth=doubleの設定が使用できません(起動時にエラーとなる)。 そのため※などが半角幅で表示され、表示が乱れます。 HackGen Consoleフォントは、曖昧幅文字はできるだけ半角幅となるように作成されていますが、 対応していない文字もあり、そういう文字については、見つけたものを個別に幅を指定して対処します。 今のところ以下になります。

~/.config/nvim/init.lua

vim.fn.setcellwidths({
  { 0x2103, 0x2103, 2 }, -- ℃
  { 0x203B, 0x203B, 2 }, -- ※
  { 0x2460, 0x2473, 2 }, --  ①~⑳
})

カラースキームをHybridにする

カラースキームを見慣れているhybridに変更しました。 またイタリック体が若干見づらいので使用しないようにしました。

~/.config/nvim/lua/plugins/theme.lua

return {
  {
    "HoNamDuong/hybrid.nvim",
    lazy = false,
    priority = 1000,
    opts = {
      italic = {
        strings = false,
        comments = false,
      },
    },
  },
  {
    "LazyVim/LazyVim",
    opts = {
      colorscheme = "hybrid",
    },
  },
}

options.lua

以下の設定を行います。 説明をコメントで入れています。 マウスのビジュアルモード、行番号、サインカラムはマウスでコピペするのに邪魔なので無効にしています。

~/.config/nvim/lua/config/options.lua

local opt = vim.opt
opt.mouse = "" -- マウスのビジュアルモードを無効化
opt.wrap = true -- 行を折り返して表示する
opt.clipboard = "" -- システムのクリップボードを使用しない
opt.number = false -- 行番号を使用しない
opt.relativenumber = false -- 相対行番号を表示しない
opt.signcolumn = "no" -- サインカラム(左側の空白)を使用しない
vim.g.snacks_animate = false -- 行移動のアニメーションをOFFにする
-- lspのvirual textを有効化する
vim.diagnostic.config({
  virtual_text = true,
})

keymaps

lspのvirual textで、メッセージが文末にかかると途中までしか表示されないので、"<space>e"で表示するようにします。 また、j, kで折り返した行を一行として扱って移動できるようにします。

.config/nvim/lua/config/keymaps.lua

vim.keymap.set("n", "<space>e", "<cmd>lua vim.diagnostic.open_float()<CR>")
vim.keymap.set("n", "j", "gj")
vim.keymap.set("n", "k", "gk")

snacks

snacksのインデントの使用をやめます。縦線があるとマウスによるコピペに邪魔になるため。 そもそも縦線の必要性を感じない。

.config/nvim/lua/plugins/snacks.lua

return {
  {
    "snacks.nvim",
      indent = {
        enabled = false,
      },
  },
}

noice

cmdlineが上部に表示されるのが違和感があったので、最下部に移しました。

~/.config/nvim/lua/plugins/noice.lua

return {
  "folke/noice.nvim",
  opts = {
    cmdline = {
      view = "cmdline", -- cmdlineを最下行に表示 (デフォルト: cmdline_popup)
    },
  },
}

lsconfig

nvimの設定ファイル(.lua)を開いたときに'vim'変数で構文チェックとならないようにします。 これは回避処置ですがnvimのpluginを開発するのでもなければ十分でしょう。

.config/nvim/lua/plugins/lspconfig.lua

return {
  {
    "neovim/nvim-lspconfig",
    opts = {
      servers = {
        lua_ls = {
          settings = {
            Lua = {
              diagnostics = {
                globals = { "vim" },
              },
            },
          },
        },
      },
    },
  },
}

flash.nvimの無効化

flash.nvimを使用するとsキーの動作がデフォルトから変わります。 私はデフォルトのsキーで一文字置換に慣れているので、現状未使用のflash.nvimは無効化しておきます。

.config/nvim/lua/plugins/flash.lua

return {
  {
    "folke/flash.nvim",
    enabled = false,
  },
}

insert modeを抜けた際に日本語入力をオフにする

以下サイトの通りに設定しました。 ソースコードを編集していると、改行したときにプラグインが動いてオフになる事があるのですが、 プログラミング時に日本語入力で改行することはほぼないでしょうから気にしないことにします。

zenn.dev

zenhan.exeをパスの通ったところに置く。

.config/nvim/lua/config/autocmds.lua

local group = vim.api.nvim_create_augroup("kyoh86-conf-ime", {})
if vim.fn.has("wsl") == 1 then
  vim.api.nvim_create_autocmd("InsertLeave", {
    group = group,
    command = "silent! !zenhan.exe 0",
  })
end

スペルチェックを無効化

スペルチェックは日本語だとうまく動かないし、IDなども引っかかるので無効化します。 opt.spell = false だとうまく行かない(lazyvimがファイルタイプ指定で有効化をしている?)ので、ファイルタイプで指定しました。 とりあえずテキストとgitcommit、後は個別で追加していく。

.config/nvim/lua/config/autocmds.lua

vim.api.nvim_create_autocmd("FileType", {
  pattern = { "text", "gitcommit" }, -- txtファイルは通常filetypeがtext
  callback = function()
    vim.opt_local.spell = false
  end,
})

設定したのはこれだけです。 lazyvimを使用すれば、必須なのはフォント設定と曖昧幅文字への対処位で、他の設定は好みの範囲かと。

後はしばらく使ってみて気になる所が出てこなければ、このまま乗り換えたいと思います。




以上の内容はhttps://ekutajp.hatenablog.com/entry/2026/02/16/134546より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14