91 lines
4.4 KiB
Markdown
91 lines
4.4 KiB
Markdown
<!-- README.md -->
|
||
# 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 you’re updating an existing file, provide a `diff` field in the YAML.
|
||
- If you’re creating a new file, use the `content` field.
|
||
- If you’re 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 don’t 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`
|
||
|
||
```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, you’ll 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 don’t 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:
|
||
```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!
|