バッファーとウィンドウ
エディターを操作します。
「バッファーとウィンドウ」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
バッファ、ウィンドウ、タブページ
Neovimでは、コンテンツと表示が分離されています。バッファはテキストをメモリ上に保持し、ウィンドウはバッファを表示するビューポートで、タブページはウィンドウのレイアウトです。
1つのバッファを複数のウィンドウに表示できます。プラグインは、整数であるこれらのハンドルを、nvim_buf_*およびnvim_win_* APIファミリーを通じて操作します。
local buf = vim.api.nvim_get_current_buf()
local win = vim.api.nvim_get_current_win()
print(buf, win)バッファ行の読み取り
nvim_buf_get_lines(buf, start, end_, strict)は行のリストを返します。インデックスは0始まりで、終端は含みません。最後の行まで取得するには、終端に-1を渡します。
strict_indexingをfalseに設定すると、範囲外のインデックスをエラーにせず許容できます。
local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
print('line count: ' .. #lines)バッファ行の書き込み
nvim_buf_set_linesは、指定した範囲を新しいテキストで置き換えます。末尾に追加するには、startとendの両方を-1に設定します。すべてを上書きするには、0, -1を使用します。
置き換える値は、行ごとに1つの文字列を含むLuaのリストで、末尾の改行文字は含めません。
vim.api.nvim_buf_set_lines(0, -1, -1, false, {
'-- appended line',
})スクラッチバッファ
nvim_create_buf(listed, scratch)を使うと、リストに表示されない使い捨てのバッファを作成できます。false, trueを渡すと、プラグインUIに適したスクラッチバッファになります。
bufhidden = 'wipe'を設定すると、そのウィンドウを閉じたときにバッファも消えるため、不要なバッファが残りません。
local buf = vim.api.nvim_create_buf(false, true)
vim.bo[buf].bufhidden = 'wipe'
vim.api.nvim_buf_set_lines(buf, 0, -1, false, { 'Panel' })バッファローカルオプション
vim.bo[buf]をインデックスして、特定のハンドルのバッファローカルオプションを設定します。プラグインでよく使う設定には、modifiable = falseやbuftype = 'nofile'があります。
表示用バッファを変更不可にすると、ユーザーが生成された内容を誤って編集するのを防げます。
vim.bo[buf].modifiable = false
vim.bo[buf].buftype = 'nofile'
vim.bo[buf].filetype = 'myplugin'フローティングウィンドウを開く
nvim_open_win(buf, enter, config)は、バッファをフローティングウィンドウに配置します。configではrelative、row、col、width、height、borderを設定します。
フロートは、ホバードキュメント、ピッカー、通知など、現代的なUIの基盤です。
local win = vim.api.nvim_open_win(buf, true, {
relative = 'editor', row = 5, col = 10,
width = 40, height = 10, border = 'rounded',
})ウィンドウ設定
nvim_win_set_configを使うと、開いているフロートを調整できます。VimResized時のサイズ変更などに便利です。現在のレイアウトはnvim_win_get_configで読み取れます。
vim.wo[win]を通じてウィンドウローカルオプションを設定できます。たとえば、UIパネルでカーソル行を非表示にしたり、行番号の表示を無効にしたりできます。
vim.wo[win].number = false
vim.wo[win].cursorline = true
vim.api.nvim_win_set_config(win, { width = 50 })カーソルと位置
nvim_win_set_cursor(win, {row, col})でカーソルを移動します。rowは1始まりですが、colは0始まりである点に注意してください。これは、頻繁にオフバイワンエラーの原因になります。
nvim_win_get_cursorで位置を読み戻せるため、操作の前後でユーザーの位置を記録して復元できます。
local pos = vim.api.nvim_win_get_cursor(0)
vim.api.nvim_win_set_cursor(0, { pos[1], 0 })有効性の確認とクリーンアップ
ハンドルが無効になることがあります。保存したハンドルを操作する前に、nvim_buf_is_validとnvim_win_is_validで確認してください。
ウィンドウはnvim_win_close(win, force)で閉じ、バッファはnvim_buf_delete(buf, { force = true })で削除します。エラーを避けるため、必ず最初に有効性を確認してください。
if vim.api.nvim_win_is_valid(win) then
vim.api.nvim_win_close(win, true)
endExtmarkとNamespace
Extmarkは、編集に応じて移動するテキストにメタデータを固定します。nvim_create_namespaceでnamespaceを作成し、仮想テキストやハイライトを関連付けます。
nvim_buf_set_extmarkは、sign列、仮想テキスト、インラインハイライトに対応しています。これはインレイヒントやgit blameプラグインの基盤となる機能です。
local ns = vim.api.nvim_create_namespace('myplugin')
vim.api.nvim_buf_set_extmark(0, ns, 0, 0, {
virt_text = { { ' hint', 'Comment' } },
})列挙と反復処理
nvim_list_bufsとnvim_list_winsは、現在存在するすべてのハンドルを返します。nvim_buf_is_loadedでフィルタリングしたり、オプションを確認して絞り込んだりできます。
反復処理を使うと、セッション全体に対してプラグインを動作させられます。たとえば、すべてのフローティングウィンドウを閉じたり、指定したファイルタイプの各バッファを更新したりできます。
for _, b in ipairs(vim.api.nvim_list_bufs()) do
if vim.api.nvim_buf_is_loaded(b) then print(b) end
endクイックチェック
バッファとウィンドウについて学んだ内容を確認しましょう。
振り返り:バッファとウィンドウ
バッファはテキストを保持し、ウィンドウはそれを表示します。ハンドルは整数なので、使用する前に有効性を確認します。行の読み書き、スクラッチバッファの作成、バッファローカルオプションの設定ができます。
nvim_open_winによるフローティングウィンドウ、カーソル制御、Extmark、列挙APIを組み合わせれば、豊富で状態を持つプラグインUIを構築するために必要な機能がそろいます。
よくある質問
「バッファーとウィンドウ」レッスンは無料ですか?
はい。「バッファーとウィンドウ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「バッファーとウィンドウ」で何を学びますか?
エディターを操作します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「バッファーとウィンドウ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Neovim Lua API
- コマンドとキーマップ
- バッファーとウィンドウ
- プラグインをパッケージ化する