Coder Social home page Coder Social logo

gpt.nvim's Introduction

gpt.nvim

Typing SVG


Installation is easy. With your favorite package manager,

{
  "thmsmlr/gpt.nvim",
  config = function()
    require('gpt').setup({
      api_key = os.getenv("OPENAI_API_KEY")
    })

    opts = { silent = true, noremap = true }
    vim.keymap.set('v', '<C-g>r', require('gpt').replace, {
      silent = true,
      noremap = true,
      desc = "[G]pt [R]ewrite"
    })
    vim.keymap.set('v', '<C-g>p', require('gpt').visual_prompt, {
      silent = false,
      noremap = true,
      desc = "[G]pt [P]rompt"
    })
    vim.keymap.set('n', '<C-g>p', require('gpt').prompt, {
      silent = true,
      noremap = true,
      desc = "[G]pt [P]rompt"
    })
    vim.keymap.set('n', '<C-g>c', require('gpt').cancel, {
      silent = true,
      noremap = true,
      desc = "[G]pt [C]ancel"
    })
    vim.keymap.set('i', '<C-g>p', require('gpt').prompt, {
      silent = true,
      noremap = true,
      desc = "[G]pt [P]rompt"
    })
  end
}

You can get an API key via the OpenAI user settings page

It also requires that you have yq installed,

$ pacman -S yq

Usage

There are three ways to use the plugin:

  1. In Visual Mode, select text and use it as the prompt with <C-g>p. ChatGPT will respond 2 lines below the selection.
explain-raw_EDIT_converted.mp4
  1. In Insert Mode, <C-g>p will ask you for a prompt. ChatGPT will insert it's response into the buffer at the cursor's location.
write-haiku-raw_EDIT_converted.mp4
  1. In Visual Mode, select text and rewrite it using <C-g>r. It'll ask you for the prompt to customize how GPT rewrites the selection.
edit-haiku-raw_EDIT_converted.mp4

gpt.nvim's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

gpt.nvim's Issues

Two small bugs

Hi, Interesting project!

It looks like this would be easier to extend than other projects, so I'm looking forward to playing with it.

I hope you don't mind a couple of bugs being reported. If you do mind, or are too busy no worries!


Bug1: Setup worked fine but I got the following error when calling require("gpt").prompt:

E5108: Error executing lua: /Users/<user>/.local/share/nvim/lazy/gpt.nvim/lua/gpt.lua:133: attempt to index local 'opts' (a nil value)
stack traceback:
        /Users/<user>/.local/share/nvim/lazy/gpt.nvim/lua/gpt.lua:133: in function 'create_response_writer'
        /Users/<user>/.local/share/nvim/lazy/gpt.nvim/lua/gpt.lua:241: in function </Users/<user>/.local/share/nvim/lazy/gpt.nvim/lua/gpt.lua:216>
E16: Invalid range

I was able to fix it by applying the following patch

diff --git a/lua/gpt.lua b/lua/gpt.lua
index 7bb1b0a..cd6feda 100644
--- a/lua/gpt.lua
+++ b/lua/gpt.lua
@@ -129,6 +129,7 @@ local function send_keys(keys)
 end
 
 local function create_response_writer(opts)
+    opts = opts or {}
 	local line_start = opts.line_no or vim.fn.line(".")
 	local bufnum = vim.api.nvim_get_current_buf()
 	local nsnum = vim.api.nvim_create_namespace("gpt")

Bug2: json_decode failed

I got the following error:

Vim:E474: Unexpected end of input: {
stack traceback:
^I[C]: in function 'json_decode'
^I/Users/<user>/.local/share/nvim/lazy/gpt.nvim/lua/gpt.lua:100: in function </Users/<user>/.local/share/nvim/lazy/gpt.nvim/lua/gpt.lua:92>

It looks like I'm getting the following back from OpenAI:

{
    "error": {
        "message": "The model: `gpt-4` does not exist",
        "type": "invalid_request_error",
        "param": null,
        "code": "model_not_found"
    }
}

I don't pay for the plus membership (yet), so it would be nice to be able to configure the model globally.
Also it might be nice to detect the error :)


Finally I see there are some undocumented functions like require("gpt").open_chatwindow ๐Ÿ‘€.
It looks like it would be interesting, so if you get the time to make a demo that would be very cool!

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.