Neovimのステータスラインをlualine.nvimにする
ステータスラインはvimの見た目で一番めを引くところ。
そこをプラグインで管理すると、まったく違う見た目にすることが簡単に。
luaで設定するため、いつものlightlineではなくlualine.nvimに
インストールはPackerで実施 作成した.config\nvim\lua\plugins.luaに
use { 'nvim-lualine/lualine.nvim', requires = { 'kyazdani42/nvim-web-devicons', opt = true } }
を追記。これはlualineを入れるときにはnvim-web-deviconsも一緒にいれてという設定。
設定ファイルを再読み込みするか、再起動して:PackerInstallを実施したら、2つのプラグインがインストールされる。
lualineの設定は.config\nvim\lua\101-lualine.luaを作成し、まずは公式の基本設定をコピー 次にinit.luaにrequie('101-lualine')の追記も忘れずに。 init.lua
require('001_core') require('002_keymap') require('plugins') require('101-lualine')
101-lualine.lua
require('lualine').setup { options = { icons_enabled = true, theme = 'auto', component_separators = { left = '', right = ''}, section_separators = { left = '', right = ''}, disabled_filetypes = {}, always_divide_middle = true, globalstatus = false, }, sections = { lualine_a = {'mode'}, lualine_b = {'branch', 'diff', 'diagnostics'}, lualine_c = {'filename'}, lualine_x = {'encoding', 'fileformat', 'filetype'}, lualine_y = {'progress'}, lualine_z = {'location'} }, inactive_sections = { lualine_a = {}, lualine_b = {}, lualine_c = {'filename'}, lualine_x = {'location'}, lualine_y = {}, lualine_z = {} }, tabline = {}, extensions = {} }
この設定が適用されるとこんな感じ
Neovimのプラグイン管理Packer.nvim
Packer.nvimのインストール
vim-plugやdeinが有名なプラグインマネージャですが、luaオンリーでいくならPacker.nvimしかない。
色々調べたけど、がっつり設定を書いて、速い環境を構築するならdein よくわからないけど、簡単にやりたいならvim-plug フォルダにプラグインをいれるだけの方法ももちろんある
とりあえず、luaのみで環境構築するなら、これが簡単そうなのでいれてみた。 やり方はまずは公式が正義。 Windows環境でのインストールはPowerShell画面で
git clone https://github.com/wbthomason/packer.nvim "$env:LOCALAPPDATA\nvim-data\site\pack\packer\start\packer.nvim"
このときインストールフォルダが$env:LOCALAPPDATAの設定になっている。 WindowsでXDG_DATA_HOMEの設定をしていても、こんな風に案内しているのも多いので、XDG_DATA_HOMEとLOCALAPPDATAは同じパスにしておくと混乱がない。
続いてPackerの設定を書き込むために、 .config/nvim/lua フォルダに plugins.luaファイルを作成。拡張子はともかくファイル名は自由。 このファイル名をinit.luaに書き込むことだけは忘れないように。
init.lua
require('001_core') require('002_keymap') require('plugins')
plugins.lua
vim.cmd [[packadd packer.nvim]] return require('packer').startup(function() use{ 'wbthomason/packer.nvim', opt = true} end)
vimを再起動して、:PackerInsallを実行するといきなりpacker.nvimを削除するか?と聞かれる。
これはインストール時の内容がコンフィグには書いてないから。
Packerはコマンドを実行したときだけ動けばいいので、startフォルダに入れず、optフォルダに入れるように設定している。
この記載内容は公式からとってきた。
なので、コマンドを実行すると、
起動時に読み込まれる AppData\Local\nvim-data\site\pack\packer\ start
ではなく、
必要なときに呼び出す AppData\Local\nvim-data\site\pack\packer\ opt
の中にPacker.nvimが配置される。
init.lua を作る
Neovimの設定はinit.vimでも問題なく動くけども、vimscriptではなくluaを使って記載するinit.luaで作成するようになってます。
自分のホーム(windowsではc:\Users[ユーザー名])に.configフォルダを作成し、その中にnvimフォルダ、さらにluaフォルダを作成。
.config └─nvim ├─init.lua └─lua(フォルダ)
それからnvimでinit.luaを作成する。
require('001_core') require('002_keymap') require('plugins')
通常init.luaに大量に書き込むんだけど、役割を分けて管理することに。
init.luaは呼び込むファイルの記載。それぞれinit.luaと同じ階層にあるluaフォルダ内にあるファイルを読み込んでという指示。 luaにある3つのファイルを指定してる。
luaフォルダには設定ファイルを作っていく。
こんな状態
├─lua │ 001_core.lua │ 002_keymap.lua │ plugins.lua
001_core.luaには基本設定
-- 表示 -- -番号表示 vim.opt.number = true -- -特殊文字表示 vim.opt.list = true vim.opt.listchars = {tab='>-', trail='*', nbsp='+'} -- -エラー時の音を画面表示に vim.opt.visualbell = true -- -括弧の連携 vim.opt.showmatch = true vim.opt.matchtime = 1 -- -ヘルプファイル vim.opt.helplang = 'ja', 'en' -- -tabバーの表示 vim.opt.showtabline = 2 -- 入力時 -- -インデントをC言語風に vim.opt.smartindent = true -- -タブ文字 vim.opt.expandtab = true vim.opt.tabstop = 4 vim.opt.shiftwidth = 4 -- 検索 -- -大文字無視 vim.opt.ignorecase = true -- -大文字で検索したら区別をつける vim.opt.smartcase = true -- -検索が末尾までいったら先頭から検索 vim.opt.wrapscan = true -- カーソル移動 -- - 行を跨いでの移動 vim.opt.whichwrap = 'b', 's', 'h', 'l', '<', '>', '[', ']' -- - 削除時の対象 vim.opt.backspace = 'start', 'eol', 'indent' -- ファイル環境 -- -フォーマット vim.opt.fileformats = 'dos', 'unix', 'mac' -- クリップボード連携 vim.opt.clipboard:append({unnamedeplus = true}) -- マウス有効 vim.opt.mouse = 'a'
002_keymap.luaにはキーマップ関連
-- vim.keymap.set(mode, lhs, rhs, options) -- set s key to Window moving. vim.keymap.set('n', 's', '<NOP>') -- set s+hjkl move to other window vim.keymap.set('n', 'sj', '<C-w>j') vim.keymap.set('n', 'sk', '<C-w>k') vim.keymap.set('n', 'sl', '<C-w>l') vim.keymap.set('n', 'sh', '<C-w>h') -- set s+sv separate window vim.keymap.set('n', 'ss', '<C-w>s') vim.keymap.set('n', 'sv', '<C-w>v') -- set s+nptT move tab vim.keymap.set('n', 'sn', 'gt') vim.keymap.set('n', 'sp', 'gT') vim.keymap.set('n', 'st', ':<C-u>tabnew<CR>') -- set s+qQ kill buffer or close window vim.keymap.set('n', 'sq', ':<C-u>q<CR>') vim.keymap.set('n', 'sb', ':<C-u>bd!<CR>') -- set ESC+ESC Clear Search hilight vim.keymap.set('n', '<ESC><ESC>', ':<C-u>set nohlsearch!<CR>')
調べていると、luaをつかったkeymapの設定には vim.api.nvim_set_keymap を使うパターンと vim.keymap.set を使うパターンがある。
vim.api.nvim_set_keymapはnvimが0.5のころに作られたものでいまはvim.keymap.setを使うとのこと。 ・参考 [noob] vim.keymap.set vs. vim.api.nvim_set_keymap. Key binding questions. Hydra? : neovim
feat(lua): add vim.keymap · neovim/neovim@6d41f65 · GitHub
plugins.luaにはパッケージ管理を記載していく
これは次の記事に。
Neovimの設定を1から
なんとなく興味本位でNeovimを使ってたけど、一番の違いを理解してなかった。
init.vimからinit.luaになってluaで書くように変わってたのね。
いろいろ見ながらやってみたけど、どれもがvimスクリプトからの移行ばかりだったので、1からluaで作成する場合にどうするのか自分のためのメモとして残しておこう。
対象は
の組み合わせ。
Neovimのインストール
Neovimのインストールはwingetを使用。
winget ツールを使用したアプリケーションのインストールと管理 | Microsoft Docs
wingetは11にも10にもインストールされている。ないならMicrosoftStoreから入れればいい。
Microsoft Apps このアプリインストーラーってのがwingetのこと。
wingetを使うのはPowerShellから。
winget search neovim
と入力すると。
名前 ID バージョン ソース
---------------------------------------
Neovim Neovim.Neovim 0.7.0 winget
と表示されるので
winget install Neovim.Neovim
でインストールは完了
WIngetを使用した場合にPATHがおかしかった
c:¥Program Files¥neovim\bin と表記されたせいでうまくPATHが通ってない。(¥は全角表記)
ユーザーのPathに正しくいれても上記のが優先されておかしい状態に。
しょうがないので、scoopを使う
#scoop bucket add versions
#scoop install neovim-nightly goneovim-nightly
でインストールを実施
環境設定
NeovimはmacやLinuxで使用するとXDG Base Directoryを利用して設定ファイル関係がまとめられるのに、Windowsでは~/AppData/Local/nvim/ と決められてる。
ここに設定ファイルとかいろいろ置けばいいんだろうけど、設定ファイルは~/.configにまとめたいので環境変数を設定する。
設定するのは4つ
- neovimのpath。なぜかwingetでinstallしてもpathが追加されてなかったので、"C:\Program Files\Neovim\bin"をpathに追加
- XDG_CONFIG_HOME ここに設定ファイルを置く ~/.config/nvim
- XDG_DATA_HOIME プラグイン関係はここ ~/Appdata/Local/nvim-data
プラグインがこのフォルダを指定するのが多いから、ここにしておく - XDG_CACHE_HOME 一時ファイルの置き場はここ ~/AppData/Local/Temp/neovim
$env:HOME=$env:HOMEDRIVE + $env:HOMEPATH
$env:XDG_CONFIG_HOME="$env:HOME\.config"
New-Item $env:XDG_CONFIG_HOME -ItemType Directory$env:XDG_CACHE_HOME="$env:TEMP\neovim\"
New-Item $env:XDG_CACHE_HOME -ItemType Directory$env:XDG_DATA_HOME="$env:\LOCALAPPDATA"
New-Item $env:XDG_DATA_HOME -ItemType Directory#環境変数を登録
[Environment]::SetEnvironmentVariable('XDG_CONFIG_HOME',$Env:XDG_CONFIG_HOME,'User')
[Environment]::SetEnvironmentVariable('XDG_CACHE_HOME',$Env:XDG_CACHE_HOME,'User')
[Environment]::SetEnvironmentVariable('XDG_DATA_HOME',$Env:XDG_DATA_HOME,'User')
GUIのインストール
前回の記事にはまだ追記してなかったけど、いいのを見つけた
見た目は文句なし!あとはwindowsでもXDG_CONFIG_HOMEを見てほしい。
サイズが44MBあるけど、バイナリ1個とヘルプファイルのみ。neovimへのpathが通っていれば、ダブルクリックするだけでOK
これは、透過とボーダーレスの設定をしたのみ。日本語入力も問題がない。
これでNeovimをWindowsで使う準備ができた。
次はinit.luaを1から設定した内容について記載。
NeovimのGUI比較・Windows版
(2020/6/22 nvyとgoneovimを追記しました) (2023/6/10 Neovideの最新版をチェック)
Neovimは基本ターミナルでの活用が基本で、GUIはオプションといったイメージがあります。そうは言ってもドラッグ&ドロップやりたいし、GUIの利点も享受したいのです。
そこで、NeovimのGUI環境がどうなってるのか調べてみました。
まずは、リスト。
いっとき見ない内に増えすぎじゃね?
この中から、余分な機能がない、シンプルな画面構成であること、Windowsで使えること、コンパイルを自分でやらなくてもバイナリが用意されていることを基準に現状みてみた。
neovim-qt
neovim のGUIといったらまずこれ。
最近は同梱されてるので、何も考えずに使える。
というか、他のを検証している間、これがあることに気づいてなかった。
使ってみて、一番問題がなさそう。
nvui
Neovimに移行しようかと思ったGUI。
とにかくいろんな点においてクール。
でも日本語入力で、変換中の文字が表示されない。これから検討していくとのことで、これからに期待。
2023/06/10 追記
長期間更新がない
neovide
アニメーションカーソルのデモ画面にひかれる人もいるんじゃないかなというSimpleGUI。RUST製ということで、速いんじゃないかと勝手に思い込んで試してみた。
やっぱり日本語が厳しい。Isuueみたら、その辺よく分からないから教えてほしいと書いてあった。ほんとは自分でも書いて、プルリク出すのをやってみたいよなぁ。
2023/06/10 追記
インストールパッケージができてた。
インストールは非常に楽だけど、インライン入力ができない状態。これは解決してない模様。かっこいいのは変わりない。
neoray
これのいいところはexeファイル一つだけ。go製。アニメーションカーソルはないみたい。そして日本語のインライン入力ができない点は同じ。 2023/06/10追記 1年近く更新してないな
nvy
C++で書かれたシンプルなバイナリ。日本語IMEにはきっちり対応しているし、なによりすごいのは142kbというすごい小ささ。 画面をかっこよく飾ることはできないけど、GUIで使うのに必要な機能はきちんと揃ってる。
goneovim
なんでこれを記載してなかったのかがわからないぐらい大本命だった。 バイナリサイズは結構大きいけど、以下のメリットがある。
- 透過対応
- タイトルバーも一体化
- IME問題なし
- その他の追加機能もたっぷり
- XDG_CONFIG_HOMEも対応
- scoopで安定版もnightlyもインストール可能
まとめると。
名称 | 言語 | メリット | 現状 | SKK |
---|---|---|---|---|
neovim-qt | Qt | 最初から同梱 | なんら問題がない | もちろんいける |
nvui | C++, Qt | ほんとカッケー | IME関係の表示が厳しい | 使える |
neovide | RUST | アニメーションカーソルのデモは一見の価値あり | これもIME厳しい | 問題なし |
Neoray | Go | バイナリ1個だけ | IMEの表示は厳しい | 大丈夫! |
nvy | C++ | 最小クラスで必要十分 | IMEもばっちり | SKKもOK |
goneovim | Go | カッコいい! | IME無問題 | そろそろIMEでいいかな |
結論!neovimではSKK使っておけば日本語の問題回避できて、問題なし!
クールなGUIを使いたい人にはSKK使おう!ということで、 github.com
結論変更
goneovimを使えば、neovim快適に使えるし、カッコよくできるよ!
NeoVimのGUI nvui のインストール
NeoVimは基本ターミナル上で使うようになってる。 それだと寂しいので、いろんな環境で使えるようGUIの開発も色々と。
その中で今回選んだのはこちら
なにがいいかというととにかくかっこいい。
起動時のgif画像撮ってみたけど、カーソルがヌルっと移動する気持ちよさが全然再現できてない。
さらに画面透過。ターミナルアプリは基本だろうけど、タイトルバーまで色々と設定できるきもちよさ!
vimのコマンドから画面設定を変更できるようになっている。
つまりvimrcに書けばいけるってこと(かも?) タイトルバーを表示しない「Frameless」モードにして気づいたけど、タイトルバーの表示内容も色々と設定ができる。 これは本当にカッコよくて、面白い。
インストールも圧縮ファイルを解凍するだけ サイトを開いたら、最新版のリリースのリンクをクリック(赤く囲んだところ)
開いたら「nvui-win64.zip」ファイルをダウンロード
ダウンロードして、解凍して、作成されたフォルダの中になるbinフォルダの中にあるnvui.exeを実行するだけ。
もちろんnvimにパスが通っている必要がある。
見た目だけで心躍るようなGUIが見つかったのが非常に嬉しい。