Neovimは、世界で最も愛されているエディターです。これは科学的に証明されています。
以下は、Neovim 2022(Nvim 0.8)の開発におけるハイライトの一部です。
まずは見た目から!
:set laststatus=3
'winbar'
は、各ウィンドウの上部に追加のステータスラインのように表示されます。laststatus=3
を補完します。set winbar=%f
set laststatus=3
'winbar'
と'statusline'
は、マウスクリック領域のサポートを得ました(「tabline」は2016年からこの機能を備えていました)。:set cmdheight=0
:set mousescroll=ver:5,hor:2
:set rnu nu
:let &stc='%#NonText#%{&nu?v:lnum:""}%=%{&rnu&&(v:lnum%2)?"\ ".v:relnum:""}%#LineNr#%{&rnu&&!(v:lnum%2)?"\ ".v:relnum:""}'
:set jumpoptions=view
vim.lsp.start({ name = 'godot', cmd = vim.lsp.rpc.connect('127.0.0.1', 6008) })
LspAttach
、LspDetach
。例vim.api.nvim_create_autocmd('LspAttach', {
group = yourGroupID,
callback = function(args)
local client = vim.lsp.get_client_by_id(args.data.client_id)
your_callbac_func(client, args.buf)
end
}
vim.lsp.get_active_clients()
はフィルタリングを学習しました(これはLua stdlibの標準パターンになります)。get_active_clients({id=42})
get_active_clients({bufnr=99})
get_active_clients({name='tsserver'})
:set diffopt+=linematch:60
vim.g.editorconfig_enable = false
:substitute
(:s/foo/bar
)の効果を表示する組み込みの'inccommand'
機能(2017年以降)を拡張するものです。:normal
およびマクロのプレビューを追加します。:normal
、:globalなどのライブプレビューの基盤を構築します。vim.api.nvim_create_user_command(
'MyCmd',
my_cmd,
{ …, preview = my_cmd_preview })
:write
コマンドは、++p
フラグを取得したため、これにより、親/dir/が存在しない場合は作成されます。:edit parent/dir/file.txt
:write ++p
$XDG_CACHE_HOME
(〜/.cache)ではなく、保存するようになりました。この変更はmacOS/unixのみに影響し、Windowsの場所は変更されていません。stdpath('log')
を使用することもできます。:help :Man
)のgOは、ロケーションリストにアウトライン(目次)を表示します。アウトラインには、フラグもリストされるようになりました。before:
9.0ms: sourcing …/runtime/filetype.vim
after:
1.3ms: sourcing …/runtime/filetype.lua
nvim --startuptime
は、Luaのrequire()
時間を報告するようになりました。000.010 000.010: --- NVIM STARTING ---
000.198 000.188: event init
...
026.333 001.109 001.101: require('vim.lsp.protocol')
028.144 000.423 000.423: require('vim.lsp._snippet')
...
mouse=nvi
Type ":" (cmdline-mode) to temporarily disable mouse. Right-click shows a popup menu.
Try it!
nvim_cmd([list])
と「ユーザーcmdプレビュー」の基礎を提供します!そして、カスタムcmdline(:
)の動作を定義するのに非常に役立ちます。:echo nvim_parse_cmd('.,$g/foo/bar', {})
{
'cmd': 'global',
'args': ['/foo/bar'],
'mods': {…},
'magic': {'file': v:false, 'bar': v:false}
}
nvim_cmd()
を使用して、system([...])
のように、Vimのレガシーコマンドを構造化された方法で呼び出します。fnameescape()
は不要:特殊文字は、magic
パラメーターによって制御されます。nvim_cmd({cmd='vimgrep', args={'/%s/j', '**'}}, {})
vim.fs.find()
は、LSP構成で一般的な「ルートファイル」を見つけるための正規の方法になりました。vim.cmd
は、Luaのnvim_cmd
ラッパーです。文字列ではなく関数としてExコマンドを呼び出すことができます。vim.cmd.colorscheme('nightfox')
「Luaプラグインは基本的にvimプラグインと同じですが、ファイル拡張子が
.vim
ではなく.lua
であり、ファイルにVimscriptではなくLuaコードが含まれている点が異なります。」
オンラインNvimドキュメントの自動生成は、古いAWKスクリプトをLua + tree-sitterに置き換えることで書き直されました。素晴らしいものができました。
古いレイアウト(左)と新しいレイアウト(右)を比較してください
Nvimは、jobstart()
および:terminal
ジョブで$NVIM
環境変数を設定するようになり、子プロセスがNvimの子であることを明確に示すヒントが提供されます。競合する「二重目的」を持っていた古い$NVIM_LISTEN_ADDRESS
は、子に渡されなくなりました。
Nvim UIは単なる(反転された)プラグインです。そして、今ではnvim
自体が自己ホストUIになりました。ターミナルでnvim
を実行すると、nvim --embed
子プロセスとしてTUIが開始されます。
Nvim GUIと同様に、nvim
TUIを任意のNvimサーバーに接続して、そのUIを確認できます。今すぐ試すことができます。
./foo
でサーバーを起動します(現在のディレクトリにfoo
ファイルを作成します)nvim --listen ./foo
./foo
と同じディレクトリ内)、nvim
をサーバーに接続しますnvim --remote-ui --server ./foo
:help 'insertmode'
を参照してください。:help lsp
)とほぼ冗長であるため、削除されました。