- Notifications
You must be signed in to change notification settings - Fork122
Neovim plugin to generate text using LLMs with customizable prompts
License
David-Kunz/gen.nvim
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Generate text using LLMs with customizable prompts
Install with your favorite plugin manager, e.g.lazy.nvim
Example with Lazy
-- Minimal configuration{"David-Kunz/gen.nvim"},
-- Custom Parameters (with defaults){"David-Kunz/gen.nvim",opts= {model="mistral",-- The default model to use.quit_map="q",-- set keymap to close the response windowretry_map="<c-r>",-- set keymap to re-send the current promptaccept_map="<c-cr>",-- set keymap to replace the previous selection with the last resulthost="localhost",-- The host running the Ollama service.port="11434",-- The port on which the Ollama service is listening.display_mode="float",-- The display mode. Can be "float" or "split" or "horizontal-split" or "vertical-split".show_prompt=false,-- Shows the prompt submitted to Ollama. Can be true (3 lines) or "full".show_model=false,-- Displays which model you are using at the beginning of your chat session.no_auto_close=false,-- Never closes the window automatically.file=false,-- Write the payload to a temporary file to keep the command short.hidden=false,-- Hide the generation window (if true, will implicitly set `prompt.replace = true`), requires Neovim >= 0.10init=function(options)pcall(io.popen,"ollama serve > /dev/null 2>&1 &")end,-- Function to initialize Ollamacommand=function(options)localbody= {model=options.model,stream=true}return"curl --silent --no-buffer -X POST http://"..options.host..":"..options.port.."/api/chat -d $body"end,-- The command for the Ollama service. You can use placeholders $prompt, $model and $body (shellescaped).-- This can also be a command string.-- The executed command must return a JSON object with { response, context }-- (context property is optional).-- list_models = '<omitted lua function>', -- Retrieves a list of model namesresult_filetype="markdown",-- Configure filetype of the result bufferdebug=false-- Prints errors and the command which is run. }},
Here are allavailable models.
Alternatively, you can call thesetup
function:
require('gen').setup({-- same as above})
Use commandGen
to generate text based on predefined and customizable prompts.
Example key maps:
vim.keymap.set({'n','v'},'<leader>]',':Gen<CR>')
You can also directly invoke it with one of thepredefined prompts or your custom prompts:
vim.keymap.set('v','<leader>]',':Gen Enhance_Grammar_Spelling<CR>')
After a conversation begins, the entire context is sent to the LLM. That allows you to ask follow-up questions with
:GenChat
and once the window is closed, you start with a fresh conversation.
For prompts which don't automatically replace the previously selected text (replace = false
), you can replace the selected text with the generated output with<c-cr>
.
You can select a model from a list of all installed models with
require('gen').select_model()
All prompts are defined inrequire('gen').prompts
, you can enhance or modify them.
Example:
require('gen').prompts['Elaborate_Text']= {prompt="Elaborate the following text:\n$text",replace=true}require('gen').prompts['Fix_Code']= {prompt="Fix the following code. Only output the result in format ```$filetype\n...\n```:\n```$filetype\n$text\n```",replace=true,extract="```$filetype\n(.-)```"}
You can use the following properties per prompt:
prompt
: (string | function) Prompt either as a string or a function which should return a string. The result can use the following placeholders:$text
: Visually selected text or the content of the current buffer$filetype
: File type of the buffer (e.g.javascript
)$input
: Additional user input$register
: Value of the unnamed register (yanked text)
replace
:true
if the selected text shall be replaced with the generated outputextract
: Regular expression used to extract the generated resultmodel
: The model to use, default:mistral
User selections can be delegated toTelescope withtelescope-ui-select.
About
Neovim plugin to generate text using LLMs with customizable prompts
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.