lazy.nvimへの移行(プラグインマネージャの変更)
NeoVimのライトな使い方しかしていなかったせいか、特にここ1年問題もなくフツーに使えてた。
でも、プラグインの管理に使っていたPacker.nvimのメンテナンス終了のアナウンス。
NOTICE: This repository is currently unmaintained. For the time being (as of August, 2023), it is recommended to use one of the following plugin managers instead:
じゃあ、ちょうどいいからプラグインの管理プラグインを変更して、プラグインも見直してみようかと。 Packerがお勧めしているのはこの二つ。
lazy.nvim: Most stable and maintained plugin manager for Nvim.
pckr.nvim: Spiritual successor of packer.nvim. Functional but not as stable as lazy.nvim.
じゃあ安定性を優先してlazy.nvimに。
ちなみに、色々やるならdpp.vimが面白いのは間違いないと思う。
github.com
インストールと初期設定
Packerを使っていたときには、
というやり方でやってた。
これがlazyになると、
と、管理が楽になった。
一番最初の.config/nvimの中身はこれだけ
─nvim │ init.lua │ └─lua 001_core.lua 002_keymap.lua 100_lazy.lua
init.luaはこれだけ
-- luaで作成 require('001_core') require('002_keymap') require('100_lazy')
001_coreと002_keymapの内容は
からあまり変わってない。
肝心の100_lazy.luaはこんな感じ
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not vim.loop.fs_stat(lazypath) then vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", -- latest stable release lazypath, }) end vim.opt.rtp:prepend(lazypath) require('lazy').setup('plugins', opts)
これは最後の行以外は、プラグインの説明ページを貼り付けただけ。
ちなみに、最初のほうに書いているのは、決まったフォルダにlazy.nvimがあるかをチェックして
lazy.nvimがなかったらgit cloneコマンドでlazy.nvimをとってくるという内容
プラグインの保管場所は「vim.fn.stdpath("data") .. "/lazy/lazy.nvim"」ということ
これがどこかを調べたいならコマンドラインモードで
:lua print(vim.fn.stdpath("data"))
でチェックすることができる
100_lazy.luaの最後に記載した「plugins」がプラグインの設定ファイル名plugins.luaを使いますという意味になるみたい。
これをpluginsというフォルダにすることで、1プラグイン1ファイルで設定していくことが可能になる。
試しにカラースキームのKanagawaをインストールするとこんな感じ
└─nvim │ init.lua │ └─lua │ 001_core.lua │ 002_keymap.lua │ 100_lazy.lua │ └─plugins kanagawa.lua
ちなみに配布元はこちら
このプラグインをインストールするときに「100_lazy.lua」にはなにも記載していない。
kanagawa.luaはこんな感じ
return{ 'rebelot/kanagawa.nvim', event = "VimEnter", config = function() vim.cmd.colorscheme "kanagawa" end, }
設定ファイルは「return{」で始まって「}」で終わる
最初にどこからダウンロードするか?githubだとこの書き方でOK
次はどのタイミングでプラグインを読み込むか?
lazy.nvimはプラグインを読み込むタイミングを遅らせることで、neovim本体の起動時間を早めることができる
今回はvimを開いたときなので「event="VimEnter"」になる。タイミングは色々あるので、配布元のページを確認したほうがいい。
最後にconfigの行で、プラグインを使ってなにをするのかやkeymapをここに書いていく。
書き方がいくつかあるみたいなので、統一した書き方ができるようにしておきたい。
この状態でNeovimを再起動したら、プラグインのインストール画面が最初に自動で起動する。
qキーでインストール画面が閉じられて、今回はKanagawaのカラースキームが設定されて表示された。
Neovimでのgit用プラグインneogit
gitは使って当たり前のこの状況で、vimでコード書いて、ターミナルでgitコマンドを実行というのは非常にもたつく。
なのでvim上でadd,commit,pushができると便利。
vimのプラグインもあればいろいろあるんですが、neovim用ということで、選んだのはこれ
いつものようにplugins.luaに
use{ 'TimUntersberger/neogit' }
を追記して、再起動、:PackerInsall 、:PackerCompileで再起動すればOK
(このプラグインはPlenary.nvimが必要だけど、Telescopeのときにインストールしてるから問題なし。 )
keymapの設定はしてないので
:Neogit
と入力して新しいタブが開く。このときgitで管理してないフォルダ(.gitがないフォルダ)で開いてもなにも表示されない。
1.Neogitの起動
例えば~/.config/nvim/lua/plugins.luaを編集して保存。そのフォルダーで
:Neogit
を実行すると、別タブでNeogitが起動する。
この状態だとUnstagedにplugins.luaが表示される。
2.ファイルをstagedへ
ファイルに移動して「s」キーでstagedに移動する
3.ファイルをcommit
「c」キーでcommit。一回ヘルプ画面がでてくるけど、そこでも「c」キー入力でコミット画面に。何も設定してないので画面分割で表示。コメントを記載して「:wq」 保存して終了しようとするとcommitする?と確認してくるので、yをおすとstagedがunmergedに
4.ファイルをPush
最後に「P」(大文字のp)でPush
ここでも再度確認してくるので、内容を確認してpush。メッセージが何度かでて、ファイルがpushされる。
こうやってadd(stage)、commit、pushが全部vim上でできた。 この画面も:qで終了するだけ。
NeovimでのFuzzyFileFinder「Telescope」を使ってみる
vimでFuzzyFinderといったら国内ではShougoさんのUniteやDeniteから始まり今はdduが広まってきてます。
海外はCTRL-Pやfzfが有名ですが、Neovim環境というとTelescopeが有名な模様。
なんでTelescopeなのか?
この記事とか読んで、ほんとはddu使いたかったけど、職番環境でDeno使えなかったら。
Telescopeだとluaで書いているので、プラグイン2つ入れたら使える。
インストールはPackerで。 Pluginを管理しているplugins.luaに
use{ 'nvim-lua/plenary.nvim'} use{ 'nvim-telescope/telescope.nvim'}
を追加。再起動して、
:PackerInstall
:PackerCompile
するだけで終了。
再起動して
:Telescope find_files
と入力するだけで、すぐ動く。
ファイル名やpathの一部だけで探してくれるので快適。検索欄に日本語入力してもいけた。
終了するときはESCかCTRL+Cで終了。
ESCはこの画面のNormalモードのとき。最初は画面した側の入力欄でInsertモードになってるので、1回目のESCでNormalモードに。NormalモードでのESCで終了になる。
Telescopeではどんな内容を探すのかというのでPickerというのが準備されてる。
ファイル名だけでなく、いろいろあるので組み込みのを使ったり、増やしたりとほんと多機能。
最初は多いので、find_filesとbuffersとhelp_tagsだけ試してみてもいいんじゃないかと。
buffer切り替え用のbuffersはほんと便利。
キーマップを設定することでコマンドの入力も簡単に
-- これは記入済 vim.keymap.set('n', 's', '<NOP>',{noremap = true}) -- 今回追加分 vim.keymap.set('n', 'sf', '<cmd>lua require("telescope.builtin").find_files()<cr>',{noremap = true}) vim.keymap.set('n', 'sb', '<cmd>lua require("telescope.builtin").buffers()<cr>',{noremap = true}) vim.keymap.set('n', 'sh', '<cmd>lua require("telescope.builtin").help_tags()<cr>',{noremap = true})
こうすればNormalモードで
- s + f でファイル検索
- s + bでバッファ一覧
- s + hでヘルプ一覧
が表示される。これから機能追加していくけど、公式ページの説明見るだけでも面白そう。
Neovim起動時の表示を差し替えるAlpha-nvim プラグイン
起動したときの表示を変更したくなったのでプラグインを入れてみた。
Packerでインストールするために plugins.luaに追記
use{'goolord/alpha-nvim'}
再起動してコマンド実行
:PackerInstall
:PackerCompile
コンフィグファイルをlua\104-alpha.luaに記載して読み込むために init.luaに追記
require('104-alpha')
104-alpha.luaを作成して記載
local status_ok, alpha = pcall(require, "alpha") if not status_ok then return end require('alpha').setup(require'alpha.themes.dashboard'.config)
プラグインの有無を確認し dashboardテーマを読み込んで起動するようにしている。
サイトには説明がなかったが、
ここに説明や例があった。
プラグインをインストールしたら
:h alpha-example
:h alpha-configuration
でヘルプファイルを見れるとのこと。
細かい編集は行わずに、そのまま起動してみた。
活用したらいろいろとできそう。
luaでNeovimのコンフィグファイルを書くときのTip
少しずつプラグインが増えてきて、それに合わせて設定ファイルが増えてくる。 思ったのと違ったと思って、プラグインを削除しても、コンフィグファイルが残っているとエラーが表示される。 それを避けるためにコンフィグファイルの冒頭にプラグインが読み込まれているか確認したほうがいい。
この記事を読んでからずっと真似していて、
if empty(globpath(&rtp, 'autoload/lsp.vim')) finish endif
を使ってた。
これがluaになったときにどうしたらいいのかと悩んでたけど、
ここにちゃんと書いてたのに気づいてなかった。 モジュールの項目に
local ok, _ = pcall(require, 'module_with_error') if not ok then -- not loaded end
との例が。 ほかの人のコンフィグを見て、以下のように書いてる。
例えばlualineのプラグイン設定の場合
local status_ok, lualaine = pcall(require, "lualine") if not status_ok then return end
冒頭にこの内容を記載してから、プラグインごとの設定を書いて整理しやすい状態を作っていけそう。
VImで使用するChangelogメモ
日々の記録をつけることはとても重要ですが、業務日誌みたいなものまでいかず、とにかくメモを残しておきたいということで、常に使っているのがChangelogでのメモ。横着プログラミング 第1回: Unixのメモ技術のサイトで見たことがある人も多いかと思うけど、このメモをずっと続けてる。大事なのが続けることで、メモし忘れても今日はメモを始めて何日目か?天気は何か?だけはめもしてる。
このメモをvimを使って続けていて、あまりに基本的なんだけど、すぐ忘れてしまうので、ここに記載しておく。
基本はデフォルトで入っているftpluginのみを使用 keymapにLeaderの設定を忘れずに 本来は複数人がいろんな場所から記録するメモだけど、一人だけ同じ場所でやってるのでユーザー名はシンプルに
参考にするのはvim-jp » Hack #28: changelogを記述する
普通のvimscriptだと
let g:changelog_timeformat = "%Y-%m-%d" let g:changelog_username = "homaji"
今はNeovimのためにluaにしているので
vim.g.changelog_timeformat = "%Y-%m-%d" vim.g.changelog_username = "homaji"
keymap設定で、<Leader>は半角スペースに設定
[第3回] Neovimのすゝめ – キーマップを作成する │ wonwon eaterここを参考にしたけど、
Space and Shift なんてマニアックなものを使ってるとただのSpaceがうまく認識しないことも多いけど、" "を認識ということであれば問題ない。
というわけでkeymapの設定に追加
vim.g.mapleader = ' '
ここまでやれば<Leader>+ o でエントリーを追加できる。
Changelogを使用するときに注意することは
- ファイル名が"ChangeLog","Changelog","changeLog","changelog"で始まっていること
- 拡張子は問題ないので、Changelog.memoでもいいし、Changelog.txtでもいい
- 二つ同時にChangelogファイルを開くと、二つ目ではうまく動かない
ここまでやっておけば、快適なメモ生活ができるのであとは毎日蓄積していくことがとにかく大事。
Neovimのステータスラインとウィンドウの切り替え
vimの設定をするときによく使うlaststatus。
何も考えずにlaststatus=2とやってたけど、この機能が変更されてるとは知らなかった。
laststatus = 0 → ステータスライン非表示 laststatus = 1 → 画面分割をして2個以上あるときに表示1個なら非表示 laststatus = 2 → ステータスラインを常に表示
Neovimの新しい機能が laststatus = 3 → 常に最下部に表示しているウィンドウのステータス情報を表示
基本設定になるので、lua/001_core.luaに 設定を追記
vim.opt.laststatus = 3
この機能はカッコイイんだけど、ウィンドウが増えると、いまどのウィンドウにいるかわからなくなるので、それ用のプラグイン入れることにした。
use{'tkmpypy/chowcho.nvim'}
を追記。
init.lua 追記
require('102-chowcho')
require('chowcho').run()
:PackerInstall
:PackerCompile
をしてOK
:Chowcho とコマンドを入力したら画面の番号が表示
そのまま番号を入力したら、選択してウィンドウに移動。