Neoai는 OpenAi의 GPT-4의 힘을 편집자에게 직접 제공하는 Neovim 플러그인입니다. 코드를 생성하고 텍스트를 다시 작성하며 코드와 함께 텍스트에서 제안을받는 데 도움이됩니다. 플러그인은 사용자 친화적 인 인터페이스로 구축되므로 AI와 쉽게 상호 작용하고 필요한 지원을받을 수 있습니다.
참고 : 이 플러그인은 초기에 초기 변경되었으며 변경 될 수 있습니다.
이 플러그인의 주요 동기는 Chatgpt와 같은 AI 채팅 보조제를 Neovim 코딩 워크 플로에 완벽하게 통합하는 것입니다. 목표는 귀하와 조화를 이루는 도구를 만들어 초점이나 코딩 리듬을 방해하지 않고 질문을하고 지원을받을 수 있도록하는 것입니다. 생산성보다 엔터테인먼트의 우선 순위를 정하는 대부분의 기존 플러그인과 달리이 플러그인은 효율성과 유용성을 강조합니다. 원활하고 반응이 좋은 코딩 경험을 촉진함으로써 생산성을 향상시키고 코딩을보다 즐겁게 만드는 것을 목표로합니다.
NeOAI를 설치하려면 좋아하는 플러그인 관리자를 사용할 수 있습니다. 예를 들어 Vim-Plug를 사용하면 다음 줄을 init.vim
또는 .vimrc
에 추가하려면 시스템에 NUI 의존성과 컬도 필요합니다.
Plug 'MunifTanjim/nui.nvim'
Plug 'Bryley/neoai.nvim'
그런 다음 :PlugInstall
실행하여 플러그인을 설치하십시오.
Lazy.nvim :
return {
" Bryley/neoai.nvim " ,
dependencies = {
" MunifTanjim/nui.nvim " ,
},
cmd = {
" NeoAI " ,
" NeoAIOpen " ,
" NeoAIClose " ,
" NeoAIToggle " ,
" NeoAIContext " ,
" NeoAIContextOpen " ,
" NeoAIContextClose " ,
" NeoAIInject " ,
" NeoAIInjectCode " ,
" NeoAIInjectContext " ,
" NeoAIInjectContextCode " ,
},
keys = {
{ " <leader>as " , desc = " summarize text " },
{ " <leader>ag " , desc = " generate git message " },
},
config = function ()
require ( " neoai " ). setup ({
-- Options go here
})
end ,
}
패커 용 :
use ({
" Bryley/neoai.nvim " ,
require = { " MunifTanjim/nui.nvim " },
cmd = {
" NeoAI " ,
" NeoAIOpen " ,
" NeoAIClose " ,
" NeoAIToggle " ,
" NeoAIContext " ,
" NeoAIContextOpen " ,
" NeoAIContextClose " ,
" NeoAIInject " ,
" NeoAIInjectCode " ,
" NeoAIInjectContext " ,
" NeoAIInjectContextCode " ,
},
config = function ()
require ( " neoai " ). setup ({
-- Options go here
})
end ,
})
이 플러그인을 사용하려면 여기에서 생성 할 수있는 OpenAI API 키가 있는지 확인하십시오. 환경 변수 에이 키를 OPENAI_API_KEY
로 저장하십시오.
중요한 참고 사항 :이 플러그인은 OpenAI에 대한 의도하지 않은 구매에 대해 책임을지지 않습니다. 이 플러그인을 사용하는 동안 계정 사용 및 설정 한도를 자주 확인하는 것이 좋습니다. 따라서 감당할 수있는 더 많은 비용을 지출하지 않습니다.
이 플러그인은 3 가지 모드 또는 AI 모델과 상호 작용하는 방법을 소개합니다.
기본 모드에서 GUI는 :NeoAI
을 사용하여 측면에서 열려 모델과 채팅 할 수 있습니다. 이 작업은 브라우저에서 사용할 때 얻을 때 얻는 것과 유사하지만 GUI가 편집기 내부에있어 더 편리하게 만들어졌습니다.
프롬프트 버퍼에서 삽입 모드에서 Enter를 눌러 텍스트를 보낼 수 있습니다. 또한 Control Enter를 사용하여 Newline을 삽입 할 수 있습니다. 이 매핑은 구성에서 변경 될 수 있습니다.
또한 플러그인에는 모델의 출력이 자동으로 g
레지스터에 저장되고 모든 코드 스 니펫이 c
레지스터에 저장되는 기능이 있습니다. 구성에서 변경할 수 있습니다.
컨텍스트 모드는 일반 모드와 유사하게 작동합니다. 그러나 변경하려는 내용에 대한 추가 정보를 제공 할 수 있습니다. 예를 들어, 다른 사람의 코드를 읽고있는 경우에 대한 설명이 필요한 경우 시각적 모드를 통해 버퍼의 코드를 강조 표시 할 수 있습니다. 그런 다음 실행할 수 있습니다 :NeoAIContext
및 프롬프트 버퍼에 "이 코드를 설명하십시오"와 같은 것을 입력하십시오.
또한 텍스트를 강조하고 "이 텍스트에서 문장 부호와 문법을 수정하여"더 나은 텍스트 버전을 얻을 수 있습니다.
선택없이 명령을 실행하면 전체 버퍼가 전달됩니다.
최종 모드는 :NeoAIInject
사용하여 "주입 모드"라고합니다. 이 모드는 그래픽 사용자 인터페이스없이 작동하므로 모델에 프롬프트를 빠르게 보내고 결과 출력을 커서 아래에 자동으로 삽입 할 수 있습니다. 이 모든 것은 GUI를 열지 않고 수행 할 수 있습니다. 또한 컨텍스트로 실행할 수있는 인젝트 모드 내에서 하위 모드가 있습니다.
이 플러그인의 기능 중 하나는 바로 가기를 만드는 것입니다. 플러그인에는 두 개의 내장 단축키가 포함되어 있습니다. 첫 번째 하나의 개혁은 가독성을 향상시키기 위해 텍스트를 선택했으며, 기본 키 바인드는 <leader>as
(AI 및 S 요약)입니다.
다른 내장 단축키는 자동 생성 GIT 커밋 메시지입니다.
주의 :이 기능을 과도하게 사용하면 모델에 데이터가 축적되어 비용이 많이 드릴 수 있습니다. 이를 피하기 위해 작은 커밋을 만들거나 기능을 덜 자주 사용하는 것이 좋습니다. 이 링크를 통해 모니터링 할 수있는 사용을 추적하는 것이 필수적입니다.
플러그인을 설정하려면 init.lua
에 기본값이있는 다음 코드를 추가하십시오 (또는 lazy.nvim 또는 packer.nvim을 사용하는 경우 config
옵션에 넣으십시오.
require ( " neoai " ). setup ({
-- Below are the default options, feel free to override what you would like changed
ui = {
output_popup_text = " NeoAI " ,
input_popup_text = " Prompt " ,
width = 30 , -- As percentage eg. 30%
output_popup_height = 80 , -- As percentage eg. 80%
submit = " <Enter> " , -- Key binding to submit the prompt
},
models = {
{
name = " openai " ,
model = " gpt-3.5-turbo " ,
params = nil ,
},
},
register_output = {
[ " g " ] = function ( output )
return output
end ,
[ " c " ] = require ( " neoai.utils " ). extract_code_snippets ,
},
inject = {
cutoff_width = 75 ,
},
prompts = {
context_prompt = function ( context )
return " Hey, I'd like to provide some context for future "
.. " messages. Here is the code/text that I want to refer "
.. " to in our upcoming conversations: nn "
.. context
end ,
},
mappings = {
[ " select_up " ] = " <C-k> " ,
[ " select_down " ] = " <C-j> " ,
},
open_ai = {
api_key = {
env = " OPENAI_API_KEY " ,
value = nil ,
-- `get` is is a function that retrieves an API key, can be used to override the default method.
-- get = function() ... end
-- Here is some code for a function that retrieves an API key. You can use it with
-- the Linux 'pass' application.
-- get = function()
-- local key = vim.fn.system("pass show openai/mytestkey")
-- key = string.gsub(key, "n", "")
-- return key
-- end,
},
},
shortcuts = {
{
name = " textify " ,
key = " <leader>as " ,
desc = " fix text with AI " ,
use_context = true ,
prompt = [[
Please rewrite the text to make it more readable, clear,
concise, and fix any grammatical, punctuation, or spelling
errors
]] ,
modes = { " v " },
strip_function = nil ,
},
{
name = " gitcommit " ,
key = " <leader>ag " ,
desc = " generate git commit message " ,
use_context = false ,
prompt = function ()
return [[
Using the following git diff generate a consise and
clear git commit message, with a short title summary
that is 75 characters or less:
]] .. vim . fn . system ( " git diff --cached " )
end ,
modes = { " n " },
strip_function = nil ,
},
},
})
설정 함수는 플러그인을 구성하는 옵션 테이블을 허용합니다. 사용 가능한 옵션은 다음과 같습니다.
output_popup_text
: 출력 팝업 창에 표시된 헤더 텍스트 (기본값 : "neoai").input_popup_text
: 입력 팝업 창에 표시된 헤더 텍스트 (기본값 : "프롬프트").width
: 백분율로 창의 너비 (예 : 30 = 30%, 기본값 : 30).output_popup_height
: 출력 팝업의 높이 (예 : 80 = 80%, 기본값 : 80).submit
: 프롬프트를 제출하려는 키 바인딩. 설정하면 Newline을 삽입하도록 매핑됩니다. (기본: "").models
: 사용할 모델 목록 :name
: 모델 제공 업체의 이름 (예 : "OpenAi")model
: 사용할 모델 이름의 문자열 또는 모델 이름 목록params
: 모델로 전달할 매개 변수 테이블 (예 : 온도, TOP_P)register_output
: 키로 레지스터가있는 테이블과 AI에서 원시 출력을 가져와 해당 레지스터에 저장하려는 것을 출력하는 함수. 예: register_output = {
[ " g " ] = function ( output )
return output
end ,
[ " c " ] = require ( " neoai.utils " ). extract_code_snippets ,
}
cutoff_width
: 주입 할 때 텍스트 가이 값보다 길어지면 새 줄로 이동해야합니다. nil로 설정하면 길이가 무시됩니다 (기본값 : 75).context_prompt
: 컨텍스트 모드를 사용할 때 사용할 프롬프트를 생성하는 함수. 예: context_prompt = function ( context )
return " Hi ChatGPT, I'd like to provide some context for future "
.. " messages. Here is the code/text that I want to refer "
.. " to in our upcoming conversations: nn "
.. context
end
open_api_key_env
(Dowrecated, api_key.env
대신 사용) : OpenAI API 키를 포함하는 환경 변수. 기본값은 "OpenAi_api_key"입니다.api_key.env
: OpenAI API 키를 포함하는 환경 변수. 기본값은 "OpenAi_api_key"입니다.api_key.value
: api_key .env
보다 우선하는 OpenAI API 키.api_key.get
: OpenAI API 키를 검색하는 함수. 구현 예를 보려면 설정 섹션을 참조하십시오. 우선 순위가 높습니다. mappings
: 키가 될 수있는 다음 작업이 포함 된 테이블 :
select_up
: 입력 창에서 출력 창을 선택합니다.select_down
: 출력 창에서 입력 창을 선택합니다. 값은 해당 조치의 키 바인딩 또는 조치가없는 경우 nil
shortcuts
: 바로 가기 배열. 각 바로 가기는 다음을 포함하는 테이블입니다.name
: 문자열. 바로 가기의 이름은 다음을 사용하여 트리거 할 수 있습니다. Neoaishortcutkey
: 바로 가기에 대한 키 바인드가없는 경우 청취 할 키 바인드 값.desc
끈 또는 nil. 키 바인드에 대한 설명이있는 경우use_context
: 선택/버퍼의 컨텍스트를 사용해야하는 경우.prompt
: 보내는 프롬프트 또는 전송 프롬프트를 생성하는 기능.modes
: Normal의 "N"에 대한 키 바인드를 설정하는 모드 목록, Visual의 경우 V ".strip_function
: 사용하는 스트립 기능 (선택 사항). 스마트는 Neoai 창을 토글합니다. 창이 닫히면 옵션이 열리고 [프롬프트]를 보냅니다. 창이 열려 있고 집중되면 닫히면 마지막으로 창이 열리지 만 집중되지 않으면 창에 집중하고 선택 사항 [프롬프트]을 보냅니다.
Neoai 창을 토글합니다. 창이 닫히면 옵션이 열리고 [프롬프트]를 보냅니다. 창이 열리면 닫힙니다.
Neoai 창을 열고 선택 사항 [프롬프트]을 보냅니다.
Neoai 창을 닫습니다.
스마트는 컨텍스트와 함께 Neoai 창을 토글합니다. 창이 닫히면 옵션이 열리고 [프롬프트]를 보냅니다. 창이 열려 있고 집중되면 닫히면 마지막으로 창이 열리지 만 집중되지 않으면 창에 집중하고 선택 사항 [프롬프트]을 보냅니다. 이 명령에 사용 된 컨텍스트는 선택하지 않은 경우 시각적으로 선택된 텍스트 또는 전체 버퍼입니다.
컨텍스트가있는 Neoai 창을 엽니 다. 선택 사항 [프롬프트]을 보냅니다. 이 명령에 사용 된 컨텍스트는 선택하지 않은 경우 시각적으로 선택된 텍스트 또는 전체 버퍼입니다.
컨텍스트로 Neoai 창을 닫습니다.
[프롬프트]를 AI로 보내고 Neoai 창을 열지 않고 AI 응답을 버퍼에 직접 주입합니다.
[프롬프트]를 AI로 보내고 Neoai 창을 열지 않고 AI 응답을 버퍼에 직접 주입합니다. 응답은 코드 스 니펫을 제외한 모든 것을 제거합니다.
컨텍스트와 함께 [프롬프트]를 AI로 보내고 Neoai 창을 열지 않고 AI 응답을 버퍼에 직접 주입합니다. 이 명령에 사용 된 컨텍스트는 선택하지 않은 경우 시각적으로 선택된 텍스트 또는 전체 버퍼입니다.
컨텍스트와 함께 [프롬프트]를 AI로 보내고 Neoai 창을 열지 않고 AI 응답을 버퍼에 직접 주입합니다. 응답은 코드 스 니펫을 제외한 모든 것을 제거합니다. 이 명령에 사용 된 컨텍스트는 선택하지 않은 경우 시각적으로 선택된 텍스트 또는 전체 버퍼입니다.
키 바인딩 대신 이름을 통해 구성에서 생성되는 Neoai 바로 가기를 트리거합니다.
MIT 라이센스에 따라 라이센스. 자세한 내용은 라이센스 파일을 확인하십시오.