up:: Vim
設定は~APPDATA\Local\nvim\init.lua。
分からない場合でも:echo stdpath('config')
で見つかる。
-- jjでインサートモードからノーマルモードに変更
vim.api.nvim_set_keymap('i', 'jj', '<Esc>', { noremap = true, silent = true })
-- システムクリップボードを使用
vim.opt.clipboard:append({"unnamedplus"})
Neovim Part1.5 ~jjとクリップボードの設定~
NeoVimでクリップボードを使う | ツイートするには長すぎる
WSL越しのクリップボードだとちょっと面倒。
WSL×NeoVim(init.lua) クリップボードにコピーできるようにする方法 neovim - Qiita
init.vimのほかinit.luaが使えるが、これはどちらかしか使えない。
NeovimのためのLua入門 init.lua編
プラグインはたまに見直す。
Neovimの設定を見直して起動を30倍速にした
プラグインマネージャー関係
Vimのプラグインマネージャの種類と選び方 Vim - Qiita
init.vimをinit.luaに変える
Neovimのconfigファイルをinit.lua化したので覚書 | Atusy’s blog
init.vimからinit.luaへの移行手順 Vim - Qiita
行番号
vim.opt.number = true -- 行番号を表示する
vim.opt.relativenumber = true -- 相対行番号を表示する
両方設定すると、現在行だけ絶対で残りは相対になる。
Vim/NeoVim で行番号を表示する (set number, vim.opt.number) - まくまく Vim ノート
NeoVimで現在行だけ絶対行、他は相対行番号で表示する
tab
:tabe。新しいタブを開く。edit
:tabn。次のタブに移動。gtでもOK。next
:tabp。前のタブに移動。gTでもOK。present
:tabc。タブを閉じる。close
Tabpage - Neovim docs
space leader
spaceキーをleaderという特殊な修飾キーに割り当てられる。
vim.api.nvim_set_keymap('', '<Space>', '<Nop>', { noremap = true, silent = true })
vim.g.mapleader = " "
vim.g.maplocalleader = " "
試に以下を入れておくと、<leader>e
でファイルエクスプローラーが開く。
-- <leader>e でファイルエクスプローラーを開く
vim.api.nvim_set_keymap('n', '<leader>e', ':Ex<CR>', { noremap = true, silent = true })
最初のは、spaceがデフォルトで一文字進む操作に入ってるのでその無効化。
leaderはグローバル、localleaderはファイルタイププラグインで使うらしい。
Map - Neovim docs
leaderの初期位置はバックスラッシュらしい。
【Vim/Neovimキーマップ】map/noremapやLeaderキー - フルスタックLinuxプログラミング
vimだが、全選択や保存を割り当てると楽。
[Vim]基本操作負担軽減のための最低限Leader設定 Linux - Qiita
terminalモード
:terminalで起動する。:teでも可。
insertはiでいいが、normalに戻るのに<C-\><C-n>
というコマンドが必要。Escじゃないのは<C-c>
とぶつかるから説。
neovimの便利設定 ターミナルモードのマッピング – MY ROBOTICS
たいていはinsertから入りたいはずなので、以下の設定を追加してterminalに入った瞬間insertにするようにする。
vim.api.nvim_create_autocmd("TermOpen", {
pattern = "*",
command = "startinsert",
})
neovimでターミナルモードから元のファイル編集画面に戻るには
元のファイルに戻るにはバッファを辿る。
:bnextで即戻れる。:bn。
:bpresent,:bp,前バッファ
:bdelete,:bd,バッファ削除
:lsか:buffers(:b)でバッファ一覧を表示し、:b 数値でも戻れる。
面倒なら事前に:vsや:splitで分割画面にする手がある。<C-w>s
などでも分割可能。
分割後は<C-w>h
などで選択可能。
慣れてきた頃に知りたいVimの便利機能
ターミナルを変更
vim.o.shell = "C:\\Scoop\\apps\\pwsh\\current\\pwsh.exe"
を追加。
パスは(Get-Process -Id $PID).Path
で拾える。
WindowsのNeovimで任意のPowerShellを起動する
矩形選択出来ない
visual blockモード。<C-v>
が貼り付けになってしまう場合、<C-q>
に代替のキーバインドがある。
vim - How do you select a whole column in visual block mode? - Stack Overflow
複数の設定を使いたい
NVIM_APPNAME
にフォルダ名を突っ込むことで、その設定ファイルを読むようになる。
linuxなら以下のコマンドでエイリアスを張ることもできる。
alias nvim-kickstart='NVIM_APPNAME="nvim-kickstart" nvim'
GitHub - nvim-lua/kickstart.nvim: A launch point for your personal nvim configuration
Starting - Neovim docs
gitのマージツールとして使う
gitconfigに以下を追加。
[mergetool "neovimdiff"]
cmd = nvim -d $LOCAL $MERGED $REMOTE -c 'wincmd l' -c 'wincmd J'
[merge]
tool = neovimdiff
mergeが必須部分、mergetoolはneovimdiffの中身を定義している。
-dはdiffモードでneovimを開く。
toolにはデフォルトでいくつか入力できる変数が定義されている。
local, merged, remoteの3ペインならneovimdiff2だけで開ける。
Git - git-mergetool Documentation
Site Unreachable
操作は:diffg[et]
,:diffp[ut]
を用いる。範囲もしくはカーソルを合わせたところが動く。
:doで全部get、:dpで全部put?
これを知らないとdiffview.nvimが使えない。
全角スペース表示
元々制御文字を表示するlistモードというのがvimにある。
Vim/NeoVim で制御文字(改行、タブ文字、行末のスペースなど)を表示する (list, listchars)
加えて全角スペースを表示するには、init.luaの編集が必要。
-- Show double byte spaces
vim.cmd[[
hi DoubleByteSpace term=underline ctermbg=blue guibg=darkgray
match DoubleByteSpace / /
]]
vim.keymap.set vs. vim.api.nvim_set_keymap
r/neovim - Reddit
neovimでノーマルモードのまま一行挿入を行うには
keymap.setがnvim_set_keymapを適切なオプション付きで呼んでいる。
あとnoremap = trueがデフォなので再帰的にマッピングされない。
luaしか使わないならkeymap.setだけでいい。