0Pricing
Lua Academy · 강의

Neovim Lua API

플러그인이 연결되는 방식을 배워 보세요.

Neovim Lua API은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

Neovim에서 Lua를 사용하는 이유

Neovim은 LuaJIT 런타임을 내장하여 Vimscript와 함께 Lua를 기본 스크립팅 언어로 제공합니다. 플러그인 작성자는 빠른 속도, 실제 자료 구조, 깔끔한 모듈 시스템을 갖춘 Lua를 선호합니다.

전역 vim 테이블은 편집기 상태, API, 옵션, 표준 라이브러리 도우미 등 모든 기능으로 들어가는 관문입니다. 이를 숙달하는 것이 현대적인 플러그인 개발의 토대입니다.

print(vim.inspect(vim.version()))

vim.api 계층

vim.api는 낮은 수준의 원격 API를 제공합니다. 즉, nvim_으로 시작하는 모든 함수입니다. 외부 클라이언트가 RPC를 통해 사용하는 것과 같은 호출이지만, 프로세스 내부에서는 즉시 실행됩니다.

nvim_get_current_buf, nvim_buf_set_lines, nvim_command와 같은 함수는 정밀한 제어를 가능하게 합니다. 이러한 함수는 안정적이고 문서가 잘 정리되어 있으며, 본격적인 플러그인의 기반입니다.

local buf = vim.api.nvim_get_current_buf()
local name = vim.api.nvim_buf_get_name(buf)
print(name)

vim.fn — Vimscript 함수 호출

vim.fn은 Vimscript의 내장 함수와 연결해 줍니다. expand()나 fnamemodify()처럼 Vimscript에서 호출할 수 있는 함수라면 무엇이든 vim.fn.expand(...)와 같은 방식으로 사용할 수 있습니다.

아직 네이티브 API가 없는 경우에 특히 유용합니다. 인수와 반환값은 Lua 형식과 Vimscript 형식 사이에서 자동으로 변환됩니다.

local path = vim.fn.expand('%:p')
local tail = vim.fn.fnamemodify(path, ':t')
print(tail)

옵션: vim.o, vim.bo, vim.wo

옵션은 메타테이블을 통해 설정합니다. vim.o는 전역 옵션을 대상으로 하고, vim.bo는 버퍼별 옵션을, vim.wo는 창별 옵션을 대상으로 합니다.

필드에 값을 대입하는 것만큼 간단하게 설정할 수 있습니다. 따라서 장황한 nvim_set_option 호출을 대신하면서 설정 코드도 자연스럽게 읽힙니다.

vim.o.number = true
vim.bo.shiftwidth = 2
vim.wo.wrap = false

vim.g와 전역 변수

vim.g는 전역 Vim 변수를 읽고 씁니다. 플러그인은 일반적으로 vim.g.myplugin_enabled와 같은 설정 전환 값을 여기에 제공합니다.

설정되지 않은 변수를 읽으면 nil이 반환되므로 기본값을 사용하도록 처리하십시오. 버퍼별 및 창별 범위의 변형으로 vim.b와 vim.w도 있습니다.

vim.g.mapleader = ' '
local enabled = vim.g.myplugin_enabled or false
print(enabled)

알림 및 에코

vim.notify를 사용하여 사용자에게 메시지를 표시하십시오. 이 함수는 메시지 문자열과 선택적인 로그 수준을 vim.log.levels에서 받습니다.

noice나 notify 같은 플러그인 관리자는 이러한 알림을 가로채 더 나은 사용자 인터페이스를 제공할 수 있습니다. 사용자에게 표시할 출력에는 일반적인 print보다 vim.notify를 우선 사용하십시오.

vim.notify('Plugin loaded', vim.log.levels.INFO)
vim.notify('Missing config', vim.log.levels.WARN)

vim.schedule을 사용한 예약 실행

