luaとneovim
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
neovim0.9からeditorconfigがサポート
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
(Neo)vimではTODO
やXXX
などの文字列がコメント内にあると、特別なハイライトがされる(Todoというハイライトグループ)
どの様なワードがハイライトされるかは $VIMRUNTIME/syntax/(language name).vim
に定義されている。
例:
vim.bo.filetype=='rust'
の場合、TODO, FIXME, XXX, NB, NOTEがハイライトされる。これは $VIMRUNTIME/syntax/rust.vim
で定義されている。
vim.bo.filetype=='lua'
の場合、TODO, FIXME, XXX, がハイライトされる。これは $VIMRUNTIME/syntax/lua.vim
で定義されている。
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
コメント内のTODOのようなラベルが、tree-sitterにサポートされた
エコシステムが貧弱なので今すぐ移行はしないけど
いつかこれ関連のプラグインとか作ってみたい
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
:enew
で空の新しいバッファを作る。一時的にメモを取るのに使えそう
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
ZZ
はバッファを閉じるのに使われるが、ZQ
で変更を保存せずに閉じることができる
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
neovimのcmdline
でluaのtableを出力するショートカット
:lua =vim.opt.list
:lua print(vim.inspect(vim.opt.list))
とかするよりだいぶ楽ですね
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
v
はvisual modeに入るだけでなくモーションとしても使える
例えば、viw
とすれば単語を選択できる vi"
とすれば"
で囲まれた範囲を選択できる
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
normal modeで<number>|
とすると現在行の<number>th columnに移動できる
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
assert(v,message)
はv
がnilまたはfalseの時、message
を表示してプログラムを終了させる。v
がそれ以外の場合、assert(v,message)
はvを返す。なので、luaでassert
を使って、nilチェックができる。
assert(assert(1) == 1) -- this should success
assert(nil,'a is nil') -- this should fail
これは、sumneko_lua
(最近nvim-lspconfigでlua_ls
に名前が変わった)で、need check nil
の警告が出た時に有用。
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
置換で文字を流用する方法
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
縦に連番を作りたい時はvisual modeでg<c-a>
すれば出来る。横は無理。
2
2 |
2 |
2 | select these four `2`. then press `g<c-a>`
2 |
↓
2
3
4
5
6
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
luaではstatementの終わりに明示的に;
をつけることが出来る。
local a = 0; local b = 2
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
<c-g>
でファイル名、何行目か、ファイル全体のうち何処ら辺にあるのかが表示される
e.g."shift.md" 29 lines --62%--
![9kv8xiyi](https://res.cloudinary.com/zenn/image/fetch/s--snNGAbs---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1569cb1add.jpeg)
neovimからもdevcontainerは使える(一応)