最近、CopilotChatをnvimで使用することのできるCopilotC-Nvim/CopilotChat.nvim
がluaで動くようになりましたね。
前回書いたコードブロックを選択したりdiffを表示したりする処理も標準搭載されるようになり進化を実感しています。
今回は次に来るであろう、VSCodeでいう/workspace
を対象にした機能に備えてbuffersに対象のファイルを読み込む処理を書いたので共有したいと思います。
buffersを利用して実現するみたいなやり取りがあったのは覚えているのですが、実際にどうなるかは不明です。
もし来なかったとしてもThePrimeagen/harpoon
等でも使用できるので良しとしています。
早速ですが以下がその処理です。
--------------------------------------------------------- -- create filepath list from current directory --------------------------------------------------------- local create_file_path_list_from_current_dir = function() cmd = "find * -type f" -- write it down to the current buffer vim.cmd("normal! i" .. cmd) vim.cmd(".!sh") print("execute command: " .. cmd) end vim.keymap.set("n", "<leader>lb", create_file_path_list_from_current_dir, { desc = 'create file path list from current directory' }) --------------------------------------------------------- -- load buffers from filepath list --------------------------------------------------------- -- example -- write "find * -type f" -- and execute this command ":.!sh" -- then, execute this command ":lua load_buffers_from_file_list()" local load_buffers_from_file_list = function() local buf = vim.api.nvim_get_current_buf() local lines = vim.api.nvim_buf_get_lines(buf, 0, -1, false) for _, line in ipairs(lines) do -- if a buffer is already open with the same name, don't open it again local tmp_bufnr = vim.fn.bufnr(line) local opened_buffer_list = vim.api.nvim_list_bufs() local is_opened = false for _, opened_bufnr in ipairs(opened_buffer_list) do if opened_bufnr == tmp_bufnr then is_opened = true break end end if is_opened then goto continue end local bufnr = vim.api.nvim_create_buf(true, false) vim.api.nvim_buf_set_name(bufnr, line) vim.api.nvim_buf_call(bufnr, vim.cmd.edit) ::continue:: end print("load buffers - Processing completed successfully.") end vim.keymap.set("n", "<leader>bl", load_buffers_from_file_list, { desc = 'load buffers from file list' })
使用イメージは以下です
harpoonを開く
<leader> lb
harpoon上にカレント以降に存在するファイル一覧が書き込まれる(findコマンド)
-> 必要に応じて検索 &
:v//d
とかで絞ったりする<leader> bl
buffersにリストのファイルを追加
Telescopeでbuffersの検索をしたり、copilot chatの追加機能で使用する(予定)