neovimをがんばった記録
インストール
環境はWindows
一応あとで消しやすいようにインストーラーでドン。
Scoopとかにすると絶対入れたか入れてないか忘れる。
neovimの中身をグラフィック~な感じにする挙げ句、最初からいろいろなプラグインが入ってたりするやつをどっち選ぼうか迷う。
White-keyを開くとprefixってでるだけで……。多分設定してあげたらいいんだろうけどめんどうくさい
起動は遅いかもしれないが、キーマッピングが割とわかりやすい。
結局AstroVimくんに。でもいろいろはいってるものの殆どは無効化させてしまった。勿体ないが、慣れたらそのうちnvchadくんにするよ。それか、LazyVim
init.luaやらもろもろ
オプション系。
-- エンコーディング設定
vim.scriptencoding = "utf-8"
vim.opt.encoding = "utf-8"
vim.opt.fileencoding = "utf-8"
-- 表示設定
vim.opt.number = true -- 行番号を表示
vim.wo.number = true
vim.wo.relativenumber = false -- 相対行番号を無効化
vim.opt.title = true -- ウィンドウタイトルを表示
vim.opt.cursorline = false -- カーソル行のハイライトを無効にする
vim.opt.termguicolors = true -- GUI カラーを使用する
vim.opt.signcolumn = "yes" -- 行番号表示の横に余白を追加
vim.opt.wrap = true -- 行を折り返す
-- インデント設定
vim.opt.autoindent = true -- 自動インデントを有効化
vim.opt.smartindent = true -- スマートインデントを有効化
vim.opt.expandtab = false -- タブをスペースに変換
vim.opt.smarttab = true -- スマートタブを有効化
vim.opt.shiftwidth = 2 -- インデントの幅を2に設定
vim.opt.tabstop = 2 -- タブ幅を2に設定
-- 検索設定
vim.opt.hlsearch = true -- 検索結果をハイライト
vim.opt.ignorecase = true -- 検索時に大文字小文字を区別しない
vim.opt.inccommand = "split" -- インクリメンタル検索結果を分割表示
-- マウス設定
vim.opt.mouse = "a" -- マウス操作を有効化
-- バックアップ・スワップファイル設定
vim.opt.backup = false -- バックアップファイルを作成しない
vim.opt.swapfile = false -- スワップファイルを生成しない
-- スクロール設定
vim.opt.scrolloff = 10 -- カーソルの上下に余白を確保
-- コマンド設定
vim.opt.showcmd = true -- コマンドを表示
vim.opt.cmdheight = 0 -- コマンドラインの高さを0に設定
vim.opt.laststatus = 3 -- グローバルステータスライン
-- ディレクトリ設定
vim.opt.autochdir = true -- カレントディレクトリを自動変更
-- クリップボード設定
vim.opt.clipboard = "unnamedplus" -- クリップボードとレジスタを共有
-- ヘルプ設定
vim.opt.helplang = "ja" -- ヘルプの言語を日本語に設定
-- タイムアウト設定
vim.opt.updatetime = 300 -- カーソルホールドの更新時間
vim.opt.ttimeoutlen = 1 -- キーマッピングのタイムアウト時間
-- バックスペース設定
vim.opt.backspace = 'indent,eol,start' -- バックスペースを有効化
-- 仮想編集設定
vim.opt.virtualedit = 'onemore' -- 行末の1文字先までカーソルを移動可能にする
-- フロートウィンドウ設定
vim.opt.winblend = 5 -- フロートウィンドウなどを若干透明に
-- グローバルオプション
vim.opt.sidescrolloff = 0 -- 横スクロールオフセットを無効にする
vim.wo.sidescrolloff = 0 -- カレントウィンドウの横スクロールオフセットを無効にする
-- デフォルトのスクロールバーを無効にする
vim.wo.foldcolumn = "0" -- 折りたたみ列を無効にする
あとおまけでDenopsやPythonもPathをつなげておく。
-- Python3
vim.g.python3_host_prog = '置いてある場所/python.exe'
vim.g["denops#deno"] = '置いてある場所/.deno/bin/deno'
そして、astrocore.lua astroui.lua以外の既存ファイルの1行目をコメントアウトして有効化していく。
せっかく使ってるのにcoreとuiを消すとはいかがなものか。勿体ないがこれでいいや……。
起動画面 alpha-vim
起動したときの画面。絵を変えたかったので必死に変更。
{
"goolord/alpha-nvim",
event = "VimEnter", -- Lazy-load on entering Vim
opts = function(_, opts)
opts.section.header.val = {
"⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡤⠴⠒⠒⠒⠶⢤⣄⡀⠀⠀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⣠⠞⠁⠀⠀⠀⠀⠀⠀⠀⠈⠙⢦⡀⠀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⡼⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢳⡀⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⢸⠁⠀⠀⣠⠖⠛⠛⠲⢤⠀⠀⠀⣰⠚⠛⢷⠀⠀⠀⠀",
"⠀⠀⠀⠀⠀⣿⠀⠀⣸⠃⠀⠀⢀⣀⠈⢧⣠⣤⣯⢠⣤⠘⣆⠀⠀⠀",
"⠀⠀⠀⠀⠀⣿⠀⠀⡇⠀⠀⠀⠻⠟⠠⣏⣀⣀⣨⡇⠉⢀⣿⠀⠀⠀",
"⠀⠀⠀⠀⢀⡟⠀⠀⠹⡄⠀⠀⠀⠀⠀⠉⠑⠚⠉⠀⣠⡞⢿⠀⠀⠀",
"⠀⠀⠀⢀⡼⠁⠀⠀⠀⠙⠳⢤⡄⠀⠀⠀⠀⠀⠀⠀⠁⠙⢦⠳⣄⠀",
"⠀⠀⢀⡾⠁⠀⠀⠀⠀⠀⠤⣏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠃⠙⡆",
"⠀⠀⣼⠁⠀⠀⠀⠀⠀⠀⠀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀⢠⡏⠀⠀⡇",
"⠀⠀⣏⠀⠀⠀⠀⠲⣄⡀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⢸⠀⢀⡼⠁",
"⢀⡴⢿⠀⠀⠀⠀⠀⢸⠟⢦⡀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠘⠗⣿⠁⠀",
"⠸⣦⡘⣦⠀⠀⠀⠀⣸⣄⠀⡉⠓⠚⠀⠀⠀⠀⠀⠀⠀⠀⡴⢹⣦⡀",
"⠀⠀⠉⠛⠳⢤⣴⠾⠁⠈⠟⠉⣇⠀⠀⠀⠀⠀⠀⠀⣠⠞⠁⣠⠞⠁",
"⠀⠀⠀⠀⠀⠀⠙⢧⣀⠀⠀⣠⠏⠀⠀⢀⣀⣠⠴⠛⠓⠚⠋⠀⠀⠀",
"⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠋⠉⠉⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀",
}
return opts
end,
},
カラースキーム github-nvim.theme
間違いなくastrouiで指定しろって話なんですが。まぁいいやということで普通に書いた。
{
'projekt0n/github-nvim-theme',
event = 'VimEnter', -- Lazy-load on entering Vim
config = function()
require('github-theme').setup({})
vim.cmd('colorscheme github_dark')
end,
},
ステータスライン Lualine.nvim
{
"nvim-lualine/lualine.nvim",
dependencies = { "nvim-tree/nvim-web-devicons" },
event = "VeryLazy", -- Lazy-load when required
config = function()
require("plugins.config.lualine")
end,
},
で、Pluginsフォルダの中にConfigフォルダを作って、「lualine.lua」ファイル名で、以下のやつをコピペ。
私の画面はコマンドラインが消えているんですがinit.luaで下記の部分が作用しているからです。
グローバルステータスラインの「3」についてはほかにも0~2があるのでぐぐると幸せになれると思います。大体3でいいとおもうけど。
vim.opt.cmdheight = 0 -- コマンドラインの高さを0に設定
vim.opt.laststatus = 3 -- グローバルステータスライン
あと、文字数をカウントする方法もあった。
バッファライン Bufferline.nvim
画面開いたときのなんか上の方のタブ……多分。タブだけに
{
"akinsho/bufferline.nvim",
version = "*",
event = "VeryLazy", -- Lazy-load when required
dependencies = "nvim-tree/nvim-web-devicons",
},
日本語入力関連
- 前提として「denops」が必須
- 入力にSKKのskkeleton
- 補完にnvim-cmp
denops
init.luaでdenoのPathを通してたのはこのため。
-- plugin.luaあたりのプラグインをまとめてインスコするためのファイルに以下を追加
{"vim-denops/denops.vim"},
skkeleton
本当に一番大変だった……。
-- plugin.lua内記載
{
"vim-skk/skkeleton",
dependencies = {
"vim-denops/denops.vim",
{
"delphinus/skkeleton_indicator.nvim",
event = { "VeryLazy", "InsertEnter", "CmdlineEnter", "CmdwinEnter" },
opts = { fadeOutMs = 0 },
config = function()
require("skkeleton_indicator").setup()
end,
},
},
config = function()
require("plugins.config.skkeleton").setup()
end,
},
-- plugins/config/skkeleton.lua
local skkeleton = {}
function skkeleton.setup()
-- skkeletonの設定
vim.fn['skkeleton#config']({
globalDictionaries = { { "辞書の場所/SKK-JISYO.L", "euc-jp" } },
sources = { 'skk_server' }, -- skkserverを利用する
eggLikeNewline = true, -- 変換モードで改行したときに、確定だけ行う(改行しない)
-- completionRankFile = {"適当な場所/rank.json"}
})
vim.fn["skkeleton#register_kanatable"]("rom", {
jj = "escape",
ll = "disable",
-- 既存のルールに追加 Google日本語入力くんとおなじことをした
['d['] = {'『', ''},
['d]'] = {'』', ''},
['s['] = {'《', ''},
['s]'] = {'》', ''},
['f['] = {'【', ''},
['f]'] = {'】', ''},
['q['] = {'★', ''},
['q]'] = {'☆', ''},
['s-'] = {'゛', ''},
['d-'] = {'゜', ''},
['g['] = {'。', ''},
['g]'] = {'、', ''},
['g-'] = {'……', ''},
['g\\'] = {'♡', ''},
['g='] = {'————', ''},
['l1'] = {'#', ''},
['l2'] = {'##', ''},
['l3'] = {'###', ''},
['l4'] = {'####', ''},
['l5'] = {'#####', ''},
['l6'] = {'######', ''},
['r]'] = {'"', ''},
['r['] = {'・', ''},
})
end
return skkeleton
-- 適当なキーマップ用luaファイルにskkeleton用キーマップ追加
-- Ctrl+Jでskkeletonでひらがな入力開始~
keymap_api('i', '<C-j>', '<Plug>(skkeleton-toggle)', { noremap = true, silent = true })
keymap_api('c', '<C-j>', '<Plug>(skkeleton-toggle)', { noremap = true, silent = true })
keymap_api('t', '<C-j>', [[<C-\><C-n><Plug>(skkeleton-toggle)]], { noremap = true, silent = true })
参考
入力補完 nvim-cmp
あと、cmp-skkeletonはニ種類同じものがあるけど記載したもののほうをつかった。
{
"hrsh7th/nvim-cmp",
event = "InsertEnter", -- Lazy-load on entering insert mode
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"hrsh7th/cmp-cmdline", --コマンドラインうつときにTAB押すと自動で候補だしてくれる神
"rinx/cmp-skkeleton", -- skkeleton使用中に補完をだすよ
},
config = function()
require("plugins.config.cmp-config")
end,
},
-- plugins/config/cmp-config.lua
local cmp = require('cmp')
local lspkind = require('lspkind')
-- 補完候補でかわいいアイコンだそ~っと
local kind_icons = {
Text = "",
Method = "",
Function = "",
Constructor = "",
Field = "",
Variable = "",
Class = "",
Interface = "",
Module = "",
Property = "",
Unit = "",
Value = "",
Enum = "",
Keyword = "",
Snippet = "",
Color = "",
File = "",
Reference = "",
Folder = "",
EnumMember = "",
Constant = "",
Struct = "",
Event = "",
Operator = "",
TypeParameter = "",
}
cmp.setup {
sources = {
{ name = 'nvim_lsp' },
-- { name = 'buffer', option = {
-- disable_filetypes = { 'txt','md' }
-- } },
-- 鬱陶しいから消しちゃったバッファー
{ name = 'path' },
{ name = 'cmdline' },
{ name = 'skkeleton' }
},
window = { -- 補完候補の画面。しろぶちラウンドはかわいい
completion = {
border = 'rounded',
winhighlight = "Normal:transparentBG,FloatBorder:transparentBG,Search:None",
col_offset = -3,
side_padding = 1,
},
},
view = {
entries = 'custom',
docs = { -- 入力したら補完候補一覧の横に説明画面が出るのはいらない。
auto_open = false
},
},
formatting = {
format = lspkind.cmp_format({
mode = 'symbol', -- アイコンだけ表示にして。
maxwidth = 50,
show_labelDetails = false,
before = function (entry, vim_item)
return vim_item
end
}),
},
-- 補完候補が出てる間はTABで選べる
mapping = cmp.mapping.preset.insert({
["<Tab>"] = cmp.mapping.select_next_item(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
["<C-l>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.abort(),
}),
}
-- autocmd で skkeleton のイベントにフックして関数を実行
function _G.cmp_enable_skk()
cmp.setup.buffer({
sources = cmp.config.sources({
{ name = 'skkeleton' }
})
})
end
function _G.cmp_disable_skk()
cmp.setup.buffer({
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'path' },
{ name = 'cmdline' },
})
})
end
vim.cmd([[
augroup skkeleton_cmp
autocmd!
autocmd User skkeleton-enable-pre lua _G.cmp_enable_skk()
autocmd User skkeleton-disable-pre lua _G.cmp_disable_skk()
augroup END
]])
なんかコマンドをTab補足変換する部分が上の方にあるな。なんだ?まぁいいか……
通知やらコマンドラインやら noice.nvim
この横からおしゃれ通知と上の画像のコマンドラインを真ん中におしゃれ~~にだしてくれる。
{
"folke/noice.nvim",
event = "VeryLazy", -- Lazy-load when required
dependencies = {
"MunifTanjim/nui.nvim",
"rcarriga/nvim-notify",
},
config = function()
require("plugins.config.noice")
end,
},
-- plugins/config/noice.lua
require("noice").setup({
cmdline = {
view = "cmdline_popup", -- コマンドラインをポップアップ表示にする
opts = {
position = {
row = '50%', -- 画面の中央に配置
col = '50%', -- 画面の中央に配置
},
size = {
width = 'auto', -- 自動で幅を調整
height = 'auto', -- 自動で高さを調整
},
},
},
messages = {
enabled = false, -- enables the Noice messages UI
},
lsp = {
hover = {
enabled = false, -- NoiceのLSPホバー機能を無効化
},
signature = {
enabled = false, -- NoiceのLSPシグネチャヘルプ機能を無効化
},
-- override markdown rendering so that **cmp** and other plugins use **Treesitter**
override = {
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
["vim.lsp.util.stylize_markdown"] = true,
["cmp.entry.get_documentation"] = true, -- requires hrsh7th/nvim-cmp
},
},
-- you can enable a preset for easier configuration
presets = {
bottom_search = true, -- use a classic bottom cmdline for search
command_palette = true, -- position the cmdline and popupmenu together
long_message_to_split = true, -- long messages will be sent to a split
inc_rename = false, -- enables an input dialog for inc-rename.nvim
lsp_doc_border = false, -- add a border to hover docs and signature help
},
})
便利なやつ
いろいろな種類のZenmode実装プラグインがあるけど、これが一番シンプルで使いやすかった。
{
"folke/zen-mode.nvim",
cmd = "ZenMode", -- Lazy-load on ZenMode command
config = function()
require("plugins.config.zen-mode")
end,
},
-- plugin/config/zen-mode.lua
require("zen-mode").setup({
window = {
backdrop = 0.95, -- Zenウィンドウの背景のシェード。1に設定するとNormalと同じに保つ
width = 100, -- Zenウィンドウの幅
height = 1, -- Zenウィンドウの高さ
options = {
signcolumn = "no", -- サインカラムを無効化
number = false, -- 行番号カラムを無効化
relativenumber = false, -- 相対行番号を無効化
cursorline = false, -- カーソルラインを無効化
cursorcolumn = false, -- カーソルカラムを無効化
foldcolumn = "0", -- フォールドカラムを無効化
list = false, -- 空白文字を無効化
},
},
plugins = {
options = {
enabled = true,
ruler = false, -- コマンドラインエリアのルーラーテキストを無効化
showcmd = false, -- 画面下部のコマンドを無効化
laststatus = 3, -- Zenモードでステータスラインを表示'laststatus' を設定することでZenモードでステータスラインのオン/オフを切り替え可能
},
twilight = { enabled = true }, -- Zenモードが開いたときにTwilightを有効化
gitsigns = { enabled = false }, -- gitサインを無効化
},
})
Gitのアイコン gitsigns.nvim
変更箇所があると行数のあたりにながーい棒がでるんだけど、目障りだったから+にした。
{
"lewis6991/gitsigns.nvim",
config = function()
require("gitsigns").setup {
signs = {
add = { text = '+' },
change = { text = '+' },
delete = { text = '-' },
topdelete = { text = '‾' },
changedelete = { text = '~' },
untracked = { text = '=' },
},
}
end,
},
とっさのメモ flote
グローバルメモとプロジェクトメモが別に取れるのがすばらしい。メモ一覧とかいいんだ。小説とか書いてるときにぱっとボタン押したらその小説のプロットがでてきたら凄い楽じゃん。
init.lua
vim.opt.conceallevel = 2 -- または 1
Lazy
-- obsidian
{
"epwalsh/obsidian.nvim",
version = "*", -- recommended, use latest release instead of latest commit
lazy = false,
ft = "markdown",
dependencies = {
-- Required.
"nvim-lua/plenary.nvim",
},
opts = {
workspaces = {
{
name = "Idea",
path = "/Dropbox/Idea",
overrides = {
notes_subdir = "memo",
},
},
{
name = "obsidian",
path = "/Dropbox/obsidian",
},
},
new_notes_location = "notes_subdir",
preferred_link_style = "markdown",
disable_frontmatter = true,
},
},