ChatGPT NeoVim Plugin (Extensively Updated with Step-by-Step Prompting and Diff-Based Changes)

This plugin integrates a ChatGPT O1 model workflow into Neovim. It allows you to:

  1. Generate prompts containing:

    • An initial prompt (from .chatgpt_config.yaml)
    • A list of directories (also specified in .chatgpt_config.yaml) from which it gathers the project structure and file contents
    • Interactive file selection if enabled, so you can pick exactly which directories to include
    • Any initial files you define (e.g., README.md, etc.)
  2. Copy these prompts to your clipboard to paste into ChatGPT O1.

  3. Receive YAML changes from ChatGPT that include diffs, then run :ChatGPTPaste to apply them or supply additional files.

    • If youre updating an existing file, provide a diff field in the YAML.
    • If youre creating a new file, use the content field.
    • If youre deleting a file, use delete: true.

New Key Features

  • Step-by-Step Prompting (enable_step_by_step: true):
    If the request grows too large (exceeds token_limit), the plugin automatically generates a special prompt asking the model to split the task into smaller steps, working through them one by one.

  • Partial Acceptance: If partial_acceptance: true, you can open a buffer that lists final diffs or file creations. You can remove or comment out lines you dont want, then only those changes are applied.

  • Preview Changes: If preview_changes: true, you get a buffer showing proposed diffs or new file content before you apply them.

  • Interactive File Selection: If interactive_file_selection: true, you choose which directories from .chatgpt_config.yaml get included in the prompt, reducing token usage.

  • Improved Debug: If improved_debug: true, debug logs go into a dedicated ChatGPT_Debug_Log buffer for easier reading.

  • Diff-Based Changes: Rather than supplying entire file content for edits, you can include a diff in the YAML response. This allows you to see exactly what changed line by line and accept or reject it.

Example .chatgpt_config.yaml

project_name: "chatgpt_nvim"
default_prompt_blocks:
  - "basic-prompt"
  - "workflow-prompt"
directories:
  - "."
initial_files:
  - "README.md"
debug: false
enable_step_by_step: true
preview_changes: true
interactive_file_selection: true
partial_acceptance: true
improved_debug: true
token_limit: 3000

Usage

  1. :ChatGPT

    • If interactive_file_selection is on, youll pick directories to include in a buffer named ChatGPT_File_Selection.
    • Save & close with :wq, :x, or :bd.
    • If enable_step_by_step is on and the prompt might exceed token_limit, the plugin will generate instructions prompting the model to address each step separately.
  2. Paste Prompt to ChatGPT

    • If the task is split into steps, simply copy/paste them one by one into ChatGPT.
  3. :ChatGPTPaste

    • The plugin reads the YAML from your clipboard. If it requests more files, it might again suggest a step-by-step approach.
    • If final changes are provided:
      • Optionally preview them (preview_changes).
      • Optionally partially accept them (partial_acceptance).
      • The plugin then applies file creation or deletion, or applies diffs to existing files.

Troubleshooting & Tips

  • Adjust token_limit in .chatgpt_config.yaml as needed.
  • If partial acceptance is confusing, remember to remove or prepend # to lines you dont want before saving and closing the buffer.
  • If step-by-step prompting occurs, ensure you follow each prompt the model provides in the correct order.
  • Check ChatGPT_Debug_Log if improved_debug is on, or the Neovim messages if debug is on, for detailed info.
  • You can close the selection or prompt buffers at any time with commands like :bd, :x, or :wq. No need to rely on :q.

Debug Commands

If enable_debug_commands is true, you can include commands like these in your YAML:

commands:
  - command: "list"
    dir: "some/directory"

  - command: "grep"
    pattern: "searchString"
    target: "path/to/file/or/directory"

The list command uses the system's ls command to list directory contents. The grep command searches for a given pattern in a file or all files in a directory.

Enjoy the improved, more flexible ChatGPT Neovim plugin with step-by-step and diff-based support!

Description
No description provided
Readme 653 KiB
Languages
Lua 99.7%
Vim Script 0.3%