0Pricing
Lua Academy · 강의

버퍼와 창

편집기를 조작해 보세요.

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

버퍼, 창, 탭

Neovim은 콘텐츠와 표시를 분리합니다. 버퍼는 텍스트를 메모리에 보관하고, 창은 버퍼를 보여 주는 뷰포트이며, 탭 페이지는 창으로 구성된 배치입니다.

하나의 버퍼가 여러 창에 나타날 수 있습니다. 플러그인은 정수인 이러한 핸들을 nvim_buf_* 및 nvim_win_* API 계열을 통해 조작합니다.

local buf = vim.api.nvim_get_current_buf()
local win = vim.api.nvim_get_current_win()
print(buf, win)

버퍼 행 읽기

nvim_buf_get_lines(buf, start, end_, strict)는 행 목록을 반환합니다. 인덱스는 0부터 시작하고 끝 인덱스는 포함되지 않으며, 마지막 행까지 포함하려면 끝에 -1을 전달하십시오.

strict_indexing을 false로 설정하면 범위를 벗어난 인덱스도 오류를 발생시키지 않고 허용합니다.

local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
print('line count: ' .. #lines)

버퍼 행 쓰기

nvim_buf_set_lines는 범위를 새 텍스트로 바꿉니다. 끝에 추가하려면 시작과 끝을 모두 -1로 설정하십시오. 모든 내용을 덮어쓰려면 0, -1을 사용하십시오.

대체할 값은 행마다 하나의 문자열을 담은 Lua 목록이며, 끝에 개행 문자가 없어야 합니다.

vim.api.nvim_buf_set_lines(0, -1, -1, false, {
  '-- appended line',
})

스크래치 버퍼

nvim_create_buf(listed, scratch)로 목록에 표시되지 않는 임시 버퍼를 만드십시오. false, true를 전달하면 플러그인 사용자 인터페이스에 적합한 스크래치 버퍼가 만들어집니다.

bufhidden = 'wipe'로 설정하면 창이 닫힐 때 버퍼도 사라져 남은 버퍼가 생기지 않습니다.

local buf = vim.api.nvim_create_buf(false, true)
vim.bo[buf].bufhidden = 'wipe'
vim.api.nvim_buf_set_lines(buf, 0, -1, false, { 'Panel' })

버퍼별 옵션

vim.bo[buf]를 인덱싱하여 특정 핸들의 버퍼별 옵션을 설정하십시오. 플러그인에서 자주 사용하는 설정으로는 modifiable = false와 buftype = 'nofile'이 있습니다.

표시용 버퍼를 수정할 수 없게 만들면 사용자가 생성된 콘텐츠를 실수로 편집하는 것을 막을 수 있습니다.

vim.bo[buf].modifiable = false
vim.bo[buf].buftype = 'nofile'
vim.bo[buf].filetype = 'myplugin'

부동 창 열기

nvim_open_win(buf, enter, config)는 버퍼를 부동 창에 배치합니다. 설정에는 relative, row, col, width, height, border가 포함됩니다.

부동 창은 호버 문서, 선택기, 알림과 같은 현대적인 사용자 인터페이스의 기반입니다.

local win = vim.api.nvim_open_win(buf, true, {
  relative = 'editor', row = 5, col = 10,
  width = 40, height = 10, border = 'rounded',
})

창 설정

nvim_win_set_config으로 열린 부동 창을 조정할 수 있으며, VimResized에서 창 크기를 조정할 때 유용합니다. 현재 배치는 nvim_win_get_config으로 읽을 수 있습니다.

vim.wo[win]을 통해 창별 옵션을 설정하십시오. 예를 들어 사용자 인터페이스 패널에서 커서 행을 숨기거나 숫자 열을 비활성화할 수 있습니다.

vim.wo[win].number = false
vim.wo[win].cursorline = true
vim.api.nvim_win_set_config(win, { width = 50 })

커서와 위치

nvim_win_set_cursor(win, {row, col})로 커서를 이동하십시오. 행은 1부터 시작하지만 열은 0부터 시작한다는 점에 유의하십시오. 이 차이는 자주 발생하는 1만큼 어긋나는 오류의 원인입니다.

nvim_win_get_cursor로 커서 위치를 다시 읽어 작업 전후에 사용자의 위치를 기억하고 복원할 수 있습니다.

local pos = vim.api.nvim_win_get_cursor(0)
vim.api.nvim_win_set_cursor(0, { pos[1], 0 })

유효성 검사와 정리

핸들은 오래되어 더 이상 유효하지 않을 수 있습니다. 저장된 핸들로 작업하기 전에 nvim_buf_is_valid와 nvim_win_is_valid로 확인하십시오.

nvim_win_close(win, force)로 창을 닫고 nvim_buf_delete(buf, { force = true })로 버퍼를 삭제하십시오. 오류를 피하려면 항상 먼저 유효성을 검사해야 합니다.

if vim.api.nvim_win_is_valid(win) then
  vim.api.nvim_win_close(win, true)
end

확장 표식과 네임스페이스

확장 표식은 편집이 이루어져도 함께 이동하는 텍스트에 메타데이터를 고정합니다. nvim_create_namespace로 네임스페이스를 만든 다음 가상 텍스트나 강조 표시를 연결합니다.

nvim_buf_set_extmark는 virt_text, 기호 열, 인라인 강조 표시를 지원하며, 인레이 힌트와 Git 변경자 표시 플러그인을 구동하는 기반이 됩니다.

local ns = vim.api.nvim_create_namespace('myplugin')
vim.api.nvim_buf_set_extmark(0, ns, 0, 0, {
  virt_text = { { ' hint', 'Comment' } },
})

목록 조회와 반복 처리

nvim_list_bufs와 nvim_list_wins는 현재 존재하는 모든 핸들을 반환합니다. nvim_buf_is_loaded를 사용하거나 옵션을 확인하여 핸들을 필터링할 수 있습니다.

반복 처리를 사용하면 전체 세션에 걸쳐 플러그인이 동작하게 할 수 있습니다. 예를 들어 모든 플로팅 창을 닫거나 특정 파일 형식의 각 버퍼를 새로 고칠 수 있습니다.

for _, b in ipairs(vim.api.nvim_list_bufs()) do
  if vim.api.nvim_buf_is_loaded(b) then print(b) end
end

간단한 확인

버퍼와 창에 대해 배운 내용을 확인해 보세요.

복습: 버퍼와 창

버퍼는 텍스트를 저장하고, 창은 텍스트를 표시하며, 핸들은 사용 전에 유효성을 확인해야 하는 정수입니다. 줄을 읽고 쓸 수 있고, 임시 버퍼를 만들며, 버퍼별 옵션을 설정할 수도 있습니다.

nvim_open_win을 통한 플로팅 창, 커서 제어, 확장 표식, 목록 조회 API를 사용하면 풍부하고 상태를 유지하는 플러그인 사용자 인터페이스를 만드는 데 필요한 모든 기능을 갖출 수 있습니다.

자주 묻는 질문

“버퍼와 창” 강의는 무료인가요?

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

“버퍼와 창”에서 뭘 배우나요?

편집기를 조작해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“버퍼와 창” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

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