Neovimメモ

プラギンリスト
exhaustive list

```
)が消える
LazyVimを使うとmarkdownのtriple grace accent(nvim本体のconceallevel
設定が非0になっているのが原因っぽいです.
最大3で数字が大きいほどモノが隠れていくようです.
conceallevel
の確認方法
command modeで以下を実行します.
:set conceallevel?
私の場合はconceallevel=2
でした.
修正方法
vim.opt.conceallevel = 0
conceallevel
を0
にします.
markdownのみ0
にしたい場合はもう少し工夫が必要です(future work).
他の原因
plugin由来,特にplasticboy/vim-markdown
由来で同じ現象が発生するようなので上記の方法で解決しない場合は以下も参考にして下さい.
conceallevel
に関する公式doc

nerd fontのinstall
brew install font-hack-nerd-font
iTerm2の設定→Profiles
→使ってるprofileを選択→Text
→Use a different font for non-ASCII text
に✅→Hack Nerd Font Mono
を選択→(font sizeをmain fontと合わせる (任意))

sudoがないスパコンにnvim入れたメモ
問題
- sudoがない→package manager基本死ぬ
- linuxbrewもなんだかんだ無理だったが後述の
patchelf
を入れるのには使えたため入れ損ではなかった
- linuxbrewもなんだかんだ無理だったが後述の
- binary落としてくればよい.対応したversionのglibcが入ってないといけない
- 必要なglibcがスパコンに入ってなかった→glibcのsource build
glibc 2.29のsource build
wget http://ftp.gnu.org/gnu/glibc/glibc-2.31.tar.gz
tar xf glibc-2.29.tar.gz
cd glibc-2.29
mkdir build && cd build
../configure --disable-werror --prefix=$HOME/local/glibc-2.29
make
make install
-
--prefix
はinstall directory - parallel buildしているとbuildが死ぬっぽいので並列数(
-j
)を絞りつつ何回かnothing to buildになるまでmakeする(は?) -
--disable-werror
をつけておかないとwarningで落ちる(参考)
nvimが使用するglibcを指定
- 追加したglibcが見えるようにPATHとかLDとかに追加しないといけないと思うかもしれないがそれをやると他のcommand-line toolが全部死ぬのでやってはいけない
- もしやってしまうと
vim
とかも死ぬのでかなり詰み感が出る- 落ち着いて
LD_LIBRARY_PATH
から追加したglibcのpathを消すと直る
- 落ち着いて
- もしやってしまうと
- 代わりに
patchelf
を使う- スパコンになかったので
brew install patchelfで入れた
- スパコンになかったので
patchelf --set-interpreter $HOME/local/glibc-2.29/lib/ld-linux-x86-64.so.2 $HOME/local/bin/nvim
patchelf --set-rpath $HOME/local/glibc-2.29/lib $HOME/local/bin/nvim
- 1行目がライブラリローダー(LD)の指定,2行目glibcのpath指定.

patchelfとenvironment moduleが競合するので調査中...

patchelfだとダメっぽいのでenv
を使うwrapperを書いてnvim
だけ隔離環境を使う
#!/bin/bash
# Version of glibc
VGLIBC=2.29
# Define the custom path
CUSTOM_PATH="$HOME/local/glibc-${VGLIBC}/bin:$PATH"
# Define the custom library path
CUSTOM_LIB_PATH="$HOME/local/glibc-${VGLIBC}/lib:$LD_LIBRARY_PATH"
# Define the path to the nvim binary
NVIM_BINARY="/path/to/nvim"
# Use the env command to set LD_LIBRARY_PATH only for this execution of nvim
exec env PATH="$CUSTOM_PATH" LD_LIBRARY_PATH="$CUSTOM_LIB_PATH" "$NVIM_BINARY" "$@"
alias nvim="/path/to/run_nvim.sh"
-
/path/to/
は適宜書き換える

それNixでよくない?

VScode用の設定
if not vim.g.vscode then
-- 非code用の設定
else
-- code用の設定
end

keybind
モード切り替え
i
: 挿入モード
<esc>
: ノーマルモード
:
コマンドモード
normal mode
-
J
改行を削除 (spaceを入れて下の行と連結) -
gJ
改行を削除(spaceを入れずに下の行と連結) -
dW
現在の単語を削除(次の空白まで) -
dw
現在の単語を削除(word単位)
-
zz
カーソル位置そのままでいい感じにスクロール -
zt
カーソル位置そのままでいい感じにスクロール,カーソル行はかなり上にくる

source
:source $MYVIMRC
あるいは
:luafile $MYVIMRC

スパルタンvim 5.1

スパルタンVimでは、Normalの
c
,d
,f
,y
にはマッピングできないと書かれていますが…前述の通り、プレフィックスとしてならマッピングできる可能性があります。

たまに出るerror

on provider cmp:GHOST_TEXT.win:
Error executing lua: ...hare/nvim/lazy/nvim-cmp/lua/cmp/view/ghost_text_view.lua:35: Invalid buffer id: 39
stack traceback:
[C]: in function 'nvim_buf_del_extmark'
...hare/nvim/lazy/nvim-cmp/lua/cmp/view/ghost_text_view.lua:35: in function <...hare/nvim/lazy/nvim-cmp/lua/cmp/view/ghost_text_view.lua:33>Error in decoration provider cmp:GHOST_TEXT.win:
Error executing lua: ...hare/nvim/lazy/nvim-cmp/lua/cmp/view/ghost_text_view.lua:35: Invalid buffer id: 39
stack traceback:
[C]: in function 'nvim_buf_del_extmark'
...hare/nvim/lazy/nvim-cmp/lua/cmp/view/ghost_text_view.lua:35: in function <...hare/nvim/lazy/nvim-cmp/lua/cmp/view/ghost_text_view.lua:33>

LazyVimで用いられているoption設定は

truecolor対応
iTerm2+LazyVimだと
defaultでtruecolorになってるっぽいので何もしなくてもおkっぽい?

LazyVimのkeymap
buffer/windowの移動
buffer
<S-h>
: 前のbuffer
<S-l>
: 次のbuffer
window
<C-h>
<C-j>
<C-k>
<C-l>
: window移動
mini.surround
gsa
add surronding
textobj, 括弧が続く

複数行をまとめてcomment out
- マウスで該当行を選択→
<S-V>
(visual line mode)→gc
-
<S-V>
(visual line mode)→該当行を選択→gc

nvim使うようになったきっかけ

Telescope
文字検索を:Telescope live_grep
でできると聞いてやってみたら
[telescope.live_grep]: 'ripgrep', or similar alternative, is a required dependency for the live_grep picker. Visit https://github.com/BurntSushi/ripgrep#installation for installation instructions.
と出た.書いてある通りだがripgrep
の類が必要ということでripgrep
をinstallした
brew install ripgrep

Lua guide

LSPで表示される仮想的なmessageの全文を表示させる
cursorは表示したいmessageのある行に合わせる
:lua vim.diagnostic.open_float()

Julia LSPの導入
以下を実行
:LspInstall julials
※mason.nvim
, nvim-lspconfig
, mason-lspconfig.nvim
が入ってる前提(LazyVimだと入ってる)

LazyVimだとそもそもLazyExtraで:LspInstall
も不要なものが多いがJuliaは含まれていないので自分で実行する必要がある

公式doc
plugin manager
とりあえずlazy.nvimを使用
→lazy.nvimを入れたつもりがLazyVimを入れていた...

気になるプラギン
diffview.nvim
mdmath.nvim
vim-qfreplace
grepしたものに置換を当てるみたいなものらしい
capture.vim
:mes
の内容コピーできる :Capture mes
LazyVimだと:Noice
で過去のmessageが見られる
in-and-out.nvim

Luaの設定fileのprint debugに使うもの
print("Hello, nvim!")
-
vim.notify("Hello, nvim!")
- startup中に
print
を読んでも出力されないのでこちらを使う
- startup中に
-
vim.api.nvim_exec2
- vimのcommandをlua script中で実行するのに使う.書式は以下の例参考
:imap <Tab>
の結果を出力する函数
例: startup中でも-- Function to capture and print the result of `:imap <Tab>`
local function debug_tab_mapping()
-- Run the :imap command and capture its output
local tab_mapping = vim.api.nvim_exec2("silent! imap <Tab>", { output = true })
-- Print the output to check the mapping
vim.notify(tab_mapping.output)
end

-
'<,'>
置換などのときに使うprefix. 選択範囲を示す

iTerm2でM-prefix keybing (meta key)使いたい場合,iTerm2のprofile設定の Left/Right Option keyの項目でMeta
keyに設定する必要がありそう(未検証)

便利なhelp
helpの探し方
:h 02.8
:h operator
:h insert-index
:h text-objects
autocmdをtriggerできるevent一覧
:h autocmd-events

helpの引き方TIPS

勉強したい機能
quickfix
:h quickfix
jumplist
:h jumplist

変数の設定値の確認
変数名に?
を付けてset
:set number?

LazyVim + Home Manager?

Neovimがフリーズしてrequire"cmp.utils.feedkeys".run(...)
みたいなものが挿入されることがあった
同じ現象が起きている人はいるみたいだけどよく分かってない

コマンドラインモード
マニュアル
:h usr_20
リファレンス
:h cmdline-editing

気になる
Nixvim

mini.surround
始め括弧を指定すると括弧の前後に空白が入り、閉じ括弧を指定すると空白が入らない
以下ではhelp
という文字列をw
でターゲットしてadd
(keymapをsa
とする)で()
で囲みたいとする
- コマンド:
saw(
→結果:( help )
- コマンド:
saw)
→結果:(help)
基本的なkeymap
-
sa
: 追加 -
sr
: 置換 -
sd
: 削除

函数呼び出し(f(...)
みたいなやつ)も対象として追加・消去・置換できる。
f
で函数をターゲッティングできる
f(abc)
→"abc"
: keymapはsrf"
。逆もsr"f
で可能。追加したい函数名をフロートウィンドウで聞かれる

後で調べる
zz
zt
zb

gn
、使いこなせない...

挿入モードの<C-c>
は<ESC>
と異なり、InsertLeave
イベントを発行せずにノーマルモードに変わるため、InsertLeave
で発火するautocmdを発火させたくない場合はこちらを使うと良い。
:help i_CTRL-C