특정 콜백 내부처럼 빠른 이벤트 컨텍스트에서는 일부 API 호출이 금지됩니다. vim.schedule은 함수를 주 루프로 미루어 전체 API를 안전하게 사용할 수 있는 곳에서 실행합니다.

이렇게 하면 비동기 컨텍스트나 자동 명령 컨텍스트에서 버퍼를 변경할 때 발생하는 악명 높은 "E5560" 오류를 피할 수 있습니다.

vim.schedule(function()
  vim.api.nvim_buf_set_lines(0, 0, 0, false, {'Hello'})
end)

Lua의 자동 명령

nvim_create_autocmd는 이벤트 처리기를 등록합니다. nvim_create_augroup으로 그룹화하고 clear = true로 설정하여 다시 불러올 때 중복 등록을 방지하십시오.

콜백은 buf와 match 같은 필드를 포함한 이벤트 테이블을 받으므로, 처리기에 필요한 컨텍스트를 정확하게 파악할 수 있습니다.

local grp = vim.api.nvim_create_augroup('MyGrp', { clear = true })
vim.api.nvim_create_autocmd('BufWritePost', {
  group = grp,
  pattern = '*.lua',
  callback = function(ev) print('saved ' .. ev.file) end,
})

vim.tbl과 문자열 도우미

Neovim에는 풍부한 표준 라이브러리가 포함되어 있습니다. vim.tbl_extend, vim.tbl_keys, vim.split은 일반적인 테이블 및 문자열 작업을 처리합니다.

vim.tbl_deep_extend('force', defaults, opts)는 사용자 설정을 플러그인의 기본 설정 위에 병합하는 표준적인 방법입니다.

local defaults = { width = 40, border = 'single' }
local opts = { width = 60 }
local cfg = vim.tbl_deep_extend('force', defaults, opts)
print(cfg.width, cfg.border)

디버깅을 위한 vim.inspect

vim.inspect는 중첩된 테이블을 포함한 모든 Lua 값을 읽기 쉬운 문자열로 직렬화합니다. API가 반환하는 값의 형태를 파악하는 가장 빠른 방법입니다.

개발 중 빠르게 검사하려면 :lua print(vim.inspect(...)) 또는 최신 Neovim의 :lua= expr와 함께 사용하십시오.

local info = vim.api.nvim_get_mode()
print(vim.inspect(info))

API와 Vimscript의 선택 기준

안정적이고 구조화된 작업에는 vim.api를 우선 사용하십시오. 네이티브 함수가 없을 때는 vim.fn이나 vim.cmd를 대체 수단으로 사용하십시오.

vim.cmd는 ex 명령을 문자열로 실행하므로 vim.cmd('highlight ...')와 같은 일회성 작업에 편리하지만, 형식이 지정된 API 호출보다 내부를 살펴보기 어렵습니다.

vim.cmd('syntax on')
vim.cmd.colorscheme('habamax')

빠른 점검

Neovim Lua API의 기능 범위에 대한 이해도를 확인해 보십시오.

복습: Lua API

이제 형식이 지정된 네이티브 API를 위한 vim.api, Vimscript 함수를 위한 vim.fn, ex 명령을 위한 vim.cmd라는 핵심 기능을 알고 있습니다.

옵션은 vim.o/bo/wo를 통해, 변수는 vim.g/b/w를 통해 처리하며, vim.tbl_deep_extend, vim.notify, vim.schedule과 같은 도우미가 플러그인 작성자의 도구 모음을 완성합니다.

자주 묻는 질문

“Neovim Lua API” 강의는 무료인가요?

네 — “Neovim Lua API” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Neovim Lua API”에서 뭘 배우나요?

플러그인이 연결되는 방식을 배워 보세요. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Lua Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“Neovim Lua API” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Neovim Lua API
  2. 명령과 키 매핑
  3. 버퍼와 창
  4. 플러그인 패키징하기
← Lua Academy(으)로 돌아가기