Neovim

개요

Quarto Neovim 플러그인은 바퀴를 다시 발명하지 않는 것을 목표로 합니다. Neovim 생태계의 기존 플러그인을 활용해 전체 경험을 제공합니다. quarto-nvim에서 제공되고 kickstarter 구성의 플러그인으로 강화되는 기능 일부는 다음과 같습니다:

  • Quarto 문서 미리보기.
  • 마크다운 및 임베디드 언어의 구문 강조.
  • 임베디드 언어(Python, R, Julia 등) 자동 완성.
  • 셀 및 선택한 줄을 실행하는 명령과 키 바인딩.
  • 참고문헌 참조, 파일 경로, LaTeX 수식 기호, 이모지 자동 완성.
  • 선택적 맞춤법 검사 및 자동 완성.
  • 코드 스니펫.
  • 코드 청크를 독립형 스크립트로 내보내기.

세 개의 창이 나란히 배치되어 있습니다. 왼쪽 창은 Neovim에서 열린 qmd 파일입니다. 오른쪽 위 창은 웹 브라우저입니다. qmd 문서의 내용이 Quarto에 의해 브라우저 창에 렌더링되어 표시됩니다. 세 번째 창은 qmd 파일의 코드 청크를 실행한 결과를 보여주는 렌더링된 그래프입니다.

더 많은 스크린샷

설치

quarto 플러그인과 kickstarter 구성의 설치 지침은 해당 저장소의 readme 파일에서 확인할 수 있습니다:

렌더링 및 미리보기

렌더링과 미리보기를 실행하려면 :를 눌러 명령 모드로 들어간 뒤 QuartoPreview 명령을 입력하세요(tab 키를 누르면 자동 완성이 있습니다). Kickstarter 구성에서는 space q로 시작하는 더 많은 단축키가 있습니다(일반 모드에서 스페이스바 다음 q).

Neovim에서 QuartoPreview 명령을 실행한 뒤에는 버퍼를 저장할 때마다 미리보기가 자동으로 업데이트됩니다.

코드 셀 실행

코드 셀을 반복 작업할 때 문서를 완전히 렌더링할 필요는 없습니다. 제공된 설정에서는 리더 키(<space>)를 누른 뒤 c(code)와 p(python) 또는 i(ipython)를 입력해 원하는 터미널을 열 수 있습니다.

키 입력 사이에 조금 기다리면 화면 아래쪽에 기존 키 바인딩을 알려주는 작은 창이 뜹니다.

ctrl과 Vim 방향키를 사용해 코드와 터미널 사이를 이동할 수 있고, 이 터미널 버퍼에서 삽입 모드로 들어가 Python REPL에 명령을 입력할 수 있습니다.

Quarto에서 Python REPL로 코드를 보내려면 코드 블록으로 이동한 다음 <space><cr>(스페이스 바 뒤 Enter)를 누릅니다. 여러 위치로 코드를 보내는 플러그인인 vim-slime이 어느 터미널로 보낼지 묻고, 가장 최근에 만든 터미널이 기본값으로 채워집니다.

RStudio처럼 ctrl+Enter로 코드를 보내고 싶다면, 터미널 에뮬레이터가 올바른 키 코드를 보내도록 설정해야 합니다. 예를 들어 kitty 터미널에서는 다음과 같이 설정합니다.

map ctrl+shift+enter no_op
map shift+enter send_text all \x1b[13;2u
map ctrl+enter send_text all \x1b[13;5u

이 설정은 kickstarter 구성에서 테스트된 값입니다.

셀 실행에 사용할 수 있는 모든 명령과 키보드 단축키는 다음과 같습니다:

Quarto Command Keyboard Shortcut
Create new terminal space c x
여기서 _x_는 python, r, ipython, julia, bash의 시작 글자입니다
Choose terminal space c c
Show terminal id space c s
Run Current Cell space Enter
Run Current Cell ctrl Enter (insert or normal mode)1
Run Selected Line(s) Enter (visual mode)

Alt+IAlt+Shift+I 단축키로 새 코드 셀을 빠르게 삽입할 수 있습니다. 첫 번째는 R, 두 번째는 Python 코드 청크입니다. 자주 사용하는 언어에 따라 kickstarter 구성에서 변경해도 좋습니다.

상황별 지원

코드 청크에서는 해당 언어의 자동 완성을 사용할 수 있습니다. TabShift+Tab으로 제안 항목을 순회합니다.

Note

완성 목록의 수달 아이콘은 자동 완성 플러그인 cmpotter.nvim 플러그인에서 완성 제안을 가져왔다는 뜻입니다. 이 플러그인은 Quarto 문서의 코드 부분만 별도의 문서(수달)로 작성해 백그라운드에서 추적합니다.

코드 스니펫

코드 스니펫은 반복되는 코드 패턴(예: 코드 블록, 콜아웃, div 등)을 더 쉽게 입력할 수 있도록 하는 템플릿입니다. 자동 완성 목록에서 확인할 수 있으며 Enter로 실행합니다. 스니펫 내에 커서가 이동할 수 있는 위치가 여러 개 있을 때도 있습니다. ctrl+n을 사용해 다음 위치로 이동하세요.

예를 들어 두 열 레이아웃을 만들려면 col2를 입력하고 Enter로 제안을 수락하면 다음을 얻습니다.

::: {layout-ncol=2}

:::

다른 유용한 스니펫을 찾았다면 kickstarter 구성의 스니펫 목록을 확장하기 위해 풀 리퀘스트를 보내도 좋습니다.

문서 탐색

Vim은 문서를 빠르게 탐색하는 데 뛰어난 것으로 유명합니다. 여기서는 quarto-nvim이 제공하는 추가 기능만 살펴봅니다. 전체 옵션 범위는 vim/neovim 문서와 kickstarter 구성에 포함된 플러그인 문서를 참고하세요.

  • space l o를 눌러 섹션 개요를 토글
  • [c로 다음 코드 청크로 이동하거나 ]c로 이전 코드 청크로 이동
  • dio/cio/yio로 청크의 코드를 삭제/변경/복사
  • dao/cao/yao로 구분자를 포함한 전체 코드 청크를 삭제/변경/복사

kickstarter 구성 파일을 살펴보면 더 많은 영감을 얻을 수 있습니다.

Quarto 확장: Neovim에서 Lua 개발

Lua는 이미 Neovim을 구성하는 언어이며 kickstarter 구성은 Lua Language Server를 설치하므로 Quarto 확장 개발을 위한 코드 완성과 진단 기능이 활성화됩니다.

Footnotes

  1. 터미널 에뮬레이터가 이를 지원한다면 Running Cells를 참고하세요.↩︎