Open4

ラップトップ向けの neovim plugin 設定 Tips

sankantsusankantsu

目的

Neovim は floating window などの機能を使って提供された豊富な plugin が魅力的。
一部デフォルト設定などが大型モニタ使用者向けになっているのではないかと見受けられる場合があり、Laptop の画面で使用するには表示したい情報が切れていたり見えづらかったりというのがしばしばある。
自分は基本固定のモニタを使わず、移動しながらラップトップ画面上で作業することが多いのでラップトップ向けに最適化した設定をしたい。

この Scrap では自分がラップトップ使用時に使っている neovim plugin 設定をまとめる。

sankantsusankantsu

telescope.nvim

telescope.nvim は多機能, 拡張可能な fuzzy finder プラグイン。
ラップトップ使用だとデフォルト設定でファイルプレビューが出てこなかったり、行数が少なくて見づらかったりする。

local telescope = require("telescope")

telescope.setup({
  defaults = {
    layout_strategy = "vertical",
    layout_config = {
      vertical = {
        height = function(_, _, max_lines) return max_lines end,
        preview_cutoff = 0,
        preview_height = 8,
      },
    },
  }
}

設定のおおまかな構成としては、layout_strategy でおおまかな配置の種類を決めて、layout_config.<layout_strategy> で細かい設定を書く。

layout_strategy はデフォルトだと "horizontal" だが、これだと preview の幅が狭く、preview 中の行が見通せないことが多い。"vertical" だと preview と results の表示行数は減るがそれでも個人的にはこちらのほうが見やすい。
preview_cutoff 0 にしないとそもそも preview が表示されなかったりする。
height は画面縦幅いっぱい使うように設定。
preview_height は results と preview の表示割合の好みに合わせて調整。

telescope-filebrowser

telescope-filebrowser.nvim はファイル, ディレクトリ操作を neovim 内部から行うための拡張。
自分自身は現在使っていないが、過去に設定したので再度使うときのためのメモ。

ディレクトリの表示が ls -l 表示だと長過ぎてディレクトリ名が見えなくなったりする。
vertical layout だとあまり気にならないかもしれないが horizontal layout だと特に preview でディレクトリの中身がほとんど見えなくなるので致命的。

result の表示と preview の表示でそれぞれ設定がある。

  • result の表示は extensions 内の設定で display_state を設定
  • preview の表示は telescope.nvim 本体の builtin previewer が使われているのでそちら側で ls_short を設定
telescope.setup({
  preview = {
    ls_short = true,
  },
  extensions = {
    file_browser = {
      display_stat = false,
    },
  },
})
sankantsusankantsu

nvim-nuvbuddy

nvim-nuvbuddy は、パンくずリスト (今どの関数の中にいるかとか) を見ながらファイル間を移動できるようにしてくれるプラグイン。
とても便利なのだが、いかんせんデフォルト設定だと画面が小さい。
また、画面中心に popup が出ると編集中のバッファの表示がつぶれるのでせっかくファイル内の位置を示してくれてもどこだかわかりにくい。

そこで、画面中心の popup ではなく画面上下の split 風に、画面下部に横幅いっぱいにひろげるようにするとわりと見やすい。

require('nvim-navbuddy').setup {
  window = {
    size = { height = "40%", width = "100%" },
    position = { row = "100%", col = "50%" },
  },
}
sankantsusankantsu

lualine.nvim

lualine.nvim は人気のステータスライン (statusline) カスタマイズ用プラグイン
豊富なコンポーネントを使ってステータスラインをリッチな見た目にカスタマイズできる。

手軽にきれいめな見た目のステータスラインをつくれるが、富豪的に横幅を使える広いモニタ画面を想定してかデフォルト設定ではやや必要度が低いと思われる情報を含めいろいろ詰め込まれている感じがする。
nvim-navic の breadcrumbs などの情報をステータスライン上に置こうとするとスペースの狭さが目立つ。 (breadcrumbs のステータスライン表示自体がテキスト幅の広い環境向けなんじゃないかという説はあるが...)
(他の選択肢として、breadcrumbs は lspsaga.nvim などを使って winbar (上部) に表示するという人もいるだろう)

表示項目の設定は、sections をいじることで変えられる。
statusline の左側に表示する項目を lualine_a, lualine_b, lualine_c, 右側に表示する項目を lualine_x, lualine_y, lualine_z で表示内容を設定できる。
デフォルトは以下のような感じ

require("lualine").setup({
  sections = {
    lualine_a = {'mode'},
    lualine_b = {'branch', 'diff', 'diagnostics'},
    lualine_c = {'filename'},
    lualine_x = {'encoding', 'fileformat', 'filetype'},
    lualine_y = {'progress'},
    lualine_z = {'location'}
  },
})

デフォルト設定のうち特に lualine_x あたりはかさばるわりに情報量が少ない感じがしてしまう (正直 encoding, fileformat あたりは参考にしたことがない)。
lualine_y, lualine_zなども :set number で行数ファイル中に行数表示していればいらないという人もいるかもしれない (diagnostics との対応で何列目か見たい場合はあるかな?)。
lualine_a のモード表示も modes.vim などのプラグインで代用すれば statusline 上には置かなくても良いという選択もある。

かなりスリムにしたステータスラインの一例が以下になる。
細かいところは好みによって調節しよう。

require("lualine").setup({
  sections = {
    lualine_a = { },
    lualine_b = { "branch", "diagnostics" },
    lualine_c = { "filename", },
    lualine_x = { "filetype", },
    lualine_y = { },
    lualine_z = { "location", },
  },
})